Как передать массив целых чисел в хранимую процедуру Postgres с помощью pqxx?

Скажем, у меня есть функция:

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);

1 ответ

Решение

Таким образом, очевидно, что 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();
}

Если кто-то может опубликовать пример того, как не нужно кодировать его как строку, я с радостью приму это вместо ответа.

Другие вопросы по тегам