Sie können keine Tabelle als solche als Parameter übergeben, sondern nur den Namen der Tabelle:
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;
Beim Übergeben eines Tabellennamens müssen Sie einen dynamischen Befehl ausführen. Sie können dies nur in einer plpgsql-Funktion tun. Die Verwendung des format()
Funktion mit dem %I
Modifikator schützt vor SQL-Injection. Die Zeilen werden mit RETURN NEXT QUERY
zurückgegeben Phrase, wieder mit einem dynamischen Befehl.
Beachten Sie, dass diese Logik beides ist fügt eine Reihe von Datensätzen in die Tabelle test.out_table
ein und gibt dann denselben Satz von Datensätzen zurück. Ich bin mir nicht sicher, ob du das wirklich willst.