gpt4 book ai didi

javascript - Prisma 迁移跳过插入

转载 作者:行者123 更新时间:2023-12-05 08:10:37 26 4
gpt4 key购买 nike

我将 Prisma 用作我的 NodeJS 项目的 ORM。到目前为止,我有一个初始迁移,它创建了基本的数据库模式。现在我想添加一个新功能,因此我需要扩展和修改我的架构。

我的目标是添加一个新表,并在现有表中添加一个字段,该字段是引用此新表的外键。我逻辑上会用 MySQL 做的是创建表,插入需要引用的行:

CREATE TABLE `new_table` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`description` VARCHAR(255) NOT NULL
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

INSERT INTO `new_table`
(`id`, `title`, `description`, `created_at`, `updated_at`)
VALUES
(1, 'Foo', 'Bar', '2022-07-21 12:35:44.514', '2022-07-21 12:35:44.513');

然后将列和约束添加到另一个表:

ALTER TABLE `old_table` ADD COLUMN `new_table_id` INTEGER NOT NULL DEFAULT 1;

ALTER TABLE `old_table` ADD CONSTRAINT `old_table_new_table_fkey` FOREIGN KEY (`new_table_id`) REFERENCES `old_table`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

问题是,当我运行 npx prisma db push 时,出现此错误:

Error: Cannot add or update a child row: a foreign key constraint fails (`testdb`.`#sql-1_c`, CONSTRAINT `old_table_new_table_fkey` FOREIGN KEY (`new_table_id`) REFERENCES `old_table` (`id`) ON UPDATE CASCADE)

当我在此命令失败后检查数据库时,我可以看到数据库中有 new_table,但它是空的,这导致了错误。同时,old_table 上的行也正确添加了新的 new_table_id 列,值为 1。

为什么 npx prisma db push 执行所有其他命令,而不是 INSERT?我怎样才能更改迁移,以便我可以实现我需要的东西(对我来说这似乎是非常简单和标准的 SQL 票价)?

我知道 npx prisma db seed,事实上我有一个种子文件,但该命令应该在迁移运行之后执行,所以虽然我为该行的 new_table 添加了一个条目,这对我没有帮助。

最佳答案

  1. 您应该需要在数据库中创建表。永远不要触摸您的 schema.prisma 文件和 prisma migrate

  2. 在您的数据库中创建或修改表之后

    npx prisma db pull
npx prisma generate
  1. 您的数据库正在迁移您的 schema.prisma在你可以使用 prisma 之后

关于javascript - Prisma 迁移跳过插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73083457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com