パラメータなどのテーブルを渡すことはできません。テーブルの名前のみを渡すことができます:
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
に挿入します 次に、同じレコードのセットを返します。それが本当に欲しいものかどうかわからない。