为什么Postgres无法正确映射列

时间:2020-10-14 02:40:47

标签: sql postgresql django-models

我有这个查询来更新另一个表,但是出错了。

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_idstart_date的映射。

查询中是否存在语法错误?

1 个答案:

答案 0 :(得分:2)

您当前的错误是为什么您应该始终在插入中显式列出目标表的列名的绝佳原因。您应该使用这样的东西:

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使用默认的列顺序,而没有指定所需的列顺序。