sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo usar EXECUTE FORMAT ... USING en la función postgres

Su función podría verse así en Postgres 9.0 o 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;

Acerca de RETURN NULL :

  • ¿Ignorar el resultado ANTES DEL ACTIVACIÓN de PostgreSQL?

Aconsejaría no usar identificadores de mayúsculas y minúsculas. Con format( .. %I ..) o quote_ident() , obtendrías una tabla llamada "dummyTest" , que tendrá que comillas dobles por el resto de su existencia. Relacionado:

  • ¿Los nombres de las columnas de PostgreSQL distinguen entre mayúsculas y minúsculas?

Use minúsculas en su lugar:

quote_ident('dummytest')

Realmente no tiene sentido usar SQL dinámico con EXECUTE siempre que tenga un nombre de tabla estático. ¿Pero ese es probablemente solo el ejemplo simplificado?