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