sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man använder EXECUTE FORMAT ... ANVÄNDER i postgres-funktionen

Din funktion kan se ut så här i Postgres 9.0 eller senare:

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;

Om RETURN NULL :

  • Att ignorera resultatet i BEFORE TRIGGER av PostgreSQL?

Jag skulle råda dig att inte använda identifierare med blandade skiftlägen. Med format( .. %I ..) eller quote_ident() , skulle du få en tabell med namnet "dummyTest" , som du måste dubbla citat under resten av dess existens. Relaterat:

  • Är PostgreSQL-kolumnnamn skiftlägeskänsliga?

Använd små bokstäver istället:

quote_ident('dummytest')

Det är verkligen ingen mening att använda dynamisk SQL med EXECUTE så länge du har ett statiskt tabellnamn. Men det är väl bara det förenklade exemplet?



  1. Vet någon vilken krypteringsteknik JDeveloper/SQL Developer använder för att bevara autentiseringsuppgifter?

  2. Returnera en resultatuppsättning

  3. SQL Server (localdb)\v11.0 förklaras

  4. Hur man hämtar bilder från MySQL-databas och visar dem i en HTML-tagg