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

使用CTE生成统一UUID插入多语言变体数据失败的技术咨询

问题分析与解决

你的SQL写法报错是因为SELECT子句里的(uuid, 'page', 'en-us')是行构造器语法,它会生成单个复合列(而非三个独立列),但INSERT需要对应表的三个列,导致列数/类型不匹配。

下面是两种可行的修正方案,都能实现用同一个UUID插入多语言变体,并且返回插入结果:

方案1:使用UNION ALL拼接行

WITH data AS (
    SELECT uuid_generate_v4() AS uuid
)
INSERT INTO content (id, type, locale)
SELECT uuid, 'page', 'en-us' FROM data
UNION ALL
SELECT uuid, 'page', 'es-mx' FROM data
RETURNING *;

方案2:用CROSS JOIN关联UUID与语言变体(更易扩展)

如果后续要添加更多语言,直接在VALUES里追加行即可,无需重复写SELECT语句:

WITH data AS (
    SELECT uuid_generate_v4() AS uuid
)
INSERT INTO content (id, type, locale)
SELECT d.uuid, v.type, v.locale
FROM data d
CROSS JOIN (
    VALUES 
        ('page', 'en-us'),
        ('page', 'es-mx')
        -- 可在此添加更多语言变体,比如 ('page', 'zh-cn')
) v(type, locale)
RETURNING *;
  • RETURNING *会返回所有成功插入的行,满足你需要获取插入结果的需求
  • 两种方案都依赖CTE生成的唯一UUID,确保所有插入行共享同一个id值,配合locale组成复合主键

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:32:41