Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 086e9880

Von Moritz Bunkus vor mehr als 8 Jahren hinzugefügt

  • ID 086e9880b6aeb6c3e95bcf4a4a84b985909346df
  • Vorgänger 30a5c527
  • Nachfolger b9889576

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.

Unterschiede anzeigen:

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