PostgreSQL觸發器

PostgreSQL觸發器是一組動作或數據庫回調函數,它們在指定的表上執行指定的數據庫事件(即,INSERTUPDATEDELETETRUNCATE語句)時自動運行。 觸發器用於驗證輸入數據,執行業務規則,保持審計跟蹤等。

觸發器的重點知識

  1. PostgreSQL在以下情況下執行/調用觸發器:在嘗試操作之前(在檢查約束並嘗試INSERTUPDATEDELETE之前)。或者在操作完成後(在檢查約束並且INSERTUPDATEDELETE完成後)。或者不是操作(在視圖中INSERTUPDATEDELETE的情況下)

  2. 對於操作修改的每一行,都會調用一個標記爲FOR EACH ROWS的觸發器。 另一方面,標記爲FOR EACH STATEMENT的觸發器只對任何給定的操作執行一次,而不管它修改多少行。

  3. 您可以爲同一事件定義同一類型的多個觸發器,但條件是按名稱按字母順序觸發。

  4. 當與它們相關聯的表被刪除時,觸發器被自動刪除。

PostgreSQL創建觸發器

CREATE TRIGGER語句用於在PostgreSQL表中創建一個新的觸發器。 當表發生特定事件(即INSERTUPDATEDELETE)時,它被激活。

語法

CREATE  TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name  
ON table_name  
[  
 -- Trigger logic goes here....  
];

在這裏,event_name可以是INSERTUPDATEDELETETRUNCATE數據庫操作上提到的表table_name。 您可以選擇在表名後指定FOR EACH ROW

下面來看看看如何在INSERT操作中創建觸發器的語法。

CREATE  TRIGGER trigger_name AFTER INSERT ON column_name  
ON table_name  
[  
 -- Trigger logic goes here....  
];

觸發器例子

下面舉個例子來演示PostgreSQL在INSERT語句之後創建觸發器。在以下示例中,我們對每個記錄插入到COMPANY表中進行審覈(審計)。

使用以下查詢創建一個名爲COMPANY的表:

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

爲了保存審計/審覈,我們將創建一個名爲AUDIT的新表,只要在COMPANY表中有一個新記錄的條目,就會插入日誌消息。

使用以下查詢語句創建另一個表Audit

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

COMPANY表上創建觸發器之前,首先創建一個名爲auditlogfunc()的函數/過程。

執行以下查詢語句來創建函數/過程:

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;

執行結果如下所示-

PostgreSQL觸發器

現在通過使用以下查詢語句在COMPANY表上創建一個觸發器:

CREATE TRIGGER example_trigger AFTER INSERT ON COMPANY  
FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();

執行結果如下所示-
PostgreSQL觸發器

COMPANY表中插入一些數據記錄,以驗證觸發器執行情況。

INSERT INTO COMPANY VALUES(1, '小米科技', 8, '北京市朝陽區', 9999);
INSERT INTO COMPANY VALUES(2, '京東中科', 6, '廣州市天河區', 8999);

在執行上面兩條插入語句後,現我們來看AUDIT表是否有自動插入兩條審覈記錄。

PostgreSQL觸發器

可以確定的是在插入數據後觸發了觸發器,PostgreSQL也自動向AUDIT表中創建/插入兩個記錄。 這些記錄是觸發的結果,這是因爲我們在AFTER INSERT on COMPANY表上創建了這些記錄。

PostgreSQL觸發器的使用

PostgreSQL觸發器可用於以下目的:

  • 驗證輸入數據。
  • 執行業務規則。
  • 爲不同文件中新插入的行生成唯一值。
  • 寫入其他文件以進行審計跟蹤。
  • 從其他文件查詢交叉引用目的。
  • 訪問系統函數。
  • 將數據複製到不同的文件以實現數據一致性。

使用觸發器的優點

  • 它提高了應用程序的開發速度。 因爲數據庫存儲觸發器,所以您不必將觸發器操作編碼到每個數據庫應用程序中。
  • 全局執法業務規則。定義觸發器一次,然後將其重用於使用數據庫的任何應用程序。
  • 更容易維護 如果業務策略發生變化,則只需更改相應的觸發程序,而不是每個應用程序。
  • 提高客戶/服務器環境的性能。 所有規則在結果返回之前在服務器中運行。