PostgreSQL协议(protocol)数据表示格式规范?

标签 postgresql protocols specifications manual

我正在阅读 PostgreSQL protocol document .该文档指定了消息流和包含格式,但没有提及实际数据字段如何以文本/二进制编码。

对于文本格式,完全没有提及。这是什么意思?我应该只使用 SQL 值表达式吗?或者有一些额外的文档吗?如果只是SQL值表达式,服务器会重新解析吗?

而且,我应该调查源代码的哪一部分以了解二进制数据是如何编码的?

更新

我又看了一遍手册,发现有提到文本格式。所以实际上 提到了文本表示,错过这一段是我的错。

The text representation of values is whatever strings are produced and accepted by the input/output conversion functions for the particular data type.

最佳答案

有两种可能的数据格式——文本或二进制。默认是文本格式——也就是说,只有服务器 <-> 客户端编码转换(或者当客户端和服务器使用相同的编码时什么都没有)。文本格式非常简单——微不足道——所有结果数据都被转换为人类可读的文本,并发送给客户端。像 bytea 这样的二进制数据也被转换为人类可读的文本——使用十六进制或 Base64 编码。输出很简单。文档中没有什么可描述的

 postgres=# select current_date;
     date    
 ────────────
  2013-10-27
 (1 row)

在这种情况下 - 服务器向客户端发送字符串“2013-10-27”。前四个字节是长度,其他字节是数据。

输入有点困难,因为您可以将数据与查询分开 - 取决于您使用的 API。因此,如果您使用最简单的 API——那么 Postgres 期望将 SQL 语句与数据放在一起。一些复杂的 API 需要 SQL 语句和数据分开。

另一方面,由于任何数据类型的特定格式都有很大差异,因此使用二进制格式非常困难。任何 PostgreSQL 数据类型都有两个函数——发送和接收。这些函数用于将数据发送到输出消息流和从输入消息流中读取数据。类似的函数用于转换为纯文本或从纯文本转换(输出/输入函数)。一些客户端驱动程序能够从 PostgreSQL 二进制格式转换为主机二进制格式。

一些信息:

关于PostgreSQL协议(protocol)数据表示格式规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19610388/

相关文章:

windows - 加密难题/如何为远程协助票证创建 PassStub

全局变量/全局命名空间的 JavaScript 策略

postgresql - gorm没有将db值映射到实体

php - 将 PostgreSQL 数组转换为 PHP 数组

xml - 是否有简化的 XML 子集的规范?

objective-c - 我的协议(protocol)方法的选择器没有已知的实例方法

security - HTTP 和 HTTPS 协议(protocol)

ruby-on-rails - 选择时间列和整数列的总和小于 current_time

java - 如何一次性获取数据

ios - 将 Objective-C 文件扩展名从 .m 更改为 .mm 会导致错误