SQLite3 “esquece” de usar chaves estrangeiras

Estou usando Ruby com SQLite3 e minhas tentativas de usar chaves estrangeiras no Sqlite3 infelizmente não tiveram sucesso. De acordo comsqlite3 --version, a versão 3.7.13 está instalada. Tanto quanto sei, o Sqlite3 suporta chaves estrangeiras desde a versão 3.6.x.

Eu sei que chaves estrangeiras são desativadas por padrão e precisam ser ativadas comPRAGMA foreign_keys = ON;. No meu script de criação de banco de dados Ruby, estou fazendo algo assim:

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)

Infelizmente, posso inserir linhas emrequests com IDs de aplicativos desconhecidos, funciona, mas é claro que não deveria.

Interessante: usando o shell sqlite3 diretamente, posso observar o seguinte comportamento:

$ 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 ?!

Sem sair do shell sqlite3, chaves estrangeirasestão trabalhando depois de ativá-los (e não sair do shell) eEu não estou autorizado para inserir linhas com app_ids desconhecidos.

questionAnswers(3)

yourAnswerToTheQuestion