On Tue, 28 Aug 2012 14:07:58 Peter Schneider wrote:
> > | $ psql
> > [...]
> PostgreSQL?
Jupp. Sorry, wenn ich das nur da oben so klein angedeutet habe.
> In Oracle wäre es so, daß wenn Du den Constraint zwar mit
> DEFERRABLE deklarierst er zwar grundsätzlich DEFERRABLE ist, aber
> per Default INITIALLY IMMEDIATE ist. Willst Du ihn INITIALLY
> DEFFERED mußt Du das explizit bei der Definition so angeben, wie
> Du ja inzwischen auch herausgefunden hast.
Wobei es in Oracle (wenigstens habe ich das, was mir Google
versehentlich dazu ausgespuckt hat, so interpretiert) auch die
Moeglichkeit gaebe, die aktuelle Session auf DEFERRED zu stellen -
genau das, was ich suchen wuerde.
> Im übrigen möchte ich vor deferred constraints warnen: das ist
> Schmarrn und braucht kein Mensch (IMHO). Das macht nur
> Fehlersuche/Debugging unnötig kompliziert. Fehler sollten meiner
> Erfahrung nach grundsätzlich so früh wie möglich und pro
> verursachendem Datensatz geflagged werden.
Jein.
Ich habe eine nicht ganz unkomplizierte Datenstruktur (sagen wir
einmal, rund 150 Tabellen), deren Eintraege in letzter Konsequenz
von jeweils einem einzelnen Datensatz in einer der Tabellen
abhaengen. Alle Jubeljahre wird so etwas einmal geloescht - und
genau dabei sind mir die Constraints jetzt um die Ohren geflogen,
weil es darunter zirkulare Abhaengigkeiten gibt [1].
Notgedrungen ist die Datenbank jetzt auf INITIALLY DEFERRED
umgestellt, damit laeuft's. Lieber waere es mir anders gewesen,
aber Hauptsache, es geht ueberhaupt.
Servus,
Stefan
[1] beispielsweise in der Art von (unsauber hingetippt, Fehler bitte
in Gedanken korrigieren):
| M (id integer);
| A (
| id integer,
| id_m integer references M(id) on delete cascade
| );
| A_to_A (
| id_a_from integer references A(id) on delete cascade,
| id_a_to integer references A(id) on delete restrict
| );
wobei das referenzierte A nicht geloescht werden darf, solange das
referenzierende A noch am Leben ist. Ein pauschales "DELETE FROM m"
loescht die As jedoch beliebig und bricht dann mitunter wegen
Verletzung der referentiellen Integritaet ab. Finde ich irgendwie
ein wenig eigenwillig.
Rundum gelungen! Stefan und alles ist gebissen!
(Sloganizer)