next-learn: Chapter 6: Getting error while seeding data for customer
Error seeding customers: NeonDbError: db error: ERROR: prepared statement “s416330” does not exist
$ node -r dotenv/config ./scripts/seed.js
Created "users" table
Seeded 1 users
Created "customers" table
Error seeding customers: NeonDbError: db error: ERROR: prepared statement "s416330" does not exist
Caused by:
ERROR: prepared statement "s416330" does not exist
at execute (/Users/everythingapple/Desktop/iNoor/React/Next/nextjs-dashboard/node_modules/@neondatabase/serverless/index.js:1539:48)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Promise.all (index 5)
at async seedCustomers (/Users/everythingapple/Desktop/iNoor/React/Next/nextjs-dashboard/scripts/seed.js:106:31)
at async /Users/everythingapple/Desktop/iNoor/React/Next/nextjs-dashboard/scripts/seed.js:165:3 {
code: '26000',
sourceError: undefined
}
node:internal/process/promises:288
triggerUncaughtException(err, true /* fromPromise */);
^
NeonDbError: db error: ERROR: prepared statement "s416330" does not exist
Caused by:
ERROR: prepared statement "s416330" does not exist
at execute (/Users/everythingapple/Desktop/iNoor/React/Next/nextjs-dashboard/node_modules/@neondatabase/serverless/index.js:1539:48)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Promise.all (index 5)
at async seedCustomers (/Users/everythingapple/Desktop/iNoor/React/Next/nextjs-dashboard/scripts/seed.js:106:31)
at async /Users/everythingapple/Desktop/iNoor/React/Next/nextjs-dashboard/scripts/seed.js:165:3 {
code: '26000',
sourceError: undefined
}
this error is coming somewhere in the following code
const { sql } = require('@vercel/postgres');
const {
invoices,
customers,
revenue,
users,
} = require('../app/lib/placeholder-data.js');
const bcrypt = require('bcrypt');
........
// Insert data into the "customers" table
const insertedCustomers = await Promise.all(
customers.map(
(customer) => sql`
INSERT INTO customers (id, name, email, image_url)
VALUES (${customer.id}, ${customer.name}, ${customer.email}, ${customer.image_url})
ON CONFLICT (id) DO NOTHING;
`,
),
);
“@vercel/postgres”: “^0.5.0” “bcrypt”: “^5.1.1”, “next”: “^14.0.0”, Node : 18.18.2
About this issue
- Original URL
- State: closed
- Created 8 months ago
- Reactions: 6
- Comments: 30 (8 by maintainers)
Here’s the fix: https://github.com/vercel/next-learn/pull/314
I believe the problem was with the fact
sqlopens a new db connection whenever it’s called.@Maniload was on the right track in the sense that using a
forloop would open the connections sequentially, whereasPromise.allinitiates the promises in parallel - creating multiple connections at once.However, with the loop, we’re still creating multiple connections. The ideal solution is to run the script on a single connection, and we can use
db.clientfor that. More details on the PR.Please let me know if you run into any more issues (and remember to drop your tables on Vercel before testing again) 😄
Hey 👋🏼 I was able to reproduce this with a fresh project. Looking into it.
Maybe this is caused by a multiple
INSERTs being executed concurrently? It seems to work better when I convert thePromise.allcalls to simplefor-loops:Yes using pool is best way as its create a single connection.
It works, thanks!