Когда я запускаю этот код:
do
$func$
declare cmd text;
begin
cmd = FORMAT($$ select public.func_doit('%s'::date, '%s'::date); $$,'2019-01-01', '2019-03-01');
PERFORM DBLINK('my_conn', cmd);
end;
$func$
Я получаю следующую ошибку:
Ошибка SQL [0A000]: ОШИБКА: функция, возвращающая запись, вызванная в контексте, которая не может принятьзапись типа Где: оператор SQL "SELECT DBLINK ('my_conn', cmd)" функция PL / pgSQL inline_code_block строка 12 в PERFORM ERROR: функция, возвращающая запись, вызванная в контексте, которая не может принять запись типа Где: оператор SQL "SELECT DBLINK ('my_conn'), cmd) "Линия 12 функции PL / pgSQL inline_code_block в PERFORM ERROR: функция, возвращающая запись, вызванную в контексте, которая не может принять запись типа Где: SQL-выражение« SELECT DBLINK ('my_conn', cmd) »Функция PL / pgSQL inline_code_block строка 12 в PERFORM
Вызываемая функция: public.func_doit
, RETURNS void
.
В миксе нет записи , на которую ссылаетсясообщение об ошибке.Функция просто что-то делает, и возвращать нечего.
После размещения уведомлений внутри вызываемой функции, они не публикуются, что означает, что функция даже не начинает выполняться.
Я знаюфункция работает, потому что когда я вызываю ее напрямую из ее локальной БД, она работает, как и ожидалось, с теми же параметрами.
PERFORM
- это правильное утверждение, которое нужно использовать здесь, потому что функция ничего не возвращает.
И я тоже попробовал: ...perform * from public.func_doit...
, который выдает синтаксическую ошибку.
Чего мне здесь не хватает?