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.

Respuestas a la pregunta(3)

Su respuesta a la pregunta