Не можете да предавате таблица като параметър, а само името на таблицата:
CREATE FUNCTION test.fcttest(tbl text) RETURNS SETOF test.out_table AS $$
BEGIN
EXECUTE format('INSERT INTO test.out_table '
'SELECT id, another_field FROM %I', tbl);
RETURN QUERY EXECUTE format('SELECT id, another_field FROM %I', tbl);
END;
$$ LANGUAGE plpgsql;
Когато предавате име на таблица, трябва да изпълните динамична команда. Можете да направите това само във функция plpgsql. Използването на format()
функция с %I
модификаторът предпазва от SQL инжектиране. Редовете се връщат с помощта на RETURN NEXT QUERY
фраза, отново с динамична команда.
Имайте предвид, че тази логикаи двете вмъква набор от записи в таблица test.out_table
и след това връща същия набор от записи. Не съм сигурен дали това наистина искате.