2

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

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

4

1 回答 1

4

考虑这一点的最佳方式是数据类型通过文本接口与应用程序交互。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。

于 2013-03-14T11:58:30.407 回答