首页 > 解决方案 > 如何使用 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);

标签: postgresqllibpqxx

解决方案


所以显然 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();
}

如果有人可以发布一个不必将其编码为字符串的示例,我很乐意接受它作为答案。


推荐阅读