spi模組提供了幾個可行的使用伺服器程式介面(SPI)和觸發程序的範例。雖然這些函式本身具有一定的價值,但作為修改用於您自己目的的範例,它們更有用。這些函式足夠通用,可以用於任何表格,但您必須在建立觸發程序時指定表格和欄位名稱(如下所述)。
下面描述的每組函式都作為一個單獨可安裝的擴充功能提供。
check_primary_key()
和check_foreign_key()
用於檢查外鍵約束。(當然,此功能早已被內建的外鍵機制取代,但該模組仍然可以作為一個範例使用。)
check_primary_key()
檢查參考表格。若要使用,請在使用此函式在參考另一個表格的表格上建立一個BEFORE INSERT OR UPDATE
觸發程序。指定作為觸發程序引數:參考表格的欄名稱(組成外鍵)、被參考表格名稱以及被參考表格中組成主鍵/唯一鍵的欄名稱。若要處理多個外鍵,請為每個參考建立一個觸發程序。
check_foreign_key()
檢查被參考表格。若要使用,請在使用此函式在被其他表格參考的表格上建立一個BEFORE DELETE OR UPDATE
觸發程序。指定作為觸發程序引數:函式必須執行檢查的參考表格的數量、如果找到參考鍵要執行的動作(cascade
— 刪除參考列,restrict
— 如果存在參考鍵,則中止交易,setnull
— 將參考鍵欄位設定為null)、觸發表格中組成主鍵/唯一鍵的欄名稱,然後是參考表格名稱和欄名稱(針對第一個引數指定的每個參考表格重複)。請注意,主鍵/唯一鍵欄應標記為NOT NULL,並且應具有唯一索引。
refint.example
中有範例。
autoinc()
是一個觸發程序,將序列的下一個值儲存到整數欄位中。這與內建的“序列欄”功能有一些重疊,但它們並不相同:autoinc()
將覆蓋在插入期間替換不同欄位值的嘗試,並且選擇性地,它也可以用於在更新期間遞增欄位。
若要使用,請在使用此函式建立一個BEFORE INSERT
(或選擇性地BEFORE INSERT OR UPDATE
)觸發程序。指定兩個觸發程序引數:要修改的整數欄的名稱,以及將提供值的序列物件的名稱。(實際上,如果您想更新多個自動遞增欄,您可以指定任意數量的此類名稱對。)
autoinc.example
中有一個範例。
insert_username()
是一個觸發程序,將當前使用者的名稱儲存到文字欄位中。這對於追蹤誰上次修改表格中的特定列很有用。
若要使用,請在使用此函式建立一個BEFORE INSERT
和/或UPDATE
觸發程序。指定一個觸發程序引數:要修改的文字欄的名稱。
insert_username.example
中有一個範例。
moddatetime()
是一個觸發程序,會將目前時間儲存到 timestamp
欄位中。這對於追蹤表格中特定列的最後修改時間非常有用。
要使用此觸發程序,請使用此函數建立一個 BEFORE UPDATE
觸發程序。指定一個觸發程序引數:要修改的欄位名稱。該欄位必須為 timestamp
或 timestamp with time zone
類型。
在 moddatetime.example
中有一個範例。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。