I have a GNU C++ project that uses the PostgreSQL API and for some reason, it strips spaces from the result of a certain query. Other environments (psql
and pgAdmin) don't. The query is:
SELECT string_agg(my_varchar, ', ') FROM my table;
Notice the space after the comma in the delimiter. Instead of 1046976, 1046977
being returned by PQgetvalue()
, I get 1046976,1046977
. Just for kicks, I tried changing the delimiter to silly things like string_agg(my_varchar, ',:) '
and string_agg(my_varchar, ', :)'
. It doesn't strip the space if the space is in the middle of the delimiter.
Again, I don't have this problem if I do the same queries in db browsers like psql
and pgAdmin; they don't strip the space in any of those queries.
Yes, I considered the possibility that because the columns from which they extract are varchar
s, but the data are 7-bit integers, the engine might be confused. I changed the query to something that is truly a varchar
, but the spaces were still stripped.
Looking at https://www.postgresql.org/docs/9.4/static/functions-aggregate.html, I see that string_agg()
expects its arguments to be text
s or bytea
s. Well, I never got an error, but to be sure, I tried string_agg(my_varchar::text, ', '::text)
. It didn't make a difference.
I don't know a great deal about this API, but it doesn't appear to connect to the db with any options, so I don't think there's much to say about the configuration.
I'm running this in GNU C++ v4.9.2 on Debian 8.10. The PostgreSQL engine and API are 9.4.