PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Мигриране на тригер от Oracle 11g към Postgresql 8.4

Тригерите в Postgres не предоставят код на тригер директно, а извикват функция на тригер , които могат да бъдат извикани от произволен брой тригери, въпреки че често те са персонализирани за едно конкретно събитие на една конкретна таблица.

Задействаща функция:

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 

Задействане:

CREATE TRIGGER foo         -- not:  "CREATE OR REPLACE" !
AFTER UPDATE OR DELETE ON some_tbl
FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()
  • Направете го AFTER задействане за опростяване. A BEFORE тригерът ще трябва да RETURN NEW за да работят актуализациите, но NEW не се вижда в DELETE спусък. Така че ще ви трябва IF TG_OP = ... и т.н.

  • Винаги предоставяйте целеви списък за постоянен INSERT изявления. Това е също толкова лошо в тригер на Oracle.

  • Вероятно имате таблица с serial колона. Само не го споменавайте във вмъкването, следващият идентификатор от последователността се вмъква автоматично.

Има множество примери за кодове тук на SO.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как променяте кодирането на знаци на база данни на Postgres?

  2. бърз произволен избор на ред в Postgres

  3. Как да внедрите високодостъпен Canvas LMS с клъстер от база данни PostgreSQL

  4. TypeError:Не може да се извика метод 'query' на null - при извикване на pg.connect с Heroku node.js

  5. недефиниран индекс за бисквитка в някои браузъри