From 8cda68503da130e81edf803cde1c94e1d1e60714 Mon Sep 17 00:00:00 2001 From: Aaron William Po Date: Sun, 7 May 2023 23:32:34 -0400 Subject: [PATCH] bug fix - Fixed error in cleanDatabase that would cause drift Added an extra line to ensure the query does not include the migration table. This kept on getting cleared. Reintroduced shadow db to detect drift. --- src/config/env/index.ts | 9 +++++++++ src/prisma/schema.prisma | 7 ++++--- src/prisma/seed/clean/cleanDatabase.ts | 5 +++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/config/env/index.ts b/src/config/env/index.ts index 6d0ba0c..0b4fc36 100644 --- a/src/config/env/index.ts +++ b/src/config/env/index.ts @@ -26,6 +26,7 @@ const envSchema = z.object({ POSTGRES_PASSWORD: z.string(), POSTGRES_DATABASE: z.string(), POSTGRES_HOST: z.string(), + SHADOW_DATABASE_URL: z.string().url(), NODE_ENV: z.enum(['development', 'production', 'test']), SPARKPOST_API_KEY: z.string(), @@ -187,6 +188,14 @@ export const POSTGRES_DATABASE = parsed.data.POSTGRES_DATABASE; */ export const POSTGRES_HOST = parsed.data.POSTGRES_HOST; +/** + * The URL of another PostgreSQL database to shadow. + * + * @example + * 'postgresql://user:password@host:5432/database'; + */ +export const SHADOW_DATABASE_URL = parsed.data.SHADOW_DATABASE_URL; + /** * Node environment. * diff --git a/src/prisma/schema.prisma b/src/prisma/schema.prisma index e5ce2b4..6a84268 100644 --- a/src/prisma/schema.prisma +++ b/src/prisma/schema.prisma @@ -6,9 +6,10 @@ generator client { } datasource db { - provider = "postgresql" - url = env("POSTGRES_PRISMA_URL") // uses connection pooling - directUrl = env("POSTGRES_URL_NON_POOLING") // uses a direct connection + provider = "postgresql" + url = env("POSTGRES_PRISMA_URL") // uses connection pooling + directUrl = env("POSTGRES_URL_NON_POOLING") // uses a direct connection + shadowDatabaseUrl = env("SHADOW_DATABASE_URL") } model User { diff --git a/src/prisma/seed/clean/cleanDatabase.ts b/src/prisma/seed/clean/cleanDatabase.ts index f62e49d..9b23d4b 100644 --- a/src/prisma/seed/clean/cleanDatabase.ts +++ b/src/prisma/seed/clean/cleanDatabase.ts @@ -13,8 +13,9 @@ const cleanDatabase = async () => { DO $$ DECLARE statements CURSOR FOR - SELECT tablename FROM pg_tables - WHERE schemaname = 'public'; + SELECT tablename FROM pg_tables + WHERE schemaname = 'public' + AND tablename != '_prisma_migrations'; BEGIN FOR statement IN statements LOOP EXECUTE 'TRUNCATE TABLE ' || quote_ident(statement.tablename) || ' CASCADE;';