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

时间:2010-05-06 09:22:33

标签: c postgresql libpq

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

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

1 个答案:

答案 0 :(得分: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。