Postgresql

如何在 PostgreSQL 中選擇“實例”?

  • November 22, 2017

我正在閱讀 IEEE 的一篇名為“基於觸發器的實時增量提取以支持數據倉庫”的論文,他們提出了以下程式碼:

CREATE TRIGGER cdc_table ON db.table AS
DECLARE @OPER, @INST, @TAB, @PK, @ID
Select @TAB=table of altered tuple
Select @PK= primary key of @TAB
Select @INST= instance in which @TAB belongs
Begin
IF(@OPER = DELETE)
Select @ID= ID from tuple before deletion;
ELSE
Select @ID= ID from tuple after insertion or update;
ENDIF
Insert into log table @ID, @PK, @TAB, @INST, @OPER;
END;

在第 5 行,他們要求我選擇我正在更改的表的實例。我怎樣才能做到這一點?

日誌表定義如下:

  • log id——一個整數類型的欄位,有一個序號,儲存操作的執行順序;
  • instance – 文本類型欄位,儲存元組被更改的實例的名稱;
  • table – 文本類型欄位,儲存元組被更改的表的名稱;
  • operation – 儲存已執行的操作類型:INSERT、UPDATE 或 DELETE;
  • pk 列——文本類型欄位,儲存在元組被更改的表中用作唯一標識符的列的名稱;
  • tuple id – 更改後的元組的唯一標識符的值。

謝謝!

一開始這是一個非常糟糕的主意,您正在重新創建邏輯複製。只需參考PostgreSQL 邏輯複製指南

也就是說,您想要的是PostgreSQL plpgsql 觸發器“特殊變數.

  • TG_TABLE_NAME數據類型名稱;導致觸發器呼叫的表的名稱。
  • TG_TABLE_SCHEMA數據類型名稱;導致觸發器呼叫的表的模式的名稱。

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