Olá, pessoal!
Neste artigo, você aprenderá a conectar o PowerShell ao PostgreSQL, criar e gerenciar sessões, executar consultas SQL e trabalhar com os objetos retornados. Além disso, como o PowerShell está disponível para Windows, Linux e macOS, você pode utilizar os mesmos comandos para administrar diferentes ambientes e, assim, reduzir as variações operacionais entre os sistemas.
Para conectar o PowerShell ao PostgreSQL, utilizaremos o Posh-PG, um projeto experimental que disponibiliza comandos específicos, como New-PgSession e Invoke-PgQuery. A principal diferença em relação a módulos baseados apenas em comandos genéricos é, justamente, a possibilidade de trabalhar com cmdlets próprios para criar sessões e executar operações no PostgreSQL, mantendo, dessa forma, uma experiência mais próxima do padrão de uso do PowerShell.
Com o Posh-PG, podemos, portanto, utilizar comandos específicos do PowerShell para criar sessões, executar consultas e trabalhar com os resultados retornados pelo PostgreSQL.
Como instalar o Posh-PG
O Posh-PG ainda está em fase experimental. Por esse motivo, execute inicialmente os exemplos deste artigo em um ambiente de laboratório. Além disso, antes de adotar o módulo em produção, realize uma avaliação técnica prévia.
Validar os pré-requisitos
- Antes de iniciar, confirme se o PowerShell está instalado e acessível pelo comando pwsh, se o Git está disponível para clonar o repositório e, além disso, se há uma versão do SDK do .NET compatível com a solução do projeto.
- Clonar o repositório do GitHub do projeto;
- Por fim, verifique se o SDK do .NET é compatível com a solução do projeto.
Instalar o Posh-PG
- Inicialmente, você realizará a instalação em três etapas: primeiro, clone o repositório e acesse o diretório do projeto; em seguida, compile a solução; por fim, importe o arquivo do módulo gerado pelo processo de build.
git clone https://github.com/MikuZZZ/Posh-PG.git
Set-Location ./Posh-PG
- Compile a solução com o comando abaixo. Ao final, confirme se o processo foi concluído sem erros e se o arquivo PoshPG.dll foi gerado no diretório utilizado na etapa de importação.
dotnet build
- Importar o Módulo.
- $modulePath = Join-Path $PWD ‘PoshPG/bin/Debug/netcoreapp3.1/PoshPG.dll’
Import-Module $modulePath
Como usar o módulo
Criar conexão com o PostgreSQL
Antes de executar consultas, é necessário criar uma sessão com o PostgreSQL. Para isso, vamos utilizar o comando New-PgSession e informar os parâmetros de conexão descritos a seguir:
- Name: nome utilizado para identificar a sessão. Esse valor poderá ser informado posteriormente em comandos como Get-PgSession, Set-PgDefaultSession e Invoke-PgQuery;
- Endpoint: endereço do servidor PostgreSQL, que pode ser informado como nome DNS, nome do host ou endereço IP;
- Username: usuário que será utilizado para autenticação na instância ou no banco de dados PostgreSQL;
- Password: senha do usuário utilizado na conexão. Em ambientes reais, evite armazenar credenciais diretamente no script e utilize um mecanismo seguro de gerenciamento de segredos;
- Database: O banco de dados que será usado nesta sessão.
New-PgSession `
-Name ‘dev’ `
-Endpoint ‘localhost’ `
-Username ‘postgres’ `
-Password ‘<senha-temporaria-de-laboratorio>’ `
-Database ‘postgres’
Após estabelecer a conexão, use o comando “Get-PgSession” para verificar as sessões abertas. Esse comando lista todas as sessões registradas no PowerShell.
Para definir uma sessão como padrão, utilize o comando Set-PgDefaultSession. Dessa forma, os comandos que não receberem uma sessão explicitamente utilizarão automaticamente a conexão selecionada.
Executar uma consulta
Para executar uma consulta, utilizaremos o comando Invoke-PgQuery. Esse cmdlet envia ao PostgreSQL o texto SQL informado pelo usuário e, em seguida, retorna o resultado como um objeto do PowerShell.
- Session: nome da sessão criada por New-PgSession. Quando esse parâmetro não for informado, o comando utilizará a sessão padrão configurada com Set-PgDefaultSession;
- Text: instrução SQL que será enviada e executada na sessão PostgreSQL selecionada.
O comando possui outros parâmetros opcionais. Portanto, para executar a consulta apresentada neste exemplo, informe a sessão e, em seguida, o texto SQL que será enviado ao PostgreSQL.
Abaixo, confira um exemplo de como utilizar o comando:
$query = @’
SELECT current_database() AS database_name,
current_user AS role_name,
version() AS server_version;
‘@
$result = Invoke-PgQuery -Session ‘dev’ -Text $query
$result
Abaixo segue o resultado retornado pelo PowerShell

Como o PowerShell retorna o resultado como um objeto, você pode, portanto, inspecioná-lo com Get-Member e, além disso, processá-lo com comandos como ForEach-Object. Dessa forma, os exemplos abaixo mostram como identificar o tipo do objeto e, em seguida, percorrer os dados retornados:
$result | Get-Member
$result | ForEach-Object {
$_.GetType().FullName
}
Reutilizar consultas com New-PgQuery
O comando New-PgQuery permite registrar uma consulta para reutilização posterior. Dessa forma, essa abordagem evita a repetição do mesmo texto SQL em diferentes trechos do script e, além disso, facilita a passagem de parâmetros, como o schema utilizado no exemplo a seguir:
New-PgQuery `
-Name ‘ListarTabelasPublicas’ `
-Query @’
SELECT table_name
FROM information_schema.tables
WHERE table_schema = @Schema
ORDER BY table_name;
‘@
$params = @{ Schema = ‘public’ }
Invoke-PgQuery -Name ‘ListarTabelasPublicas’ -Parameters $params
O Posh-PG oferece uma forma interessante de explorar a administração do PostgreSQL com comandos no padrão do PowerShell. Ao longo deste artigo, vimos como compilar e importar o módulo, criar uma sessão, executar consultas e, além disso, reutilizar comandos SQL. Como o projeto ainda é experimental, portanto, utilize-o inicialmente em ambientes de laboratório e valide cuidadosamente seu comportamento antes de considerar qualquer uso mais amplo. Para cenários corporativos, também é importante, ainda, adotar práticas seguras para o tratamento de credenciais, o controle de acesso e o registro das automações executadas.