Desejo configurar uma variável psql a partir de uma variável de ambiente shell existente que possa ser usada em psql
comandos posteriores.
Encontrei o \set
meta-comando, mas não consigo fazer com que ele use uma variável de ambiente existente no Linux:
user@localhost# MY_DB='test_database'
user@localhost# sudo -u postgres psql
\set dbname ${MY_DB}
\set
...
dbname = '${MY_DB}'
Considerando que eu gostaria dbname = 'test_database'
na última linha para que eu possa usá-lo ou exemplo como:\connect :dbname;
Como eu poderia conseguir isso com a página 15 no debian 11?
Isso não está me ajudando muito porque
\set dbname `echo ${MY_DB}`
está emitindo uma string vazia.
Isso também não, porque gostaria de definir minha variável psql apenas uma vez para evitar redundância e reutilizá-la em vários psql
comandos, em vez de defini-la várias vezes em -v
cada um desses psql
comandos.
psql versão 15 fornece o
\getenv
metacomando para fazer isso de forma eficiente:Observe que não é suficiente definir uma variável no shell a partir do qual o psql é iniciado: a variável precisa ser exportada (consulte
export
com shells POSIX) para ser acessível a partir de processos filhos. É por isso que, no seu exemplo,\set dbname `echo ${MY_DB}`
produz uma string vazia. Se você deseja usar o mais rápido\getenv
ouecho
em um subshell, deve fazerexport MY_DB='test_database'
.