Eu preciso criar uma sequência e preciso usar a sequência para id de incremento automático para mais de 2 bancos de dados em 2 servidores separados. Estou me referindo abaixo do doc para isso (para fins de teste): https://paquier.xyz/postgresql-2/global-sequences-with-postgres_fdw-and-postgres-core/
Eu segui os passos abaixo:
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)
Como pode ser visto no exemplo acima, está funcionando corretamente para 2 bancos de dados no mesmo servidor. No entanto, quando prossigo com outro servidor, fiz as etapas abaixo:
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
O erro finalmente estou recebendo. Existe alguma coisa/qualquer passo que estou perdendo aqui. Posso facilmente fazer ping no servidor antigo (onde criei a sequência) do novo servidor (onde quero usar essa sequência). configurações do arquivo pg_hba.conf em ambos os servidores -> as entradas são md5 ou trust only. Qualquer outra entrada que eu preciso adicionar no arquivo de configuração? Qualquer documento sugerido para fdw em diferentes servidores também será útil.
Desde já, obrigado!
Observação: não posso usar o UUID devido a alguns requisitos do aplicativo. É por isso que precisamos de uma coluna numérica de incremento automático. Ele escolhe o valor de id mais alto.
O servidor externo está exigindo uma senha (devido ao pg_hba.conf estar configurado para md5, presumivelmente) e você não está fornecendo uma. - jjanes
Eu alterei meu mapeamento de usuário (de outro servidor) e forneci a senha lá e consegui funcionar. Como abaixo,