C言語でPostgreSQL8.2を操作 (Vine4.1)

2007/11/15


開発環境

TargetOSVine 4.1 (VMware5.5.5上)
makeGNU Make 3.80
gccgcc 3.3.6
DataBase(OS)RDBMSPostgresql8.2(CentOS 5.5)
IPアドレス10.30.xx.xx
データベースユーザj033xx

インストール

rootで実行
apt-get install postgresql-devel openssl-devel libpqxx 
コンパイル時に、必要となるヘッダファイルやライブラリをインストールする。
パッケージ名格納先memo
postgresql-devel/usr/include/pgsql/server/postgres.hを含む
openssl-devel/usr/include/opensslssl.hを含む
lubpqxx/usr/include/pgsqllibpq-fe.hを含む
接続先データベースはPostgreSQL8.2.5だが、Vine4.1ではPostgreSQL8.1.5が使用されている。
旧バージョン用のヘッダファイルで開発して、最新バージョンのデータベースに接続して問題はないのだろうか?
疑問に思っても解決できないので、実行あるのみ。
不具合が発生を確認するだけでもよいので、テストする。

source code

Targetマシンに開発ユーザとしてログインする。
適当なエディタ(vi,emacs,GNOMEテキストエディタなど)でsql1.cを作る。
/* sql1.c */
/* ヘッダファイル取り込み */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "postgres.h"
#include "libpq-fe.h"

 /* main処理 */
int main(int argc,char **argv)
{

    /* 変数定義 */
    char dbName[255] = "j033xx_00"; /* データベース名 */
    char sql[255];
    int i;
    PGconn *con;
    PGresult *res;
    char *kou1,*kou2;

    /* DBとの接続 */
    con = PQsetdb("10.30.xx.xx","5432",NULL,NULL,dbName);
    if ( PQstatus(con) == CONNECTION_BAD ) { /* 接続が失敗したときのエラー処理 */
        fprintf(stderr,"Connection to database '%s' failed.\n",dbName);
        fprintf(stderr,"%s",PQerrorMessage(con));
        exit(1);
    }

    /* select文の発行 */
    sprintf(sql,"select * from sample");
    res = PQexec(con,sql);
    if (PQresultStatus(res) != PGRES_TUPLES_OK) { /* SQLの実行に失敗したときのエラー処理 */
        fprintf(stderr,"%s",PQerrorMessage(con));
        exit(1);
    }

    printf("  nr   name\n");
    printf("--------------------------------------\n");
    for(i = 0; i < 2 ;i++) {
        kou1 = PQgetvalue(res,i,0);
        kou2 = PQgetvalue(res,i,1);
        printf("%s %s\n",kou1,kou2);
    }
    PQclear(res);
  return 0;
}

compile & go

Makefileをつくる。
## db_test : PostgreSQL(8.2.5) - C(gcc 3.3.6) 
## SQL :
##      sql1.c :  select * from sample ;
##
## DB = postgres::10.30.xx.xx
        
all : sql1

clean :
        rm -f sql1

sql1 : sql1.c
        gcc -o sql1 sql1.c -I /usr/include/pgsql -I /usr/include/pgsql/server -lpq
GNOME端末(文字コードはUnicode(UTF-8)を開き、makeコマンドでコンパイルする。 さらに、エラーがなければsql1ができている。
sql1を実行すると、検索結果が表示される。

trouble shooting

データベースとの接続に失敗する
データベースにユーザとして登録していますか?
sql1を実行しているユーザ(j033xx)がデータベースにユーザとしてアクセスする権利が必要です。
データベースの管理者に相談してください。
あなたが自身がデータベースの管理者である場合は、C言語でPostgreSQL8.2を操作(Fedora 7)を参考にしてデータベースユーザを作成してください。