Postgresql
FDW 在 postgres 中的使用
我需要創建一個序列,並且需要將序列用於 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');