# Prisma "prepared statement does not exist" with pooling
## Symptom
`prepared statement "s1" does not exist` (or similar) from Prisma, intermittent, usually under concurrency; single-threaded tests pass.
## Cause
The Prisma query engine uses server-side prepared statements. On Neon's pooled endpoint, PgBouncer runs in transaction mode: the backend holding your prepared statement gets handed to another client after the transaction, so the next execution cannot find it. (This is distinct from the Drizzle/RLS proxy issue also in the corpus; same message, different mechanism.)
## Confirm
1. The failing datasource URL has `-pooler` in the hostname.
2. Failures correlate with concurrency, not with specific queries.
## Fix
- Recommended: use `@prisma/adapter-neon` with the pooled string; the adapter is built for this path.
- Or point that Prisma client at the direct connection string (cost: real Postgres connections per instance; fine for low-concurrency services).
- Or disable prepared statements in the Prisma datasource if your setup exposes it.
## Verify
Run the previously failing concurrent workload; the error disappears and stays gone across deploys.