PostgreSQL 中 libpq 相关代码解析之大纲

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.cfe-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 相关代码解析之建立链接 (二)

PostgreSQL 中 libpq 相关代码解析之建立链接 (三)

PostgreSQL 中 libpq 相关代码解析之流复制(四)

Advertisements

分类:PostgreSQL

Tagged as: ,

4 replies

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

w

Connecting to %s