PostgreSQL执行UPDATE更新表返回成功但数据未更新问题求助
问题解决方案
核心问题出在PostgreSQL对带双引号标识符的严格匹配规则,以及客户端字段展示、事务提交两个常见误区,按以下步骤排查即可解决:
- 第一步:确认table1的字段实际名称
执行以下查询查看表的所有字段的准确命名,验证是否存在末尾带空格的Price字段:
SELECT column_name FROM information_schema.columns WHERE table_name = 'table1';
如果查询结果里同时存在Price(不带空格)和Price (带空格)两个字段,说明你更新的是后者,之前查看SELECT *时因为部分客户端会自动裁剪字段名末尾的空格,会误以为两个字段都叫Price,实际上你看到的未变化的值是不带空格的Price字段的值。
- 第二步:单独查询带空格的字段验证更新结果
如果确认存在Price字段,执行以下语句直接查询该字段,就能看到更新后的值:
SELECT "Price " FROM table1;
如果你实际需要同步的是不带空格的Price字段,把UPDATE语句里的"Price "改成"Price"重新执行即可。
- 第三步:检查事务提交状态
如果第二步查询也没有看到更新后的值,大概率是事务未提交导致的:
pgAdmin4默认如果开启了手动事务模式,执行UPDATE后不会自动提交改动,你需要手动执行COMMIT;命令提交事务,改动才会持久化并对所有会话可见。psql默认是自动提交模式,如果你在psql里也看不到结果,检查你是否手动执行过BEGIN;开启了事务未提交。
内容的提问来源于stack exchange,提问作者daniel stafford
相关产品推荐
相关产品推荐

