Skip to content

PRAGMAS

SQLite utiliza comandos especiales llamados PRAGMAS para modificar el comportamiento de la base de datos o para obtener información sobre su estado.

Los PRAGMAS no son parte del estándar SQL, solo funcionan en SQLite.

Además, no debes confundir los pragmas con el DDL, no son algo que se quede configurado en la base de datos, sino que afectan a la sesión actual que estás utilizando.

Algunos ejemplos comunes de PRAGMAS son:

Solo lectura

El modo query_only permite abrir una base de datos en modo solo lectura, evitando cualquier modificación accidental.

PRAGMA query_only = ON;

Con este pragma, cualquier sentencia como INSERT, UPDATE o DELETE generará un error.

Información sobre tablas

PRAGMA table_info('nombre_de_la_tabla');

Habilitar claves foráneas

PRAGMA foreign_keys = ON;

Da igual que en tu tabla hayas definido claves foráneas, si no ejecutas este pragma, SQLite no las aplicará cuando insertes o borres datos.

Wal vs Journal Mode

PRAGMA journal_mode = WAL;
PRAGMA journal_mode = DELETE;

El journal mode define cómo SQLite maneja la integridad de los datos durante las transacciones. WAL (Write-Ahead Logging) es generalmente más rápido y permite mayor concurrencia, mientras que DELETE es el modo tradicional que puede ser más seguro en ciertos escenarios.

Ten en cuenta que SQLite es un archivo que usamos como bases de datos, escribir en disco es costoso, y el journal mode afecta directamente al rendimiento de las operaciones de escritura.

El WAL permite operaciones de lectura y escritura concurrentes, mejorando el rendimiento en aplicaciones con alta concurrencia. Si tu aplicación realiza muchas escrituras, WAL suele ser la mejor opción.

El modo DELETE bloquea la base de datos durante las escrituras, lo que puede ser más seguro en entornos con pocas escrituras concurrentes. Es el modo por defecto en muchas versiones de SQLite.

Modo de sincronización

PRAGMA synchronous = FULL;
PRAGMA synchronous = NORMAL;
PRAGMA synchronous = OFF;

El modo de sincronización controla como las transacciones se aseguran de que los datos se escriben correctamente en el disco.

  • FULL: Asegura la máxima integridad de los datos, pero puede ser más lento.
  • NORMAL: Ofrece un buen equilibrio entre integridad y rendimiento.
  • OFF: Maximiza el rendimiento, pero puede arriesgar la integridad de los datos en caso de fallos del sistema.