PostgreSQL 代码中的 libpq 包含三部分,一部分为前端库,供客户端连接、操作 PostgreSQL 数据库使用,比如 psql 就是使用的此前端库;一部分是在 backend 里实现的服务端,比如认证客户端连接、ssl 支持等;最后一部分是使用 libpq 前端库的示例代码。
POSTGRES 的前端库
前端库的文件目录结构见下图,代码位于 postgresql-10.3\src\interfaces\libpq
。
po
目录
该目录内包含了多语言国际化的支持,libpq
目录下的 nls.mk
是此功能的 Makefile。
test
目录
该目录内是 libpq URI (连接字符串)语法的回归测试套件,使用 make installcheck
命令即可完成回归测试。
该命令会调用 regress.pl
脚本,脚本会从 regress.in
文件中按行取出 URI 作为 uri-regress
程序的输入。而 uri-regress
程序是 uri-regress.c
编译出来的,接收 URI 输入并做解析输出。 regress.pl
脚本拿到输出后会与期望 expected.out
做对比,从而完成回归测试。
导出函数
exports.txt
文件包含了前端库的导出函数的声明,若做二次开发在前端库内增加接口函数后,需要在此文件中增加新接口函数的声明。
前后端协议
libpq 前后端交互时需要遵循 PostgreSQL 的前后端协议,目前最新的是三号版本;但为了兼容,libpq 也支持二号版本协议。
具体的代码实现可以参见 fe-protocol2.c
和 fe-protocol3.c
,本文以 fe-protocol3.c
为例来说明。
parseInput
这个函数功能是在已经从 backend 获取数据存到 PGconn
的情况下,处理或解析这些数据,并更新 PGconn
结构体的状态和标志。其内部调用的函数 pqParseInput3
通过解析 PGconn
内缓存的从 backend 接收的数据,维护了状态机的运转;在 PGASYNC_BUSY
状态下处理了大量的操作。
建立链接
这部分的代码实现集中在 fe-connect.c
源文件中,fe-secure.c
文件则实现了建立基于 SSL 的安全链接。
登陆认证
这部分的代码实现集中在 fe-auth.c
源文件中。
发送查询
将查询发送到 backend 数据库服务端的功能是由 fe-exec.c
源文件实现的。
大对象支持
fe-lobj.c
实现了 libpq 中对 PostgreSQL 的大对象支持。
其他
libpq 的 “events” API 等。
libpq 在 backend 中的服务端
该部分的文件目录结构见下图,代码位于 postgresql-10.3\src\backend\libpq
。
登陆认证
auth.c
实现了客户端登陆的认证。
使用 libpq 前端库的示例代码
该部分的文件目录结构见下图,代码位于 postgresql-10.3\src\test\examples
。
相关推荐
PostgreSQL 中 libpq 相关代码解析之建立链接 (一)
PostgreSQL 中 libpq 相关代码解析之建立链接 (二)
“PostgreSQL 中 libpq 相关代码解析之大纲”的一个响应