Nie możesz przekazać tabeli jako parametru, tylko nazwę tabeli:
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;
Przekazując nazwę tabeli, musisz wykonać polecenie dynamiczne. Możesz to zrobić tylko w funkcji plpgsql. Użycie format()
funkcja z %I
modyfikator chroni przed wstrzyknięciem SQL. Wiersze są zwracane przy użyciu RETURN NEXT QUERY
frazę, ponownie za pomocą polecenia dynamicznego.
Zwróć uwagę, że ta logika obie wstawia zestaw rekordów do tabeli test.out_table
a następnie zwraca ten sam zestaw rekordów. Nie jestem pewien, czy tego naprawdę chcesz.