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

Como usar EXECUTE FORMAT ... USING na função postgres


Sua função pode ficar assim no Postgres 9.0 ou posterior:
CREATE OR REPLACE FUNCTION dummytest_insert_trigger()
  RETURNS trigger AS
$func$
DECLARE
   v_partition_name text := quote_ident('dummyTest');  -- assign at declaration
BEGIN
   IF NEW.datetime IS NOT NULL THEN
      EXECUTE 
      'INSERT INTO ' || v_partition_name || ' VALUES ($1,$2)'
      USING NEW.id, NEW.datetime;              
   END IF;                    

   RETURN NULL;  -- You sure about this?
END
$func$  LANGUAGE plpgsql;

Sobre RETURN NULL :
  • Ignorar o resultado em BEFORE TRIGGER do PostgreSQL?

Eu aconselharia não usar identificadores de maiúsculas e minúsculas. Com format( .. %I ..) ou quote_ident() , você obteria uma tabela chamada "dummyTest" , que você terá que usar aspas duplas pelo resto de sua existência. Relacionado:
  • Os nomes das colunas do PostgreSQL diferenciam maiúsculas de minúsculas?

Em vez disso, use letras minúsculas:
quote_ident('dummytest')

Não faz sentido usar SQL dinâmico com EXECUTE contanto que você tenha um nome de tabela estático. Mas isso é provavelmente apenas o exemplo simplificado?