diff --git a/.env.example b/.env.example index e4cfc0f5d9..16f68ccd7a 100644 --- a/.env.example +++ b/.env.example @@ -16,6 +16,7 @@ # NANGO_DB_PORT= # NANGO_DB_NAME= # NANGO_DB_SCHEMA= +# NANGO_DB_ADDITIONAL_SCHEMAS=, # NANGO_DB_SSL= # Override these 2 variables to configure the database connection pool / tune it for your needs i.e. serverless databases. # NANGO_DB_POOL_MIN= diff --git a/docker-compose.yaml b/docker-compose.yaml index e0c3e8d9a1..7793af60aa 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -26,6 +26,7 @@ services: - NANGO_DB_HOST=${NANGO_DB_HOST} - NANGO_DB_NAME=${NANGO_DB_NAME} - NANGO_DB_SSL=${NANGO_DB_SSL} + - NANGO_DB_ADDITIONAL_SCHEMAS=${NANGO_DB_ADDITIONAL_SCHEMAS} - NANGO_DB_POOL_MIN=${NANGO_DB_POOL_MIN} - NANGO_DB_POOL_MAX=${NANGO_DB_POOL_MAX} - RECORDS_DATABASE_URL=${RECORDS_DATABASE_URL:-postgresql://nango:nango@nango-db:5432/nango} diff --git a/packages/cli/docker/docker-compose.yaml b/packages/cli/docker/docker-compose.yaml index f34b639b16..d1f01e0a43 100644 --- a/packages/cli/docker/docker-compose.yaml +++ b/packages/cli/docker/docker-compose.yaml @@ -27,6 +27,7 @@ services: - NANGO_DB_HOST=${NANGO_DB_HOST} - NANGO_DB_NAME=${NANGO_DB_NAME} - NANGO_DB_SSL=${NANGO_DB_SSL} + - NANGO_DB_ADDITIONAL_SCHEMAS=${NANGO_DB_ADDITIONAL_SCHEMAS} - NANGO_DB_POOL_MIN=${NANGO_DB_POOL_MIN} - NANGO_DB_POOL_MAX=${NANGO_DB_POOL_MAX} - NANGO_PORT=${NANGO_PORT:-3003} diff --git a/packages/shared/lib/db/database.ts b/packages/shared/lib/db/database.ts index 32133ebf63..b28bb0c13e 100644 --- a/packages/shared/lib/db/database.ts +++ b/packages/shared/lib/db/database.ts @@ -4,6 +4,9 @@ import { metrics, retry } from '@nangohq/utils'; import type { Pool } from 'tarn'; const defaultSchema = process.env['NANGO_DB_SCHEMA'] || 'nango'; +const additionalSchemas = process.env['NANGO_DB_ADDITIONAL_SCHEMAS'] + ? process.env['NANGO_DB_ADDITIONAL_SCHEMAS'].split(',').map((schema: string) => schema.trim()) + : []; export function getDbConfig({ timeoutMs }: { timeoutMs: number }): Knex.Config { return { @@ -22,7 +25,7 @@ export function getDbConfig({ timeoutMs }: { timeoutMs: number }): Knex.Config { max: parseInt(process.env['NANGO_DB_POOL_MAX'] || '50') }, // SearchPath needs the current db and public because extension can only be installed once per DB - searchPath: [defaultSchema, 'public'] + searchPath: [defaultSchema, 'public', ...additionalSchemas] }; } diff --git a/packages/utils/lib/environment/parse.ts b/packages/utils/lib/environment/parse.ts index d0a653a80f..376dff64ed 100644 --- a/packages/utils/lib/environment/parse.ts +++ b/packages/utils/lib/environment/parse.ts @@ -80,6 +80,7 @@ export const ENVS = z.object({ NANGO_ENCRYPTION_KEY: z.string().optional(), NANGO_DB_MIGRATION_FOLDER: z.string().optional(), NANGO_DB_SCHEMA: z.string().optional().default('nango'), + NANGO_DB_ADDITIONAL_SCHEMAS: z.array(z.string()).optional(), // Records RECORDS_DATABASE_URL: z.string().url().optional().default('postgres://nango:nango@localhost:5432/nango'), //TODO remove default and deal with default value in the records package (ie: envVar || mainDB || localhost )