Создайте db_link для той же базы данных в Postgres

У нас есть требование создать db_link (ссылка на базу данных), которая должна ссылаться на ту же базу данных.

Когда я смотрю на код в function. Это как-то так.

perform dblink_connect(cn,'loopback'::text);
   cn is the connection name;

Я проверил, есть ли какие-либо внешние серверы с именем loopback, используя этот запрос. Но не повезло

select 
    srvname as name, 
    srvowner::regrole as owner, 
    fdwname as wrapper, 
    srvoptions as options
from pg_foreign_server
join pg_foreign_data_wrapper w on w.oid = srvfdw;

Я подозреваю, что петля относится к той же базе данных.

Когда я выполняю функцию, я получаю следующую ошибку

**Error:password is required**

Я проверил db_link extension it's there and dblink_fdw is also there

Environment:Postgres RDS

person Ranganath    schedule 17.01.2018    source источник


Ответы (1)


Вызов функции должен выглядеть так:

PERFORM dblink_connect(cn, 'host=loopback user=...');

Это обычная строка подключения libpq; подробности см. в документации.

pg_hba.conf должен содержать такие строки, как

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Если вам нужна аутентификация по паролю, используйте md5 вместо trust и укажите пароль в строке подключения.

Я никогда не слышал о dblink_fdw

person Laurenz Albe    schedule 17.01.2018
comment
Спасибо Laurenz Albe, я не знаю о петлевых соединениях. Не могли бы вы опубликовать ссылку, объясняющую петлю dblink. Как поставить пароль на петлевое соединение? - person Ranganath; 17.01.2018
comment
Итак, нужно ли мне создавать внешний сервер с именем loopback для обращения к той же базе данных? Примечания: -dblink_fdw Оболочка внешних данных создается автоматически, когда мы СОЗДАЕМ DBLINK РАСШИРЕНИЯ; - Чтобы избежать жесткого кодирования пароля, мы создадим ссылку на внешний сервер: stackoverflow.com/questions/44663478/ - person Ranganath; 18.01.2018
comment
Вам не нужен FDW. loopback — это DNS-имя хоста для самой машины. В документации PostgreSQL ничего не говорится о файле dblink_fdw. - person Laurenz Albe; 18.01.2018