seraphyの日記

日記というよりは過去を振り返るときのための単なる備忘録

postgreSQLのプログラミングI/F (C言語篇)

あとはC言語I/FとJDBCが使えれば実用上問題なし。
apt-get install postgresql-devel でC言語I/Fがインストールされた。
manページをつかえるようにする方法が分らないが、libpq-fe.hをみたかぎりでは、それほど沢山のAPIがあるわけでは無さそうだ。
includeのパスもlibのパスも標準で問題無し。
データーベースをオープンしSELECTしてクローズするだけのもので試す。

#include <libpq-fe.h>

int main( int argc, char* argv[] ) {
    PGconn *connection = PQconnectdb( "dbname=<<dbname>>" );
    if( PQstatus( connection ) == CONNECTION_OK) {
        ....
    }
    else {
        printf( "connection failed\n" );
    }
    PQfinish( connection );
    return 0;
}

とくにむずかしいところはなし。

gcc pqtest.c -lpq

コンパイルOK。
pg_config というツールがあり、これはgnome-configとか、gtk-configみたいに使うようだ。ヘッダやライブラリ、あるいはツールの格納されているディレクトリを標準出力にプリントする。
しかし、とくに使わずともコンパイルできた。


リンクされている依存ライブラリをみてみると、かなりのものが付いている。

$ ldd a.out
        linux-gate.so.1 =>  (0x006bf000)
        libpq.so.3 => /usr/lib/libpq.so.3 (0x007a3000)
        libc.so.6 => /lib/libc.so.6 (0x00111000)
        libssl.so.4 => /lib/libssl.so.4 (0x00486000)
        libcrypto.so.4 => /lib/libcrypto.so.4 (0x00c4f000)
        libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00d83000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0x00c33000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x03334000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x00bcc000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x0331f000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x0096c000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x0065d000)
        libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00c38000)
        libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00d47000)
        libdl.so.2 => /lib/libdl.so.2 (0x0079d000)c
        libz.so.1 => /usr/lib/libz.so.1 (0x0087d000)


あと、libpq++なる、C++言語wrapperがあるらしいことが判明。
しかし、どこから入手するのか分らない。