【问题标题】:prisma import fails to import relation tables with error: Failure inserting into relationtableprisma import 无法导入关系表并出现错误:插入关系表失败
【发布时间】:2020-10-23 20:56:51
【问题描述】:

当尝试使用 prisma CLI 的 prisma import --data export.<DATE>.zip 将数据导入到 postgres 数据库时,它会失败并显示 postgresql 数据库中所有关系的错误:

我必须先运行prisma deploy 以确保架构已更新,但当它导入数据时,它会尝试两次导入关系,这违反了某种重复约束。

 "Failure inserting into relationtable _ExampleForOtherExample with ids StringIdGCValue(ckamscvpi0eo00702ep0c7log) and StringIdGCValue(cka2n025p03ri0766hnoyxf8s). Cause: insert or update on table \"_ExampleForOtherExample\" violates foreign key econstraint \"_ExampleForOtherExample_A_fkey\"\n  Detail: Key (A)=(cjvba054700dz07236tafuscj) is not present in table \"Example\".",
"Failure inserting into relationtable _ThingToOtherThing with ids StringIdGCValue(ckbgyi96h0kl1079500z24pwu) and StringIdGCValue(ckbkvgde606s50855g62uhqsb). Cause: duplicate key value violates unique constraint \"_ThingToOtherThing_AB_unique\"\n  Detail: Key (\"A\", \"B\")=(ck3kbmjgl036x0788furaqxkg, ck6uvgy7o09p40723rw34tna1) already exists.",

我不确定为什么它会导入除关系之外的所有内容。

(棱镜版本 1.30.5)

【问题讨论】:

  • 作为一种解决方法,我能够使用 pg_dump 和 pg_restore 代替 prisma 导出和 prisma 导入。但 prisma 导入每次都失败。

标签: postgresql import database-migration prisma prisma-graphql


【解决方案1】:

您的表之间存在外键依赖关系,并且您导入的数据不满足约束。

要么以不违反约束的顺序导入数据,要么在数据库中删除约束并在导入后重新创建它们。

你可以转储所有的约束

pg_dump --section=post-data databasename

【讨论】:

  • 我假设转储正在保存副本。你会如何放弃约束?那么导入后如何再次创建呢?
  • 您通过运行一堆ALTER TABLE DROP CONSTRAINT ... 来删除它们,然后通过恢复我建议您制作的转储再次创建它们。
  • 当我尝试ALTER TABLE "MyTable" DROP CONSTRAINT "MyConstraint_AB_unique"; 时,它说该表上不存在约束。但是,当我运行/d+ "MyTable"; 时,它会逐字将该约束列为该表的约束之一。知道是什么原因造成的吗?
  • 可能是复制粘贴错误、缺少架构限定条件,或者您连接到错误的数据库。
【解决方案2】:

tldr;

prisma1 导出会在其导出数据中创建原始数据中不存在的重复关系表行数据。可以通过删除这些重复项来解决该错误。

更多详情

我发现当我使用prisma1 export 命令时,它会在其导出的 json 文件中创建重复的关系表行。我的源数据库没有这些重复项,但它们被引入到导出的文件中。

我创建了一个简单的节点脚本来解析所有 JSON 文件并打印出所有重复的关系行列 A ID。

使用这些数据,我小心地删除了在我的数据中创建的所有重复的 prisma1 export 命令。一旦我这样做了,这个错误就消失了,我可以毫无问题地使用prisma1 import

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2010-09-26
    • 2021-04-15
    • 1970-01-01
    • 2011-12-23
    相关资源
    最近更新 更多