Du kan inte skicka en tabell som en parameter, bara namnet på tabellen:
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;
När du skickar ett tabellnamn måste du utföra ett dynamiskt kommando. Du kan bara göra detta i en plpgsql-funktion. Användningen av format()
funktion med %I
modifierare skyddar mot SQL-injektion. Raderna returneras med RETURN NEXT QUERY
fras, återigen med ett dynamiskt kommando.
Observera att denna logik båda infogar en uppsättning poster i tabellen test.out_table
och returnerar sedan samma uppsättning poster. Inte säker på om det är det du verkligen vill.