Maybaygiare.org

Blog Network

PostgreSQL – TRIGGERS

Advertisements

PostgreSQL Triggers are database callback functions, which are automatically performed/invoked when a specified database event occurs.

tyto jsou důležité body o PostgreSQL spouští −

  • PostgreSQL spoušť může být uvedeno na oheň

    • Před k pokusu o operaci na řádku (před omezením jsou kontrolovány a VLOŽIT, AKTUALIZOVAT nebo ODSTRANIT je pokus o)

    • Po operaci dokončil (po omezení jsou kontrolovány a VLOŽIT, AKTUALIZOVAT, nebo ODSTRANIT dokončil)

    • Namísto operace (v případě vloží, aktualizace nebo odstraní na pohled)

  • spouštěč, který je označen NA KAŽDÉM ŘÁDKU je volána jednou pro každý řádek, který operace se mění. Naproti tomu spoušť, která je označena pro každý příkaz, se provádí pouze jednou pro danou operaci, bez ohledu na to, kolik řádků upraví.

  • oba, klauzule WHEN a spouštěcí akce, mohou přistupovat k prvkům vkládaného, mazaného nebo aktualizovaného řádku pomocí odkazů formuláře nový.sloupec-Název a starý.název sloupce, kde název sloupce je název sloupce z tabulky, ke které je spouštěč přidružen.

  • v Případě, KDYŽ klauzule je dodáván, PostgreSQL prohlášení uvedené jsou prováděny pouze pro řádky, pro které, KDYŽ doložka je pravda. Pokud klauzule není zadána, jsou příkazy PostgreSQL provedeny pro všechny řádky.

  • Pokud je pro stejnou událost definováno více spouštěčů stejného druhu, budou vypáleny v abecedním pořadí podle názvu.

  • před, PO nebo místo klíčového slova určuje, kdy budou spouštěcí akce provedeny vzhledem k vložení, úpravě nebo odstranění přidruženého řádku.

  • spouštěče jsou automaticky zrušeny, když je zrušena tabulka, se kterou jsou spojeny.

  • tabulky, které mají být upraveny, musí existovat ve stejné databázi jako tabulku nebo zobrazení, na které spoušť je připojen a musí se použít jen tablename, ne databáze.název tabulky.

  • volba omezení, pokud je zadána, vytvoří spoušť omezení. To je stejné jako u běžného spouště s tím rozdílem, že načasování spouštění spouště lze nastavit pomocí nastavených omezení. Očekává se, že spouštěče omezení vyvolávají výjimku, pokud jsou porušena omezení, která implementují.

Syntax

základní syntaxe vytvoření spoušť je takto −

CREATE TRIGGER trigger_name event_nameON table_name;

Tady, event_name by mohlo být VLOŽIT, ODSTRANIT, AKTUALIZACE, a TRUNCATE operace databáze na uvedenou tabulku table_name. Volitelně můžete zadat pro každý řádek za názvem tabulky.

následující syntaxe vytvoření pravidla na AKTUALIZACI provoz na jeden nebo více konkrétních sloupců tabulky takto −

CREATE TRIGGER trigger_name UPDATE OF column_nameON table_name;

Příklad:

uvažujme případ, kdy chceme, aby audit procesu pro každý záznam je vložen ve SPOLEČNOSTI tabulce, které budeme vytvářet nově takto (Drop SPOLEČNOST tabulky, pokud již máte to).

testdb=# CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);

udržet audit procesu, vytvoříme novou tabulku s názvem AUDIT, kde log zprávy bude vložen vždy, když je vstup ve SPOLEČNOSTI tabulka pro nový záznam −

testdb=# CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL);

ID je záznam AUDITU ID, EMP_ID je ID, které bude pocházet od SPOLEČNOSTI, stůl, DATUM a bude mít časové razítko, kdy záznam bude vytvořen ve SPOLEČNOSTI tabulce. Takže teď, pojďme vytvořit spoušť na SPOLEČNOST tabulce takto −

testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANYFOR EACH ROW EXECUTE PROCEDURE auditlogfunc();

Kde auditlogfunc() je v PostgreSQL řízení a má následující definici −

CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$ BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp); RETURN NEW; END;$example_table$ LANGUAGE plpgsql;

Nyní, budeme začít skutečná práce. Začněme vkládat záznamy do tabulky společnosti, což by mělo vést k vytvoření záznamu protokolu auditu v tabulce auditu. Takže pojďme vytvořit jeden záznam v SPOLEČNOST tabulce takto −

testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );

tím se vytvoří jeden záznam v SPOLEČNOST tabulku, která je takto −

 id | name | age | address | salary----+------+-----+--------------+-------- 1 | Paul | 32 | California | 20000

Stejné době, jeden rekord bude vytvořen v AUDITU stolu. Tento záznam je výsledkem triggeru, který jsme vytvořili při operaci INSERT na firemní tabulce. Podobně můžete vytvořit spouštěče při operacích aktualizace a mazání na základě vašich požadavků.

 emp_id | entry_date--------+------------------------------- 1 | 2013-05-05 15:49:59.968+05:30(1 row)

Seznam SPOUŠTÍ

můžete Si seznam dolů všechny aktivační události v aktuální databázi z pg_trigger tabulka takto −

testdb=# SELECT * FROM pg_trigger;

výše uvedený PostgreSQL prohlášení bude seznam se všechny spouští.

Pokud chcete, aby seznam spouští na konkrétní tabulky, pak použijte A bod s název tabulky takto −

testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';

výše uvedený PostgreSQL prohlášení bude také seznam dolů pouze jedna položka takto −

 tgname----------------- example_trigger(1 row)

Vrácení SPOUŠTÍ

je následující příkazu DROP, které mohou být použity k poklesu existující trigger −

testdb=# DROP TRIGGER trigger_name;
Inzeráty

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.