Introduce per-database transaction logs (WAL) and transaction ID spaces to
improve database isolation, enable hot-mounting/unmounting, selective
replication, and open new possibilities in PostgreSQL.
Business Use-case:
With modern SSDs offering high throughput and low latency, maintaining a
single *global* transaction log across all databases in a PostgreSQL
instance is becoming an unnecessary constraint.
By allowing *each database to have its own transaction log and transaction
ID space*, PostgreSQL could achieve significant improvements in
performance, isolation, and flexibility.
*Key Benefits*:
- *Better isolation between databases*:
- A long-running transaction in one database would no longer prevent
vacuuming of tables in another.
- No risk of transaction wraparound issues in one database affecting
others.
- *Hot-mounting/unmounting databases*:
- Ability to attach/detach databases dynamically at the filesystem
level without impacting the rest of the cluster.
- Faster database restores and migrations by simply copying database
files and starting the instance.
- *Selective replication*:
- Currently, logical replication can be done at the table level, but
physical replication applies to the entire cluster.
- With per-database WAL, it would be possible to *replicate only
specific databases* without requiring complex logical replication
setups.
- *More flexible backup & restore*:
- Ability to back up and restore *individual databases* with
transaction consistency, instead of full-cluster backups.
- Faster recovery and better disaster recovery options.
- *Better integration with cloud and containerized environments*:
Would enable dynamically adding and removing databases in cloud
environments without cluster-wide restarts.
User impact with the change:
- Users with large multi-database clusters would see *better transaction
isolation*, fewer maintenance conflicts, and *more flexible database
management*.
- Organizations running *multi-tenant* environments or *per-database
replication* setups would gain *easier and more efficient ways to manage
databases*.
- PostgreSQL would become much more *modular and cloud-friendly*,
aligning it with modern high-availability and container-based deployments.
Implementation details:
- Requires modifying PostgreSQL's WAL and transaction system to support
per-database transaction logs.
- WAL archiving, replication, and recovery logic would need adjustments
to support per-database operations.
- Needs careful handling of catalog metadata (such as pg_database) to
ensure atomicity when attaching/detaching databases.
Estimated Development Time:
I do not know PostgreSQL's internal architecture well enough to assess the
full impact of such a change. However, taking a step back, it seems that
rather than deeply modifying the core engine, an alternative approach could
be to spawn a separate PostgreSQL engine per database. In this case, the
main entry point would act more like a connection bouncer, routing requests
to individual database engines.
Opportunity Window Period:
As SSD and cloud-based infrastructures become the norm, this change would
provide *major competitive advantages* for PostgreSQL in multi-tenant,
high-performance, and cloud-native use cases.
Budget Money:
...
Contact Information:
Sebastien Caunes
[email protected]