Wer Aufgaben am Computer automatisieren will, der braucht Programme. Oder er verwendet eine Skript-Sprache, die auf seinem Computer funktioniert.
Je nach Betriebssystem sind das dann unterschiedliche Skript-Sprachen:
- unter Windows gibt es die „Command Line“, die so oder so ähnlich schon unter DOS existiert hat und die Powershell
- unter Linux und MacOS gibt es die verschiedenen Varianten der „Shell“, wie sh, bash oder zsh und die Powershell
Will man seine Skripte möglichst flexibel für unterschiedliche Betriebssysteme bereitstellen, dann kann man sie als Powershell-Skripte schreiben, da man die Powershell auf Windows- und Unix-Betriebssystemen installieren kann.
Nachdem ich mich also für die Powershell entschieden hatte, brauchte ich eine Möglichkeit, aus der Powershell auf meine Postgres-Datenbank zuzugreifen. Dafür habe ich das GitHub-Projekt postgres-powershell mit dem Powershell-Modul DbModule.psm1 erstellt, dass genau eine Powershell-Funktion bereitstellt: InvokePgSqlCmd.
Mit dieser Funktion kann man beliebige SQL-Statements in einer Postgres-Datenbank ausführen.
Damit die Skripte im Batch ohne Benutzerinteraktion ausgeführt werden können, darf es beim Connect an die Postgres-Datenbank keine interaktive Passwort-Abfrage geben. Das kann man in Postgres am einfachsten über eine .pgpass-Datei im Home-Verzeichnis des ausführenden Benutzers erreichen.
Ein Beispiel: alle Schemas in der Datenbank auflisten
Wenn Sie alle Schemas in einer Datenbank auflisten wollen, dann können Sie das mit dem SQL-Statement
SELECT nspname FROM pg_catalog.pg_namespace;
erreichen.
In Powershell sieht das dann so aus:
Import-Module -name ./DbModule.psm1
$schemas = InvokePgSqlCmd `
-Server "localhost" `
-Port "5432" `
-Database "MeineDB" `
-User "username" `
-Query "SELECT nspname FROM pg_catalog.pg_namespace;"
Jetzt enthält die Variable $schemas eine Liste der Schemas der Datenbank „MeineDB“.
Dieses Powershell-Modul nutze ich im Maven-Projekt dv2gen-maven-plugin um Daten in das DataVault 2.0 Data Warehouse zu laden.
Schreibe einen Kommentar