Archiv der Kategorie: sql

Postgres: Alter table SET WITHOUT OIDS für alle Datenbanken und Tabellen

Spätestens bei Upgrade auf die Version 12 gibt es Probleme mit den OIDS in Postgresql.

Dieses seit 2005 als „deprecated“ gekennzeichnete Feature wird ab Version 12 nicht mehr unterstützt und führt zu Fehlern (vorher: Warnungen).

Wenn man sich sicher ist, dass OIDs in Datentabellen nicht mehr gebraucht werden, dann hilft ein kleines Script, daß die Arbeit ohne großen Aufwand übernimmt.

https://pastebin.com/3JZLM5YT

Hier werden erst alle Datenbanken aus der pg_database-Tabelle (DB: postgres) ausgelesen und dann über jede Datenbank die Tabellen iteriert, um die OIDS abzustellen.

Aufruf des Scriptes als User „postgres“:

sudo su postgres

Postgresql: Regex anwenden und Array in Datensätze umwandeln

Um ein „ziemlich unkonventionelles“ Language-System aufzulösen, sollte im ersten Schritt ein View auf die vorhandenen Daten erzeugt werden.

Die Tabelle hat ein Index-Feld, dass aus einem umgewandelten PHP-Array entstanden ist (nicht nachmachen – straight out of programmer’s hell!).
Alle Einträge zu einem Segment (zB autopayment) fangen mit diesem an und haben den Schlüssel in eckige Klammern gesetzt (autopayment[btn_search]). Es gilt, für ein Segment alle Schlüssel zu finden (…WHERE id LIKE ‚autopayment[%‘ würde das Segment finden, aber nicht die Schlüssel). „de“ ist das Value-Feld, wo die deutsche Übersetzung drin steht (auch hier gilt: nicht nachmachen 🙂

SELECT id,de,unnest(regexp_matches(id,'^autopayment\[(.*)\]$')) as segment  FROM language order by id asc;

Der Haken in diesem Fall ist, dass es bei mehreren Ergebnissen für den Regex auch mehrere Zeilen gibt.
Wer nicht mehrere Treffer als Ergebnis des Regex möchte (sondern nur einen), der kann auch folgenden Ansatz wählen:

SELECT id,de,array_to_string(regexp_matches(id,'^autopayment\[(.*)\]$'),'') as segment  FROM language order by id asc;

Das zweite Argument bei array_to_string ist das Trennzeichen, denn in diesem Fall würden alle Ergebnisse in einem String zusammengefasst werden.
Weiterlesen