C言語でPostgreSQL8.2を操作 (Vine4.1)
2007/11/15
開発環境
Target | OS | Vine 4.1 (VMware5.5.5上) |
make | GNU Make 3.80 |
gcc | gcc 3.3.6 |
DataBase(OS) | RDBMS | Postgresql8.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/openssl | ssl.hを含む |
lubpqxx | /usr/include/pgsql | libpq-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)を参考にしてデータベースユーザを作成してください。