Alterar permanentemente permissões de / var / run / postgresql

2

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.

    
por Jackson 02.06.2015 / 00:58

2 respostas

1

Execute o seguinte para recuperar o diretório (imediatamente e nas inicializações subseqüentes):

service='reclaim-postgresql'
service_file="/etc/init.d/${service}"

echo "#!/bin/sh
set -e

### BEGIN INIT INFO
# Provides:          ${service}
# Required-Start:    \$postgres-xc
# Required-Stop:     \$postgres-xc
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Reclaim /var/run/postgresql
### END INIT INFO

chown -R ${USER}:${USER} /var/run/postgresql" \
    | sudo tee "${service_file}"
sudo chmod +x "${service_file}"
sudo update-rc.d "${service}" defaults
sudo service "${service}" start

Observe que, ao executar sudo apt-get upgrade para atualizar postgres, talvez você precise temporariamente sudo chown -R postgres:postgres /var/run/postgresql para que a atualização seja bem-sucedida.

    
por 06.06.2015 / 21:15
0

Dependendo do seu sistema init, adicione o comando chown / chmod no script de inicialização relevante para o PostgreSQL, como /etc/init.d/postgresql .

    
por 04.06.2015 / 14:56