SQLite3 «забывает» использовать внешние ключи

Я использую Ruby с SQLite3, и мои попытки использовать внешние ключи в Sqlite3, к сожалению, не увенчались успехом. Согласно сsqlite3 --version, версия 3.7.13 установлена. Насколько я знаю, Sqlite3 поддерживает внешние ключи начиная с версии 3.6.x.

Я знаю, что внешние ключи по умолчанию отключены и должны быть активированы с помощьюPRAGMA foreign_keys = ON;, В моем Ruby db-create-script я делаю что-то вроде этого:

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)

К сожалению, я могу с радостью вставить строки вrequests с неизвестными идентификаторами приложений, это работает, но, конечно, не должно.

Интересно: используя непосредственно оболочку sqlite3, я могу наблюдать следующее поведение:

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

Не выходя из оболочки sqlite3, внешние ключиработают после их активации (а не выхода из оболочки) иЯ не имею права вставить строки с неизвестными app_ids.

Ответы на вопрос(3)

Ваш ответ на вопрос