PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So verwenden Sie EXECUTE FORMAT ... USING in der Postgres-Funktion

Ihre Funktion könnte in Postgres 9.0 oder höher so aussehen:

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;

Über RETURN NULL :

  • Soll das Ergebnis in BEFORE TRIGGER von PostgreSQL ignoriert werden?

Ich würde raten, keine Groß-/Kleinschreibung zu verwenden. Mit format( .. %I ..) oder quote_ident() , erhalten Sie eine Tabelle mit dem Namen "dummyTest" , die Sie für den Rest ihrer Existenz in doppelte Anführungszeichen setzen müssen. Verwandte:

  • Beachten Sie bei PostgreSQL-Spaltennamen die Groß-/Kleinschreibung?

Verwenden Sie stattdessen Kleinbuchstaben:

quote_ident('dummytest')

Es macht wirklich keinen Sinn, dynamisches SQL mit EXECUTE zu verwenden solange Sie einen statischen Tabellennamen haben. Aber das ist wohl nur das vereinfachte Beispiel?