我正在使用 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/