Eon*_*nil 5 postgresql specifications protocols manual
我正在阅读PostgreSQL 协议文档。该文档指定了消息流和包含格式,但没有提及实际数据字段如何以文本/二进制编码。
对于文本格式,也没有提到在所有。这是什么意思?我应该只使用 SQL 值表达式吗?或者有一些额外的文档?如果它只是 SQL 值表达式,这是否意味着服务器会再次解析它们?
而且,我应该调查源代码的哪一部分以查看二进制数据是如何编码的?
我再次阅读了手册,我发现提到了文本格式。所以实际上是对文本表示提了,这是我的错,缺少这一段。
值的文本表示是输入/输出转换函数为特定数据类型生成和接受的任何字符串。
有两种可能的数据格式 - 文本或二进制。默认是文本格式 - 这意味着,只有服务器 <-> 客户端编码转换(或者当客户端和服务器使用相同编码时没有任何转换)。文本格式非常简单 - 琐碎 - 所有结果数据都转换为人类可读的文本,然后发送给客户端。像 bytea 这样的二进制数据也可以转换为人类可读的文本 - 使用十六进制或 Base64 编码。输出很简单。文档中没有什么可描述的
\n\n postgres=# select current_date;\n date \n \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 2013-10-27\n (1 row)\nRun Code Online (Sandbox Code Playgroud)\n\n在这种情况下 - 服务器将字符串“2013-10-27”发送到客户端。前四个字节是长度,其他字节是数据。
\n\n输入有点困难,因为您可以将数据与查询分开 - 取决于您使用的 API。因此,如果您使用最简单的 API - 那么 Postgres 期望 SQL 语句与数据在一起。一些复杂的API需要将SQL语句和数据分开。
\n\n另一方面,由于任何数据类型的特定格式都有很大不同,因此使用二进制格式非常困难。任何 PostgreSQL 数据类型都有两个函数 - send 和 receive。这些函数用于发送数据到输出消息流以及从输入消息流读取数据。类似的函数用于转换为纯文本或从纯文本转换(输出/输入函数)。某些客户端驱动程序能够从 PostgreSQL 二进制格式转换为主机二进制格式。
\n\n一些信息:
\n\n| 归档时间: |
|
| 查看次数: |
3485 次 |
| 最近记录: |