LINUX.ORG.RU

Подключение к Postgres из C

 ,


0

3

Добрый день. Подскажите, пожалуйста, через что лучше работать с Postgres из C? Попробовал libpq - всё приемлимо, но есть странный момент с получением данных в типе столбца. Или всё как текст или всё в бинарном виде (все столбцы).Смущает возможный оверхед. Или, наверняка, я чего-то не понял. Кто какие ещё способы работы с этой БД использует? Может, есть что-то подобное оракловому OCI? Я с Postgre раньше тесно не общался:)

Остальные способы (известные мне) сделаны как надстройка над libpq, поэтому оверхеда там будет как минимум не меньше, чем в libpq.

Напиши подробнее про странный момент с получением данных в типе столбца с примерами кода, будет что обсудить, по крайней мере.

hobbit ★★★★★
()

или всё в бинарном виде (все столбцы).Смущает возможный оверхед.

И что же это за оверхед в варианте с бинарными? Особенно в контексте рсубд, которая уже оверхед по определению. Про оверхед в хттп ещё написал бы.

anonymous
()
Ответ на: комментарий от hobbit

У JNDI своя реализация протокола, так что не всё сделано, как надстройка над libpq. Можно запустить JVM из программы на C и дёргать нужные методы из postgresql-jdbc.jar через JNDI, только сперва нужно хорошо дунуть, иначе ничего не получится.

А так - первичен всё же протокол, если сильно хочется - можно на C написать своего клиента, где и работать с ним как душе угодно. libpq это просто готовая реализация с определённым API. Хотя не думаю, что получится лучше, но мало ли.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)

Рекомендую libzdb ( https://tildeslash.com/libzdb/)

Умеет мускуль, постгресс/оракл и скулайт. Маленькая, легкая, легко сменить субд. Типы столбцов умеет (если правильно понял проблему). Из забавного - там есть исключения (на си!).

eagleivg ★★★★★
()
Последнее исправление: eagleivg (всего исправлений: 1)
Ответ на: комментарий от hobbit

Да, по факту так и оказалось - все сишные варианты основаны на этой библиотеке.

Я имел ввиду работу функции PQgetvalue(res, row, col), которая возвращает или текстовый эквивалент или байты. А хотелось что-то вроде OCI_GetString/OCI_GetInt/OCI_GetResultset/… в зависимости от метаданных столбца. Ну, чтоб с конвертацией и bigendian не заморачиваться.

Paka_RD
() автор топика
Ответ на: комментарий от vbr

Конечно, там есть много удобного, но не хотелось бы лишнюю сущность в виде VM тащить. Да и может оказаться, что в итоге затрат будет больше чем при конвертации из бинарного формата.

Paka_RD
() автор топика