| ▲ | andriy_koval 3 hours ago | |||||||||||||||||||||||||
Thank you for clarification, I was wrong in my prev comment. > - [1] An interactive transaction is a transaction where you intermingle database queries and application logic (running on the application). could you give specific example why do you think SQlite can do batching and PG not? | ||||||||||||||||||||||||||
| ▲ | hedora an hour ago | parent | next [-] | |||||||||||||||||||||||||
Not the person you are responding to, but sqlite is single threaded (even in multi process, you get one write transaction at a time). So, if you have a network server that does BEGIN TRANSACTION (process 1000 requests) COMMIT (send 1000 acks to clients), with sqlite, your rollback rate from conflicts will be zero. For PG with multiple clients, it’ll tend to 100% rollbacks if the transactions can conflict at all. You could configure PG to only allow one network connection at a time, and get a similar effect, but then you’re paying for MVCC, and a bunch of other stuff that you don’t need. | ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||
| ▲ | andersmurphy an hour ago | parent | prev [-] | |||||||||||||||||||||||||
An interactive transaction works like this in pseudo code. beginTx
endTxHow would you batch this in postgres and get any value? You can nest them all in a single transaction. But, because they are interactive transactions that doesn't reduce your number of network hops. The only thing you can batch in postgres to avoid network hops is bulk inserts/updates. But, the minute you have interactive transactions you cannot batch and gain anything when there is a network. Your best bet is to not have an interactive transaction and port all of that application code to a stored procedure. | ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||