ODBC полезен, если вы хотите использовать стандартный адаптер, который говорит об аналогичном API для разных баз данных. Я лично считаю, что это ужасный API, но он широко понимается и хорошо документирован.
libpq более конкретно говорит о PostgreSQL. Вы можете получить более высокую производительность, но, вероятно, недостаточно того, что это будет иметь значение для большинства приложений, которые тратят время на выполнение запросов, латентность сети и т. Д., А не на клиентскую библиотеку.
Новые версии psqlODBC построены на libpq и служат в качестве оболочки ODBC для libpq.
Существует также libdbi, который предлагает менее страшный API, чем ODBC.
Для полноты также имеется SPI сервера, который может использоваться пользовательскими функциями, написанными на C и загружаемыми на сервер PostgreSQL. Это не полезно для внешних расширений и функций сервера.
О, и есть ecpg. Не используйте ecpg. Это супер-устаревший язык-интегрированный SQL-инструмент, который существует в основном для упрощения переноса с некоторых других движков баз данных. Не используйте ecpg. В самом деле.
Для C++ существует интерфейс QtSQL (необычно для Qt, он ужасный и больно ограниченный, не использует его) и libpq ++ (нормально, но в значительной степени не поддерживается).
Лично я пишу код libpq напрямую, но это потому, что я работаю над кодом, который обычно входит в PostgreSQL. Если вы не можете себе представить, что когда-либо захотите направить что-либо, кроме PostgreSQL, вы можете написать код libpq; иначе возможно использовать ODBC с psqlODBC.
Работы libpq, ODBC нет? –