Eu tive que compilar o PostgreSQL 8.1 no Debian Squeeze porque estou usando o Project Open, que é baseado no OpenACS e não será executado em versões mais recentes do PostgreSQL.
A configuração de compilação padrão coloca o unix_socket
em /tmp
, mas o Project Open, que depende do PostgreSQL, não funcionará porque ele procura o unix_socket
at /var/run/postgresql
.
Há uma configuração em postgresql.conf
para definir o local do soquete. Meu problema era que eu poderia definir para /tmp
e psql
trabalhado, mas não para o projeto aberto, ou poderia configurá-lo para /var/run/postgresql
e psql
não funcionaria, mas o projeto aberto funcionava.
Uma solução para o problema é definir o soquete para /var/run/postgresql
e, em seguida, executar psql
, com base na sugestão de Peter, como:
psql -h /var/run/postgresql
Isso é executado localmente usando permissões locais. A única desvantagem é que é mais digitação do que simplesmente "psql".
A outra sugestão que alguém fez foi criar um link simbólico entre os dois locais. Isso também funcionou, mas o link desapareceu após a reinicialização. Talvez seja mais fácil usar apenas o argumento -h, no entanto, criei o link simbólico a partir do script do PostgreSQL em /etc/init.d
. Coloquei o comando symbolic link create na seção "start". É claro que, quando eu emita um comando para parar e iniciar ou reiniciar, ele tentará recriar um link simbólico existente, mas, além da mensagem de aviso, provavelmente não haverá danos nisso.
No meu caso, em vez de:
ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
Eu tenho
ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432
e definiram explicitamente o unix_socket como /var/run/postgresql/.s.PGSQL.5432
in postgresql.conf
.