PostgreSQL/libpq中的字符串格式设置
我正在为我的C/C++应用程序使用libpq与PostgreSQL接口 我的查询是参数化的,是文本(而不是二进制)格式(使用PostgreSQL/libpq中的字符串格式设置,postgresql,libpq,Postgresql,Libpq,我正在为我的C/C++应用程序使用libpq与PostgreSQL接口 我的查询是参数化的,是文本(而不是二进制)格式(使用PQexecParams),它们返回的数据可能是text、text[]、int4range或其他复杂类型。然而,libpq似乎是根据似乎没有很好的文档记录的规则来格式化字符串的 例如,对于字符串数组,libpq返回如下内容: {abc,def,"h,h","h\"h",h'h,"h h"} 当C样式的数组如下所示: {"abc","def","h,h","h\"h","h
PQexecParams
),它们返回的数据可能是text
、text[]
、int4range
或其他复杂类型。然而,libpq似乎是根据似乎没有很好的文档记录的规则来格式化字符串的
例如,对于字符串数组,libpq返回如下内容:
{abc,def,"h,h","h\"h",h'h,"h h"}
当C样式的数组如下所示:
{"abc","def","h,h","h\"h","h'h","h h"}
libpq似乎将双引号和转义字符(\
)放在它认为合适的地方
对于字符串(不是字符串数组),libpq将根本不放置双引号
由于任何可打印字符都可能存储在我的字符串中,有没有办法强制libpq或PostgreSQL以一致的格式返回字符串和字符串数组,以便于我的C/C++应用程序使用?这与libpq无关,这是PostgreSQL数组的标准(事实上,如果您还想支持任意索引数组,则要比这复杂得多).
libpqtypes
可能会满足您的需要:请看。@pozs这很有意义,谢谢!最终我使用array\u to\u string
让PostgreSQL将数据作为普通字符串发送。对于整数和时间戳类型,我已经编写了一个如下所示的接口:pqclient.query(“从my_表中选择my_id,my_text,其中data=$1;”,make_tuple(12345),tuple(),[](可选和错误,向量和结果){…})
,这将暂时解决简单类型的问题。