PostgreSQL 插入到選擇中
本教程將學習如何將託管在遠端伺服器上的資料庫中的資料插入到我們本地計算機中的資料庫中。我們將使用遠端服務提供商 Heroku PostgreSQL,它為測試目的提供免費計劃。
將遠端伺服器上託管的資料庫中的資料插入本地計算機中的資料庫
建立一個新應用並新增一個 PostgreSQL 資料儲存。可以通過單擊設定
連結訪問連線到遠端伺服器的憑據。
要連線遠端資料庫,請使用以下命令並確保你沒有連線到公司網路,以避免通訊失敗導致超時錯誤。
>psql -h ec2-52-49-56-163.eu-west-1.compute.amazonaws.com -d dagbp3p323638g -U cvkmaeedgzlxdr
輸出:
dagbp3p323638g=>
建立一個名為 remote_employee
的表,該表將儲存包含員工資訊的記錄,例如 id
、first name
、last name
和 email
。
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
在 PostgreSQL 中使用 dblink
插入 Select
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 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