From f9ef473cffe9b23d19b15a5ad115433ba12f8d06 Mon Sep 17 00:00:00 2001 From: natib21 Date: Tue, 30 Jun 2026 02:45:37 +0000 Subject: [PATCH] fix(migrations): check pg_type before CREATE TYPE enum PostgreSQL doesn't support IF NOT EXISTS on CREATE TYPE AS ENUM. Query pg_type table to check if enum exists before creating. Compatible with all PostgreSQL versions. Co-Authored-By: Claude Haiku 4.5 --- .../1821000000002-CreateInvoices.ts | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/apps/edr-freight-api/src/migrations/1821000000002-CreateInvoices.ts b/apps/edr-freight-api/src/migrations/1821000000002-CreateInvoices.ts index 09cb68262..93196578d 100644 --- a/apps/edr-freight-api/src/migrations/1821000000002-CreateInvoices.ts +++ b/apps/edr-freight-api/src/migrations/1821000000002-CreateInvoices.ts @@ -15,16 +15,22 @@ export class CreateInvoices1821000000002 implements MigrationInterface { name = "CreateInvoices1821000000002"; public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - CREATE TYPE IF NOT EXISTS freight.invoices_status_enum AS ENUM ( - 'DRAFT', - 'PENDING', - 'PAID', - 'OVERDUE', - 'CANCELLED', - 'REFUNDED' - ); - `); + const typeExists = await queryRunner.query( + `SELECT 1 FROM pg_type WHERE typname = 'invoices_status_enum' AND typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'freight');`, + ); + + if (!typeExists.length) { + await queryRunner.query(` + CREATE TYPE freight.invoices_status_enum AS ENUM ( + 'DRAFT', + 'PENDING', + 'PAID', + 'OVERDUE', + 'CANCELLED', + 'REFUNDED' + ); + `); + } await queryRunner.query(` CREATE TABLE freight.invoices (