1. 程式人生 > 其它 >PostgreSQL資料外部表使用(postgres_fdw)

PostgreSQL資料外部表使用(postgres_fdw)

技術標籤:#postgresSql資料庫

一、postgres_fdw簡介

postgres_fdw模組提供了外部資料包裝器postgres_fdw,它可以被用來訪問儲存在外部PostgreSQL伺服器中的資料。
這個模組提供的功能大體上覆蓋了較老的dblink模組的功能。但是postgres_fdw提供了更透明且更相容標準的語法來訪問遠端表,並且可以在很多情況下給出更好的效能。
二、postgres_fdw外掛安裝

1、安裝外掛
pg自帶postgres_fdw外掛,但是PG預設沒有安裝外掛,需要執行語句進行外掛的安裝:

-- 安裝postgres_fdw外掛	
CREATE EXTENSION postgres_fdw;

2、查詢已安裝外掛
我們可以通過以下語句查詢資料庫已安裝的外掛,執行結果將返回資料庫所有已安裝的外掛。

SELECT * FROM pg_extension;

3、建立外部伺服器物件
我們使用postgres_fdw外掛,需要建立對應的外部伺服器物件。它用來表示你想連線的每一個遠端資料庫。指定除了user和password之外的連線資訊作為該伺服器物件的選項,建立語句如下:

create server server_pgsql_fdw foreign data wrapper postgres_fdw options(host '192.168.17.35',port '5432',dbname 'postgres'
);

如上SQL語句中我們指定了server物件對應的服務為postgres_fdw,指定了需要連線的資料庫IP,埠號和資料庫。

4、建立使用者對映
我們在上面已經建立了外部伺服器並指定了要連線的外部資料庫的資訊,但是我們並沒有指定外部伺服器的使用者資訊,所以我們接下來要建立一個使用者對映。每一個使用者對映都代表你想允許一個數據庫使用者訪問一個外部伺服器。指定遠端使用者名稱和口令作為使用者對映的user和password選項。

create user mapping for public server server_pgsql_fdw options(user 'postgres',password '123456'
);

5、建立外部表
我們已經建立了外部表服務和使用者對映,接下來我們將要建立一個外部表,用來訪問外部資料庫的表資料。外部表的列必須匹配被引用的遠端表。但是,如果你在外部表物件的選項中指定了正確的遠端名稱,你可以使用不同於遠端表的表名和/或列名。

CREATE FOREIGN TABLE "public"."fdw_user" (
  "id" varchar(36) COLLATE "pg_catalog"."default" NOT NULL,
  "user_name" varchar(255) COLLATE "pg_catalog"."default",
  "moblie" varchar(255) COLLATE "pg_catalog"."default",
  "create_time" date
)
SERVER "server_pgsql_fdw"
OPTIONS (schema_name 'public',table_name 'user')
;

現在你只需要從一個外部表SELECT來訪問儲存在它的底層的遠端表中的資料。你也可以使用INSERT、UPDATE或DELETE修改遠端表,如果你執行了修改操作,本地外部表和遠端表中的資料均會發生修改。

注意:一個外部表可以被宣告比底層的遠端表較少的列,或者使用一種不同的列序。與遠端表的列匹配是通過名字而不是位置進行的。
三、外部表其他操作

刪除外部表服務:

DROP SERVER foreign_server;

修改外部表服務選項

	ALTER SERVER foreign_server OPTIONS (host '127.0.0.1', dbname 'postgres1');
	ALTER SERVER foreign_server VERSION '10.4' OPTIONS (SET host '127.0.0.1');

刪除使用者對映

DROP USER MAPPING  FOR 'user_name' SERVER foreign_server;

修改使用者對映

ALTER USER MAPPING FOR user_name SERVER foreign_server OPTIONS (user 'foreign_server', password '123456');

修改外部表

ALTER FOREIGN TABLE "public"."fdw_user" ADD COLUMN "aaa" varchar(255);

修改外部表選項

	ALTER FOREIGN TABLE public.fdw_user OPTIONS (ADD opt1 'value1', SET opt2, 'value2', DROP opt3 'value3');

參考部落格:https://blog.csdn.net/weixin_39540651/article/details/105968786
https://blog.csdn.net/cjhnbls/article/details/100972776