[英]PostgreSQL update doesn't work
我正在开发我自己尚未设置的 PostgreSQL 9.5.3 db。 我遇到的问题是表单的简单更新: UPDATE <table> SET <col> = <val> WHERE <col> = <old_val>;
不应用更改。 我提到 pgAdmin 输出是:
更新 1
查询在 .. 毫秒内成功返回
可能是什么原因? 可以用一些设定的约束来解释吗?
谢谢
真正的更新发生可能有很多原因,但行值没有改变:规则、触发器、来自 search_path 的错误模式,如果你坐下来认真思考,可能还有更多。 您可以使用规则和触发器更新其他表、其他行并设置以前的值而不是新值。 因此,需要表及其“依赖项”的完整 DDL。 这可能是最简单的触发器示例:
f=# create table ut(i int);
CREATE TABLE
f=# insert into ut select 1;
INSERT 0 1
f=# create or replace function tf() returns trigger as
$$
begin
if true then NEW.i=OLD.i; end if;
return NEW;
end;
$$ language plpgsql;
CREATE FUNCTION
f=# create trigger tn before update on ut for each row execute procedure tf();
CREATE TRIGGER
f=# update ut set i = 2;
UPDATE 1
f=# select * from ut;
i
---
1
(1 row)
所以你看
f=# update ut set i = 2; UPDATE 1
但数据没有改变。
同样在您提交更改后,该值可以简单地由另一个事务更新,因此您选择值,在您之后更新...
更新权限也需要选择。 也许这就是问题,或者将成为其他人的问题。
实际上,任何重要的 UPDATE 命令也需要 SELECT 权限,因为它必须引用表列来确定要更新哪些行,和/或计算列的新值
有关更多信息,请查看文档: https : //www.postgresql.org/docs/current/static/sql-grant.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.