我正在研究与Postgres相关的类项目。我想知道Postgres服务器中使用的“核心”功能是什么?我在一个简单的C程序中寻找与main()相对应的东西。我想知道文件路径和函数名称。我使用Postgres 9.3.5,但是我认为“核心”功能在不同版本之间不会改变。Postgres中的“核心”功能
如果您对我的问题感到困惑,请让我知道。
谢谢。
编辑:re-posted this on the pgsql-hackers mailing list。
我正在研究与Postgres相关的类项目。我想知道Postgres服务器中使用的“核心”功能是什么?我在一个简单的C程序中寻找与main()相对应的东西。我想知道文件路径和函数名称。我使用Postgres 9.3.5,但是我认为“核心”功能在不同版本之间不会改变。Postgres中的“核心”功能
如果您对我的问题感到困惑,请让我知道。
谢谢。
编辑:re-posted this on the pgsql-hackers mailing list。
我想你可能在谈论服务器事件循环。
它取决于后端类型。
对于邮政局长,在src/backend/postmaster/postmaster.c
(邮政局长启动),然后ServerLoop
在同一个文件中是PostmasterMain
。
对于普通员工后端,这是PostgresMain
在src/backend/tcop/postgres.c
。
其他后端(如背景作家,自动清理发射等)有自己的主循环。
您应该从developer information on the PostgreSQL site开始,特别是讨论PostgreSQL内部的PostgreSQL文档的开发人员部分,以及PostgreSQL内部可用的一系列演示文稿和文章。
此外,获得与ctags
/cscope
支持一个良好的文本编辑器,并熟悉像gdb
调试器。它将导航源代码,并更轻松地通过代码方式。你可能已经这个自己回答,例如,通过:
启动后端并获得其进程ID
regress=> select pg_backend_pid();
pg_backend_pid
----------------
2292
(1 row)
附加gdb
sudo -u postgres gdb -p 2292
得到一个回溯
(gdb) bt
#0 0x0000003bc68f5c3d in __libc_recv (fd=10, [email protected]=0xc3d0a0 <PqRecvBuffer>, [email protected]=8192, flags=-1, [email protected]=0) at ../sysdeps/unix/sysv/linux/x86_64/recv.c:29
#1 0x00000000005f95f5 in recv (__flags=0, __n=8192, __buf=0xc3d0a0 <PqRecvBuffer>, __fd=<optimized out>) at /usr/include/bits/socket2.h:44
#2 secure_read (port=0x1db02c0, ptr=0xc3d0a0 <PqRecvBuffer>, len=8192) at be-secure.c:317
#3 0x0000000000602b53 in pq_recvbuf() at pqcomm.c:854
#4 0x00000000006037d5 in pq_getbyte() at pqcomm.c:895
#5 0x00000000006e19a0 in SocketBackend (inBuf=0x7fff2f397b10) at postgres.c:335
#6 ReadCommand (inBuf=0x7fff2f397b10) at postgres.c:483
#7 PostgresMain (argc=<optimized out>, [email protected]=0x1d8b2b8, dbname=0x1d8b120 "regress", username=<optimized out>) at postgres.c:3975
#8 0x0000000000463c51 in BackendRun (port=0x1db02c0) at postmaster.c:4117
#9 BackendStartup (port=0x1db02c0) at postmaster.c:3791
#10 ServerLoop() at postmaster.c:1570
#11 0x00000000006780ee in PostmasterMain ([email protected]=3, [email protected]=0x1d8a2d0) at postmaster.c:1223
#12 0x00000000004649fb in main (argc=3, argv=0x1d8a2d0) at main.c:227
非常感谢! – Lemon 2014-09-24 02:54:41
@ZackLi我建议您阅读http://www.postgresql.org/docs/current/static/internals.html和https://wiki.postgresql.org/wiki/Developer_FAQ – 2014-09-24 02:55:33