PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Funzione trigger di PostgreSQL 9.3 da inserire nella tabella con nome parametrizzato

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;

Non puoi fare riferimento a NEW all'interno della stringa di query. NEW è visibile nel corpo della funzione, ma non all'interno di EXECUTE ambiente. La soluzione migliore è passare i valori in USING clausola.

Ho anche sostituito l'equivalente to_char(NEW.updt_ts, '"log"WW') per il nome della tabella. to_char() qui è più semplice e veloce.