【发布时间】:2021-10-11 17:08:47
【问题描述】:
我正在使用 Python,使用 Pandas 从 TSV 中提取数据,将其转换为数据帧,然后使用 df.to_sql 将该数据帧同步到 postgres 中的临时表。这个过程效果很好。
但是,一旦该表存在,我想将该表中的所有行移动到永久表中。这两个表将始终相同。永久表有一个唯一索引,所以如果 id 已经存在,它应该更新行。
这是我尝试将所有行从一个表插入到另一个表:
WITH moved_rows AS (
DELETE FROM my_table_tmp a
RETURNING a.*
)
INSERT INTO my_table
SELECT * FROM moved_rows
ON CONFLICT ("unique_id") DO
UPDATE SET
Field_A = excluded.Field_A,
Field_B = excluded.Field_B,
Field_C = excluded.Field_C
不幸的是,当我运行它时,我得到了这个错误:
psycopg2.errors.UndefinedColumn: column excluded.field_a does not exist
LINE 10: Field_A = excluded.Field_A,
^
HINT: Perhaps you meant to reference the column "excluded.Field_A".
但事实上,那一栏确实存在。我在这里想念什么?我尝试从集合中删除 Field_A,然后我得到与 Field_B 相同的错误。
【问题讨论】:
-
错误信息与显示的查询不匹配。请显示您实际执行的语句。声明你的 Postgres 版本。并显示确切的表定义:
CREATE TABLE my_table ... -
啊,对不起,我现在已经编辑过了。我掩盖了名字只是为了让它更简单,但错过了这两个裁判。感谢您指出@ErwinBrandstetter
标签: python sql pandas postgresql