ODBC удобен, если вам нужен стандартный адаптер, поддерживающий одинаковый API для разных баз данных. Лично я считаю, что это ужасный API, но он широко известен и хорошо задокументирован.
libpq напрямую взаимодействует с PostgreSQL. Вы можете повысить производительность с его помощью, но, вероятно, недостаточно, чтобы это имело какое-либо значение для большинства приложений, которые тратят время на выполнение запросов, задержку в сети и т. д., а не в клиентской библиотеке.
Более новые версии psqlODBC построены на libpq и служат оболочкой ODBC для libpq.
Есть также libdbi, предлагающий менее ужасный API, чем ODBC.
Для полноты картины есть также серверный SPI, который может использоваться определяемыми пользователем функциями, написанными на C и загружаемыми на сервер PostgreSQL. Это бесполезно вне расширений и функций сервера.
О, и есть ЭКПГ. Не используйте ЭКПГ. Это сверхустаревший инструмент с интегрированным языком SQL, который существует в основном для упрощения переноса с некоторых других механизмов баз данных. Не используйте ЭКПГ. Действительно.
Для C++ есть интерфейс QtSQL (необычно для Qt, он ужасен и болезненно ограничен, не используйте его) и libpq++ (хорошо, но в значительной степени не поддерживается).
Лично я пишу код libpq напрямую, но это потому, что я работаю над кодом, который обычно сам входит в PostgreSQL. Если вы не можете себе представить, что когда-либо захотите использовать что-либо, кроме PostgreSQL, вы можете написать код libpq; в противном случае, возможно, используйте ODBC с psqlODBC.
person
Craig Ringer
schedule
22.03.2016