CREATE RULE
Name
CREATE RULE — 定義一個新規則
CREATE RULE name AS ON event
TO object [ WHERE condition ]
DO [ INSTEAD ] action
這里 action 可以是:
NOTHING
|
query
|
( query ; query ... )
|
[ query ; query ... ]
輸入
-
name
-
創建的規則名.
-
event
-
事件是 SELECT, UPDATE,DELETE 或 INSERT 之一.
-
object
-
對象是 table 或 table.column. (目前只有 table 形式實際上是實現了的.
-
condition
-
任意 SQL 布爾條件表達式.條件表達式除了引用 new 和 old 之外不能引用任何表.
-
query
-
組成 action 的查詢可以是任何 SQL SELECT,INSERT, UPDATE,DELETE,或 NOTIFY 語句之一.
在 condition 和 action 里, 特殊表名字 new 和 old 可以用于指向引用表 ( object) 里的數值 new 在 ON INSERT 和 ON UPDATE 規則里 可以指向被插入或更新的新行. old 在 ON SELECT,ON UPDATE,和 ON DELETE 規則里可以指向現存的被選擇,更新,或者刪除的行.
描述
Postgres
規則系統 允許我們在從數據庫或表中更新, 插入或刪除東西時定義一個可選的動作來執行。目前,規則用于實現表視圖。
規則的語意是在一個單獨的記錄正被訪問,更新,插入或刪除時, 將存在一個舊記錄(用于檢索,更新和刪除)和一個新記錄 (用于更新和追加). 這時給定事件類型和給定目標對象(表)的所有規則都將被檢查, (順序不定). 如果在 WHERE (如果有)子句里面所聲明的 condition? 為真,那么 action 部分的規則就被執行. 如果聲明了 INSTEAD,那么 action 就會代替原來的查詢;否則它在執行原來的查詢之前處理. 在 condition 和 action 里面, 在舊記錄里字段的數值和/或新記錄里字段的數值被 old.attribute-name 和 new.attribute-name 代替.
規則的 action 部分可以由一條或者多條查詢組成.要寫多個查詢,用圓括弧或者方括弧 把它們包圍起來. 這樣的查詢將以聲明的順序執行(只是我們不能保證 對一個對象的多個規則的執行順序). action 還可以是 NOTHING 表示沒有動作.因此,一個 DO INSTEAD NOTHING 規則制止了 原來的查詢的運行(當條件為真時); DO NOTHING 規則是沒有用的.
規則的 action 部分 執行的時候帶有和觸發動作的用戶命令相同的命令和事務標識符.
注意
目前,ON SELECT 規則必須是無條件的 INSTEAD 規則并且 必須有一個由一條 SELECT 查詢組成的動作. 因此,一條 ON SELECT 規則有效地把對象表轉成視圖,它的可見內容 是規則的 SELECT 查詢返回的記錄而不是存儲在表中的內容(如果有的話). 我們認為寫一條 CREATE VIEW 命令比創建一個表然后定義一條 ON SELECT 規則在上面的風格要好.
為了在表上定義規則,你必須有規則定義權限. 用 GRANT 和 REVOKE 修改權限.
有一件很重要的事情是要避免循環規則. 比如,盡管下面兩條規則定義都是 Postgres 可以接受的, select 命令會導致 Postgres 報告 一條錯誤信息,因為該查詢循環了太多次:
Example 1. 循環重寫規則組合的例子:
CREATE RULE bad_rule_combination_1 AS
ON SELECT TO emp
DO INSTEAD
SELECT * FROM toyemp;
CREATE RULE bad_rule_combination_2 AS
ON SELECT TO toyemp
DO INSTEAD
SELECT * FROM emp;
下面這個對 EMP 的查詢企圖將導致 Postgres 產生一個錯誤信息, 因為該查詢循環了太多次:
SELECT * FROM emp;
兼容性
SQL92
CREATE RULE 語句是 Postgres 語言的擴展. 在SQL92里沒有CREATE RULE 語句.
|----------------------------------------------------------------------------------------|
版權聲明 版權所有 @zhyiwww
引用請注明來源 http://www.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2006-06-02 18:51
zhyiwww 閱讀(293)
評論(0) 編輯 收藏 所屬分類:
database