Это возможно , но обработка немного неловкая. Вам необходимо предоставить список определений столбцов в качестве дополнительного параметра функции и создать и выполнить динамический SQL. Для самого вызова функции вам нужно предоставить один и тот же список определений столбцов во второй раз:
CREATE OR REPLACE FUNCTION f_generic_dblink(text, text)
RETURNS SETOF record AS
$body$
BEGIN
-- $1 .. sql -String to be executed on remote server
-- $2 .. column type definition string like 'a int, b text'
RETURN QUERY EXECUTE '
SELECT *
FROM dblink(''port=5432 dbname=falter'', $1) AS (' || $2 || ')'
USING $1;
END;
$body$
LANGUAGE plpgsql;
Звоните:
SELECT * FROM f_generic_dblink('SELECT 1', 'i int' ) AS k(i int);
SELECT * FROM f_generic_dblink('SELECT 1, ''foo''', 'i int, t text')
AS k(i int, t text);
Осторожно! $ 2 уязвим для внедрения SQL.
Возможно, вас заинтересуют новые функции SQL / MED .