Open
Description
We are currently using a fork of slonik
: alxndrsn/slonik@b0299fa
This is because of some stream-related issues.
At least one related patch has been accepted to upstream node-postgres
: brianc/node-postgres#2836
History of postgres clients used in Central:
- Started out with knex: chaining based query builder but wasn’t great to work with
- Streaming-related bugs
- Swapped to slonik because it seemed closer to desired interface
- Tests ran 30% slower than knex (not clear on production impact)
- Experienced several streaming-related bugs
- Single maintainer has come and gone in availability
- July 2022, started considering
postgres.js
- Lots of energy behind it
- Uses a similar tag template literal interface as Slonik
- issa discovered after finished Slonik work
- Would have switched to it, but at the time, it didn’t support composing SQL fragments ("partials"), now introduced
- Transactions weren't initially working, at least in tests
- Initial PR: remove slonik, insert postgres.js #564
- Lots of tiny differences from Slonik. For the most part, it’s an improvement. A lot of things that we did by hand before, porsager postgres has an answer.
- porsager postgres has some weird quirks of its own though, e.g., no join utilities.
- So far it’s a code reduction. No queries so far have needed to change. Only core infrastructure has changed so far.
- Streaming issues - Caught errors within transactions still thrown as uncaught porsager/postgres#455; would need to add support for multiple streams
A barrier to upgrading slonik
has been several breaking changes since the version we were on. It seems there's likely a more deliberate approach to breaking changes now: gajus/slonik#450 (comment)
There is now a bridge to use slonik on top of postgres.js
instead of node-postgres
: https://github.com/gajus/postgres-bridge