Отладка процесса сервера postgreSQL (как определить правильный идентификатор процесса) - PullRequest
2 голосов
/ 04 января 2012

Я написал библиотеку расширения C для PG, используя соглашение о вызовах V1. Мой БД вер 8.4. Я успешно создал новые функции.

Однако, когда я вызываю свои новые функции, сервер падает, и на консоль отправляется следующее сообщение:

The connection to the server was lost. Attempting reset: Failed.

Журнал сервера содержит строку:

server process (PID 14751) was terminated by signal 11: Segmentation fault

Я хочу присоединить gdb к процессу postgres и посмотреть, смогу ли я получить трассировку стека, чтобы помочь мне начать отладку. Тем не менее, когда я бегу

ps aux | grep postgres

чтобы попытаться найти процесс postgres, похоже, существует несколько процессов, называемых postgres.

Как правильно определить процесс сервера postgres (после перезапуска) для целей отладки, как описано выше?

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Я только что узнал ответ на этот вопрос.Имя базы данных также является частью вывода ps aux.

Например:

postgres  1071  0.0  0.1 101120  5360 ?        S    Jan03   0:01 /usr/lib/postgresql/8.4/bin/postgres -D /var/lib/postgresql/8.4/main -c config_file=/etc/postgresql/8.4/main/postgresql.conf
postgres 11866  0.0  0.1  68444  4340 pts/1    S+   10:16   0:00 /usr/lib/postgresql/8.4/bin/psql postgres
postgres 14856  0.0  0.1 103612  4716 ?        Ss   14:56   0:00 postgres: postgres mydatabase [local] idle  
postgres 14894  0.0  0.0 101120  1640 ?        Ss   15:05   0:00 postgres: writer process  

Идентификатор процесса в этом случае - 14856

1 голос
/ 04 января 2012

Вы можете получить PID текущего бэкэнда следующим образом:

select pg_backend_pid();
...