簡體   English   中英

Postgres 觸發器:將舊記錄寫入新表

[英]Postgres triggers: write old record to new table

我有一組不同的表,它們在 DELETE 上有一個觸發器。 我想將已刪除的行寫入不同架構上的類似表。

例如,假設我有幾個不同的表:

CREATE TABLE A (val1 TEXT, val2 TEXT)
CREATE TABLE B (someval1 INT, someval2 TEXT, someval3 TEXT)

我在其他一些模式上有這些相同表的副本

CREATE SCHEMA backup;
CREATE TABLE backup.A (like A);
CREATE TABLE backup.B (like B);

每個非備份表 A & B 都有一個刪除觸發器(用 plpgsql 編寫)。 如果我從這些表中的任何一個中刪除一條記錄,我如何編寫一個觸發器函數將刪除的記錄寫入關聯的備份表?

你確實可以用觸發器來做到這一點。 每個表需要一個觸發器,例如:

create or replace function func_backup_tablea_before_delete()
return trigger as
$body$
begin
    insert into backup.tablea(val1, val2) values (old.val1, old.val2);
end;
$body$ 

create trigger trg_delete_a 
before delete on tablea
for each row
execute procedure func_backup_tablea_before_delete;

我能夠使用單個非表特定觸發器函數將已刪除的記錄寫入我的備份表:

create or replace function track_delete() returns trigger as
$body$
BEGIN
    execute format('insert into backup.%I values($1.*)', tg_table_name) USING old;
END;
$body$
language plpgsql;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM