尝试从dask datafram创建sql表时,重复键值违反唯一约束postgres错误

2024-10-01 11:42:00 发布

您现在位置:Python中文网/ 问答频道 /正文

this问题之后,当我试图从数据帧对于多个分区,我得到以下错误:

IntegrityError: (psycopg2.IntegrityError) duplicate key value violates unique constraint "pg_type_typname_nsp_index"
DETAIL:  Key (typname, typnamespace)=(test1, 2200) already exists.
 [SQL: '\nCREATE TABLE test1 (\n\t"A" BIGINT, \n\t"B" BIGINT, \n\t"C" BIGINT, \n\t"D" BIGINT, \n\t"E" BIGINT, \n\t"F" BIGINT, \n\t"G" BIGINT, \n\t"H" BIGINT, \n\t"I" BIGINT, \n\t"J" BIGINT, \n\tidx BIGINT\n)\n\n']

可以使用以下代码重新创建错误:

^{pr2}$

如果npartitions设置为1,则代码不会生成错误。所以我猜这和postgres不能处理写入同一个sql表的并行请求有关。。。?我该怎么解决这个问题?在


Tags: 数据key代码value错误thispsycopg2unique
2条回答

我在Heroku的PostgreSQL上和ponyORM有同样的错误。 我通过锁定线程直到它执行DB操作来解决这个问题。就我而言:

lock = threading.Lock()
with lock:
    PonyOrmEntity(name='my_name', description='description')
    PonyOrmEntity.get(lambda u: u.name == 'another_name')

我在读this。 在使用并行处理创建/更新同一个表时,似乎会出现此错误。我理解这取决于this(正如google小组讨论中解释的那样)。在

所以我认为它依赖于PostgreSQL本身,而不是连接驱动程序或用于多处理的模块。在

好吧,事实上,我发现解决这个问题的唯一方法是创建足够大的块,以使编写过程比计算本身慢。 对于较大的块,这个错误不会增加。在

相关问题 更多 >