Почему postgres не отображает столбцы правильно

#sql #postgresql #django-models

#sql #postgresql #django-модели

Вопрос:

У меня есть этот запрос для обновления другой таблицы, но появляется ошибка.

 With CTE AS
(Select employer_id, employee_id, start_date, end_date, hourly_rate, end_date - start_date AS time_worked
 FROM payroll_timesheet)
INSERT INTO payroll_timelog 
SELECT * FROM CTE
WHERE employee_id = 1;
  

Я получаю эту ошибку:

 ERROR:  column "employee_id" is of type integer but expression is of type timestamp with time zone
LINE 5: SELECT employer_id, employee_id, start_date, end_date, hourl...
                                         ^
HINT:  You will need to rewrite or cast the expression.
  

Похоже, это сопоставление employee_id с start_date .

Или в запросе есть синтаксическая ошибка?

Ответ №1:

Ваша текущая ошибка является отличной причиной того, почему вы всегда должны явно указывать имена столбцов целевой таблицы во вставке. Вы должны были использовать что-то вроде этого:

 WITH cte AS (
    SELECT employer_id, employee_id, start_date, end_date, hourly_rate,
           end_date - start_date AS time_worked
    FROM payroll_timesheet
)

INSERT INTO payroll_timelog (employer_id, employee_id, start_date, end_date, hourly_rate,
                             time_worked)
SELECT employer_id, employee_id, start_date, end_date, hourly_rate, time_worked
FROM cte
WHERE employee_id = 1;
  

Возможно, вам придется изменить имена столбцов целевой payroll_timelog таблицы, чтобы они соответствовали. Ваша текущая ошибка возникает из-за того, что Postgres использует порядок столбцов по умолчанию, в отсутствие указания вами нужного порядка столбцов.