AWS RDS PostgreSQL执行update报42703列不存在错误如何解决
问题根因
你遇到的42703报错、语法错误均由引号使用不符合PostgreSQL规则导致,核心错误是将表名、字段名用单引号包裹为字符串常量,而非作为数据库对象引用。
错误点说明
- 原错误查询中
'\"student.class\"'::jsonb将字段名转为了固定字符串"student.class",并非引用student表的class字段,数据库自然识别不到对应列 - 调整后的查询给表名
'\"student\"'、列名'\"class\"'外层额外加了单引号,导致表名、列名变为字符串常量,直接触发语法错误 - WHERE条件中
'\"student.student_id\"' = 1将student_id字段转为字符串常量,永远不可能匹配到数值1,即使语法修复也无法命中需要更新的行
正确写法
如果是将SQL放在JSON结构的query字段中,只需对SQL内部需要的双引号做转义即可,写法如下:
{ "query": "update \"student\" set \"class\" = jsonb_set(\"class\"::jsonb, '{isPresent}', 'false', true) WHERE \"student_id\" = 1" }
优化建议
- 你的表名、字段名均为小写普通命名,没有和SQL关键字重名,不需要加双引号包裹,可直接简化为:
{ "query": "update student set class = jsonb_set(class::jsonb, '{isPresent}', 'false', true) WHERE student_id = 1" }
- 若class字段本身就是jsonb类型,无需额外加
::jsonb强转,直接传入字段即可
内容的提问来源于stack exchange,提问作者cool
相关产品推荐
相关产品推荐

