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

如何用INSERT INTO的RETURNING结果创建TEMP临时表?(含ON CONFLICT场景)

解决PostgreSQL中用INSERT...RETURNING结果创建临时表的问题

你的写法直接用CREATE TEMP TABLE AS跟INSERT语句是行不通的,PostgreSQL不支持这种语法——CREATE TABLE AS只能搭配SELECT类语句,没法直接承接INSERT的返回结果。

针对你带ON CONFLICT DO NOTHING的场景,可行的方案是分两步走:

  1. 先创建匹配结构的临时表
    你可以直接复制目标表的结构(不含数据),不用手动写列定义,更灵活:

    CREATE TEMP TABLE my_tmp_table AS
    SELECT * FROM my_insert_table LIMIT 0;
    

    如果只需要RETURNING里的特定列,也可以手动指定临时表的列结构,比如:

    CREATE TEMP TABLE my_tmp_table (
        my_col TEXT -- 需和my_insert_table的my_col类型保持一致
    );
    
  2. 执行插入并将返回结果写入临时表
    把INSERT...RETURNING的结果作为数据源插入到临时表中,这样只有实际成功插入的行(避开冲突的行)会被存入临时表:

    INSERT INTO my_tmp_table
    SELECT * FROM (
        INSERT INTO my_insert_table (my_col)
        SELECT my_col2 FROM my_other_table
        ON CONFLICT DO NOTHING
        RETURNING *
    ) AS inserted_rows;
    

完成后,临时表my_tmp_table就可以在后续多条语句中重复使用,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:56:12