更新語句後沒有被解僱繼www.postgresql.org規則PostgreSQL中
引導我創造了這個說法:
CREATE TABLE shoelace_log (
sl_name text, -- shoelace changed
sl_avail integer, -- new available value
log_who text, -- who did it
log_when timestamp -- when);
CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data
WHERE NEW.sl_avail <> OLD.sl_avail
DO INSERT INTO shoelace_log VALUES (
NEW.sl_name,
NEW.sl_avail,
current_user,
current_timestamp
);
當我嘗試執行在pgAdmin3查詢臺查詢:
UPDATE shoelace_data SET sl_avail = 6 WHERE sl_name = 'sl7';
只執行更新查詢,並且規則未被觸發。我嘗試使用EXPLAIN命令來理解原因。
EXPLAIN UPDATE shoelace_log SET sl_avail = 6 WHERE sl_name = 'sl7';
日誌說:
"Seq Scan on shoelace_log (cost=0.00..19.66 rows=4 width=32)"
" Filter: (sl_name = 'sl7'::text)"
"Seq Scan on shoelace_log (cost=0.00..19.62 rows=4 width=78)"
" Filter: (sl_name = 'sl7'::text)"
我也嘗試使用EXPLAIN與VERBOSE選項,但我不明白爲什麼不觸發我的事件。
我試着運行你在pg9上鍊接的樣本,並且有同樣的問題。 – Kuberchaun 2011-03-30 15:25:53
你說你的pgAdmin3查詢是UPDATE * shoelace_data *,但是你解釋了更新* shoelace_log *(日誌表)......你確定你正在鍵入你認爲你正在輸入的查詢嗎? – pilcrow 2011-03-30 19:07:31