我需要创建一个序列,并且需要将序列用于 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 值。
外部服务器要求输入密码(大概是因为 pg_hba.conf 设置为 md5),而您没有提供密码。-贾内斯
我更改了我的用户映射(来自另一台服务器)并在那里提供了密码并让它工作。如下图,