📱 Client Type
Web (Desktop Browser)
💻 Operating System
macOS
📦 Deployment Platform
Vercel
📌 Version
Latest
🌐 Browser
Chrome
🐛 What happened?
Using neondb(postgres version:16) as database backend can lead to problem.
neon postgres 16 does not support pg_search by default. In their official website, they said you can only ask support to enable pg_search for postgres16, while its defult supported by postgres 17(in neon)
since pg_search not enabled, latest build will fail immediately at step migrate database.
According to official website, neon postgres17 support this function.
My solution was migrate the DB with neon's "import data" function, so it can migrate data from a neon instance(pg16) to another neon instance(pg17) and only require user to change DATABASE_URL.
I can write the detailed migrating solution in the documents.
📷 How to reproduce it?
run a vercel build, with a neon postgres 16 database
🚦 What it should be?
sql code “CREATE EXTENSION IF NOT EXISTS pg_search;” should work as expected
📝 Additional Information
build failed logs:
17:22:07.505 $ cross-env MIGRATION_DB=1 tsx ./scripts/migrateServerDB/index.ts 17:22:08.004 [dotenv@17.3.1] injecting env (0) from .env -- tip: 🔐 prevent committing .env to code: https://dotenvx.com/precommit 17:22:08.005 [dotenv@17.3.1] injecting env (0) from .env.production -- tip: ⚙️ specify custom .env file path with { path: '/custom/path/.env' } 17:22:08.005 [dotenv@17.3.1] injecting env (0) from .env.production.local -- tip: 🔐 prevent committing .env to code: https://dotenvx.com/precommit 17:22:15.888 ❌ Database migrate failed: DrizzleQueryError: Failed query: -- Custom SQL migration file, put your code below! -- 17:22:15.890 CREATE EXTENSION IF NOT EXISTS pg_search; 17:22:15.890 params: 17:22:15.890 at NeonPreparedQuery.queryWithCache (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/pg-core/session.ts:73:11) 17:22:15.891 at process.processTicksAndRejections (node:internal/process/task_queues:103:5) 17:22:15.892 at async NeonPreparedQuery.execute (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/neon-serverless/session.ts:147:11) 17:22:15.892 at async <anonymous> (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/pg-core/dialect.ts:102:7) 17:22:15.893 at async NeonSession.transaction (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/neon-serverless/session.ts:270:19) 17:22:15.893 at async PgDialect.migrate (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/pg-core/dialect.ts:95:3) 17:22:15.893 at async migrate (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/neon-serverless/migrator.ts:10:2) 17:22:15.893 at async runMigrations (/vercel/path0/scripts/migrateServerDB/index.ts:30:5) { 17:22:15.894 query: '-- Custom SQL migration file, put your code below! --\n' + 17:22:15.894 'CREATE EXTENSION IF NOT EXISTS pg_search;', 17:22:15.894 params: [], 17:22:15.894 cause: error: pg_search must be loaded via shared_preload_libraries. Add 'pg_search' to shared_preload_libraries in postgresql.conf and restart Postgres. 17:22:15.894 at xn.parseErrorMessage (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:954:41) 17:22:15.894 at xn.handlePacket (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:922:75) 17:22:15.895 at xn.parse (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:910:36) 17:22:15.895 at S.<anonymous> (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:961:16) 17:22:15.895 at S.emit (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:316:79) 17:22:15.895 at WebSocket.<anonymous> (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:402:19) 17:22:15.895 at callListener (/vercel/path0/node_modules/.pnpm/ws@8.19.0/node_modules/ws/lib/event-target.js:290:14) 17:22:15.895 at WebSocket.onMessage (/vercel/path0/node_modules/.pnpm/ws@8.19.0/node_modules/ws/lib/event-target.js:209:9) 17:22:15.895 at WebSocket.emit (node:events:508:28) 17:22:15.896 at Receiver.receiverOnMessage (/vercel/path0/node_modules/.pnpm/ws@8.19.0/node_modules/ws/lib/websocket.js:1225:20) { 17:22:15.898 length: 216, 17:22:15.898 severity: 'ERROR', 17:22:15.898 code: 'XX000', 17:22:15.898 detail: undefined, 17:22:15.898 hint: undefined, 17:22:15.898 position: undefined, 17:22:15.898 internalPosition: undefined, 17:22:15.898 internalQuery: undefined, 17:22:15.899 where: undefined, 17:22:15.899 schema: undefined, 17:22:15.899 table: undefined, 17:22:15.899 column: undefined, 17:22:15.899 dataType: undefined, 17:22:15.899 constraint: undefined, 17:22:15.899 file: 'lib.rs', 17:22:15.899 line: '70', 17:22:15.899 routine: 'pg_search::_PG_init::_PG_init_inner' 17:22:15.899 } 17:22:15.899 } 17:22:15.925 error: script "db:migrate" exited with code 1 17:22:15.925 error: script "build:vercel" exited with code 1 17:22:15.942 Error: Command "bun run build:vercel" exited with 1
🛠️ Willing to Submit a PR?
Yes, I am willing to submit a PR
✅ Validations
📱 Client Type
Web (Desktop Browser)
💻 Operating System
macOS
📦 Deployment Platform
Vercel
📌 Version
Latest
🌐 Browser
Chrome
🐛 What happened?
Using neondb(postgres version:16) as database backend can lead to problem.
neon postgres 16 does not support pg_search by default. In their official website, they said you can only ask support to enable pg_search for postgres16, while its defult supported by postgres 17(in neon)
since pg_search not enabled, latest build will fail immediately at step migrate database.
According to official website, neon postgres17 support this function.
My solution was migrate the DB with neon's "import data" function, so it can migrate data from a neon instance(pg16) to another neon instance(pg17) and only require user to change DATABASE_URL.
I can write the detailed migrating solution in the documents.
📷 How to reproduce it?
run a vercel build, with a neon postgres 16 database
🚦 What it should be?
sql code “CREATE EXTENSION IF NOT EXISTS pg_search;” should work as expected
📝 Additional Information
build failed logs:
17:22:07.505 $ cross-env MIGRATION_DB=1 tsx ./scripts/migrateServerDB/index.ts 17:22:08.004 [dotenv@17.3.1] injecting env (0) from .env -- tip: 🔐 prevent committing .env to code: https://dotenvx.com/precommit 17:22:08.005 [dotenv@17.3.1] injecting env (0) from .env.production -- tip: ⚙️ specify custom .env file path with { path: '/custom/path/.env' } 17:22:08.005 [dotenv@17.3.1] injecting env (0) from .env.production.local -- tip: 🔐 prevent committing .env to code: https://dotenvx.com/precommit 17:22:15.888 ❌ Database migrate failed: DrizzleQueryError: Failed query: -- Custom SQL migration file, put your code below! -- 17:22:15.890 CREATE EXTENSION IF NOT EXISTS pg_search; 17:22:15.890 params: 17:22:15.890 at NeonPreparedQuery.queryWithCache (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/pg-core/session.ts:73:11) 17:22:15.891 at process.processTicksAndRejections (node:internal/process/task_queues:103:5) 17:22:15.892 at async NeonPreparedQuery.execute (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/neon-serverless/session.ts:147:11) 17:22:15.892 at async <anonymous> (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/pg-core/dialect.ts:102:7) 17:22:15.893 at async NeonSession.transaction (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/neon-serverless/session.ts:270:19) 17:22:15.893 at async PgDialect.migrate (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/pg-core/dialect.ts:95:3) 17:22:15.893 at async migrate (/vercel/path0/node_modules/.pnpm/drizzle-orm@0.45.1_@electric-sql+pglite@0.3.16_@neondatabase+serverless@1.0.2_@opentele_7657ae38a4ddd536128194930dcc404a/node_modules/src/neon-serverless/migrator.ts:10:2) 17:22:15.893 at async runMigrations (/vercel/path0/scripts/migrateServerDB/index.ts:30:5) { 17:22:15.894 query: '-- Custom SQL migration file, put your code below! --\n' + 17:22:15.894 'CREATE EXTENSION IF NOT EXISTS pg_search;', 17:22:15.894 params: [], 17:22:15.894 cause: error: pg_search must be loaded via shared_preload_libraries. Add 'pg_search' to shared_preload_libraries in postgresql.conf and restart Postgres. 17:22:15.894 at xn.parseErrorMessage (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:954:41) 17:22:15.894 at xn.handlePacket (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:922:75) 17:22:15.895 at xn.parse (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:910:36) 17:22:15.895 at S.<anonymous> (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:961:16) 17:22:15.895 at S.emit (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:316:79) 17:22:15.895 at WebSocket.<anonymous> (/vercel/path0/node_modules/.pnpm/@neondatabase+serverless@1.0.2/node_modules/@neondatabase/serverless/index.js:402:19) 17:22:15.895 at callListener (/vercel/path0/node_modules/.pnpm/ws@8.19.0/node_modules/ws/lib/event-target.js:290:14) 17:22:15.895 at WebSocket.onMessage (/vercel/path0/node_modules/.pnpm/ws@8.19.0/node_modules/ws/lib/event-target.js:209:9) 17:22:15.895 at WebSocket.emit (node:events:508:28) 17:22:15.896 at Receiver.receiverOnMessage (/vercel/path0/node_modules/.pnpm/ws@8.19.0/node_modules/ws/lib/websocket.js:1225:20) { 17:22:15.898 length: 216, 17:22:15.898 severity: 'ERROR', 17:22:15.898 code: 'XX000', 17:22:15.898 detail: undefined, 17:22:15.898 hint: undefined, 17:22:15.898 position: undefined, 17:22:15.898 internalPosition: undefined, 17:22:15.898 internalQuery: undefined, 17:22:15.899 where: undefined, 17:22:15.899 schema: undefined, 17:22:15.899 table: undefined, 17:22:15.899 column: undefined, 17:22:15.899 dataType: undefined, 17:22:15.899 constraint: undefined, 17:22:15.899 file: 'lib.rs', 17:22:15.899 line: '70', 17:22:15.899 routine: 'pg_search::_PG_init::_PG_init_inner' 17:22:15.899 } 17:22:15.899 } 17:22:15.925 error: script "db:migrate" exited with code 1 17:22:15.925 error: script "build:vercel" exited with code 1 17:22:15.942 Error: Command "bun run build:vercel" exited with 1🛠️ Willing to Submit a PR?
Yes, I am willing to submit a PR
✅ Validations