PostgreSQL 插入到選擇中

David Mbochi Njonge 2023年1月30日 2022年5月14日
  1. 將遠端伺服器上託管的資料庫中的資料插入本地計算機中的資料庫
  2. 在 PostgreSQL 中使用 dblink 插入 Select
PostgreSQL 插入到選擇中

本教程將學習如何將託管在遠端伺服器上的資料庫中的資料插入到我們本地計算機中的資料庫中。我們將使用遠端服務提供商 Heroku PostgreSQL,它為測試目的提供免費計劃。

將遠端伺服器上託管的資料庫中的資料插入本地計算機中的資料庫

建立一個新應用並新增一個 PostgreSQL 資料儲存。可以通過單擊設定連結訪問連線到遠端伺服器的憑據。

資料庫憑證

要連線遠端資料庫,請使用以下命令並確保你沒有連線到公司網路,以避免通訊失敗導致超時錯誤。

>psql -h ec2-52-49-56-163.eu-west-1.compute.amazonaws.com -d dagbp3p323638g -U cvkmaeedgzlxdr

輸出:

dagbp3p323638g=>

建立一個名為 remote_employee 的表,該表將儲存包含員工資訊的記錄,例如 idfirst namelast nameemail

dagbp3p323638g=> create table remote_employee(id SERIAL NOT NULL UNIQUE,first_name varchar(50),last_name varchar(50),email varchar(50),PRIMARY KEY(id));
CREATE TABLE

將三個記錄新增到 remote_employee 表中,以確保我們有資料可以從遠端伺服器獲取到本地伺服器。

dagbp3p323638g=> insert into remote_employee(first_name,last_name,email)values ('john','doe','john@gmail.com');
INSERT 0 1

dagbp3p323638g=> insert into remote_employee(first_name,last_name,email)values ('peter','parker','peter@gmail.com');
INSERT 0 1

dagbp3p323638g=> insert into remote_employee(first_name,last_name,email)values ('mary','public','mary@gmail.com');
INSERT 0 1

以下查詢驗證我們的三個記錄是否已插入資料庫。

dagbp3p323638g=> select * from remote_employee;
 id | first_name | last_name |      email
----+------------+-----------+-----------------
  1 | john       | doe       | john@gmail.com
  2 | peter      | parker    | peter@gmail.com
  3 | mary       | public    | mary@gmail.com
(3 rows)

你必須連線到本地伺服器並建立一個名為 local_database 的資料庫,該資料庫將包含要填充來自遠端實體的資料的本地實體。

>psql -U postgres

postgres=# create database local_database;
CREATE DATABASE

postgres=# \c local_database;
You are now connected to database "local_database" as user "postgres".

建立一個名為 local_employee 的表,其中包含與 remote_employee 相同的列,因為它們包含相同的資料型別。

local_database=# create table local_employee(id SERIAL NOT NULL UNIQUE,first_name varchar(50),last_name varchar(50),email varchar(50),PRIMARY KEY(id));
CREATE TABLE

dblink 是一個擴充套件,它允許我們從其他資料庫中查詢資料,我們使用以下命令建立一個擴充套件。

local_database=# create extension dblink;

在從遠端伺服器獲取資料之前,我們可以使用 dblink_connect 測試連線,如下所示。如果查詢返回 OK,這表明我們的遠端資料庫已經連線成功,我們現在可以執行插入、更新和刪除查詢。

注意連線名稱 temp_conn,我們將在插入查詢中使用它。

local_database=# SELECT dblink_connect('temp_conn', 'dbname=dagbp3p323638g port=5432 host=ec2-52-49-56-163.eu-west-1.compute.amazonaws.com user=cvkmaeedgzlxdr password=336ea6e67129e8f082140f1b60954dafa33940f17b02e1f580ea45f10401f85e');
 dblink_connect
----------------
 OK
(1 row)

向我們的 local_employee 表插入資料的查詢是由一個插入語句和一個對我們遠端伺服器的選擇語句組成的。

通過指定連線名稱 temp_conn 和 SQL 字串,使用 dblink 執行 select 語句以獲取資料。

local_database=# INSERT INTO local_employee
SELECT id,first_name,last_name,email FROM dblink('temp_conn','SELECT id, first_name, last_name, email FROM remote_employee') AS temp_employee(id integer,first_name varchar(50),last_name varchar(50),email varchar(50));
INSERT 0 3

remote_employee 中的所有記錄都作為臨時表 temp_employee 返回,並通過利用 dblink 連線成功插入到本地表 local_employee 中。

local_database=# select * from local_employee;

輸出:

id | first_name | last_name |      email
----+------------+-----------+-----------------
  1 | john       | doe       | john@gmail.com
  2 | peter      | parker    | peter@gmail.com
  3 | mary       | public    | mary@gmail.com
(3 rows)
David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub