Estou utilizando o Postgresql 10 e após a instalação do banco de dados coloquei PGOPTS="-i"
dentro deste arquivo /etc/sysconfig/pgsql/postgresql
para que o Postgresql escutasse em todas as interfaces.
Quando eu estava usando o CentOS 6, funcionou e o postgresql começou com a -i
opção na linha de comando.
Porém, precisei migrar o banco de dados para o CentOS 7 e o postgresql (agora passou a usar postmaster
ao invés do postgres
) não inicializa com a opção.
Eu sei que no EL7, systemd
é usado e o arquivo no diretório sysconfig pode não ser lido. Mas então, onde posso definir essa variável?
Também estou procurando definir essa variável como um novo arquivo. Como estou usando o Ansible, é um requisito para mim ter um novo arquivo com essa configuração. Isso significa que não quero editar arquivos existentes, como postgres.conf
colocados no diretório de instalação do banco de dados. Isso só seria feito se não houvesse outra opção de definir a variável PGOPTS em algum lugar.
Eu tentei:
/usr/lib/systemd/system/postgresql.service.d/postgresql.conf
com o seguinte dentro do[Service]
grupo:Environment=PGOPTS=-i
. Eu posso ver que o diretório é lido (e outras variáveis são lidas - como PGDATA - mas não está lendo PGOPTS ou pelo menos o processo postmaster não está sendo iniciado com a opção); Por causa disso, também tentei configurá-lo/usr/lib/systemd/system/postgresql.service
sem sucesso;/etc/conf.d/postgresql
mas, como li em algum lugar, não é mais usado;/etc/profile.d/postgresql.sh
configurar e exportar a variável;~postgres/.bash-profile
configurar e exportar a variável;
Você está no caminho certo com systemd Environment= settings. (Por outro lado, o processo de inicialização do serviço não envolve nada como shells de usuário e logins interativos, portanto, os arquivos de "perfil" são absolutamente irrelevantes.)
Mas o problema é que o daemon PostgreSQL não usa e nunca usou essa variável de ambiente em primeiro lugar. Não há nada no software real que faça com que o conteúdo de $PGOPTS seja magicamente anexado à linha de comando do daemon.
Essa mágica costumava ser feita dentro do antigo script de inicialização (
/etc/rc.d/init.d/postgresql
que era usado pelo RedHat/CentOS antes do systemd) – na verdade não é usado como uma variável de "ambiente", mas como uma substituição direta na linha de comando 'postgres':Então, onde adicionar a
-i
opção de linha de comando, senão para $PGOPTS? Adicione-o diretamente à linha de comando 'postgres', é claro. A linha de comando completa é especificada em ExecStart= para postgresql.service do systemd; você pode ver que ainda mantém algumas substituições, mas também pode adicionar opções personalizadas diretamente:Altere isso para:
Nota: não edite as unidades systemd em /usr/lib; em vez disso, copie o arquivo unit para /etc/systemd/system e edite sua cópia, para que suas alterações não sejam perdidas durante as atualizações do pacote.
A página de manual do postmaster(1) diz: