Следуя инструкциям в www.postgresql.org
Я создал это утверждение:
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)"
Я также пытаюсь использовать опцию VERBOSE с EXPLAIN, но не могу понять, почему мое событие не сработало.