PostgreSQL spi

2021-09-16 17:22 更新
F.36.1. refint — 用于實(shí)現(xiàn)參照完整性的函數(shù)
F.36.2. autoinc — 用于自增域的函數(shù)
F.36.3. insert_username — 用于跟蹤誰修改了一個(gè)表的函數(shù)
F.36.4. moddatetime — 用于跟蹤上一次修改時(shí)間的函數(shù)

spi模塊提供了多個(gè)可工作的使用服務(wù)器編程接口 (SPI) 和觸發(fā)器的例子。盡管這些例子的價(jià)值只對(duì)它們自己合適,它們甚至更有助于作為例子來修改達(dá)到你自己的目的。這些函數(shù)足夠普通,可以與任何表一起使用,但是在創(chuàng)建一個(gè)觸發(fā)器時(shí)你必須指定表名和域名(如下所述) 。

下面描述的函數(shù)組中的每一個(gè)都作為一個(gè)獨(dú)立可安裝的擴(kuò)展被提供。

F.36.1. refint — 用于實(shí)現(xiàn)參照完整性的函數(shù)

check_primary_key()check_foreign_key()被用來檢查外鍵約束(當(dāng)然,這個(gè)功能很早以前被內(nèi)建的外建機(jī)制取代了,但是該模塊還是可以用作一個(gè)例子)。

check_primary_key()檢查引用表。用法是使用這個(gè)函數(shù)在一個(gè)引用其他表的表上創(chuàng)建一個(gè)BEFORE INSERT OR UPDATE觸發(fā)器。指定該觸發(fā)器的參數(shù)為:引用表中構(gòu)成外鍵的列名、被引用表名稱以及在被引用表中構(gòu)成主鍵/唯一鍵的列名。要處理多個(gè)外鍵,請(qǐng)為每一個(gè)引用創(chuàng)建一個(gè)觸發(fā)器。

check_foreign_key()檢查被引用表。用法是使用這個(gè)函數(shù)在一個(gè)被其他表引用的表上創(chuàng)建一個(gè)BEFORE DELETE OR UPDATE觸發(fā)器。指定該觸發(fā)器的參數(shù)為:該函數(shù)必須對(duì)其執(zhí)行檢查的引用表數(shù)量、找到一個(gè)引用鍵后的動(dòng)作(cascade — 刪除引用行,restrict — 如果引用鍵存在則中斷事務(wù),setnull — 設(shè)置引用鍵域?yàn)榭眨⒂|發(fā)器所在表中構(gòu)成主鍵/唯一鍵的列名、引用表名稱和列名稱(第一個(gè)參數(shù)指定多少個(gè)引用表就重復(fù)多少次)。注意主鍵/唯一鍵列應(yīng)該被標(biāo)記為 NOT NULL 并且應(yīng)該有一個(gè)唯一索引。

refint.example中有一些例子。

F.36.2. autoinc — 用于自增域的函數(shù)

autoinc()是一個(gè)將序列的下一個(gè)值存儲(chǔ)到一個(gè)整數(shù)域的觸發(fā)器。這和內(nèi)建的序數(shù)列特性有些重疊,但是它并不完全一樣:autoinc()在插入時(shí)會(huì)覆蓋掉給出的不同域值,并且它可被選擇用來在更新時(shí)增加域。

用法是使用這個(gè)函數(shù)創(chuàng)建一個(gè)BEFORE INSERT(或者BEFORE INSERT OR UPDATE)觸發(fā)器。指定兩個(gè)觸發(fā)器參數(shù):要被修改的整數(shù)列名和將提供值的序列對(duì)象名(事實(shí)上,如果你想要更新多于一個(gè)自增列,你可以指定任意數(shù)量的這種名稱對(duì))。

autoinc.example中有一個(gè)例子。

F.36.3. insert_username — 用于跟蹤誰修改了一個(gè)表的函數(shù)

insert_username()是存儲(chǔ)當(dāng)前用戶名到一個(gè)文本域的觸發(fā)器。這有助于跟蹤是誰最后在一個(gè)表中修改了一個(gè)特定行。

用法是使用這個(gè)函數(shù)創(chuàng)建一個(gè)BEFORE INSERT以及/或者UPDATE觸發(fā)器。指定一個(gè)觸發(fā)器參數(shù):要被修改的文本列名。

insert_username.example中有一個(gè)例子。

F.36.4. moddatetime — 用于跟蹤上一次修改時(shí)間的函數(shù)

moddatetime()是一個(gè)存儲(chǔ)當(dāng)前時(shí)間到一個(gè)timestamp域的觸發(fā)器。它有助于跟蹤一個(gè)表中特定行最后一次的修改時(shí)間。

用法是使用這個(gè)函數(shù)創(chuàng)建一個(gè)BEFORE UPDATE觸發(fā)器。指定一個(gè)觸發(fā)器參數(shù):要被修改的列名。該列必須是類型timestamp或者timestamp with time zone。

moddatetime.example中有一個(gè)例子。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)