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
)トリガを作成することです。
2つのトリガ引数、変更する整数型列の名前と値を生み出すシーケンスオブジェクトの名前を指定します。
(実際、自動増分列を複数更新したい場合、これらの名前の組み合わせを任意の数指定することができます。)
autoinc.example
に例があります。
insert_username()
は現在のユーザ名をテキスト型のフィールドに格納するトリガです。
これはテーブル内のある行を最後に変更したユーザを追跡する際に有用です。
使用方法は、この関数を使用するBEFORE INSERT
、UPDATE
またはその両方のトリガを作成することです。
1つのトリガ引数、変更するテキスト型の列の名前を指定してください。
insert_username.example
に例があります。
moddatetime()
は現在時刻をtimestamp
型のフィールドに格納するトリガです。
これは、テーブル内のある行の最終更新時刻を追跡する際に有用です。
使用方法は、この関数を使用するBEFORE UPDATE
トリガを作成することです。
1つのトリガ引数、変更する列名を指定してください。
この列はtimestamp
型またはtimestamp with time zone
型でなければなりません。
moddatetime.example
に例があります。