sql >> Databáze >  >> RDS >> PostgreSQL

Jak používat EXECUTE FORMAT ... POUŽÍVÁNÍ ve funkci postgres

Vaše funkce může v Postgresu 9.0 nebo novějším vypadat takto:

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;

O RETURN NULL :

  • Ignorovat výsledek v BEFORE TRIGGER PostgreSQL?

Doporučuji nepoužívat smíšené identifikátory velkých a malých písmen. S format( .. %I ..) nebo quote_ident() , dostanete tabulku s názvem "dummyTest" , který budete muset po zbytek jeho existence citovat dvakrát. Související:

  • Rozlišují se v názvech sloupců PostgreSQL velká a malá písmena?

Místo toho použijte malá písmena:

quote_ident('dummytest')

Opravdu nemá smysl používat dynamické SQL s příkazem EXECUTE pokud máte název statické tabulky. Ale to je pravděpodobně jen zjednodušený příklad?



  1. SequelizeConnectionError:certifikát s vlastním podpisem

  2. Chyba SQL:ORA-02291:omezení integrity

  3. Jak automatizovat selhání databáze pomocí ClusterControl

  4. ORA-01461:lze svázat hodnotu LONG pouze pro vložení do sloupce LONG-Vyskytuje se při dotazování