PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Tabela como argumento de uma função do PostgreSQL


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.