Una transacció niada (en anglès, nested transaction) és una transacció de base de dades que s'inicia dins de l'àmbit d'una altra transacció ja activa, anomenada transacció pare. El comportament clau d'una transacció niada és que si falla i es desfà (rollback), només es perden els canvis realitzats dins d'aquest subnivell, mantenint intactes les operacions de la transacció pare.

Implementació mitjançant punts de restauració La majoria de sistemes de bases de dades relacionals, com PostgreSQL, MySQL (amb InnoDB) o SQLite, no suporten transaccions niades vertaderes a nivell de motor. En el seu lloc, les emulen mitjançant punts de restauració (savepoints): quan s'inicia una transacció niada, el sistema crea un punt de restauració amb nom. Si la transacció niada es confirma (commit), el punt de restauració s'allibera i els canvis passen a formar part de la transacció pare. Si es desfà (rollback), el sistema reverteix l'estat fins al punt de restauració sense afectar la transacció exterior.

Ús en programació asíncrona En aplicacions asíncrones que accedeixen a PostgreSQL mitjançant la biblioteca asyncpg, les transaccions niades s'utilitzen habitualment amb el gestor de context async with connection.transaction() dins d'un altre bloc de transacció ja obert. asyncpg gestiona automàticament la creació i l'alliberament dels punts de restauració subjacents.

Aquest mecanisme és especialment útil en operacions complexes on es vol intentar una subtasca de risc, com una inserció que podria violar una restricció d'integritat, sense posar en perill tota l'operació atòmica si aquella subtasca falla.

Vegeu també Punt de restauració ACID PostgreSQL

Referències

Fowler, M. (2022). Python Concurrency with asyncio. Manning Publications. Capítol 5.