gpt4 book ai didi

postgresql - 如何在 Linux 上使用 libpq 解析 Postgresql 中的数组列

转载 作者:行者123 更新时间:2023-12-05 06:21:38 33 4
gpt4 key购买 nike

对于基本数据类型,我可以毫无问题地使用如下格式解析数据:

  if (FALSE == PQgetisnull(res, rowNumber, columnIndex))
{
retVal.m_assignedSocket = atol(PQgetvalue(res, rowNumber, columnIndex));
} else
{
retVal.m_assignedSocket = 0;
}

我想在我的一个表中有一个数组字段,它是一个双整数数组。我相信我可以像这样插入数据:

  // array elements are separated by curly braces
insertQuery += "{";

for (size_t i = 0; i < settings.m_stepVector.size(); i++)
{
if (snprintf(buffer, sizeof(buffer), ", %llu", settings.m_stepVector[i]) > (int) sizeof(buffer))
{
LOG_SYSTEM_WARNING("Unexpected string truncation\n");
}
insertQuery += buffer;
}

insertQuery += "}";

解析行时出现问题。我没有找到任何说明返回数组列格式的示例或文档。我的假设是它是一个两端带有花括号的字符串。花括号之间的格式是什么?这似乎不是什么新鲜事,但我无法在任何地方找到答案。可能是我不知道要搜索的正确关键字。我尝试了 postgresql、数组、PQgetvalue 和解析。

最佳答案

最终实验表明这是可行的:

  retVal.m_rules.clear();
pqxx::array_parser parser = result[columnIndex].as_array();
arrayObject obj = parser.get_next();
while (obj.first != pqxx::array_parser::done)
{
if (obj.first == pqxx::array_parser::string_value)
{
// arrays return a string value so atoll needed to convert to number
retVal.m_rules.push_back(atoll(obj.second.c_str()));
}
obj = parser.get_next();
}
columnIndex++;

结果定义为 pqxx::result::iterator &result。

关于postgresql - 如何在 Linux 上使用 libpq 解析 Postgresql 中的数组列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59685903/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com