Você não pode passar uma tabela como parâmetro, apenas o nome da tabela:
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;
Ao passar um nome de tabela, você precisa executar um comando dinâmico. Você só pode fazer isso em uma função plpgsql. O uso do
format()
função com o %I
modificador protege contra injeção de SQL. As linhas são retornadas usando o RETURN NEXT QUERY
frase, novamente com um comando dinâmico. Observe que essa lógica ambos insere um conjunto de registros na tabela
test.out_table
e, em seguida, retorna o mesmo conjunto de registros. Não tenho certeza se é isso que você realmente quer.