Come configurare i trigger postgresql

Come configurare i trigger postgresql
“Il trigger viene utilizzato in qualsiasi database per eseguire qualche attività automatizzata quando viene visualizzato un particolare evento di database. Si chiama la funzione di callback del database che viene chiamato automaticamente in base all'evento. Ci sono molti vantaggi dell'utilizzo dei trigger nel database PostgreSQL. È possibile creare tre tipi di trigger, che sono descritti in questo tutorial usando più esempi."

Alcuni vantaggi dell'uso dei trigger

  • La convalida dei dati può essere eseguita facilmente.
  • È possibile generare il valore unico di un nuovo record.
  • Lo sviluppo dell'applicazione diventa più veloce.
  • Le regole aziendali dell'applicazione possono essere applicate.
  • La manutenzione dell'applicazione diventa più facile.

Sintassi

Di seguito è riportata la sintassi della creazione di un trigger.

Crea [o sostituisci] [vincolo] Nome trigger prima | Dopo | Invece di event [o…]
Su table_name
[Da referenced_table_name]
[Non differibile | [Deferrable] [inizialmente immediato | Inizialmente differito]]
[Riferimenti Old | Nuovo tabella [as] transizione_relation_name […]]
[Per [ciascuno] riga | DICHIARAZIONE ]
[Quando (condizione)]
Eseguire funzione | Procedura function_name (argomenti)
  • Creare la parola chiave viene utilizzata per creare un nuovo trigger e sostituire la parola chiave viene utilizzata per modificare un trigger esistente.
  • L'opzione di vincolo viene utilizzata per creare un trigger di vincolo che viene sparato in base al valore di vincolo.
  • Un nome di trigger univoco viene utilizzato per la creazione del trigger.
  • Quattro tipi di eventi possono essere utilizzati per creare un trigger. Questi sono inserti, aggiornamento, elimina e troncati.
  • Tre tipi di trigger che possono essere creati sono PRIMA, DOPO, E INVECE DI. I trigger possono essere creati per la tabella, la tabella straniera e la visualizzazione. PRIMA E DOPO Trigger Support Insert, Aggiorna ed Elimina le operazioni per tabella e Tabella estera a livello di riga e la vista anche a livello di istruzione. INVECE DI Trigger supporta inserimento, aggiornamento ed elimina le operazioni per la visualizzazione solo a livello di riga. L'evento Truncate può essere utilizzato solo per la tabella a livello di istruzione.
  • Dopo aver definito l'evento, viene utilizzato il nome della tabella o della tabella estera o della vista.
  • IL referenced_table_name viene utilizzato per vincolo alla chiave all'estero e solo il trigger di vincolo.
  • La tempistica predefinita del trigger è definita da Non differibile O Deferribile O Inizialmente immediato O Inizialmente differito.
  • Riferimento La parola chiave viene utilizzata per dichiarare una o due nomi di relazioni.
  • Vecchio tavolo O Nuovo tablLa clausola definisce la relazione di transizione dell'immagine prima o la relazione di transizione di post-immagine.
  • transizione_relation_name viene utilizzato all'interno del trigger per la relazione di transizione.
  • Per ogni riga O Per ogni affermazione Definisce se la funzione di trigger deve essere sparata una volta per ogni riga interessata dall'evento del trigger o solo una volta per istruzione SQL. Per ogni affermazione è il valore predefinito.
  • condizione determina se la funzione trigger verrà eseguita o meno.
  • funzione_name è una funzione definita dall'utente che non prende alcun argomento e il tipo di restituzione è il trigger che viene eseguito quando il trigger si accende.
  • L'elenco degli argomenti separato da virgola viene passato alla funzione quando viene eseguito il trigger.

Prerequisiti

UN. Installa il postgreSQL

È necessario installare l'ultima versione dei pacchetti PostgreSQL sul sistema operativo Linux prima di eseguire le istruzioni SQL mostrate in questo tutorial. Esegui i seguenti comandi per installare e avviare PostgreSQL:

$ sudo apt-get -y installa postgresql postgresql-confrib
$ sudo systemctl Inizia postgresql.servizio

B. Esegui il seguente comando per accedere a PostgreSQL con il privilegio di root.

$ sudo -u postgres psql

C. È possibile creare un database chiamato "testdb " eseguendo la seguente istruzione SQL.

# Crea test Database TestDB;

Se vuoi creare una tabella in testdb database, quindi devi digitare "\C" Per modificare il database. Ma in questo tutorial, non ho modificato il database e la tabella e tutte le funzioni sono state create nel database predefinito denominato Postgres.

Crea una tabella denominata insegnanti E corsi con alcuni record per testare l'uso di trigger che verranno creati più avanti in questo tutorial.

Crea insegnanti di tabelle (
Chiave primaria seriale ID,
Nome varchar (30),
Indirizzo Varchar (100),
contact_no varchar (20),
Disponibile bool default true);
Crea corsi di tabelle (
Chiave seriale di Course_id Serial,
Nome varchar (30),
Credit_Hour Float,
insegnante_id int default 0);
Inserisci Insegnanti (nome, indirizzo, contatto_no, disponibile)
valori
('Nasir Uddin', 'Dhanmondi 15, Dhaka', '+8801947854523', false),
('Farzana Mahmud', '39/1, Jigatola, Dhaka ',' +88018553426754 ', false);
Inserisci i corsi (nome, crediti_hour, insegnante_id)
valori
("Fisica", 2.0, 1),
("Chimica", 2.0, 2),
('Math', 3.0, 1);

Attiva esempi

Ogni trigger è associato a una funzione PostgreSQL. Quindi, devi creare la funzione prima di creare il trigger. Il modo di creare diversi tipi di trigger è stato mostrato in questa parte del tutorial.

Esempio-1: creare prima di inserire il trigger

I trigger prima dell'inserto prima dell'esecuzione di qualsiasi operazione di inserto. Esegui la seguente istruzione SQL per creare una funzione denominata prima_insert () che verrà utilizzato in a Prima di inserire grilletto. Uno degli scopi principali dell'utilizzo di un trigger è la convalida dei dati. La seguente funzione verificherà se i campi particolari sono vuoti o meno. Se uno qualsiasi dei valori di campo rimane vuoto, verrà sollevato un particolare messaggio di errore. Un'altra convalida verrà controllata per il nome campo e un messaggio di errore verrà sollevato se la lunghezza di questo campo è inferiore a 5. L'istruzione condizionale successiva viene utilizzata per concatenare il valore della stringa "+88" con il contact_no Se la lunghezza del contact_no il campo è 11.

Crea o sostituisci la funzione prima_insert ()
Restituisce il trigger come
$$
INIZIO
Se nuovo.name = "o nuovo.indirizzo = "o nuovo.contact_no = "Quindi
Solleva il nome o l'indirizzo o il campo contact_no è vuoto.';
FINISCI SE;
Se lunghezza (nuovo.nome) < 5 THEN
Sollevare il campo Nome deve contenere più di 5 caratteri.';
FINISCI SE;
Se lunghezza (nuovo.contact_no) = 11 quindi
NUOVO.contact_no = '+88' || NUOVO.contact_no;
FINISCI SE;
Restituire nuovo;
FINE;
$$
Lingua 'plpgsql';

Verrà visualizzato il seguente output se la funzione viene creata correttamente in Postgres Banca dati.

Esegui la seguente istruzione SQL per creare un trigger denominato check_before_insert che eseguirà il prima_insert () funzione prima di inserire il nuovo record al insegnanti tavolo.

Crea trigger check_before_insert
Prima di inserire
Sugli insegnanti
Per ogni riga
Eseguire la funzione prima_insert ();

Verrà visualizzato il seguente output se il trigger viene creato correttamente.

Esegui la seguente istruzione insert che contiene tutti i dati validi.

Inserisci Insegnanti (nome, indirizzo, contact_no)
Valori ('Zafar Iqbal', 'Mirpur, Dhaka', '01738975634');

Verrà visualizzato il seguente output se il nuovo record viene inserito correttamente.

Esegui la seguente istruzione insert che contiene i dati non validi per il campo Nome.

Inserisci Insegnanti (nome, indirizzo, contact_no)
Valori ('lina', 'malibag, dhaka', '01790975630');

Verrà visualizzato il seguente messaggio di errore per il valore del nome non valido.

Eseguire la seguente istruzione insert che contiene il valore vuoto per il indirizzo E contact_no campi e il valore vuoto per questi campi non è valido.

Inserisci Insegnanti (nome, indirizzo, contact_no)
Valori ('Nilufar Rahman', ",");

Verrà visualizzato il seguente messaggio di errore per i valori vuoti.

Esegui la seguente istruzione SELECT per verificare quali record vengono inseriti dopo aver utilizzato il trigger prima dell'inserzione.

Seleziona * dagli insegnanti;

La seguente uscita mostra che viene inserito solo un record dopo aver utilizzato il trigger.

Esempio-2: creare dopo eliminare il trigger

L'incendio del trigger dopo elimina dopo aver eliminato qualsiasi record dalla tabella particolare. Esegui la seguente istruzione SQL per creare una funzione denominata after_delete () che verrà utilizzato in un Dopo la cancellazione innescare per eliminare le righe correlate da corsi tabella quando un record viene eliminato da insegnanti' tavolo. Qui, un vecchio.id è stato usato per tracciare gli eliminati id dal insegnanti' tavolo.

Crea funzione dopo_delete ()
Restituisce il trigger come
$$
INIZIO
Elimina dai corsi in cui insegnante_id = vecchio.id;
Restituire vecchio;
FINE;
$$
Language plpgsql;

Verrà visualizzato il seguente output se la funzione viene creata correttamente in Postgres Banca dati.

Esegui la seguente istruzione SQL per creare un trigger denominato delete_teacher che eseguirà il after_delete () funzione dopo aver eliminato un record da insegnanti' tabella che eliminerà i record dal corsi tavolo dove il insegnante_id Il valore corrisponde con il cancellato id valore del insegnanti' tavolo.

Crea trigger delete_teacher
Dopo la cancellazione
Sugli insegnanti
Per ogni riga
Eseguire la funzione dopo_delete ();

Verrà visualizzato il seguente output se il trigger viene creato correttamente.

Esegui la seguente istruzione ELETE che eliminerà il record dalla tabella degli insegnanti in cui il id Il valore è 1. IL delete_teacher Il trigger verrà sparato se qualsiasi record viene eliminato da insegnanti' tavolo.

Elimina dagli insegnanti dove id = 1;

Il seguente output mostra che un record è stato eliminato dalla tabella degli insegnanti. Così il delete_teacher Il trigger verrà licenziato ed eliminerà tutti i record dalla tabella dei corsi che contiene 1 nel insegnante_id campo.

Ora, esegui i seguenti comandi seleziona per verificare quali record vengono eliminati dal insegnanti E corsi tavoli.

Seleziona * dagli insegnanti;
Seleziona * dai corsi;

L'output mostra che un record è stato eliminato dalla tabella degli insegnanti e due record sono stati eliminati dalla tabella dei corsi utilizzando il trigger.

Esempio-3: crea invece di aggiornare il trigger

Il trigger invece di aggiornare può essere applicato solo sulla vista della tabella. Quindi, devi creare una vista della tabella e una funzione per testare l'uso di questo tipo di trigger. Esegui la seguente istruzione SQL per creare una funzione denominata insert_course () che aggiornerà i valori del insegnanti e il corsi tabella dopo aver inserito un nuovo record al corsi tavolo. Lo scopo di questa funzione è di assegnare un insegnante per il nuovo corso se l'insegnante è disponibile.

Crea o sostituisci la funzione insert_course ()
Restituisce il trigger come
$$
DICHIARARE
Tec_id int;
INIZIO
Inserisci i corsi (nome, Credit_hour)
Valori (nuovo.Nome, nuovo.Credit_hour);
Seleziona ID in TEC_ID dagli insegnanti ove disponibili = limite True 1;
Aggiorna gli insegnanti set disponibili = false dove id = tec_id;
Corsi di aggiornamento imposta insegnante_id = tec_id dove insegnante_id = 0;
Restituire nuovo;
FINE
$$
Language plpgsql;

Verrà visualizzato il seguente output se la funzione viene creata correttamente in Postgres Banca dati.

Esegui il seguente comando SQL per creare una visualizzazione della tabella dei corsi.

Crea view courses_view come
Seleziona * dai corsi;

Verrà visualizzato il seguente output se la vista viene creata correttamente.

Ora, esegui la seguente istruzione SQL per creare il trigger di inserimento di inserimento denominato update_data che verrà licenziato quando un nuovo record viene inserito utilizzando il create_view visualizzazione.

Crea trigger update_data
Invece di inserire su corsi_view
Per ogni riga
Eseguire la funzione insert_course ();

Verrà visualizzato il seguente output se il trigger viene creato correttamente.

Esegui la seguente dichiarazione insert per inserire un nuovo record nella tabella dei corsi utilizzando Courses_view visualizzazione.

Inserisci in Courses_View (nome, Credit_hour)
valori ("matematica superiore", 3.0);

Verrà visualizzato il seguente output se i dati vengono inseriti correttamente utilizzando la visualizzazione.

Ora, esegui le seguenti dichiarazioni selezionate per verificare come i corsi e le tabelle degli insegnanti sono stati modificati dopo aver inserito un nuovo record nella tabella dei corsi utilizzando la visualizzazione.

Seleziona * dagli insegnanti;
Seleziona * da Courses_View;

Il seguente output mostra che un nuovo record è stato inserito nella tabella dei corsi e nel campo disponibile del insegnanti' La tabella è stata aggiornata da "t" a "f", dove il valore ID è 3 e questo valore ID è stato aggiornato in corsi Tabella per assegnare questo insegnante per il corso appena inserito.

Conclusione

Molte attività di database possono essere eseguite automaticamente utilizzando un trigger nel database PostgreSQL. Ogni trigger viene eseguito utilizzando una funzione particolare. Molti scopi di utilizzo dei trigger sono stati spiegati in questo tutorial creando più trigger con la funzione. Qui sono stati creati tre diversi tipi di trigger che aiuteranno i nuovi utenti PostgreSQL a conoscere il modo di creare e utilizzare i trigger nel database PostgreSQL.