Z dokumentace :
a
To znamená, že váš dblink
volání používá dblink_connect
implicitně. Použijte dblink_connect_u
místo toho nebo změňte svou metodu ověřování např. md5.
Všimněte si, že také potřebujete udělit oprávnění ke spuštění caixa
role, například:
GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;
Pracovní příklad (po GRANT
):
meta=> SELECT dblink_connect_u('conn1', 'dbname=op');
meta=> SELECT * FROM dblink('conn1','SELECT op_col from op_table')
AS t(op_col varchar);
op_col
--------
aaa
bbb
ccc
(3 rows)
meta=> SELECT dblink_disconnect('conn1');
UPRAVIT:
Omlouvám se za trochu zavádějící odpověď. Samozřejmě ne potřebujete dblink_connect_u
pro md5 ověřené připojení. Je tu jedna možnost, kterou vidím. PostgreSQL má dva různé typy připojení:hostitel a místní .
Spuštěno:
psql -h localhost ..
zahrnuje připojení hostitele, ale
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
používá místní type, takže pokud máte pro místní připojení metodu bez hesla (například metodu ident nebo trust), vrátí se
ERROR: password is required
DETAIL: Non-superuser cannot connect if the server does not request a password.
HINT: Target server's authentication method must be changed.
Zkontrolujte
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
pro hostitele spojení. Pokud je to možné, pro jasnost zveřejněte svůj pg_hba.conf
.
Také jsem zkontroloval, co je s CONNECT
oprávnění na vchitta_op
DB, ale chybová zpráva je jiná:
REVOKE CONNECT ON DATABASE vchitta_op FROM PUBLIC;
REVOKE CONNECT ON DATABASE vchitta_op FROM caixa;
SELECT dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
ERROR: could not establish connection
DETAIL: FATAL: permission denied for database "vchitta_op"
DETAIL: User does not have CONNECT privilege.