Hallo allerseits,
vielleicht steht es in irgendeiner Doku, dass inaktive FKs immer 3 sind, aber laut dieser hier gibt es den Zustand gar nicht: https://firebirdsql.org/file/documentat ... dices.html.
Ist das das normale inactive bei FKs? Und überhaupt, wie kommt es dazu, dass ein FK inactive sein kann?
Grüße, Volker
FK mit rdb$index_inactive = 3?
Moderator: thorben.braun
- martin.koeditz
- Beiträge: 500
- Registriert: Sa 31. Mär 2018, 14:35
Hallo Volker,
wo hast du denn den Wert her? Ich habe keine DB mit rdb$index_inactive = 3 gefunden. Tatsächlich sind nur 0 und 1 zulässig.
Gruß
Martin
wo hast du denn den Wert her? Ich habe keine DB mit rdb$index_inactive = 3 gefunden. Tatsächlich sind nur 0 und 1 zulässig.
Gruß
Martin
Martin Köditz
SynDesk SW GmbH
SynDesk SW GmbH
Hallo Volker,
der Wert 3 bedeutet inaktiver "Foreign Key" -> Google ist Dein Freund.
https://ib-aid.com/en/articles/ibanalys ... nd-tricks/
Gleich im ersten Kapitel beschrieben.
Gruß
Andi
der Wert 3 bedeutet inaktiver "Foreign Key" -> Google ist Dein Freund.

https://ib-aid.com/en/articles/ibanalys ... nd-tricks/
Gleich im ersten Kapitel beschrieben.
Gruß
Andi
- martin.koeditz
- Beiträge: 500
- Registriert: Sa 31. Mär 2018, 14:35
Hi Andi,
danke für die Info. Spannend, da die Referenz klar was anderes erzählt.
Gruß
Martin
danke für die Info. Spannend, da die Referenz klar was anderes erzählt.
Gruß
Martin
Martin Köditz
SynDesk SW GmbH
SynDesk SW GmbH
Hi Andi,

Klar, kenne die Leute von ibsurgeon von Konferenzen sogar persönlich und was die machen, egal.
Bei Indizes auf Constraints geht bis Firebird 2.5 also ein herzhaftes
zum Deaktivieren und
zum Aktivieren / in Kombi mit vorherigem Deaktivieren das Neubauen des Index.
@Martin: Das wär was für die Doku, die ist an der Stelle falsch/unvollständig.
Und die offene Frage, durch was ein FK inactive wird, wenn nicht von außen eine 3 in die rdb$indices geschrieben wurde?
Grüße, Volker
Vielen Danke für den Hinweis, Google war hier eher ein wenig hilfreicher entfernter Bekannterandi hat geschrieben: Do 7. Mai 2020, 14:25 der Wert 3 bedeutet inaktiver "Foreign Key" -> Google ist Dein Freund.![]()

Klar, kenne die Leute von ibsurgeon von Konferenzen sogar persönlich und was die machen, egal.
Bei Indizes auf Constraints geht bis Firebird 2.5 also ein herzhaftes
Code: Alles auswählen
update rdb$indices
set rdb$index_inactive = 3
where ...
Code: Alles auswählen
update rdb$indices
set rdb$index_inactive = 0
where ...
@Martin: Das wär was für die Doku, die ist an der Stelle falsch/unvollständig.
Und die offene Frage, durch was ein FK inactive wird, wenn nicht von außen eine 3 in die rdb$indices geschrieben wurde?
Grüße, Volker
Nö, das geht auch anders:
https://firebirdsql.org/file/documentat ... dx-altridx
alter index myindex active;
alter index myindex inactive;
Beim ETL hat sich das schon vielfach bewährt alle nicht benötigten indizes zu deaktivieren und hinterher wieder zu aktivieren.
Da schafft man plötzlich bis zu 5000 Inserts/sekunde statt nur 30 (ja nach Anzahl Felder und indizes).
Das Aufbauen der Indizes geht dann auch wieder sehr schnell.
https://firebirdsql.org/file/documentat ... dx-altridx
alter index myindex active;
alter index myindex inactive;
Beim ETL hat sich das schon vielfach bewährt alle nicht benötigten indizes zu deaktivieren und hinterher wieder zu aktivieren.
Da schafft man plötzlich bis zu 5000 Inserts/sekunde statt nur 30 (ja nach Anzahl Felder und indizes).
Das Aufbauen der Indizes geht dann auch wieder sehr schnell.
Kann ich nicht reproduzieren. Ich nehme einen FK-Index tab1_fk2, mache
und bekomme wie erwartet
This operation is not defined for system tables.unsuccessful metadata update.
MODIFY RDB$INDICES failed.
action cancelled by trigger (2) to preserve data integrity.
Cannot deactivate index used by an integrity constraint.
mache ich hingegen
geht das durch und hat anschließend rdb$index_inactive = 3.
Die Doku sagt, FKs lassen sich nicht mit alter index ... inactive deaktivieren. Kann ich bestätigen und ist normalerweise auch nicht sinnvoll. Auch die zweite Feststellung, man könne die Selektivität auch eines constraints (zb FKs) mit alter index ... active neu berechnen, kommt hin. Aber alter index ... inactive führt zu Fehlermeldung bei FK.
Insofern sind die Beispiele in der Doku an der Stelle etwas irrreführend, an dem alter index ... inactive sollte dranstehen: (nicht bei Constraint Indizes).
Grüße, Volker
Code: Alles auswählen
alter index tab1_fk2 inactive
This operation is not defined for system tables.unsuccessful metadata update.
MODIFY RDB$INDICES failed.
action cancelled by trigger (2) to preserve data integrity.
Cannot deactivate index used by an integrity constraint.
mache ich hingegen
Code: Alles auswählen
update rdb$indices
set rdb$index_inactive = 3
where rdb$index_name = 'TAB1_FK2'
Die Doku sagt, FKs lassen sich nicht mit alter index ... inactive deaktivieren. Kann ich bestätigen und ist normalerweise auch nicht sinnvoll. Auch die zweite Feststellung, man könne die Selektivität auch eines constraints (zb FKs) mit alter index ... active neu berechnen, kommt hin. Aber alter index ... inactive führt zu Fehlermeldung bei FK.
Insofern sind die Beispiele in der Doku an der Stelle etwas irrreführend, an dem alter index ... inactive sollte dranstehen: (nicht bei Constraint Indizes).
Grüße, Volker