调试postgreSQL服务器进程(如何识别正确的进程id)

发布于 2024-12-25 05:53:15 字数 501 浏览 0 评论 0原文

我已经为 PG 编写了一个 C 扩展库,使用 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 服务器进程(重新启动后)以进行调试?

I have written a C extension library for PG, using V1 calling convention. My db is ver 8.4.
I have successfully created the new functions.

However, when I invoke my new functions, it crashes the server, with the following message sent to the console:

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

The server log contains the line:

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

I want to attach gdb to the postgres process, and see if I can obtain a stack trace, to help me start debugging. However, when I run

ps aux | grep postgres

to try to locate the postgres process, there seems to be several processes called postgres.

How may I correctly identify the postgres server process (after restarted) for debugging purposes as described above?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

指尖上的星空 2025-01-01 05:53:15

我刚刚找到了这个问题的答案。数据库名称也是 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  

本例中的进程id是14856

I just found out the answer to this. The database name is also part of the ps aux output.

For example:

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  

The process id in this case is 14856

月下伊人醉 2025-01-01 05:53:15

您可以像这样获取当前后端的PID:

select pg_backend_pid();

You can get the PID of the current backend like this:

select pg_backend_pid();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文