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
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