postgresql - 如何使用 pqxx 将整数数组传递给 Postgres 存储过程?
问题描述
说我有一个功能:
CREATE OR REPLACE FUNCTION foo(ids integer[]) RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
SELECT 1;
END;
$$;
在 pqxx 中,调用它的最佳方法是什么?我可以很好地调用整数和字符串,但是传递给数组的正确类型是什么?
conn.prepare("foo_call", "select foo($1)");
conn.prepared("foo_call")(VALUE);
解决方案
所以显然 pqxx 可以很好地处理被编码为字符串的数组。我不确定它的语法在哪里定义,但它是:
'{1, 22, 333}'
typedef list<db_id_t> db_ids_t;
string to_param_string(const db_ids_t& ids) {
stringstream ss;
bool first(true);
for(db_ids_t::const_iterator i=ids.begin();i != ids.end();i++) {
ss << (first ? "{" : ",") << (*i);
first = false;
}
ss << "}";
return ss.str();
}
如果有人可以发布一个不必将其编码为字符串的示例,我很乐意接受它作为答案。
推荐阅读
- r - R 时间序列数据,按正比分组
- flutter - Flutter SingleChildScrollView 在 Stack 中不起作用
- reactjs - 如何将 TypeScript 与 React / Redux mergeProps 一起使用
- r - How to copy a value in new dataframe based on key links of another dataframe like ID, start and end value? (in R)
- php - Php PDO Mysql 选择值下拉列表
- html - WordPress。使整个 div 类可点击
- shopify - 如何使用 Shopify API 取消和补货?
- cmake - 如何在cmake中定义从使用ExternalProject_add构建的目标派生的变量?
- php - 在 mac catalina 上为 imap 功能加载正确的 php.ini 文件
- java - Spring WebFlux:Mono的单元测试订阅功能