【发布时间】:2019-11-17 02:54:01
【问题描述】:
我有一个数据库,我一次插入大量行(约 100,000 行)。从 PostgreSQL 文档来看,“COPY”命令的用例似乎主要用于移动数据库、将数据库备份到 CSV 等。我的用例似乎与列出的用例不在同一领域以前,但我相信它会提高插入性能。
现在,我正在尝试使用一个小的 CSV 文件测试 Psycopg2 Python 库的函数“copy_from”命令。主键是一个序列整数,我之前一直使用 nextval('seq_key') 函数来查找它的值。现在我已经切换到“copy_from”命令,我创建了一个保存值的 CSV 文件:
nextval('seq_key'),4,1573946481,'Test1', now(),now()
nextval('seq_key'),4,1573946481,'Test2', now(),now()
nextval('seq_key'),4,1573946481,'Test3', now(),now()
我正在使用以下代码调用“copy_from”命令:
cur = conn.cursor()
cur.copy_from(test_file, "test_master", sep=",", null="NULL")
conn.commit()
我收到错误:
"invalid input syntax for integer: "nextval('seq_key')"
当我删除nextval('seq_key') 时,程序结束工作并将行插入到表中。我想知道是否需要做一些特别的事情才能让“nextval()”函数正常工作。此外,如果有人能解释为什么“nextval()”函数不起作用,但“now()”函数也能做到,那也很好。我还可以获取当前序列值并将该值插入并递增到 CSV,然后使用“setval()”函数更新序列,但我想我会尝试了解有关 Psycopg2 库的更多信息。
【问题讨论】:
标签: python postgresql relational-database