You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中使用WITH子句执行INSERT时报错:syntax error at or near "INSERT"

解决PostgreSQL 9.1中WITH子句后接INSERT的语法错误

这个报错的核心原因是PostgreSQL 9.1的语法规则限制:当WITH作为顶级语句的开头时,后续必须跟SELECT查询,不能直接衔接INSERT这类DML语句。你的写法把WITH放在了INSERT前面,违反了这个规范。

正确的写法有两种:

写法1:将WITH子句关联到INSERT的SELECT部分

把WITH放到INSERT的SELECT查询前,这是最贴合你需求的写法:

INSERT INTO cleaned
WITH sq AS (SELECT * FROM input_client)
SELECT * FROM weekly CROSS JOIN sq;

这里WITH属于后面的SELECT子查询的一部分,完全符合9.1的语法要求,CTE sq 可以正常被SELECT引用作为数据源。

写法2:将INSERT放入WITH子句(适合需要返回插入结果的场景)

如果需要获取插入的记录,可以把INSERT作为WITH的一个子语句,最后用SELECT返回结果:

WITH sq AS (SELECT * FROM input_client),
     inserted_records AS (
         INSERT INTO cleaned SELECT * FROM weekly CROSS JOIN sq
         RETURNING *
     )
SELECT * FROM inserted_records;

额外提醒

确保cleaned表的列数量、顺序和数据类型,与weekly CROSS JOIN sq返回的结果集完全匹配,否则语法正确后可能会触发数据类型不匹配或列数不一致的错误。

内容的提问来源于stack exchange,提问作者datahog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:50:29