Revision 086e9880
Von Moritz Bunkus vor mehr als 8 Jahren hinzugefügt
sql/Pg-upgrade2/delete_from_generic_translations_on_language_deletion.pl | ||
---|---|---|
1 |
# @tag: delete_from_generic_translations_on_language_deletion |
|
2 |
# @description: Übersetzungen automatisch löschen, wenn die dazugehörige Sprache gelöscht wird |
|
3 |
# @depends: release_3_4_0 |
|
4 |
package SL::DBUpgrade2::delete_from_generic_translations_on_language_deletion; |
|
5 |
|
|
6 |
use strict; |
|
7 |
use utf8; |
|
8 |
|
|
9 |
use parent qw(SL::DBUpgrade2::Base); |
|
10 |
|
|
11 |
sub run { |
|
12 |
my ($self) = @_; |
|
13 |
|
|
14 |
$self->drop_constraints(table => 'generic_translations'); |
|
15 |
|
|
16 |
$self->db_query(<<SQL); |
|
17 |
ALTER TABLE generic_translations |
|
18 |
ADD CONSTRAINT generic_translations_language_id_fkey |
|
19 |
FOREIGN KEY (language_id) |
|
20 |
REFERENCES language (id) |
|
21 |
ON DELETE CASCADE |
|
22 |
SQL |
|
23 |
|
|
24 |
$self->db_query(<<SQL); |
|
25 |
DELETE FROM generic_translations |
|
26 |
WHERE language_id NOT IN ( |
|
27 |
SELECT id |
|
28 |
FROM language |
|
29 |
) |
|
30 |
SQL |
|
31 |
|
|
32 |
return 1; |
|
33 |
} |
|
34 |
|
|
35 |
1; |
sql/Pg-upgrade2/delete_from_generic_translations_on_language_deletion.sql | ||
---|---|---|
1 |
-- @tag: delete_from_generic_translations_on_language_deletion |
|
2 |
-- @description: Übersetzungen automatisch löschen, wenn die dazugehörige Sprache gelöscht wird |
|
3 |
-- @depends: release_3_4_0 |
|
4 |
ALTER TABLE generic_translations |
|
5 |
DROP CONSTRAINT generic_translations_language_id_fkey, |
|
6 |
ADD CONSTRAINT generic_translations_language_id_fkey |
|
7 |
FOREIGN KEY (language_id) |
|
8 |
REFERENCES language (id) |
|
9 |
ON DELETE CASCADE; |
|
10 |
|
|
11 |
DELETE FROM generic_translations |
|
12 |
WHERE language_id NOT IN ( |
|
13 |
SELECT id |
|
14 |
FROM language |
|
15 |
); |
Auch abrufbar als: Unified diff
generic_translations: DB-Upgrade in Perl geschrieben wg. Constraint-Namen
In alten PostgreSQL-Versionen hießen Foreign-Key-Constraints oft noch so
was wie »$1«. Da sich das Upgrade-Script also bzgl. des Namens nicht
sicher sein kann, gibt's momentan nur die Möglichkeit, einmal alle
Foreign-Keys zu einer Tabelle wegzuwerfen und diese neu anzulegen.
Dafür wiederum haben wir Support-Funktionen in SL::DBUpgrade2::Base, die
wie nutzen können. Also Umstellung des Scripts auf Perl.