Postgresql

對於每個插入的行,使用 PostgreSQL 中的 AFTER INSERT 觸發器在另一個表中生成一系列行

  • March 20, 2021

假設客戶下了一定數量的訂單,我想將此資訊插入到table1初始狀態中。同時,我想在 中生成一系列行,table2並結合新生成的 ID 在table1. 必須為每個新訂單執行。像:

*``` Table 1 columns - id ,qty A1 25 A2 32


生成:

Table 2 column - sub_id A1_1 A1_2 . . A1_25 A2_1 A2_2 . . A2_32

*您可以使用插入後觸發器輕鬆實現目標。首先,您需要創建一個觸發器函式,該函式將從 table1 中收集新添加的行的資訊,並將生成一系列 ID 並將其插入到 table2 中。

CREATE OR REPLACE FUNCTION after_insert_table1()
 RETURNS trigger AS
$$
BEGIN
        insert into table2 SELECT CONCAT(new.id,'_',generate_series(1, new.qty)) as sub_id;
   RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';

然後您需要在 table1 上創建觸發器,該觸發器將呼叫觸發器函式。

CREATE TRIGGER InsertIntoTable2 AFTER INSERT 
ON table1
FOR EACH ROW
execute procedure after_insert_table1()

此觸發器將使用唯一 sub_id 將五行插入到 table2 中,以便將語句插入 table1 值 (‘A1’,5);

從表 1 中選擇 *

從表 2 中選擇 **

引用自:https://dba.stackexchange.com/questions/286594