PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment utiliser EXECUTE FORMAT ... USING dans la fonction postgres

Votre fonction pourrait ressembler à ceci dans Postgres 9.0 ou version ultérieure :

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;

À propos de RETURN NULL :

  • Ignorer le résultat dans BEFORE TRIGGER de PostgreSQL ?

Je conseillerais de ne pas utiliser d'identificateurs à casse mixte. Avec format( .. %I ..) ou quote_ident() , vous obtiendrez une table nommée "dummyTest" , que vous devrez mettre entre guillemets pour le reste de son existence. Connexe :

  • Les noms de colonne PostgreSQL sont-ils sensibles à la casse ?

Utilisez plutôt des minuscules :

quote_ident('dummytest')

Il n'y a vraiment aucun intérêt à utiliser du SQL dynamique avec EXECUTE tant que vous avez un nom de table statique. Mais ce n'est probablement que l'exemple simplifié ?