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:
$ 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:
$ 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:
export PGHOST=localhost
export PGPORT=5432
export PGDATABASE=meu_banco
Portanto, ao acessar o psql sem nenhum parâmetro, este é o resultado:
$ 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:
$ 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:
$ 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:
Depois, será necessário acessar o menu citado clicando no botão “Variáveis de Ambiente…” para ver esta tela:
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:
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:
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:
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.