SQLite3 „vergisst“, Fremdschlüssel zu verwenden

Ich verwende Ruby mit SQLite3 und meine Versuche, Fremdschlüssel in Sqlite3 zu verwenden, waren leider nicht erfolgreich. Gemäßsqlite3 --version, Version 3.7.13 ist installiert. Soweit ich weiß, unterstützt Sqlite3 Fremdschlüssel seit Version 3.6.x.

Ich weiß, dass Fremdschlüssel standardmäßig deaktiviert sind und mit aktiviert werden müssenPRAGMA foreign_keys = ON;. In meinem Ruby-DB-Erstellungsskript mache ich etwa Folgendes:

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)

Leider kann ich gerne Zeilen einfügenrequests mit unbekannten app-ids funktioniert es, sollte es aber natürlich nicht.

Interessant: Wenn ich die sqlite3-Shell direkt verwende, kann ich folgendes Verhalten beobachten:

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

Ohne die sqlite3-Shell zu beenden, werden Fremdschlüssel verwendetsind am Arbeiten nach deren Aktivierung (und nicht Verlassen der Shell) undich darf nicht um Zeilen mit unbekannten app_ids einzufügen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage