我正在开发一个PostgreSQL 9.5.3 db,我自己也没有设置。我遇到的问题是表单的简单更新:UPDATE <table> SET <col> = <val> WHERE <col> = <old_val>;
不适用更改。我提到pgAdmin输出是:
更新1
查询在.. msec
中成功返回
可能是什么原因?可以通过一些设定约束来解释吗?
由于
答案 0 :(得分:0)
对于真正的更新发生可能有很多次调整,但行值没有改变:RULES,触发器,来自search_path的错误架构,如果你认真思考,可能还有更多。您可以使用RULES和触发器更新其他表,其他行并设置以前的值而不是new。因此,需要表的完整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
然而数据没有改变。
此外,在您提交更改后,可以通过另一个事务简单地更新该值,从而您选择值,在您之后更新...
答案 1 :(得分:0)
更新特权也需要选择。也许这是一个问题,或者将成为其他人的问题。
实际上,任何非平凡的UPDATE命令也都将具有SELECT特权,因为它必须引用表列以确定要更新的行和/或计算列的新值
有关更多信息,请检查文档:https://www.postgresql.org/docs/current/static/sql-grant.html