PostgreSQL: запрос не имеет назначения для данных результата

Я пытаюсь получить данные из удаленной БД с помощью функции dblink, но получаю ошибку "запрос не имеет назначения для данных результата". Я использую язык plpgsql сделать то же самое.

функции:

CREATE OR REPLACE FUNCTION fun()
  RETURNS text AS
$$
begin
select dblink_connect(
      'port=5432 dbname=test user=postgres password=****');

WITH a AS (
SELECT *
FROM dblink(
    'SELECT slno,fname,mname,lname
    FROM    remote_tbl'
     ) AS t (slno int, fname text, mname text, lname text)
)
, b AS (
INSERT INTO temptab1
SELECT slno, name
FROM   a
)
, c AS (
INSERT INTO temptab2
SELECT slno, name
FROM   a
)
INSERT INTO temptab3
SELECT slno, name
FROM   a;


select dblink_disconnect();
end;
$$ 
LANGUAGE plpgsql;

Вызов Функции:

select fun();

: в запросе нет назначения для данных результата

2 ответов


хранимая процедура не возвращает результат последнего выбора. Вам нужно фактически вернуть значение:

CREATE OR REPLACE FUNCTION fun() RETURNS text AS $$
BEGIN
    --- ....
    RETURN(SELECT dblink_disconnect());
END
$$ LANGUAGE plpgsql;

вы получаете ошибку, потому что Postgres ожидает, что функция вернет что-то типа text, но ваша функция ничего не возвращает.


ответ от SL2 был правильным, но вы можете написать его коротким способом:

CREATE OR REPLACE FUNCTION fun() RETURNS text AS $$
BEGIN
    --- ....
    RETURN(SELECT dblink_disconnect());
END
$$ LANGUAGE plpgsql;