No Linux Mint 17.0 Cinnamon Edition, eu quero usar /var/run/postgresql
como a opção unix_socket_directories
para todos os meus bancos de dados postgres.
Sempre que eu executo o comando pg_ctl -D postgres-data -o '-F -p 33311' start
para iniciar meu banco de dados local, recebo o erro FATAL: could not create lock file "/var/run/postgresql/.s.PGSQL.33311.lock": Permission denied
.
Como muitas respostas em AskUbuntu, StackOverflow e vários fóruns sugerem, tenho que executar sudo chmod 777 /var/run/postgresql
ou sudo chown -R $USER:$USER /var/run/postgresql
para alterar as permissões do diretório para que eu possa escrever nele. Então eu posso iniciar meu banco de dados. No entanto, toda vez que eu reinicio, as permissões desaparecem; o diretório não é mais gravável pelo mundo e o usuário postgres-xc
recupera a propriedade do usuário e do grupo no diretório.
Nem sudo adduser $USER postgres
ou sudo adduser $USER postgres-xc
alivia o problema de permissões.
Eu tentei fazer uma instalação limpa conforme descrito aqui , mas Ainda tenho o problema na reinicialização.
Eu tentei alterar o valor de unix_socket_directories
para /tmp
em ./postgres-data/postgresql.conf
(o arquivo de configuração do banco de dados local), e isso permite que eu inicie esse banco de dados específico sem precisar atualizar as permissões a cada reinicialização. No entanto, eu também tenho um script que usa pg_ctl -D $DIR initdb && pg_ctl -D $DIR start
para configurar e iniciar bancos de dados em tempo real. Como tal, um arquivo de configuração postgresql.conf
padrão é usado para esses bancos de dados, portanto, unix_socket_directories
é o unwritable /var/run/postgresql
e recebo erros de permissão negada ao executar esse script. Editar manualmente / programaticamente essas configurações on-the-fly para usar unix_socket_directories = '/tmp'
é ... indesejável.
Eu sei que eu poderia usar o -o
flag com pg_ctl
para substituir a opção unix_socket_directories
para /tmp
, mas esse script é compartilhado por outros desenvolvedores que não usam o Ubuntu, então eu não necessariamente quero para restringir todos a usar o diretório /tmp
, especialmente se suas configurações diferiam um pouco. Eu preferiria que todos usassem o local padrão para sua instalação. Pessoalmente, eu também preferiria manter o diretório padrão para compatibilidade geral com outros pacotes do Ubuntu; Por exemplo, o pgadmin analisa /var/run/postgresql
para um arquivo de bloqueio por padrão.
Eu também tentei editar /etc/postgresql/9.3/main/pg_ctl.conf
em uma tentativa de passar automaticamente essas opções sempre que eu uso pg_ctl
:
# Automatic pg_ctl configuration
# This configuration file contains cluster specific options to be passed to
# pg_ctl(1).
pg_ctl_options = '-o "-c unix_socket_directories=/tmp -c unix_socket_group=jackson -c unix_socket_permissions=0777"'
Mas isso não teve nenhum efeito.
Informe sobre como posso usar /var/run/postgresql
como minha opção unix_socket_directories
para todos os meus bancos de dados postgres sem ter que executar sudo chown -R $USER:$USER /var/run/postgresql
sempre que eu reiniciar meu sistema. Obrigado.