簡體   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