Fwd: [Feature Request] Per-Database Transaction Logs for Enhanced Isolation and New Capabilities

From: Sébastien <bokanist(at)gmail(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Fwd: [Feature Request] Per-Database Transaction Logs for Enhanced Isolation and New Capabilities
Date: 2025-02-13 09:51:49
Message-ID: CANtq+vS=qUfEcvnKmeAchufnwj7-J6-p3_VR7Oc7s4Aog795WA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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
sebastien(at)pixseed(dot)fr

Browse pgsql-hackers by date

  From Date Subject
Next Message Sébastien 2025-02-13 09:52:31 [Feature Request] INSERT FROZEN to Optimize Large Cold Data Imports and Migrations
Previous Message Shubham Khanna 2025-02-13 09:50:07 Re: Adding a '--clean-publisher-objects' option to 'pg_createsubscriber' utility.