支援的版本: 目前 (17) / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

F.39. spi — 伺服器程式介面功能/範例 #

spi模組提供了幾個可行的使用伺服器程式介面SPI)和觸發程序的範例。雖然這些函式本身具有一定的價值,但作為修改用於您自己目的的範例,它們更有用。這些函式足夠通用,可以用於任何表格,但您必須在建立觸發程序時指定表格和欄位名稱(如下所述)。

下面描述的每組函式都作為一個單獨可安裝的擴充功能提供。

F.39.1. refint — 用於實作參考完整性的函式 #

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中有範例。

F.39.2. autoinc — 用於自動遞增欄位的函式 #

autoinc()是一個觸發程序,將序列的下一個值儲存到整數欄位中。這與內建的序列欄功能有一些重疊,但它們並不相同:autoinc()將覆蓋在插入期間替換不同欄位值的嘗試,並且選擇性地,它也可以用於在更新期間遞增欄位。

若要使用,請在使用此函式建立一個BEFORE INSERT(或選擇性地BEFORE INSERT OR UPDATE)觸發程序。指定兩個觸發程序引數:要修改的整數欄的名稱,以及將提供值的序列物件的名稱。(實際上,如果您想更新多個自動遞增欄,您可以指定任意數量的此類名稱對。)

autoinc.example中有一個範例。

F.39.3. insert_username — 用於追蹤誰變更表格的函式 #

insert_username()是一個觸發程序,將當前使用者的名稱儲存到文字欄位中。這對於追蹤誰上次修改表格中的特定列很有用。

若要使用,請在使用此函式建立一個BEFORE INSERT和/或UPDATE觸發程序。指定一個觸發程序引數:要修改的文字欄的名稱。

insert_username.example中有一個範例。

F.39.4. moddatetime — 用於追蹤上次修改時間的函式 #

moddatetime() 是一個觸發程序,會將目前時間儲存到 timestamp 欄位中。這對於追蹤表格中特定列的最後修改時間非常有用。

要使用此觸發程序,請使用此函數建立一個 BEFORE UPDATE 觸發程序。指定一個觸發程序引數:要修改的欄位名稱。該欄位必須為 timestamptimestamp with time zone 類型。

moddatetime.example 中有一個範例。

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。