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.