jeudi 1 décembre 2016

PowerShell et PostgreSQL

Dans cet article, nous allons voir l’accès aux bases PostgreSQL avec Windows PowerShell et le Data Provider "Ngpsql.dll". L'exemple suivant montre comment se connecter sur une base PostgreSQL, et utilisation des instructions Create Table, Insert, Query, Update et Drop Table.

Référence


Avant d’exécuter le script, notez que j'ai préalablement installé un serveur "PostgreSQL Portable" sur lequel j'ai créé la base de données "Base1". J'ai également créé un dossier "npgsql" au même niveau que mon script. Ce dossier contient contient les fichiers du Data Provider NpgSQL. La table et les données peuvent être créé ensuite à l'aide des exemples de requêtes SQL présent dans le script.

Liens utiles :
- Serveur PostgreSQL portable
- Data Provider NpgSQL              

Exemple



 
#Chemin courant.
$curpath = ""
Try   { $curpath = Split-Path $MyInvocation.MyCommand.Path }
Catch { $curpath = split-path -parent $psISE.CurrentFile.Fullpath }

#Assembly.
[void][Reflection.Assembly]::LoadFile($curpath+"\npgsql\Npgsql.dll")
[void][Reflection.Assembly]::LoadFile($curpath+"\npgsql\Mono.Security.dll")

#Paramêtres PostgreSQL.
$port="5432"
$server="10.151.16.234"
$user="user1"
$password="P@ssw0rd"

#Chaine de connexion.
$database = "base1"
$connexion = "Server="+$server+";Port="+$port+";User Id="+$user+";Password="+$password+";Integrated Security=true"

function postgre_SQL([string] $ps_conn, [string] $ps_base, [string] $ps_query)
 {
   #Initialisation
   $conn = $ps_conn+";Database="+$ps_base

   #Déclaration des objets.
   $DBconn = New-Object NpgSql.NpgsqlConnection($conn)
   $cmd    = New-Object Npgsql.NpgsqlCommand
   $ds     = New-Object System.Data.DataSet
   $da     = New-Object Npgsql.NpgsqlDataAdapter

   #Exécuter.
   $cmd.CommandTimeout = 30
   $cmd.Connection     = $DBconn
   $cmd.CommandText    = $ps_query
   $da.SelectCommand   = $cmd
   [void]$da.Fill($ds)

   #Ferme la connexion.
   $DBconn.Close()

   #Retour.
   return $ds.Tables[0]
 }

#---------------------------------------------------------------------------#
#Voici la liste de différentes requêtes SQL que vous pouvez essayer.
#Supprimez le # devant la requête SQL que vous souhaitez tester.
#---------------------------------------------------------------------------#
#Créer une table.
#$psQuery = "CREATE TABLE Table1(Colonne1 nchar(16) PRIMARY KEY NOT NULL, Colonne2 nchar(16));"
#Ajouter une ligne.
#$psQuery = "INSERT INTO Table1(Colonne1,Colonne2) VALUES ('Jumbor','PowerShell');"
#Lire une table.
#$psQuery = "select * from Table1;"
#Lire une ligne.
#$psQuery = "select * from Table1 WHERE Colonne1 = 'Jumbor12';"
#Modifier une valeur.
#$psQuery = "UPDATE Table1 SET Colonne2 = 'PowerShell 2.0' WHERE Colonne2 = 'PowerShell';"
#Supprimer une ligne.
#$psQuery = "DELETE FROM Table1 WHERE Colonne1 = 'Jumbor12';"
#Supprimer une table.
#$psQuery = "DROP TABLE Table1;"
#---------------------------------------------------------------------------#

#Affiche la requête exécutée.
Write-Host $psQuery

#Exécute la requête.
$datas = postgre_SQL $connexion $database $psQuery
$datas | Out-GridView

#Exécution terminé.
Write-Host "Exécution terminé."

#Fin.