ODBCは、さまざまなデータベースに対して同様のAPIを話す標準アダプターが必要な場合に役立ちます。個人的にはひどいAPIだと思いますが、広く理解され、十分に文書化されています。
libpqはPostgreSQLとより直接的に通信します。これを使用するとパフォーマンスを向上させることができますが、クライアントライブラリではなく、クエリの実行やネットワークの待ち時間などに時間を費やすほとんどのアプリで違いが生じるほどではないでしょう。
新しいバージョンのpsqlODBCはlibpq上に構築されており、libpqのODBCラッパーとして機能します。
ODBCよりもそれほどひどいAPIを提供しないlibdbiもあります。
完全を期すために、サーバーバックエンドSPIもあります。これは、Cで記述され、PostgreSQLサーバーにロードされるユーザー定義関数で使用できます。サーバーの拡張機能や機能の外部では役に立ちません。
ああ、そしてecpgがあります。 ecpgは使用しないでください。これは、主に特定の他のデータベースエンジンからの移植を容易にするために存在する、超レガシーの言語統合SQLツールです。 ecpgは使用しないでください。本当に。
C ++には、QtSQLインターフェイス(Qtの場合は珍しく、ひどく痛々しいほど制限されているので、使用しないでください)とlibpq ++(OKですが、ほとんど保守されていません)があります。
個人的にはlibpqコードを直接記述していますが、それは通常PostgreSQL自体に組み込まれるコードに取り組んでいるためです。 PostgreSQL以外のものをターゲットにしたいと思うことが想像できない場合は、libpqコードを記述することをお勧めします。それ以外の場合は、おそらくpsqlODBCでODBCを使用します。