Pflichtenheftartikel mit Pflichtenheft automatisch löschen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 24 Aug 2015 15:45:35 +0000 (17:45 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 24 Aug 2015 15:47:34 +0000 (17:47 +0200)
Wenn ein Pflichtenheft gelöscht wird, so müssen seine Bestandteile ( =
Einträge in anderen 1:n-Tabellen) mit gelöscht werden. Hier betraf es
die »Zusätzlichen Artikel«, Tabelle requirement_spec_parts. Die anderen
abhängigen Tabellen nutzen bereits FOREIGN KEY … ON DELETE CASCADE, also
das auch für requirement_spec_parts nutzen.

Ansonsten klappt das Löschen schlicht nicht. Entsprechende
Fehlermeldungen:

2015-08-24 17:27:48.632 9734 [26783] : DBD::Pg::st execute failed:
ERROR:  update or delete on table "requirement_specs" violates foreign
key constraint "requirement_spec_parts_requirement_spec_id_fkey" on
table "requirement_spec_parts"

DETAIL: Key (id)=(4) is still referenced from table
"requirement_spec_parts". at
/usr/share/perl5/vendor_perl/Rose/DB/Object.pm line 1576.

sql/Pg-upgrade2/requirement_spec_parts_foreign_key_cascade.sql [new file with mode: 0644]

diff --git a/sql/Pg-upgrade2/requirement_spec_parts_foreign_key_cascade.sql b/sql/Pg-upgrade2/requirement_spec_parts_foreign_key_cascade.sql
new file mode 100644 (file)
index 0000000..c4c22bd
--- /dev/null
@@ -0,0 +1,9 @@
+-- @tag: requirement_spec_parts_foreign_key_cascade
+-- @description: Automatisches Löschen in requirement_spec_parts wenn zugehöriges Pflichtenheft gelöscht wird
+-- @depends: requirement_spec_parts
+ALTER TABLE requirement_spec_parts
+DROP CONSTRAINT requirement_spec_parts_requirement_spec_id_fkey;
+
+ALTER TABLE requirement_spec_parts
+ADD FOREIGN KEY (requirement_spec_id) REFERENCES requirement_specs (id)
+ON DELETE CASCADE;