PostgreSQL Triggers are database callback functions, which are automatically performed/invoked when a specified database event occurs.
De volgende zijn belangrijke punten over PostgreSQL triggers −
-
PostgreSQL trigger kan worden opgegeven om het vuur
-
Voordat de bewerking wordt uitgevoerd op een rij (voor beperkingen worden gecontroleerd en het INVOEGEN, BIJWERKEN of VERWIJDEREN van poging tot)
-
Nadat de bewerking is voltooid (na beperkingen worden gecontroleerd en de PLAATS, BIJWERKEN of VERWIJDEREN is voltooid)
-
in Plaats van de werking (in het geval van inserts, updates of deletes op een aanzicht)
-
-
Een trigger die is gemarkeerd VOOR ELKE RIJ is een keer opgeroepen voor elke rij die de operatie wijzigt. Een trigger die voor elk STATEMENT is gemarkeerd, voert daarentegen slechts één keer uit voor een bepaalde operatie, ongeacht hoeveel rijen het wijzigt.
-
zowel de WHEN-clausule als de triggeracties kunnen toegang krijgen tot elementen van de rij die wordt ingevoegd, verwijderd of bijgewerkt met behulp van verwijzingen van het formulier nieuw.column-naam en oud.kolom-Naam, waarbij kolom-Naam de naam is van een kolom uit de tabel waaraan de trigger is gekoppeld.
-
als een wanneer-clausule wordt opgegeven, worden de opgegeven PostgreSQL-statements alleen uitgevoerd voor rijen waarvoor de wanneer-clausule true is. Als er geen WHEN-clausule wordt gegeven, worden de PostgreSQL-statements voor alle rijen uitgevoerd.
-
als meerdere triggers van dezelfde soort zijn gedefinieerd voor dezelfde gebeurtenis, zullen ze worden afgevuurd in alfabetische volgorde op naam.
-
het voor, na of in plaats van trefwoord bepaalt wanneer de trigger acties zullen worden uitgevoerd ten opzichte van het invoegen, wijzigen of verwijderen van de geassocieerde rij.
-
Triggers worden automatisch verwijderd wanneer de tabel waarmee ze zijn geassocieerd, wordt verwijderd.
-
de te wijzigen tabel moet in dezelfde database staan als de tabel of weergave waaraan de trigger is gekoppeld en men moet alleen tablenaam gebruiken, geen database.tabletnaam.
-
een CONSTRAINT-optie wanneer gespecificeerd maakt een constraint-trigger. Dit is hetzelfde als een normale trigger, behalve dat de timing van de trigger afvuren kan worden aangepast met behulp van ingestelde beperkingen. Van Constraint triggers wordt verwacht dat ze een uitzondering vormen wanneer de beperkingen die ze implementeren worden geschonden.
syntaxis
de basissyntaxis van het maken van een trigger is als volgt −
CREATE TRIGGER trigger_name event_nameON table_name;
hier zou event_name kunnen zijn invoegen, verwijderen, bijwerken en afkappen van de database op de genoemde table table_name. U kunt optioneel voor elke rij na tabelnaam opgeven.
het volgende is de syntaxis van het maken van een trigger op een UPDATE operatie op een of meer opgegeven kolommen van een tabel als volgt −
CREATE TRIGGER trigger_name UPDATE OF column_nameON table_name;
voorbeeld
laten we een geval overwegen waarin we audit trial willen houden voor elke record die in bedrijf tabel wordt ingevoegd, die we als volgt Nieuw zullen maken (Drop bedrijf tabel als je deze al hebt).
testdb=# CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);
Te houden audit trial, maken we een nieuwe tabel met de naam van AUDIT-log waar berichten worden ingevoegd wanneer er een vermelding in BEDRIJF aan tafel voor een nieuw record
testdb=# CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL);
Hier is de ID van de AUDIT record-ID, en EMP_ID is de ID, die zal komen van het BEDRIJF tafel, en DATE houden tijdstempel wanneer de record wordt gemaakt in BEDRIJF aan tafel. Dus nu, laten we een trigger maken op de BEDRIJFSTABEL als volgt –
testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANYFOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
waar auditlogfunc() een PostgreSQL procedure is en de volgende definitie heeft −
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;
nu zullen we het eigenlijke werk starten. Laten we beginnen met het invoegen van een record in de BEDRIJFSTABEL, wat zou moeten resulteren in het maken van een auditlogboekrecord in de AUDITTABEL. Laten we dus als volgt een record in de BEDRIJFSTABEL maken −
testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );
Dit zal een record in de BEDRIJFSTABEL maken, wat als volgt is −
id | name | age | address | salary----+------+-----+--------------+-------- 1 | Paul | 32 | California | 20000
tegelijkertijd zal er een record worden aangemaakt in de AUDITTABEL. Dit record is het resultaat van een trigger, die we hebben gemaakt op INSERT operatie op BEDRIJFSTAFEL. Evenzo, kunt u uw triggers op UPDATE en delete operaties op basis van uw eisen.
emp_id | entry_date--------+------------------------------- 1 | 2013-05-05 15:49:59.968+05:30(1 row)
triggers
U kunt alle triggers in de huidige database als volgt weergeven −
testdb=# SELECT * FROM pg_trigger;
het bovenstaande PostgreSQL-statement zal alle triggers weergeven.
Als u de triggers in een bepaalde tabel wilt weergeven, gebruik dan en clausule met tabelnaam als volgt −
testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';
het bovenstaande PostgreSQL statement zal ook slechts één regel als volgt weergeven −
tgname----------------- example_trigger(1 row)
Dropping TRIGGERS
het volgende is het DROP commando, dat kan worden gebruikt om een bestaande Trigger −
testdb=# DROP TRIGGER trigger_name;