From c2551a69d63a7e9fccc84da0595d2bb8d4d9ae94 Mon Sep 17 00:00:00 2001 From: Michael Pellegrini <466696+mpellegrini@users.noreply.github.com> Date: Mon, 25 Mar 2024 07:55:42 -0400 Subject: [PATCH] refactor(packages/drizzledb-pg): switch from postgres.js to node-postgres --- packages/drizzledb-pg/package.json | 3 +- packages/drizzledb-pg/src/client/index.ts | 2 +- .../src/client/nodepostres-client.ts | 37 +++++++++++++++++++ .../src/client/postgresjs-client.ts | 19 ---------- packages/drizzledb-pg/src/migrate.ts | 2 +- pnpm-lock.yaml | 32 +++++++++------- 6 files changed, 58 insertions(+), 37 deletions(-) create mode 100644 packages/drizzledb-pg/src/client/nodepostres-client.ts delete mode 100644 packages/drizzledb-pg/src/client/postgresjs-client.ts diff --git a/packages/drizzledb-pg/package.json b/packages/drizzledb-pg/package.json index bf0ff1f..84c2925 100644 --- a/packages/drizzledb-pg/package.json +++ b/packages/drizzledb-pg/package.json @@ -22,7 +22,7 @@ "dependencies": { "dotenv": "16.4.5", "drizzle-orm": "0.30.4", - "postgres": "3.4.4", + "pg": "8.11.3", "znv": "0.4.0", "zod": "3.22.4" }, @@ -33,7 +33,6 @@ "@types/node": "20.11.30", "@types/pg": "8.11.4", "drizzle-kit": "0.20.14", - "pg": "8.11.3", "tsx": "4.7.1" } } diff --git a/packages/drizzledb-pg/src/client/index.ts b/packages/drizzledb-pg/src/client/index.ts index 7210da1..0fa40c3 100644 --- a/packages/drizzledb-pg/src/client/index.ts +++ b/packages/drizzledb-pg/src/client/index.ts @@ -1 +1 @@ -export { db } from './postgresjs-client.js' +export { db } from './nodepostres-client.js' diff --git a/packages/drizzledb-pg/src/client/nodepostres-client.ts b/packages/drizzledb-pg/src/client/nodepostres-client.ts new file mode 100644 index 0000000..87cca87 --- /dev/null +++ b/packages/drizzledb-pg/src/client/nodepostres-client.ts @@ -0,0 +1,37 @@ +import { drizzle } from 'drizzle-orm/node-postgres' +import pg from 'pg' +import { parseEnv, z } from 'znv' + +import 'dotenv/config' + +const { DB_CONNECTION_STRING, DB_MAX_CONNECTIONS } = parseEnv(process.env, { + DB_CONNECTION_STRING: z.string().url().default('postgresql://undefined'), + DB_MAX_CONNECTIONS: z.number().min(1).default(1), +}) + +export const connection = new pg.Pool({ + connectionString: DB_CONNECTION_STRING, + /** + * Minimum number of clients the pool should contain. + */ + min: 0, + + /** + * Maximum number of clients the pool should contain. + */ + max: DB_MAX_CONNECTIONS, + + /** + * Mumber of milliseconds a client must sit idle in the pool and not + * be checked out before it is disconnected from the backend and discarded. + */ + idleTimeoutMillis: 2_000, + + log: (messages) => console.log(messages), +}) + +connection.on('connect', () => console.log(`Connected`)) +connection.on('acquire', () => console.log('acquired a connection from the pool')) +connection.on('release', () => console.log('released the connection to the pool')) + +export const db = drizzle(connection) diff --git a/packages/drizzledb-pg/src/client/postgresjs-client.ts b/packages/drizzledb-pg/src/client/postgresjs-client.ts deleted file mode 100644 index 37c2ff1..0000000 --- a/packages/drizzledb-pg/src/client/postgresjs-client.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { drizzle } from 'drizzle-orm/postgres-js' -import postgres from 'postgres' -import { parseEnv, z } from 'znv' - -import 'dotenv/config' - -const { DB_CONNECTION_STRING, DB_MAX_CONNECTIONS } = parseEnv(process.env, { - DB_CONNECTION_STRING: z.string().url().default('postgresql://undefined'), - DB_MAX_CONNECTIONS: z.number().min(1).default(1), -}) - -export const connection = postgres(DB_CONNECTION_STRING, { - max: DB_MAX_CONNECTIONS, - connection: { - application_name: 'postgres.js', - }, -}) - -export const db = drizzle(connection) diff --git a/packages/drizzledb-pg/src/migrate.ts b/packages/drizzledb-pg/src/migrate.ts index d467862..3449f34 100644 --- a/packages/drizzledb-pg/src/migrate.ts +++ b/packages/drizzledb-pg/src/migrate.ts @@ -1,6 +1,6 @@ import { migrate } from 'drizzle-orm/postgres-js/migrator' -import { connection, db } from './client/postgresjs-client.js' +import { connection, db } from './client/nodepostres-client.js' try { console.log('Drizzle database migration starting...') diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dbd69a4..d957a18 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -89,10 +89,10 @@ importers: version: 16.4.5 drizzle-orm: specifier: 0.30.4 - version: 0.30.4(@types/pg@8.11.4)(pg@8.11.3)(postgres@3.4.4) - postgres: - specifier: 3.4.4 - version: 3.4.4 + version: 0.30.4(@types/pg@8.11.4)(pg@8.11.3) + pg: + specifier: 8.11.3 + version: 8.11.3 znv: specifier: 0.4.0 version: 0.4.0(zod@3.22.4) @@ -118,9 +118,6 @@ importers: drizzle-kit: specifier: 0.20.14 version: 0.20.14 - pg: - specifier: 8.11.3 - version: 8.11.3 tsx: specifier: 4.7.1 version: 4.7.1 @@ -2125,6 +2122,7 @@ packages: /buffer-writer@2.0.0: resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} engines: {node: '>=4'} + dev: false /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} @@ -2633,7 +2631,7 @@ packages: - supports-color dev: true - /drizzle-orm@0.30.4(@types/pg@8.11.4)(pg@8.11.3)(postgres@3.4.4): + /drizzle-orm@0.30.4(@types/pg@8.11.4)(pg@8.11.3): resolution: {integrity: sha512-kWoSMGbrOFkmkAweLTFtHJMpN+nwhx89q0mLELqT2aEU+1szNV8jrnBmJwZ0WGNp7J7yQn/ezEtxBI/qzTSElQ==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' @@ -2712,7 +2710,6 @@ packages: dependencies: '@types/pg': 8.11.4 pg: 8.11.3 - postgres: 3.4.4 dev: false /eastasianwidth@0.2.0: @@ -4678,6 +4675,7 @@ packages: /packet-reader@1.0.0: resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} + dev: false /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -4749,10 +4747,12 @@ packages: /pg-cloudflare@1.1.1: resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} requiresBuild: true + dev: false optional: true /pg-connection-string@2.6.2: resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + dev: false /pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} @@ -4768,6 +4768,7 @@ packages: pg: '>=8.0' dependencies: pg: 8.11.3 + dev: false /pg-protocol@1.6.0: resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} @@ -4781,6 +4782,7 @@ packages: postgres-bytea: 1.0.0 postgres-date: 1.0.7 postgres-interval: 1.2.0 + dev: false /pg-types@4.0.2: resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} @@ -4812,11 +4814,13 @@ packages: pgpass: 1.0.5 optionalDependencies: pg-cloudflare: 1.1.1 + dev: false /pgpass@1.0.5: resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} dependencies: split2: 4.2.0 + dev: false /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -4960,6 +4964,7 @@ packages: /postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} + dev: false /postgres-array@3.0.2: resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==} @@ -4968,6 +4973,7 @@ packages: /postgres-bytea@1.0.0: resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} engines: {node: '>=0.10.0'} + dev: false /postgres-bytea@3.0.0: resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} @@ -4978,6 +4984,7 @@ packages: /postgres-date@1.0.7: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} + dev: false /postgres-date@2.1.0: resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} @@ -4988,6 +4995,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: xtend: 4.0.2 + dev: false /postgres-interval@3.0.0: resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} @@ -4996,11 +5004,6 @@ packages: /postgres-range@1.1.4: resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - /postgres@3.4.4: - resolution: {integrity: sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A==} - engines: {node: '>=12'} - dev: false - /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -6334,6 +6337,7 @@ packages: /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + dev: false /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}