Jako parametr nelze předat tabulku jako takovou, pouze název tabulky:
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;
Při předávání názvu tabulky musíte provést dynamický příkaz. Můžete to udělat pouze ve funkci plpgsql. Použití format()
funkce s %I
modifikátor chrání před SQL injection. Řádky jsou vráceny pomocí RETURN NEXT QUERY
fráze, opět s dynamickým příkazem.
Všimněte si, že tato logika obě vloží sadu záznamů do tabulky test.out_table
a poté vrátí stejnou sadu záznamů. Nejste si jisti, zda je to to, co opravdu chcete.