CREATE RULE
目录
CREATE RULE
NAMESYNOPSIS
DESCRIPTION æè¿°
PARAMETERS åæ°
NOTES 注æ
COMPATIBILITY å¼å®¹æ§
è¯è
è·
NAME
CREATE RULE - å®ä¹ä¸ä¸ªæ°çéåè§å
SYNOPSIS
CREATE [ OR
REPLACE ] RULE name AS ON event
TO table [ WHERE condition ]
DO [ INSTEAD ] { NOTHING | command | ( command
; command ... ) }
DESCRIPTION æè¿°
CREATE RULE å®ä¹ä¸ä¸ªéç¨äºç¹å®è¡¨æèè§å¾çæ°è§åã CREATE OR REPLACE RULE è¦ä¹æ¯å建ä¸ä¸ªæ°è§åï¼ è¦ä¹æ¯ç¨ä¸ä¸ªå表ä¸çååè§åæ¿æ¢ç°æè§åã
PostgreSQLè§åç³»ç»å许æä»¬å¨ä»æ°æ®åºæè¡¨ä¸æ´æ°ï¼ æå¥æå é¤ä¸è¥¿æ¶å®ä¹ä¸ä¸ªå¶å®çå¨ä½æ¥æ§è¡ã ç®å说ï¼è§åå°±æ¯å½æä»¬å¨æå®çè¡¨ä¸æ§è¡æå®çå¨ä½çæ¶åï¼å¯¼è´ä¸äºé¢å¤çå¨ä½è¢«æ§è¡ã å¦å¤ï¼è§åå¯ä»¥ç¨å¦å¤ä¸ä¸ªå½ä»¤å代æä¸ªç¹å®çå½ä»¤ï¼æè令å½ä»¤å®å¨ä¸è¢«æ§è¡ã è§åè¿ç¨äºå®ç°è¡¨è§å¾ãæä»¬è¦æç½çæ¯è§åå®éä¸åªæ¯ä¸ä¸ªå½ä»¤è½¬æ¢æºå¶ï¼æè说å½ä»¤å®ã è¿ç§è½¬æ¢åçå¨å½ä»¤å¼å§æ§è¡ä¹åã妿ä½å®é䏿³è¦ä¸ä¸ªä¸ºæ¯ä¸ªç©çè¡ç¬ç«åççæä½ï¼ é£ä¹ä½ å¯è½è¿æ¯è¦ç¨ä¸ä¸ªè§¦åå¨ï¼è䏿¯è§åãæå³è§åçæ´å¤ä¿¡æ¯å¯ä»¥å¨ ‘‘The Rule System’’ æ¾å°ã
ç®åï¼ON SELECT è§åå¿é¡»æ¯æ æ¡ä»¶ç INSTEAD è§åå¹¶ä¸å¿é¡»æä¸ä¸ªç±ä¸æ¡ SELECT æ¥è¯¢ç»æçå¨ä½ã å æ¤ï¼ä¸æ¡ ON SELECT è§åææå°æå¯¹è±¡è¡¨è½¬æè§å¾ï¼ å®çå¯è§å容æ¯è§åç SELECT æ¥è¯¢è¿åçè®°å½è䏿¯åå¨å¨è¡¨ä¸çå容ï¼å¦ææçè¯ï¼ã æä»¬è®¤ä¸ºå䏿¡ CREATE VIEW å½ä»¤æ¯å建ä¸ä¸ªè¡¨ç¶åå®ä¹ä¸æ¡ ON SELECT è§åå¨ä¸é¢ç飿 ¼è¦å¥½ã
ä½ å¯ä»¥å建ä¸ä¸ªå¯ä»¥æ´æ°çè§å¾çå¹»è§ï¼ æ¹æ³æ¯å¨è§å¾ä¸å®ä¹ ON INSERTï¼ON UPDATEï¼å ON DELETE è§åï¼æèæ»¡è¶³ä½ éè¦çä»»ä½ä¸è¿°è§åçå- éï¼ï¼ç¨åéç对å¶å®è¡¨çæ´æ°æ¿æ¢å¨è§å¾ä¸æ´æ°çå¨ä½ã
å¦æä½ æ³å¨è§å¾æ´æ°ä¸ä½¿ç¨æ¡ä»¶è§åï¼é£ä¹è¿éå°±æä¸ä¸ªè¡¥åï¼ å¯¹ä½ å¸æå¨è§å¾ä¸åè®¸çæ¯ä¸ªå¨ä½ï¼ä½ é½å¿é¡»æä¸ä¸ªæ æ¡ä»¶ç INSTEAD è§åã 妿è§åæ¯ææ¡ä»¶çï¼æèå®ä¸æ¯ INSTEADï¼ é£ä¹ç³»ç»ä»å°æç»æ§è¡æ´æ°å¨ä½çä¼å¾ï¼å为å®è®¤ä¸ºå®æç»ä¼å¨æç§ç¨åº¦ä¸å¨èæè¡¨ä¸æ§è¡å¨ä½ã å¦æä½ æ³å¤çæ¡ä»¶è§åä¸çæç±æç¨çæåµï¼é£ä¹å¯ä»¥ï¼åªéè¦å¢å ä¸ä¸ªæ æ¡ä»¶ç DO INSTEAD NOTHING è§åç¡®ä¿ç³»ç»æç½å®å°å³ä¸ä¼è¢«è°ç¨æ¥æ´æ°èæè¡¨å°±å¯ä»¥äºã ç¶åææ¡ä»¶è§ååæé INSTEADï¼å¨è¿ç§æåµä¸ï¼å¦æå®ä»¬è¢«è§¦åï¼é£ä¹å®ä»¬å°±å¢å å°ç¼ºçç INSTEAD NOTHING å¨ä½ä¸ã
PARAMETERS åæ°
|
name |
å建çè§ååãå®å¿é¡»å¨åä¸ä¸ªè¡¨ä¸çææè§åçååä¸å¯ä¸ã åä¸ä¸ªè¡¨ä¸çåä¸ä¸ªäºä»¶ç±»åçè§åæ¯æç§åæ¯é¡ºåºè¿è¡çã
|
event |
äºä»¶æ¯ SELECTï¼ UPDATEï¼DELETE æ INSERT ä¹ä¸ã
|
table |
è§åæ½ç¨ç表æèè§å¾çååï¼å¯ä»¥ææ¨¡å¼ä¿®é¥°ï¼ã
condition
ä»»æ SQL æ¡ä»¶è¡¨è¾¾å¼ï¼è¿å booleanï¼ã æ¡ä»¶è¡¨è¾¾å¼é¤äºå¼ç¨ NEW å OLD ä¹å¤ä¸è½å¼ç¨ä»»ä½è¡¨ï¼å¹¶ä¸ä¸è½æèé彿°ã
command
ç»æè§åå¨ä½çå½ä»¤ãææçå½ä»¤æ¯ SELECTï¼INSERTï¼ UPDATEï¼DELETEï¼æ NOTIFY è¯å¥ä¹ä¸ã
å¨ condition å command éï¼ ç¹æ®è¡¨åå NEW å OLD å¯ä»¥ç¨äºæå被å¼ç¨è¡¨éçæ°å¼ new å¨ ON INSERT å ON UPDATE è§åéå¯ä»¥æå被æå¥ææ´æ°çæ°è¡ã OLD å¨ ON UPDATEï¼å ON DELETE è§åéå¯ä»¥æåç°åçè¢«æ´æ°ï¼æèå é¤çè¡ã
NOTES 注æ
为äºå¨è¡¨ä¸å®ä¹è§åï¼ä½ å¿é¡»æ RULE æéã
æä¸ä»¶å¾éè¦çäºææ¯è¦é¿å循ç¯è§åã æ¯å¦ï¼å°½ç®¡ä¸é¢ä¸¤æ¡è§åå®ä¹é½æ¯ PostgreSQL å¯ä»¥æ¥åçï¼ ä½ä¸æ¡ SELECT å½ä»¤ä¼å¯¼è´ PostgreSQL æ¥å䏿¡é误信æ¯ï¼å 为该æ¥è¯¢å¾ªç¯äºå¤ªå¤æ¬¡ï¼
CREATE RULE
"_RETURN" AS
ON SELECT TO t1
DO INSTEAD
|
SELECT * FROM t2; |
CREATE RULE
"_RETURN" AS
ON SELECT TO t2
DO INSTEAD
|
SELECT * FROM t1; |
SELECT * FROM t1;
ç®åï¼å¦æä¸ä¸ªè§ååå«ä¸ä¸ª NOTIFY æ¥è¯¢ï¼é£ä¹è¯¥ NOTIFY å°è¢«æ æ¡ä»¶æ§è¡ --- ä¹å°±æ¯è¯´ï¼å¦æè§å䏿½å å°ä»»ä½è¡ä¸å¤´ï¼ 该 NOTIFY ä¹ä¼è¢«ååºãæ¯å¦ï¼å¨
CREATE RULE notify_me AS ON UPDATE TO mytable DO NOTIFY mytable;
UPDATE mytable SET name = ’foo’ WHERE id = 42;
éï¼ä¸ä¸ª NOTIFY äºä»¶å°å¨ UPDATE çæ¶åååºï¼ä¸ç®¡æ¯å¦ææè¡ç id = 42ãè¿æ¯ä¸ä¸ªå®ç°çéå¶ï¼å°æ¥ççæ¬åºè¯¥ä¿®è¡¥è¿ä¸ªæ¯çã
COMPATIBILITY å¼å®¹æ§
CREATE RULE æ¯ PostgreSQL è¯è¨çæ©å±ï¼æ´ä¸ªè§åç³»ç»ä¹æ¯å¦æ¤ã
è¯è
Postgresql 䏿ç½ç« ä½ä¼å¹³ <laser@pgsqldb.org>
è·
æ¬é¡µé¢ä¸æçç±ä¸æ
man
æå页计åæä¾ã
䏿 man
æå页计åï¼https://github.com/man-pages-zh/manpages-zh