SQLite3 "olvida" usar claves foráneas
Estoy usando Ruby con SQLite3 y, lamentablemente, mis intentos de usar claves externas en Sqlite3 no tuvieron éxito. De acuerdo asqlite3 --version
, la versión 3.7.13 está instalada. Que yo sepa, Sqlite3 admite claves externas desde la versión 3.6.x.
Sé que las claves foráneas están desactivadas de forma predeterminada y deben activarse conPRAGMA foreign_keys = ON;
. En mi Ruby db-create-script, estoy haciendo algo como esto:
sql = <<-SQL
PRAGMA foreign_keys = ON;
CREATE TABLE apps (
id ....
);
CREATE TABLE requests (
...
app_id INTEGER NOT NULL,
FOREIGN KEY(app_id) REFERENCES apps(id),
);
...
SQL
db.execute_batch(sql)
Desafortunadamente, felizmente puedo insertar filas enrequests
con los identificadores de aplicación desconocidos, funciona, pero por supuesto no debería.
Interesante: utilizando el shell sqlite3 directamente, puedo observar el siguiente comportamiento:
$ sqlite3 database.db
sqlite> PRAGMA foreign_keys = ON;
sqlite> PRAGMA foreign_keys;
1 // as expected
sqlite> .quit
$ sqlite3 database.db
sqlite> PRAGMA foreign_keys;
0 // off ?!
Sin salir de la shell sqlite3, claves foráneas.estan trabajando después de activarlos (y no salir de la cáscara) yNo estoy permitido para insertar filas con app_ids desconocidos.