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;

執行結果如下所示-

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

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

執行結果如下所示-

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

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

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

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

PostgreSQL觸發器的使用

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

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

使用觸發器的優點

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

上一篇: PostgreSQL函數(存儲過程) 下一篇: PostgreSQL別名