c - 如何使用 libpq (PostgreSQL) 将 PGresult 转换为自定义数据类型

标签 c postgresql libpq

我正在使用 C 语言的 libpq 库来访问我的 PostgreSQL 数据库。所以,当我执行 res = PQexec(conn, "SELECT point FROM test_point3d"); 时我不知道如何将我得到的 PGresult 转换为我的自定义数据类型。

我知道我可以使用 PQgetValue 函数,但我还是不知道如何将返回的字符串转换为我的自定义数据类型。

最佳答案

考虑这个问题的最佳方法是数据类型通过文本接口(interface)与应用程序交互。 Libpq 几乎可以从任何内容返回一个字符串。程序员有责任解析字符串并从中创建数据类型。我知道作者可能已经放弃了这个问题,但我正在研究类似的东西,值得在这里记录一些在某些情况下有用的重要技巧。

显然,如果这是一个 C 语言类型,具有自己的输入和输出表示形式,那么您将必须按照通常的方式解析该字符串。

但是对于数组和元组,符号基本上是

[open_type_identifier][csv_string][close_type_identifier]

例如,元组可以表示为:

(35,65,1111111,f,f,2011-10-06,"2011-10-07 13:11:24.324195",186,chris,f,,,,f)

这使得解析变得容易。一旦您摆脱了第一个和最后一个字符,您通常可以使用现有的 csv 处理器。此外,请考虑:

select row('test', 'testing, inc', array['test', 'testing, inc']);
                       row                       
-------------------------------------------------
 (test,"testing, inc","{test,""testing, inc""}")
(1 row)

正如这表明您在嵌套属性内有标准的 CSV 转义,因此您实际上可以确定第三个属性是一个数组,然后(取消双引号)将其解析为数组。通过这种方式,嵌套数据结构的处理方式大致类似于您对 JSON 等格式的期望。但诀窍在于它是嵌套的 CSV。

关于c - 如何使用 libpq (PostgreSQL) 将 PGresult 转换为自定义数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2779927/

相关文章:

cat 会破坏程序,手动 stdin 输入不会

c++ - 使用指针遍历类的动态分配

database - 在 Grails 中映射遗留数据库表时,如何映射两个表而不进行任何更改?

c - 将 C 变量传递给 SQL 命令

c++ - 不在 C++ 程序中使用 libpq 检索 NOTIFY

c - C 程序中的变量段?

谁能告诉我在哪里可以获得维特比解码器的逐步算法?

java - 缓存查询结果

postgresql - 从 Cygwin 在 C 中运行 PostgreSQL 客户端

c++ - postgresql 在数据库服务器中消耗更多内存以进行长时间运行的连接