Premiers pas : comment utiliser PostgreSQL avec PowerShell ?
Sommaire
I. Présentation
Certaines applications qui tournent sur Windows s'appuient sur une base de données PostgreSQL. Récemment, j'ai eu besoin d'interagir directement avec la base de données sans passer par l'application, pour intégrer des données. Ceci implique d'établir une connexion à PostgreSQL depuis PowerShell pour être en mesure d'exécuter des requêtes.
Dans ce tutoriel, je vais vous expliquer comment établir cette connexion et comment exécuter des requêtes depuis votre script.
II. Prérequis
Commencez par télécharger et installer le pilote ODBC de PostgreSQL sur le serveur depuis lequel vous allez exécuter votre script PowerShell : ODBC MSI
Maintenant que le pilote est installé, nous allons pouvoir jouer avec la ligne de commande.
III. Établir la connexion à postgreSQL
Pour établir la connexion à postgreSQL, il faut que l'on utilise notre pilote dans le script. Sur le serveur où il est installé, ouvrez "Administrateur de source de données ODBC (64 bits)" et repérez le nom du pilote que vous voulez utiliser dans l'onglet "Pilotes ODBC". Nous allons utiliser ce nom dans le script dans les paramètres de connexion.
Maintenant, commençons le script : la variable $ConnectSettings contient les paramètres de connexion au serveur postgreSQL et à la base de données. Indiquez, dans l'ordre : le nom du pilote ODBC (Driver), l'IP du serveur (Server), le port (Port), le nom de la base de données (Database), le nom utilisateur (Uid) et le mot de passe (Pwd).
Sur la deuxième ligne, nous allons utiliser la variable $ConnectPostgre pour créer un objet de connexion ODBC .NET. Un objet dans lequel on va utiliser nos paramètres de connexion, puis on termine par ouvrir la connexion.
# Etablir la connexion à PostgreSQL $ConnectSettings = "Driver={PostgreSQL Unicode(x64)};Server=127.0.0.1;Port=5432;Database=mydb;Uid=it-connect;Pwd=XyZ;" $ConnectPostgre = New-Object System.Data.Odbc.OdbcConnection $ConnectPostgre.ConnectionString = $ConnectSettings; $ConnectPostgre.Open();
La connexion à la base de données postgreSQL est désormais établie.
IV. Exécuter une requête postgreSQL avec PowerShell
Maintenant, nous allons voir comment exécuter une requête SQL en PS via le méthode ExecuteScalar(). Cette méthode permet d'exécuter la requête et de retourner la première ligne du résultat retourné par cette même requête (les autres lignes sont ignorées).
On peut utiliser cette méthode lorsque l'on s'attend à une seule valeur de retour, lorsque l'on veut compter un nombre d'éléments, ajouter une ligne dans la base de données, mettre à jour une ligne, etc. Il existe d'autres méthodes, notamment ExecuteNonQuery où le résultat est égal au nombre de lignes affectées.
En exemple, je vous propose de voir, comment récupérer le hash MD5 d'une chaîne caractères via une requête SQL.
Au sein de la connexion postgreSQL ouverte, on va créer une commande (CreateCommand()) et dans la propriété CommandText on va mettre le code de notre commande. Ensuite, le résultat de la requête exécutée sera stocké dans la variable $postGreSqlResult.
# Récupérer le hashage de la chaîne via Postgre $postGreSqlCommande = $ConnectPostgre.CreateCommand(); $postGreSqlCommande.CommandText = "SELECT md5('test'); " $postGreSqlResult = $postGreSqlCommande.ExecuteScalar(); Write-Host $postGreSqlResult -ForegroundColor Yellow
Ce qui donne :
Pour exécuter une autre type de requête, il suffit de modifier le CommandText. Par exemple pour une commande de type INSERT :
$postGreSqlCommande.CommandText = "INSERT INTO public.`"mytable`" (nom, prenom, site) ` VALUES ('Florian','B','www.it-connect.fr')"
Ce qui va vous permettre de manipuler les données de votre base de données ! Vous pouvez aussi facilement rechercher une ligne grâce à une requête SELECT.
V. Fermer une connexion ouverte
Toute connexion ouverte devra être fermée, sur le même principe que open() pour monter la connexion, on utilise ceci pour fermer notre connexion :
$ConnectPostgre.close()
Voilà, j'espère que grâce à cet article vous allez pouvoir communiquer avec votre base de données postgreSQL à partir de PowerShell !
Bonjour
Merci pour cet article qui m’est très utile.
J’aimerais savoir s’il est possible lancer une requête qui exécuterait un vaccun ?
Voici ma requête :
« VACUUM (ANALYSE, FULL, FREEZE, VERBOSE, SKIP_LOCKED on); »
Contrairement à votre exemple, il n’y a pas de valeur en retour.
Je pense comprendre qu’il faut remplacer « .ExecuteScalar(); » par une autre méthode, mais je ne sais pas laquelle.
De plus, comment puis-je savoir, une fois lancé, si le vacuum est terminé ?
Merci d’avance pour votre aide.