ВСТАВЛЯТЬ из таблицы с различными размерами таблицы

#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; 
 

Сколько бы столбцов у вас ни было, правильно назовите каждый из них. (ИМХО) Как и всегда следует поступать.