16/12/2024

PowerShell

Premiers pas : comment utiliser PostgreSQL avec PowerShell ?

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 !

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

1 commentaire sur “Premiers pas : comment utiliser PostgreSQL avec 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.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.