#postgresql #postgresql-11
Вопрос:
Я получаю сообщение об ошибке:
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.
На UPSERT
Причина этой ошибки заключается в том, что исходная таблица (считываемая из API) не всегда содержит такое же количество полей, как и таблица, которую я хочу вставить. В рамках процесса 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;
Комментарии:
1. Что такое
many_fields
,many_cols
и особенноsome_col_name
? Пожалуйста, отправьте конкретный запрос и точное сообщение об ошибке, которое вы получите по нему, а также определения таблицusert_test
иdaily_scraper
.
Ответ №1:
Назовите каждый столбец конкретно в каждом экземпляре.
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;
Сколько бы столбцов у вас ни было, правильно назовите каждый из них. (ИМХО) Как и всегда следует поступать.