SQLite3 „zapomina” o użyciu kluczy obcych

Używam Rubiego z SQLite3, a moje próby użycia kluczy obcych w Sqlite3 niestety nie powiodły się. Wedługsqlite3 --version, wersja 3.7.13 jest zainstalowana. O ile wiem, Sqlite3 obsługuje klucze obce od wersji 3.6.x.

Wiem, że klucze obce są domyślnie wyłączone i muszą być aktywowane za pomocąPRAGMA foreign_keys = ON;. W moim skrypcie do tworzenia baz danych Ruby robię coś takiego:

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)

Niestety, mogę z radością wstawiać wierszerequests z nieznanymi identyfikatorami aplikacji działa, ale oczywiście nie powinien.

Interesujące: używając powłoki sqlite3 bezpośrednio, obserwuję następujące zachowanie:

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

Bez zamykania powłoki sqlite3, kluczy obcychpracują po ich aktywacji (i nie wychodzeniu z powłoki) inie wolno mi wstawiać wiersze z nieznanymi identyfikatorami aplikacji.

questionAnswers(3)

yourAnswerToTheQuestion