Maybaygiare.org

Blog Network

PostgreSQL – TRIGGERS

Advertisements

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

următoarele sunt puncte importante despre declanșatoarele PostgreSQL −

  • declanșatorul PostgreSQL poate fi specificat să declanșeze

    • înainte ca operația să fie încercată pe un rând (înainte ca constrângerile să fie verificate și să se încerce Inserarea, actualizarea sau ștergerea)

    • după ce operația s-a finalizat (după ce constrângerile sunt verificate și inserarea, actualizarea sau ștergerea s-au finalizat)

    • în loc de operație (în cazul inserțiilor, actualizărilor sau ștergerilor dintr-o vizualizare)

  • un declanșator marcat pentru fiecare rând este apelat o dată pentru fiecare rând care operația se modifică. În schimb, un declanșator care este marcat pentru fiecare instrucțiune se execută o singură dată pentru orice operație dată, indiferent de câte rânduri modifică.

  • ambele, clauza când și acțiunile declanșatoare, pot accesa elemente ale rândului inserat, șters sau actualizat folosind referințe ale formularului nou.coloana-Nume și vechi.column-name, unde column-name este numele unei coloane din tabelul cu care este asociat declanșatorul.

  • dacă este furnizată o clauză WHEN, instrucțiunile PostgreSQL specificate sunt executate numai pentru rânduri pentru care clauza when este true. Dacă nu este furnizată clauza WHEN, declarațiile PostgreSQL sunt executate pentru toate rândurile.

  • Dacă sunt definite mai multe declanșatoare de același tip pentru același eveniment, acestea vor fi declanșate în ordine alfabetică după nume.

  • înainte, după sau în loc de cuvinte cheie determină când acțiunile de declanșare vor fi executate în raport cu inserarea, modificarea sau eliminarea rândului asociat.

  • declanșatoarele sunt abandonate automat atunci când tabelul cu care sunt asociate este abandonat.

  • tabelul care urmează să fie modificat trebuie să existe în aceeași bază de date ca tabelul sau vizualizarea la care este atașat declanșatorul și trebuie să se utilizeze doar numele tabelului, Nu baza de date.nume de masă.

  • o opțiune de constrângere atunci când este specificată creează un declanșator de constrângere. Acest lucru este la fel ca un declanșator obișnuit, cu excepția faptului că momentul declanșării declanșatorului poate fi ajustat folosind constrângeri stabilite. Se așteaptă ca declanșatorii de constrângeri să ridice o excepție atunci când constrângerile pe care le implementează sunt încălcate.

sintaxa

sintaxa de bază a creării unui declanșator este următoarea −

CREATE TRIGGER trigger_name event_nameON table_name;

aici, event_name ar putea fi insera, șterge, actualiza și trunchia funcționarea bazei de date pe tabelul menționat nume_tabel. Puteți specifica opțional pentru fiecare rând după numele tabelului.

următoarea este sintaxa creării unui declanșator la o operație de actualizare pe una sau mai multe coloane specificate ale unui tabel după cum urmează −

CREATE TRIGGER trigger_name UPDATE OF column_nameON table_name;

exemplu

să luăm în considerare un caz în care dorim să păstrăm un proces de audit pentru fiecare înregistrare introdusă în tabelul companiei, pe care îl vom crea nou după cum urmează (aruncați tabelul companiei dacă îl aveți deja).

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

pentru a menține procesul de audit, vom crea un nou tabel numit AUDIT în care mesajele de jurnal vor fi inserate ori de câte ori există o intrare în tabelul companiei pentru o nouă înregistrare −

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

aici, ID-ul este ID-ul înregistrării auditului, iar EMP_ID este ID-ul, care va veni de la vor fi create în tabelul companiei. Deci, acum, să creăm un declanșator pe tabelul companiei după cum urmează −

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

unde auditlogfunc() este o procedură PostgreSQL și are următoarea definiție –

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;

acum, vom începe lucrarea reală. Să începem să inserăm înregistrarea în tabelul companiei, ceea ce ar trebui să ducă la crearea unei înregistrări a jurnalului de audit în tabelul de AUDIT. Așadar, să creăm o înregistrare în tabelul companiei după cum urmează −

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

aceasta va crea o înregistrare în tabelul companiei, care este după cum urmează −

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

în același timp, o înregistrare va fi creată în tabelul de AUDIT. Această înregistrare este rezultatul unui declanșator, pe care le-am creat pe Inserare operație pe masa companiei. În mod similar, puteți crea declanșatoarele la operațiunile de actualizare și ștergere pe baza cerințelor dvs.

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

listarea declanșează

puteți lista în jos toate declanșează în baza de date curentă din tabelul pg_trigger după cum urmează −

testdb=# SELECT * FROM pg_trigger;

declarația PostgreSQL dat mai sus va lista în jos toate declanșează.

dacă doriți să listați declanșatoarele pe un anumit tabel, atunci utilizați și clauza cu numele tabelului după cum urmează −

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

declarația PostgreSQL de mai sus va lista, de asemenea, o singură intrare după cum urmează −

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

declanșatoare de cădere

următoarea este comanda DROP, care poate fi fi folosit pentru a renunța la un declanșator existent −

testdb=# DROP TRIGGER trigger_name;
reclame

Lasă un răspuns

Adresa ta de email nu va fi publicată.