Zum Hauptinhalt springen

Postgre

Postgres Dump/Backup Datei in SQL Script Datei umwandeln

Kann man mit dem Tool pg_restore.exe

"C:\Program Files\PostgreSQL\14\bin\pg_restore.exe" -f AusgabeDatei.sql DumpDatei.backup

Achtung bei CREATE OR REPLACE VIEW

"CREATE OR REPLACE VIEW" verhält sich nicht gleich wie bei anderen Datenbanksystem wie z.B. Oracle.

Statt "CREATE OR REPLACE VIEW" empfiehlt sich bei Postgres besser immer ein "DROP VIEW" und dann ein "CREATE VIEW" auszuführen.

Macht man das nicht dann kann es wenn sich die Anzahl oder Namen der Spalten geaendert hat zu dieser Meldung kommen.

2P16: kann Namen der Sichtspalte XX nicht in YY ändern

Im Postgres Handbuch ist das erklärt:

https://www.postgresql.org/docs/9.3/sql-createview.html

Hinweis

Bei Oracle ist dies nicht so!

Abfragen von Datumswerten

Postgres verwendet bei SQL Abfragen bei Datumsangaben das Format "ISO-8601 format" Hierbei werden Minus Zeichen und Doppelpunkte zum trennen verwendet, nicht Punkt.

richtig:

select * from EL_BUS_BAR where date_created > '2023-11-31'
select * from EL_BUS_BAR where date_created > '2023-11-31 17:59:59'

falsch:

select * from EL_BUS_BAR where date_created > '31.11.2023'

Sie können wahlweise auch die Funktion "to_date" verwenden.
Diese wandelt einen Text mit der angegebenen Formatierung in einen Datumswert um.

Beispiel:

select * from EL_BUS_BAR where date_created > to_date('21.12.2023', 'DD.MM.YYYY')

Postgres Hilfsfunktionen in MapEdit Datenstrukturen

In Postgres Datenbanken mit MapEdit Datenstruktur stehen folgende erweiterten SQL Funktionen zur Verfügung. Diese werden mit dem anlegen der Datenbank angelegt.

Da diese Funktionen in der Datenbank enthalten sind können sie von allen SQL Abfragen (MapGuide,Mapserver, Fremd SQl Tools etc) genutzt werden.

Funktion me_to_char

Verfügbar ab Version 23.1.81 Steht nur bei Datenbanken mit MapEdit Datenmodel zur Verfügung.

Bietet eine Funktion an die einen Zahlenwert gerundet und formatiert ausgibt.

Hierbei kann gewählt werden welche Zeichen als Dezimal und Tausender Trenner verwendet werden sollen.

Wird die Angabe von Punkt und Komma weg gelassen dann wird '.,' angenommen.

Beispiel:

select me_to_char(hoehe,2) from punkte;
select me_to_char(hoehe,2,'.,') from punkte;

Ausgabe:
1.002,12

Beispiel:

select me_to_char(hoehe,2,',.') from punkte;

Ausgabe:
1,002.12

Beispiel:

select me_to_char(hoehe,2,' .') from punkte;

Ausgabe:
1 002.12

Funktion me_instr

Bietet einen Oracle kompatible "instr" Funktion an.

Siehe https://www.oracletutorial.com/oracle-string-functions/oracle-instr/

The instr() function searches for a substring in a string and returns the position of the substring in a string.

Syntax:

me_instr(str text, sub text, startpos int = 1, occurrence int = 1)

Beispiele:

select me_instr(column,'Test') from table 
select me_instr(column,'Test', 10) from table
select me_instr(column,'T', 1, 2) from table

Funktion to_char

Postgre verfügt über eine eigene Funktion "to_char", diese benötigt aber anders als die von Oracle immer zwei Parameter.

In MapEdit steht ihnen neben der Standard "to_char" Funktion mit zwei parametern, eine MapEdit eigene "to_char" Funktion für Numerische Werte (integer und double) zur Verfügung. Damit ist diese Funktion Oracle kompatibel

Syntax:

to_char(value numeric)
to_char(value int)

Funktion me_isdate

Ab Version 22.2.51

Mit dieser Funktion kann geprueft werden ob ein text wert (varchar) ein Datumswert ist.

Syntax:

me_isdate(value varchar)

Das folgende Beispiel liefert alle Datensätze zurück in denen in der Spalte "text_column" ein gültiger Datumsausdruck steht.

select * from table where me_isdate(text_column)

Funktion me_isnumeric

Ab Version 22.2.51

Mit dieser Funktion kann geprüft werden ob ein text wert (varchar) ein Numerischer Wert ist.

Syntax:

me_isnumeric(value varchar)

Das folgende Beispiel liefert alle Datensätze zurück in denen in der Spalte "text_column" einen gültigen Zahlenwert steht.

select * from table where me_isnumeric(text_column)

Funktion me_cast_to_numeric

Ab Version 22.2.62

Mit dieser Funktion können Werte in Numerische Werte umgewandelt werden und für Werte die nicht umgewandelt werden können ein Vorgabewert deklariert werden. NULL Werte werden in den Vorgabewert umgewandelt.

Syntax:

me_cast_to_numeric(colValue anyelement, prec numeric, scale numeric, errorValue numeric)

Das folgende Beispiel wandelt alle Texte im Feld "name" (vom typ varchar) in eine Zahl (den Datentyp numeric(10,3)) um. Alle Werte die keine Zahlen sind oder nicht in das Feld passen werden in "null" umgewandelt.

select me_cast_to_numeric(name, 10,3, null) from table

Das folgende Beispiel wandelt alle Texte im Feld "name" in eine Zahl (den Datentyp numeric(10,0)) um. Alle Werte die keine Zahlen sind oder nicht in das Feld passen werden in "-99" umgewandelt.

select me_cast_to_numeric(name, 10, 0, -99) from table

Hinweis: Postgres hat zum umwandeln von Werten auch die cast Funktion. Beispiel:

cast(value as numeric(10))

Diese fixe Postgres Funktion laeuft jedoch auf einen Fehler wenn der Ausgangswert nicht umgewandelt werden kann. Deswegen bietet MapEdit die Funktion me_cast_to_numeric an.

Funktion me_cast_to_varchar

Ab Version 22.2.62

Mit dieser Funktion können Werte in Text Werte umgewandelt werden und für Werte die nicht umgewandelt werden können ein Vorgabewert deklariert werden. NULL Werte werden in den Vorgabewert umgewandelt.

Syntax:

me_cast_to_varchar(colValue anyelement, length numeric, errorValue varchar)

Das folgende Beispiel wandelt alle Zahlen im Feld "alter" in einen Text mit der Länge 3 um. Zu lange werte werden abgeschnitten und werte die nicht umgewandelt werden können werden in den Wert "null" umgewandelt.

select me_cast_to_varchar(alter, 3, null) from table

Das folgende Beispiel wandelt alle Zahlen im Feld "alter" in einen Text mit der Länge 2 um. Zu lange Werte werden abgeschnitten und werte die nicht umgewandelt werden können werden in den Text "XY" umgewandelt.

select me_cast_to_varchar(alter, 2, 'XY') from table

Hinweis: Postgres hat zum umwandeln von Werten auch die cast Funktion. Beispiel:

cast(value as varchar(10))

Diese fixe Postgres Funktion läuft jedoch auf einen Fehler wenn der Ausgangswert nicht umgewandelt werden kann. Deswegen bietet MapEdit die Funktion me_cast_to_varchar an.

Funktion me_soundex

Bietet einen Soundex Funktion an. Damit können ähnlich klingende Worte gefunden werden.

Siehe https://en.wikipedia.org/wiki/Soundex

Syntax:

me_soundex(input text)

Beispiele:

select me_soundex(column) from table