Clean-Up der Referenzen

Entfernen nicht mehr benötigter Referenzen

Unter Umständen (z. B. durch Systemabstürze oder Fehler bei der Verarbeitung) kann es vorkommen, dass nach der Löschung einer Ressource verwaiste Daten in anderen Tabellen verbleiben. Diese können per SQL-Skript in regelmäßigen Abständen gelöscht werden. Im Normalfall sorgt allerdings die Löschroutine für eine kaskadierte Entfernung aller Einträge, die mit der jeweiligen Ressourcen-ID verbunden sind.

Warnung

Vor allen Datenbankmodifikationen sollte immer ein aktueller Dump durchgeführt werden, um Datenverluste zu vermeiden.

Manuelles Löschen einer Ressource

-- Löschen der Ressource mit der ID 1
DELETE FROM `gris_resource` WHERE `gris_resource`.`gris_resource_id` = 1;

Löschen aller verwaisten Daten

-- Löschen aller verwaisten Publikationen
DELETE FROM `gris_publication` WHERE `gris_resource_id` NOT IN (
  SELECT `gris_resource_id` FROM `gris_resource` WHERE TRUE
);

-- Löschen aller verwaisten Events
DELETE FROM `gris_event` WHERE `gris_resource_id` NOT IN (
  SELECT `gris_resource_id` FROM `gris_resource` WHERE TRUE
);

-- Löschen aller verwaisten Abstracts
DELETE FROM `gris_abstracts` WHERE `gris_resource_id` NOT IN(
  SELECT `gris_resource_id` FROM `gris_resource` WHERE TRUE
);

-- Löschen aller verwaisten Identifier
DELETE FROM `gris_identifier` WHERE `gris_resource_id` NOT IN (
  SELECT `gris_resource_id` FROM `gris_resource` WHERE TRUE
);

-- Löschen aller verwaisten Perosnenverknüpfungen (nicht Personen)
DELETE FROM `gris_resource_persons` WHERE `gris_resource_id` NOT IN (
  SELECT `gris_resource_id` FROM `gris_resource` WHERE TRUE
);

-- Löschen aller verwaisten Tagverknüpfungen (nicht Tags)
SELECT * FROM `gris_tag_resource` WHERE `gris_resource_id` NOT IN (
  SELECT `gris_resource_id` FROM `gris_resource` WHERE TRUE
);

-- Löschen aller verwaisten Kategorien (nicht Tags)
DELETE FROM `gris_category_relations` WHERE `gris_category_relations_object_table` = "gris_resource"
  AND `gris_category_relations_object_id` NOT IN (
  SELECT `gris_resource_id` FROM `gris_resource` WHERE TRUE
);

-- Externe Personen ohne External-Flag anzeigen
SELECT * FROM gris_model.gris_personname WHERE gris_person_id IS NULL AND gris_personname_external = 0;
-- Externe Personen ohne External-Flag korrigieren
UPDATE gris_model.gris_personname SET gris_personname_external = 1 WHERE gris_person_id IS NULL AND gris_personname_external = 0;

-- Alumni ohne External-Flag
SELECT * FROM gris_model.gris_personname WHERE gris_person_id IN
(SELECT gris_person_id FROM gris_person WHERE gris_person_is_alumni = 1)
AND gris_personname_external = 0;

-- External-Flag für Alumni setzen
UPDATE gris_model.gris_personname SET gris_personname_external = 1 WHERE gris_person_id IN
(SELECT gris_person_id FROM gris_person WHERE gris_person_is_alumni = 1)
AND gris_personname_external = 0;