首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在postgresql中的update语句之后未触发规则

在postgresql中的update语句之后未触发规则
EN

Stack Overflow用户
提问于 2011-03-30 22:36:48
回答 2查看 375关注 0票数 2

遵循www.postgresql.org中的指南

我创建了以下语句:

代码语言:javascript
复制
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查询控制台中执行查询时:

代码语言:javascript
复制
UPDATE shoelace_data SET sl_avail = 6 WHERE sl_name = 'sl7';

只执行update查询,而不触发规则。我尝试使用命令EXPLAIN来理解其中的原因。

代码语言:javascript
复制
EXPLAIN UPDATE shoelace_log SET sl_avail = 6 WHERE sl_name = 'sl7';

日志上写着:

代码语言:javascript
复制
"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使用详细选项,但我不能理解为什么我的事件没有被触发。

EN

回答 2

Stack Overflow用户

发布于 2011-03-30 23:18:26

您可能还想考虑使用为您做这件事的预构建插件:

http://pgfoundry.org/projects/tablelog/

票数 1
EN

Stack Overflow用户

发布于 2011-04-01 08:46:12

我试过这个例子,它起作用了。但我必须先创建shoelace_data表。该表不在示例中。

代码语言:javascript
复制
create table shoelace_data (
    sl_name text,
    sl_avail integer
);
insert into shoelace_data values ('Catcall', 3);
update shoelace_data set sl_avail = 5;

现在,如果您从日志表中选择。。。

代码语言:javascript
复制
select * from shoelace_log;
"Catcall";5;"postgres";"2011-03-31 20:40:10.906"

请仔细注意,规则要求在shoelace_data.中的shoelace_log列有更新时插入到sl_avail

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5487796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档