当前位置: 首页 > 知识库问答 >
问题:

在jest并行中运行创建扩展的sql迁移会触发约束错误

南门欣怡
2023-03-14

我使用Prisma 2作为我的ORM。用于迁移和查询。

我有一个createTestContext助手,它通过以下方式初始化Prisma:

  1. 创建新模式
  2. 通过运行来部署迁移。/node_modules/. bin/prisma的迁移部署--preview功能(简而言之,它运行我的项目目录中的所有迁移)。

在每个测试中,我创建一个新的TestContext,以确保不会有任何副作用。但问题是,由于我的所有测试都是并行运行的,因此在这次迁移中,所有测试都同时在数据库上运行:

sql prettyprint-override">CREATE EXTENSION IF NOT EXISTS postgis

这会触发以下错误:

Unique constraint failed on the fields: (`extname`)

共有1个答案

金晗日
2023-03-14

不确定如何正确修复此问题,但当前的解决方法是捕获unique_violation异常并对其执行任何操作:

DO
$$
BEGIN
CREATE EXTENSION IF NOT EXISTS postgis;
EXCEPTION
WHEN unique_violation
    THEN NULL;
END;
$$
 类似资料:
  • 问题内容: 我正在研究触发器和约束。 我有一个使用触发器的问题(说实话,我不确定如何使用触发器。) 假设我们有一个教师表。 这个教师表包含Teacher_id,ssn,first_name,last_name,class_time 例如, 和 假设学生人数上限为25(学生人数上限由老师定义,因此可以是10、22、25 …等任意数字) 一个学生想添加鲍勃的班级。但是,我想触发拒绝添加学生的触发器。(

  • 问题内容: 我正在尝试使用任何语法,但无法考虑如何正确编写此代码: 也尝试过 和双引号等。运行迁移时,总是得到以下信息: 语法错误或访问冲突:1064您的SQL语法有错误。检查 与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在第1行的“用户”修改“年龄” DATETIME附近使用 是的,我已经检查过,MariaDB使用MySQL的语法(至少在这种情况下)。 问题答案: 使用反引号而

  • 我们有许多项目在许多服务器上运行,查找一个数据库,我们正在考虑为每个项目设置Flyway以控制我们的数据库结构。 但是,如果某些项目同时重新部署,我们担心并发迁移问题。(顺便说一句,我们总是在sql语法中照顾“如果存在”的事情) Flyway如何在同一数据表或其他结构发生并发更改时工作?

  • 问题内容: 当我想使用SQL Server 2008 R2的预定义“创建触发器”创建触发器时,我迷路了。您能否给我一个直接的SQL语句,我可以用它创建触发器,并告诉我如何定义AFTER,BEFORE等所有内容? 另外,我如何知道行UPDATED / INSERTED / DELETED,并使用其列值在触发器内进行操作? 问题答案: 数据库是面向集合的,触发器也不例外。当执行给定的操作时,触发器将触

  • 问题内容: 所以对于这个项目,我试图在运行时扩展一个类。我想知道,这有可能吗?如果是这样,我该怎么办?是否有用于这些目的的库? 问题答案: CGLib是您要查找的库。它在扩展类或在运行时实现接口方面非常强大,因此许多流行的框架(如Spring或Hibernate)都使用它。 您可以使用以下代码创建类扩展 尽管您可能会使用具有所需逻辑的有用的方法拦截器替换回调。

  • 问题内容: 我知道我可以使用它来创建DDL创建触发器; 问题在于,该触发器将在“创建序列”之类的DDL上运行;如何仅对“创建表” DDL执行此操作? 问题答案: CREATE OR REPLACE TRIGGER create_table_trigger AFTER CREATE ON SCHEMA BEGIN IF SYS.DICTIONARY_OBJ_TYPE = ‘TABLE’ THEN .