繁体   English   中英

PostgreSQL 更新不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM