Variáveis de ambiente no PostgreSQL

Introdução

Lidar com conexões em vários bancos de dados pode ser um trabalho bastante chato e propenso a erros. Se você está buscando entender melhor como configurar e controlar o comportamento do seu ambiente de banco de dados PostgreSQL, é importante conhecer as variáveis de ambiente, que desempenham um papel fundamental. Essas variáveis oferecem uma forma flexível e poderosa de personalizar diversos aspectos do PostgreSQL, desde configurações de conexão até opções de segurança e localização de arquivos. 

Neste guia, vamos explorar o conceito de variáveis de ambiente no contexto do PostgreSQL, discutindo como elas são utilizadas e quais são algumas das mais comuns. Como material de referência, utilizaremos a documentação oficial do PostgreSQL.

Roteiro:

  • O que são variáveis de ambiente no PostgreSQL?
  • Configuração e exemplo
  • Aplicações que utilizam variáveis de ambiente
  • Segurança

O que são variáveis de ambiente no PostgreSQL?

Variáveis de ambiente podem ser usadas para controlar o comportamento do servidor e de outras ferramentas relacionadas ao PostgreSQL, como o cliente psql e outros utilitários. Elas são usadas para configurar aspectos como diretórios de dados, níveis de registro, conexões de rede, localização de bibliotecas, entre outros.

Configuração e exemplo

O primeiro passo é entender qual variável de ambiente você deseja configurar e qual é o seu propósito. Existem várias delas, como variável para guardar informação de usuário, do nome do banco, de porta para conexão etc. É possível conferir uma lista com as variáveis disponíveis no site oficial do PostgreSQL, nesta página.

Entre as principais, estão:

  • PGHOST: especifica o host onde o servidor PostgreSQL está em execução, seja pelo nome dele ou por endereço de IP. Se não especificado, o PostgreSQL tentará se conectar ao servidor local;
  • PGPORT: define o número da porta que o servidor PostgreSQL usará para aceitar conexões TCP/IP. O valor padrão é 5432;
  • PGUSER: especifica o nome do usuário do PostgreSQL ao se conectar. Se não especificado, o nome de usuário do sistema operacional atual é usado;
  • PGDATABASE: especifica o nome do banco de dados ao qual se conectar. Se não especificado, o nome do usuário é usado como padrão;
  • PGPASSWORD: define a senha do usuário especificado pela variável PGUSER. Usado para autenticação automática ao conectar-se ao PostgreSQL.

Linux (bash)

Para exemplificar, vamos começar com as variáveis PGUSER e PGPASSWORD, e o primeiro passo é inserir seu dado de usuário e sua senha nas variáveis usando o comando export, desta forma (estamos no usuário “postgres”):

export PGUSER=<usuario>
export PGPASSWORD=<senha>

O nosso, com um usuário de teste chamado “usuario_ex1”, e sua senha sendo “senha”, ficou assim: 

Debian shell: definindo variáveis de ambiente
$ export PGUSER=usuario_ex1
$ export PGPASSWORD=senha

Então, ao conectar com o psql, não é necessário passar o parâmetro de identificação do usuário e nem o da senha, que serão puxados automaticamente dessas variáveis, conforme vemos abaixo na consulta do usuário atual:

Debian shell: acessando o psql sem parâmetro de usuário e senha
$ psql -h localhost -d postgres
psql (16.2 (Debian 16.2-1.pgdg120+2))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=> SELECT current_user;
 current_user
--------------
 usuario_ex1
(1 row)

No exemplo anterior, foi rodado o comando SELECT current_user; dentro do psql para exibir o usuário atual, e podemos ver que a conexão com o usuário que definimos nas variáveis de ambiente foi realizada com sucesso.

Agora, vamos definir também as variáveis PGHOST, PGPORT e PGDATABASE, buscando acessar o psql sem a necessidade de passar algum parâmetro.
Seguindo os mesmo passos, vamos começar com o export para acessar e definir valor a essas variáveis:

export PGHOST=<host>
export PGPORT=<porta>
export PGDATABASE=<database>

Aqui ficou assim:

Debian shell: definindo variáveis de ambiente
export PGHOST=localhost
export PGPORT=5432
export PGDATABASE=meu_banco

Portanto, ao acessar o psql sem nenhum parâmetro, este é o resultado:

Debian shell: acessando o psql sem nenhum parâmetro
$ psql
psql (16.2 (Debian 16.2-1.pgdg120+2))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

meu_banco=> SELECT current_user;
 current_user
--------------
 usuario_ex1
(1 row)

Busca e reset

Para pesquisarmos as variáveis já configuradas e seus valores, o que é útil para o gerenciamento delas, basta rodar o seguinte comando:

Debian shell: buscando variáveis de ambiente com o comando env
$ env | grep PG
PGPORT=5432
PGPASSWORD=senha
PGUSER=usuario_ex1
PGDATABASE=meu_banco
PGHOST=localhost

Também podemos verificar as variáveis já configuradas e seus valores pelo próprio comando echo:

Debian shell: buscando variável de ambiente com o comando echo
$ echo $PGUSER
usuario_ex1

E se for necessário resetar alguma variável, é só rodar o mesmo comando de definição, com export, e deixar sem valor atribuído (ou trocar o valor, se precisar):

export PGHOST=

Windows 11

Para definirmos nossas variáveis de ambiente no Windows 11, o primeiro passo é acessar o menu de variáveis de ambiente, que pode ser facilmente encontrado buscando por “variáveis” no Pesquisar do Windows e selecionando “Editar as variáveis de ambiente”. A primeira janela a ser aberta será esta:

Propriedades do Sistema Windows 11

Depois, será necessário acessar o menu citado clicando no botão “Variáveis de Ambiente…” para ver esta tela:

Variáveis de Ambiente Windows 11

E então é só adicionar as variáveis em “Variáveis do sistema” pelo botão “Novo” e inserir os valores desejados, conforme imagem abaixo:

Criando variável de ambiente no Windows 11

Aqui, configuramos as mesmas variáveis de antes: PGUSER, PGPASSWORD, PGDATABASE, e, além disso, também incluímos o caminho do executável do psql na variável de sistema “Path”, facilitando, assim, o acesso via cmd, sem a necessidade de passar o caminho do psql completo. O caminho que deve ser adicionado na variável “Path”, caso tenha optado por instalar no diretório padrão, é C:\Program Files\PostgreSQL\16\bin\, ficando desta forma:

Editando a variável de ambiente Windows 11

Após alterar as variáveis, pode ser necessário reiniciar o sistema. 

Então, o acesso via cmd pode ser feito simplesmente rodando o comando psql:

Windows shell: acessando o psql sem nenhum parâmetro
PS C:\Users\ghans> psql
psql (16.2)
ADVERTÊNCIA: A página de código da console (850) difere da página de código do Windows (1252)
             os caracteres de 8 bits podem não funcionar corretamente. Veja a página de
             referência do psql "Notes for Windows users" para obter detalhes.
Digite "help" para obter ajuda.

banco_ex=#

No mesmo assistente de configuração que acessamos para criar as variáveis, também podemos consultar as existentes e excluir ou alterar alguma delas quando necessário.

Aplicações que utilizam variáveis de ambiente

Temos uma série de aplicações clientes que utilizam as variáveis de ambiente se não tiverem parâmetros explícitos na linha de comando. É possível conferir essa lista dentro do site oficial do PostgreSQL clicando aqui. E caso queira entender como alguma aplicação específica lida com as variáveis, basta clicar no nome dela e ver quais e como elas são usadas. É bom ter em mente que qualquer aplicação que use a biblioteca libpq também utiliza as variáveis de ambiente.

Segurança

Entenda que variáveis de ambiente não são a forma mais segura de lidar com senhas de usuários. É muito fácil verificar o valor das variáveis correntes e pegar o conteúdo de uma variável PGPASSWORD, por exemplo. Existem opções um pouco mais seguras para lidar com isso, como o uso do “.pgpass”, como veremos em breve. Portanto, use as variáveis de ambiente com parcimônia, principalmente a variável PGPASSWORD.

Conclusão

Variáveis de ambiente tornam a vida mais simples, uma vez que não precisamos repetir a mesma coisa várias vezes. No entanto, ao entrar, pela primeira vez, sem perceber, num local que está utilizando variáveis de ambiente, isso pode levar você a comportamentos inesperados. Você pode esperar que o valor padrão seja utilizado, e o comportamento das coisas vai parecer muito estranho de repente. Ou seja, ame ou odeie, é importante aprender a lidar com as variáveis de ambiente e entender o seu comportamento no dia a dia. 

Veremos, nos artigos seguintes, que existem outras opções mais organizadas para lidar com locais complexos, onde você precisa se conectar em vários ambientes diferentes, como o uso do .pg_service.conf.

Compartilhe

Você pode gostar

Tipos de cargas dos bancos de dados

Introdução Cargas de dados referem-se aos diferentes tipos de operações e transações que um banco de dados deve processar. Essas cargas variam conforme o tipo

Catálogo do sistema (pg_catalog)

Introdução O pg_catalog é um schema especial no PostgreSQL que guarda todos os segredos do seu banco de dados. Quer saber como suas tabelas são

Arquivos, diretórios e processos

Introdução No PostgreSQL, a organização de arquivos e diretórios, bem como a gestão de processos, são componentes fundamentais para entender o seu funcionamento. Este artigo

plugins premium WordPress