ОШИБКА: функция dblink (неизвестно, неизвестно) не существует

Я определил внешний сервер, указывающий на другую базу данных. Затем я хочу выполнить функцию в этой базе данных и получить результаты.

Когда я пытаюсь это:

SELECT * FROM  dblink('mylink','select someschema.somefunction(''test'', ''ABC'')')

или это:

SELECT t.n FROM  dblink('mylink', 'select * from someschema.mytable') as t(n text)

Я получаю сообщение об ошибке:

ОШИБКА: функция dblink (неизвестно, неизвестно) не существует

Запуск от имени суперпользователя.


person HuFlungPu    schedule 19.06.2018    source источник
comment
Спасибо, я сделал это как часть настройки БД. И эта ошибка все еще происходит.   -  person HuFlungPu    schedule 19.06.2018
comment
работал на той же БД?..   -  person Vao Tsun    schedule 19.06.2018
comment
выберите * из pg_available_extensions показывает это.   -  person HuFlungPu    schedule 19.06.2018
comment
да это та же БД   -  person HuFlungPu    schedule 19.06.2018
comment
Проблема заключалась в том, что dblink не был создан в общедоступной схеме, как ожидалось. поэтому нужно квалифицировать с помощью someschema.dblink(...)   -  person HuFlungPu    schedule 19.06.2018


Ответы (3)


Вам нужно установить расширение dblink

create extension dblink;
person Roman Marusyk    schedule 05.08.2019

В моем случае (как сообщалось также в комментариях @HuFlungPu) проблема заключалась в том, что я изначально создал схему dblink в public. Я выполнил SET search_path TO my_schema, потому что работал над my_schema; поэтому при запросе dblink я получал

ERROR: function dblink(unknown, unknown) does not exist
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

После выполнения SET search_path TO public (где «public» — это схема, в которой был создан dblink), я смог снова успешно запросить через dblink

person Vzzarr    schedule 13.05.2020
comment
а в моем случае это было даже не публично. Так что спасибо тебе! - person Гдето Якутский; 14.01.2021
comment
как установить создание расширения dblink с помощью кода Python? пожалуйста, предложите. - person Hushen; 23.04.2021
comment
@Hushen dblink - это функция, доступная в Postgres, я не знаю, что именно вы подразумеваете под установкой с использованием кода Python. - person Vzzarr; 24.04.2021

В моем случае проблема заключалась в том, что я использовал другого пользователя, отличного от того, которого я использовал для создания расширения.

Я решил эту проблему, используя того же пользователя, который запустил команду create extension dblink;

person Duilio    schedule 08.03.2021