CREATE RULE

中文man手册

CREATE RULE

NAME
SYNOPSIS
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