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

Função de gatilho do PostgreSQL 9.3 para inserir na tabela com nome parametrizado

CREATE FUNCTION log_roll_test()
  RETURNS trigger AS
$func$
BEGIN
   EXECUTE format('INSERT INTO %I SELECT ($1).*'
                , to_char(NEW.updt_ts, '"log"WW'))   -- child table name
   USING NEW;
   RETURN NULL;
END
$func$ LANGUAGE plpgsql;

Você não pode fazer referência a NEW dentro da string de consulta. NEW é visível no corpo da função, mas não dentro de EXECUTE meio Ambiente. A melhor solução é passar os valores no USING cláusula.

Também substituí o equivalente to_char(NEW.updt_ts, '"log"WW') para o nome da tabela. to_char() é mais rápido e simples aqui.