首页 > 解决方案 > 来自具有不同表大小的表的 UPSERT

问题描述

我收到错误:

ERROR: column "some_col_name" does not exist Hint: There is a column named "some_col_name" in table "usert_test", but it cannot be referenced from this part of the query.

OnUPSERT此错误的原因是源表(从 API 读取)并不总是具有与我要查找 UPSERT 的表相同的字段数。在 UPSERT 过程中有没有办法处理这个问题?到目前为止,我已经尝试过以下方法:

INSERT INTO scratch."usert_test" (many_cols)
SELECT *
FROM scratch.daily_scraper
ON CONFLICT (same_unique_id)
    DO UPDATE
SET 
 many_fields = excluded.many_fields;

标签: postgresqlpostgresql-11

解决方案


在每个实例中具体命名每一列。

    insert into scratch."usert_test" (column_name1, column_name2, column_name3,column_name3)
        select cola, colb, colc, colf
          from scratch.daily_scraper 
            on conflict (column_name1, column_name4)
            do update
               set 
                   column_name3  = excluded.column_name3
                 , column_name2  = excluded.column_name2; 

你有多少列正确命名每一列。(恕我直言)正如你应该做的那样。


推荐阅读