2014-09-23 88 views
0

我正在研究与Postgres相关的类项目。我想知道Postgres服务器中使用的“核心”功能是什么?我在一个简单的C程序中寻找与main()相对应的东西。我想知道文件路径和函数名称。我使用Postgres 9.3.5,但是我认为“核心”功能在不同版本之间不会改变。Postgres中的“核心”功能

如果您对我的问题感到困惑,请让我知道。

谢谢。

编辑:re-posted this on the pgsql-hackers mailing list

回答

6

我想你可能在谈论服务器事件循环。

它取决于后端类型。

对于邮政局长,在src/backend/postmaster/postmaster.c(邮政局长启动),然后ServerLoop在同一个文件中是PostmasterMain

对于普通员工后端,这是PostgresMainsrc/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 
    
+0

非常感谢! – Lemon 2014-09-24 02:54:41

+0

@ZackLi我建议您阅读http://www.postgresql.org/docs/current/static/internals.html和https://wiki.postgresql.org/wiki/Developer_FAQ – 2014-09-24 02:55:33