libpq-fe, не удается выбрать INT8

#c #postgresql #select

#c #postgresql #выберите

Вопрос:

Я программирую на C, там я использую библиотеку libpq-dev / libpq-fe. С помощью этой библиотеки я подключаюсь к локальной базе данных postgresql.

Я написал некоторый тестовый код, который что-то выбирает / вставляет. Но у меня всегда была одна проблема: я могу выбирать только INT4 (4 байта Int) числовые значения или строки. Могут быть другие, я не пробовал каждый тип. Но я не могу выбрать INT8-значения (8 байт Int).

Примеры:

 "SELECT COUNT(*)::INT8 FROM tb_Test;"
  

В результате я получаю INT8. Я не знаю, как я могу это получить? Я пробовал это:

 long count = ntohl(*(uint64_t*)PQgetvalue(result, 0, 0));
  

Количество всегда равно 0.
Но если я выполню этот select, который содержит явное приведение к типу, это сработает:

 "SELECT COUNT(*)::INT4 FROM tb_Test;"
  

Я использую этот код для получения количества:

 long count = ntohl(*(uint32_t*)PQgetvalue(result, 0, 0));
  

Кто-нибудь знает, в чем проблема? Если вам нравится, что я публикую больше кода, пожалуйста, скажите это. Я опубликовал это только потому, что считаю, что это единственная релевантная часть.

Спасибо

Комментарии:

1. Это может иметь какое-то отношение к ntohl , который работает на long . long может совпадать или не совпадать с uint64_t . Для uint64_t используйте le64toh .

2. Это дает тот же результат. Результирующее значение всегда равно 0. Я пытался long вместо uint64_t , но это тоже не сработало.

Ответ №1:

Возвращаемые значения PQgetvalue() являются строками. Затем вы могли бы использовать что-то вроде strtoll() для преобразования их в целочисленный тип.