PostgreSQL更新不起作用

时间:2017-10-12 06:03:43

标签: sql postgresql sql-update

我正在开发一个PostgreSQL 9.5.3 db,我自己也没有设置。我遇到的问题是表单的简单更新:UPDATE <table> SET <col> = <val> WHERE <col> = <old_val>;不适用更改。我提到pgAdmin输出是:

  

更新1

     

查询在.. msec

中成功返回

可能是什么原因?可以通过一些设定约束来解释吗?

由于

2 个答案:

答案 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