Postgresql

FDW 在 postgres 中的使用

  • December 6, 2019

我需要創建一個序列,並且需要將序列用於 2 個單獨伺服器上的 2 個以上數據庫的自動增量 ID。我指的是下面的文件(出於測試目的):https ://paquier.xyz/postgresql-2/global-sequences-with-postgres_fdw-and-postgres-core/

我已按照以下步驟操作:

   Server 1: 
CREATE DATABASE
postgres=# \c a1
You are now connected to database "a1" as user "postgres".
a1=# CREATE SEQUENCE seq;
CREATE SEQUENCE
a1=# CREATE VIEW seq_view AS SELECT nextval('seq') as a;
CREATE VIEW
a1=# \c postgres
You are now connected to database "postgres" as user "postgres".

postgres=# create database a2;
CREATE DATABASE
postgres=# \c a2;
You are now connected to database "a2" as user "postgres".
a2=# CREATE EXTENSION postgres_fdw;
CREATE EXTENSION
a2=# CREATE SERVER postgres_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS
a2-# (host '192.168.xx.xxx', port '5432', dbname 'a1');
CREATE SERVER
a2=# CREATE USER MAPPING FOR PUBLIC SERVER postgres_server OPTIONS (password 
'');
CREATE USER MAPPING
a2=# CREATE FOREIGN TABLE foreign_seq_table (a bigint) SERVER
a2-# postgres_server
a2-# OPTIONS (table_name 'seq_view');
CREATE FOREIGN TABLE
a2=# select * from foreign_seq_table;
a
---
1
(1 row)

a2=# select * from foreign_seq_table;
a
---
2
(1 row)

從上面的範例可以看出,它在同一台伺服器上的 2 個數據庫上正常工作。但是,當我繼續使用另一台伺服器時,我在那裡執行了以下步驟:

   postgres=# create database kbc;
CREATE DATABASE
postgres=# \c kbc
You are now connected to database "kbc" as user "postgres".
kbc=#  CREATE EXTENSION postgres_fdw;
CREATE EXTENSION
kbc=# CREATE SERVER postgres_server FOREIGN DATA WRAPPER postgres_fdw 
OPTIONS
kbc-# (host '192.168.xx.xxx', port '5432', dbname 'a1');
CREATE SERVER
kbc=# CREATE USER MAPPING FOR PUBLIC SERVER postgres_server OPTIONS 
(password '');
CREATE USER MAPPING
kbc=#
kbc=# CREATE FOREIGN TABLE foreign_seq_table (a bigint) SERVER 
postgres_server OPTIONS (table_name 'seq_view');
 CREATE FOREIGN TABLE
kbc=# select * from foreign_seq_table;
 ERROR:  could not connect to server "postgres_server"
   DETAIL:  fe_sendauth: no password supplied

我終於收到了錯誤。我在這裡缺少什麼/任何步驟。我可以從新伺服器(我想在其中使用該序列)輕鬆 ping 到舊伺服器(我在其中創建序列)。兩台伺服器上的 pg_hba.conf 文件設置 -> 那裡的條目是 md5 或僅信任。我需要添加到配置文件中的任何其他條目嗎?任何跨不同伺服器的 fdw 建議文件也將有所幫助。

提前致謝!

注意:由於某些應用程序要求,我不能使用 UUID。這就是我們需要一個自動遞增數字列的原因。它選擇最高的 id 值。

我改變了我的使用者映射(來自另一台伺服器)並在那裡提供了密碼並讓它工作。如下圖,

CREATE USER MAPPING FOR PUBLIC SERVER postgres_server OPTIONS 
(user 'postgres' , password 'xxxxxxx');

引用自:https://dba.stackexchange.com/questions/254068