{"id":439,"date":"2025-05-14T16:23:59","date_gmt":"2025-05-14T16:23:59","guid":{"rendered":"https:\/\/oberle-it-beratung.de\/?p=439"},"modified":"2025-05-14T16:23:59","modified_gmt":"2025-05-14T16:23:59","slug":"eine-powershell-funktion-fuer-postgres-sql-zugriffe","status":"publish","type":"post","link":"https:\/\/www.elrebo.de\/index.php\/2025\/05\/14\/eine-powershell-funktion-fuer-postgres-sql-zugriffe\/","title":{"rendered":"Eine Powershell-Funktion f\u00fcr Postgres-SQL-Zugriffe"},"content":{"rendered":"\n<p>Wer Aufgaben am Computer automatisieren will, der braucht Programme. Oder er verwendet eine Skript-Sprache, die auf seinem Computer funktioniert.<\/p>\n\n\n\n<p>Je nach Betriebssystem sind das dann unterschiedliche Skript-Sprachen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>unter Windows gibt es die &#8220;Command Line&#8221;, die so oder so \u00e4hnlich schon unter DOS existiert hat und die Powershell<\/li>\n\n\n\n<li>unter Linux und MacOS gibt es die verschiedenen Varianten der &#8220;Shell&#8221;, wie sh, bash oder zsh und die Powershell<\/li>\n<\/ul>\n\n\n\n<p>Will man seine Skripte m\u00f6glichst flexibel f\u00fcr unterschiedliche Betriebssysteme bereitstellen, dann kann man sie als Powershell-Skripte schreiben, da man die Powershell auf Windows- und Unix-Betriebssystemen installieren kann.<\/p>\n\n\n\n<p>Nachdem ich mich also f\u00fcr die Powershell entschieden hatte, brauchte ich eine M\u00f6glichkeit, aus der Powershell auf meine Postgres-Datenbank zuzugreifen. Daf\u00fcr habe ich das GitHub-Projekt <a href=\"https:\/\/github.com\/ChristophOberle\/postgres-powershell\/tree\/main\">postgres-powershell<\/a> mit dem Powershell-Modul <a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2025\/05\/DbModule.psm1\" data-type=\"attachment\" data-id=\"447\">DbModule.psm1<\/a> erstellt, dass genau eine Powershell-Funktion bereitstellt: InvokePgSqlCmd.<\/p>\n\n\n\n<p>Mit dieser Funktion kann man beliebige SQL-Statements in einer Postgres-Datenbank ausf\u00fchren.<\/p>\n\n\n\n<p>Damit die Skripte im Batch ohne Benutzerinteraktion ausgef\u00fchrt werden k\u00f6nnen, darf es beim Connect an die Postgres-Datenbank keine interaktive Passwort-Abfrage geben. Das kann man in Postgres am einfachsten \u00fcber eine .pgpass-Datei im Home-Verzeichnis des ausf\u00fchrenden Benutzers erreichen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ein Beispiel: alle Schemas in der Datenbank auflisten<\/h3>\n\n\n\n<p>Wenn Sie alle Schemas in einer Datenbank auflisten wollen, dann k\u00f6nnen Sie das mit dem SQL-Statement <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>SELECT nspname FROM pg_catalog.pg_namespace;<\/code><\/li>\n<\/ul>\n\n\n\n<p>erreichen.<\/p>\n\n\n\n<p>In Powershell sieht das dann so aus:<\/p>\n\n\n\n<p><code>Import-Module -name .\/DbModule.psm1<\/code><\/p>\n\n\n\n<p><code>$schemas = InvokePgSqlCmd ` <br>    -Server \"localhost\" `<br>    -Port \"5432\" `<br>    -Database \"MeineDB\" `<\/code><br> <code>    -User \"username\" `<br>    -Query \"SELECT nspname FROM pg_catalog.pg_namespace;\"<\/code><\/p>\n\n\n\n<p>Jetzt enth\u00e4lt die Variable $schemas eine Liste der Schemas der Datenbank &#8220;MeineDB&#8221;.<\/p>\n\n\n\n<p>Dieses Powershell-Modul nutze ich im Maven-Projekt <a href=\"https:\/\/elrebo.de\/dv2gen-maven-plugin\" data-type=\"post\" data-id=\"431\">dv2gen-maven-plugin <\/a>um Daten in das DataVault 2.0 Data Warehouse zu laden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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: Will man seine Skripte m\u00f6glichst flexibel f\u00fcr unterschiedliche Betriebssysteme bereitstellen, dann kann man sie als Powershell-Skripte schreiben, da man die Powershell auf Windows- und Unix-Betriebssystemen installieren kann. Nachdem [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":441,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[47,6,55],"class_list":["post-439","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-werkzeuge","tag-postgres","tag-powershell","tag-sql"],"_links":{"self":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/posts\/439","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/comments?post=439"}],"version-history":[{"count":0,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/posts\/439\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/media\/441"}],"wp:attachment":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/media?parent=439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/categories?post=439"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/tags?post=439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}