Estou trabalhando no código postgresql (lado do servidor). Instalei uma versão do código fonte seguindo o tutorial oficial: http://www.postgresql.org/docs/8.4/interactive/install-short.html
Fiz a mesma modificação no código, então preciso instalar novamente o postgresql, mas desta vez minha versão.
Renomeei o /usr/local/pgsql/ em /usr/local/pgsql2/ e fiz:
make distclean
./configure
make
sudo make install
sudo mkdir /usr/local/pgsql/data
sudo chown darkcoffeelinux /usr/local/pgsql/data
até agora tudo correu bem, mas com o comando
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
Eu recebi este erro:
The files belonging to this database system will be owned by user "darkcoffeelinux".
This user must also own the server process.
The database cluster will be initialized with locale en_US.UTF-8.
The default database encoding has accordingly been set to UTF8.
The default text search configuration will be set to "english".
fixing permissions on existing directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 24MB
creating configuration files ... ok
creating template1 database in /usr/local/pgsql/data/base/1 ... ok
initializing pg_authid ... Segmentation fault (core dumped)
child process exited with exit code 139
initdb: removing contents of data directory "/usr/local/pgsql/data"
Informações adicionais: estou usando kubuntu, postgresql 8.4.15
Acho que as permissões estão corretas porque senão você não teria chegado aqui.
Meu palpite é que uma modificação que você fez causou o problema. Este é particularmente o caso dado que é uma falha de segmentação. O que você realmente precisa fazer é olhar para a pilha de chamadas no momento em que o núcleo foi despejado e ver se você pode isolar onde no código isso está acontecendo e, em seguida, rastrear para ver quais modificações feitas podem ter causado isso. Dado que você modificou o código, o primeiro passo é verificar e ver se você pode reproduzir como diz o kgrittn, mas estou disposto a apostar que isso só aparecerá com o seu código modificado.
A próxima etapa provavelmente será executar o initdb dentro de um depurador e revisar as condições no momento da falha. Neste ponto, as práticas de depuração C padrão são realmente sua melhor aposta.
initdb
e o próprio processo do servidor deve ser executado como o mesmo usuário do sistema operacional que possui o diretório de dados. Não se esqueça de definir permissões para esse diretório para permitir apenas o acesso desse usuário (chmod 700
).Com relação à falha de segmentação - você pode causá-la com uma versão não modificada do PostgreSQL ou talvez seja resultado de um bug em alguma personalização que você fez? Você conseguiu obter um despejo de núcleo para isso?