1 | -- OSGeo4W64\apps\alkis-import-dev\postprocessing.d\9_optimize.sql |
---|
2 | -- Optimieren von ALKIS-Datenbanken aus PostNAS. |
---|
3 | -- Optionaler Schritt nach dem Laden oder Aktualisieren. |
---|
4 | -- Ziel ist die Reduzierung des Speicherplatzes und die Verbesserung der Verarbeitungs-Geschwindigkeit. |
---|
5 | |
---|
6 | -- 2018-10-29 krz Mi-Ra/Li: Idee "Clustering" aus der PostNAS-Sitzung. |
---|
7 | |
---|
8 | SELECT 'Optimierung der Datenbank lÀuft ...' AS info; |
---|
9 | |
---|
10 | -- Anzeige der GröÃe der Datenbank vor der Optimierung. |
---|
11 | -- https://www.postgresql.org/docs/current/static/functions-admin.html |
---|
12 | SELECT pg_database_size(:'DBNAME') AS db_groesse_vorher; |
---|
13 | |
---|
14 | |
---|
15 | -- Wenn keine historischen Objekte verwendet werden sollen, dann können alle Objekte gelöscht werden, |
---|
16 | -- die einen Eintrag in der Spalte "endet" haben (endet IS NULL). |
---|
17 | -- Sollte auskommentiert werden, wenn im NBA-Verfahren bewusst die Abgabeart "3100 fallbezogen (mit Historie)" verwendet wird |
---|
18 | -- und die historischen Objekte von der Anwendung gefiltert angezeigt werden können. |
---|
19 | SELECT alkis_delete_all_endet(); |
---|
20 | |
---|
21 | |
---|
22 | -- Der Konverter ogr2ogr/NAS liest in einem zweiten Durchlauf durch die NAS-Datei die |
---|
23 | -- DatensÀtze mit den Operationen DELETE, REPLACE und UPDATE. |
---|
24 | -- Diese SÀtze werden in die Tabelle "delete" eingefÌgt, wo sie Ìber einen Datenbank-Trigger die FortfÌhrung der Objekt-Tabellen auslösen. |
---|
25 | -- Danach können die SÀtze der delete-Tabelle wieder gelöscht werden. |
---|
26 | TRUNCATE delete; |
---|
27 | |
---|
28 | |
---|
29 | -- Die Tabelle "alkis_beziehungen" hat in einer frÃŒhen Version des Konverters die Beziehungen zwischen ALKIS-Objekten abgebildet. |
---|
30 | -- Sie wurde ersetzt durch direkte Relationn zwischen den Objekt-Tabellen. |
---|
31 | -- Die Tabelle "alkis_beziehungen" sollte von auswertenden Programmen nicht mehr verwendet werden. |
---|
32 | -- Falls sie vom Konverter (Importer) noch gefÌllt wird, kann der Inhalt gelöscht werden. |
---|
33 | -- Der Befehl TRUNCATE ist schneller, kann aber nur vom EigentÃŒmer verwendet werden. Ggf. ersetzen durch "DELETE". |
---|
34 | TRUNCATE alkis_beziehungen; |
---|
35 | --DELETE FROM alkis_beziehungen; |
---|
36 | |
---|
37 | |
---|
38 | -- Wie lange soll das Protokoll gespeichert bleiben? |
---|
39 | -- Selektiv "alte" EintrÀge entfernen. |
---|
40 | -- ts timestamp without time zone DEFAULT now(), |
---|
41 | SELECT 'Importlog vom ' || date(min(ts)) || ' bis ' || date(max(ts)) AS vorher FROM alkis_importlog; |
---|
42 | DELETE FROM alkis_importlog WHERE (current_timestamp - ts) > interval '62 days'; -- ca. 2 Monate |
---|
43 | SELECT 'Importlog vom ' || date(min(ts)) || ' bis ' || date(max(ts)) AS nachher FROM alkis_importlog; |
---|
44 | |
---|
45 | |
---|
46 | -- C l u s t e r n einiger Tabellen wie im Schritt postcreate.d definiert. |
---|
47 | -- -------------------------------------------------------------------------- |
---|
48 | -- https://www.postgresql.org/docs/9.4/static/sql-cluster.html |
---|
49 | -- CLUSTER [VERBOSE] table_name [ USING index_name ] |
---|
50 | |
---|
51 | CLUSTER ; |
---|
52 | |
---|
53 | |
---|
54 | -- Reorganisation des Speichers. |
---|
55 | -- Dauert je nach DB-GröÃe einen Weile. Die Datenbank is wÀhrend dieser Zeit nur eingeschrÀnkt benutzbar. |
---|
56 | VACUUM full; |
---|
57 | |
---|
58 | |
---|
59 | -- GröÃe der Datenbank nach der Optimierung anzeigen. |
---|
60 | SELECT pg_database_size(:'DBNAME') AS db_groesse_nachher; |
---|
61 | |
---|
62 | -- ENDE -- |
---|