Я использую libpq для своего приложения C/C++ для взаимодействия с 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'h","h h"}
libpq, похоже, помещает двойные кавычки и escape-символы (\
) там, где считает нужным.
Для строки (не массива строк) libpq вообще не будет помещать двойные кавычки.
Поскольку любой печатный символ может быть сохранен в моих строках, есть ли способ заставить libpq или PostgreSQL возвращать строки и массивы строк в согласованном формате для удобного использования моим приложением C/C++?
libpqtypes
может делать то, что вам нужно: см. этот вопрос. - person pozs   schedule 16.01.2017array_to_string
, чтобы заставить PostgreSQL отправлять данные в виде простой строки. Для типов integer и timestamp я уже написал интерфейс, который выглядит так:pqclient.query("SELECT my_id, my_text FROM my_table WHERE data = $1;", make_tuple(12345), tuple<int64_t, string>(), [](optional<CommandError>&& error, vector<tuple<int64_t, string>>&& results){ ... });
, который пока решает простые типы. - person Bernard   schedule 16.01.2017