遵循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';只执行update查询,而不触发规则。我尝试使用命令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使用详细选项,但我不能理解为什么我的事件没有被触发。
发布于 2011-03-30 23:18:26
您可能还想考虑使用为您做这件事的预构建插件:
http://pgfoundry.org/projects/tablelog/
发布于 2011-04-01 08:46:12
我试过这个例子,它起作用了。但我必须先创建shoelace_data表。该表不在示例中。
create table shoelace_data (
sl_name text,
sl_avail integer
);
insert into shoelace_data values ('Catcall', 3);
update shoelace_data set sl_avail = 5;现在,如果您从日志表中选择。。。
select * from shoelace_log;
"Catcall";5;"postgres";"2011-03-31 20:40:10.906"请仔细注意,规则要求在shoelace_data.中的shoelace_log列有更新时插入到sl_avail中
https://stackoverflow.com/questions/5487796
复制相似问题