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

Migrace triggeru z Oracle 11g na Postgresql 8.4

Spouštěče v Postgresu neposkytují spouštěcí kód přímo, ale volají funkci spouštění , které lze volat z libovolného počtu spouštěčů, i když často jsou přizpůsobeny pro jednu konkrétní událost na jednom konkrétním stole.

Spouštěcí funkce:

CREATE OR REPLACE FUNCTION trg_some_tbl_foo()
  RETURNS trigger AS
$func$
BEGIN

INSERT INTO some_tbl(key, name, describe)   -- or some_other_tbl?
VALUES (OLD.key, OLD.name, OLD.describe);

RETURN OLD;

END
$func$ LANGUAGE plpgsql 

Spouštěč:

CREATE TRIGGER foo         -- not:  "CREATE OR REPLACE" !
AFTER UPDATE OR DELETE ON some_tbl
FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()
  • Udělejte to jako AFTER spoušť pro zjednodušení. A BEFORE spouštěč by musel RETURN NEW aby aktualizace fungovaly, ale NEW není vidět v DELETE spoušť. Takže budete potřebovat IF TG_OP = ... atd.

  • Vždy uveďte seznam cílů pro trvalé INSERT prohlášení. To je stejně špatné ve spoušti Oracle.

  • Pravděpodobně máte tabulku s serial sloupec. Jen to nezmiňujte v insertu, další id ze sekvence se vloží automaticky.

Zde na SO je mnoho příkladů kódu.




  1. Jak porovnat ip adresu v mysql?

  2. Je možné dotazovat databázi pomocí hodnoty předané v URL a zapsat výsledek dotazu na URL pomocí mod_rewrite?

  3. Aplikace Spring Boot nemůže získat přístup k PostgreSQL pomocí přihlašovacích údajů z tajného klíče Kubernetes

  4. Jak ukládat data v MySql pomocí cygnus?