Vercel Postgres, no transactions?

By

Vercel Postgres with Kysely does not support transactions, so I had to rewrite db.transaction() code as plain queries, or use a direct pg connection instead.

~~~

Historical note: Vercel Postgres is no longer offered as a standalone product. Existing databases were moved to Neon. Current Postgres providers support transactions through their current drivers, so do not remove transaction boundaries based on this old adapter limitation. For the Neon setup that supports them with Kysely, see local PostgreSQL vs Vercel Postgres.

I had problems using Kysely on Vercel Postgres, with the @vercel/postgres and @vercel/postgres-kysely adapters.

Basically, transactions are not supported.

I had some code like this:

const data = await db.transaction().execute(async (trx) => {
  const somedata = await trx
    .selectFrom('table1')
    .selectAll()
    .where('id', '=', token)
    .executeTakeFirst()

  if (!somedata) throw new Error('Invalid data')

  await trx
    .deleteFrom('table2')
    .where('id', '=', token)
    .executeTakeFirst()

  return somedata
})

console.log(data)

and I had to remove the transaction, I just used the queries without the transaction:

const data = await db.selectFrom('table1')
  .selectAll()
  .where('id', '=', token)
  .executeTakeFirst()

if (!data) throw new Error('Invalid data')

await db.deleteFrom('table2')
  .where('id', '=', token)
  .executeTakeFirst()

console.log(data)

Hopefully transactions will be implemented.

If you absolutely need them you can still use a direct connection to the database using pg

Tagged: Database · All topics

Want me to talk about your product? You can sponsor this site.

~~~

Related posts about database: