| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> PGSQL协议解析及C/C++代码实现 -> 正文阅读 |
|
[C++知识库]PGSQL协议解析及C/C++代码实现 |
PostgreSQL 使用基于消息的协议在前端和后端(客户端和服务器)之间进行通信。 T 端口号 5432 已在 IANA 注册为支持此协议的服务器的惯用 TCP 端口号,但实际上可以使用任何非特权端口号。 什么是 PostgreSQL? PostgreSQL,也称为 Postgres,是一种开源关系数据库,因其可靠性、灵活性和对开放技术标准的支持而享有盛誉。 PostgreSQL 支持非关系和关系数据类型。 它被称为当今可用的最兼容、最稳定和最成熟的关系数据库之一,并且可以轻松处理复杂的查询。 PostgreSQL通信流程 PostgreSQL在TCP三次握手后进行通信流程。PostgreSQL协议具有用于启动和查询操作的单独阶段。 客户端发起的通信的设备向服务器发送一个TCP数据包。这个初始数据包除了底层协议头之外不包含任何数据。这个数据包的TCP头设置了SYN标识,并包含了在通信过程中会用到的初始序列号和最大分段大小。服务器对于这个数据包回复了一个类似的设置SYN和ACK标志以及包含了它初始序列号的数据包。 最后,客户端向服务器发送最后一个仅设置了ACK标志的数据包。在这个过程完成了之后,双方设置应该已经具有了开始正常通信所需的信息。 启动第一阶段 在启动阶段,前端打开与服务器的连接并验证自己以使服务器满意。 如果一切顺利,服务器将状态信息发送到前端,最后进入正常操作。除了初始启动请求消息外,这部分协议由服务器驱动。
要开始会话,PostgreSQL的启动包由客户端发出。客户端会打开与服务器的连接并发送启动消息。该消息包括用户名和用户想要连接的数据库的名称,它还标识要使用的特定协议版本。
启动阶段,客户端向服务端发送了一条StartupMessage Authentication request 服务器收到后,会进行判断,该用户是否需要密码认证,如果需要则会发送一个Authentication request来请求密码认证信息。
Type:Password message§
前端此时发送密码认证成功后,后端会开始发送各种Parameter Status,也就是一系列后端参数,比如数。
查询第二阶段 正常运行时,前端向后端发送查询等命令,后端发回查询结果等响应。
一个简单的查询周期是由前端向后端发送一条查询消息来启动的。 该消息包括一个以文本字符串表示的 SQL 命令(或多个命令)。 然后后端根据查询命令字符串的内容发送一条或多条响应消息,最后发送一条 ReadyForQuery 响应消息。
对 SELECT 查询的响应通常包括 RowDescription、零个或多个 DataRow 消息,然后是 CommandComplete。复制到或从前端调用特殊协议,所有其他查询类型通常只产生一个 CommandComplete 消息。 CommandComplete :一个SQL命令正常结束。 由于一个查询字符串可能包含多个查询(以分号分隔),因此在后端完成对查询字符串的处理之前可能会有多个这样的响应序列。当整个字符串被处理并且后端准备好接受一个新的查询字符串时,ReadyForQuery 被发出。 如果接收到一个完全空的(除空白之外没有其他内容)查询字符串,则响应为 EmptyQueryResponse,后跟 ReadyForQuery。 如果发生错误,将发出 ErrorResponse,然后是 ReadyForQuery。查询字符串的所有进一步处理都被 ErrorResponse 中止(即使其中还有更多查询)。请注意,这可能发生在单个查询生成的消息序列的中途。 在简单查询模式下,检索值的格式始终为文本,除非给定命令是来自使用 BINARY 选项声明的游标的 FETCH。在这种情况下,检索到的值是二进制格式。 RowDescription 消息中给出的格式代码说明正在使用哪种格式。 PostgreSQL的客户端命令类型 主要包含以下信息:
PostgreSQL的服务器命令类型 主要包含以下信息:
PGSQL协议解析及C/C++代码实现
解析结果:
PostgreSQL 的一些主要优点:
欢迎关注微信公众号【程序猿编码】,需要PGSQL完整源码和报文请添加本人微信号(c17865354792) 参考:https://www.postgresql.org/ |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:40:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |