「C言語/PostgreSql/Ubuntu」の編集履歴(バックアップ)一覧はこちら

C言語/PostgreSql/Ubuntu」(2012/09/24 (月) 02:20:13) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

Ubuntu server11.04上にインスールしたPostgreSqlに、C言語でアクセスしてみたいと思います。 -以下の記事から、テストデータ作成、テストプログラムをとても参考にさせていただきました。 PostgreSQLをプログラムで操作する http://www.atmarkit.co.jp/flinux/rensai/postgres03/postgres03.html#3 * 環境構築 C言語からPostgreSqlを操作するにはlibpqというパッケージが必要みたい。 *** libpqで検索 #highlight(){{ $ sudo aptitude search libpq p libpq-dev - header files for libpq5 (PostgreSQL librar i A libpq5 - PostgreSQL C client library p libpqxx-2.6.9ldbl - C++ library to connect to PostgreSQL p libpqxx-2.6.9ldbl-dbg - C++ library to connect to PostgreSQL (debu p libpqxx-3.0 - C++ library to connect to PostgreSQL p libpqxx-3.0-dbg - C++ library to connect to PostgreSQL (debu p libpqxx-dev - C++ library to connect to PostgreSQL (deve p libpqxx-doc - C++ library to connect to PostgreSQL (docu p libpqxx3-dev - C++ library to connect to PostgreSQL (deve p libpqxx3-doc - C++ library to connect to PostgreSQL (docu }} libpq5がPostgreSqlと一緒にインストールされたみたい。 でも必要なのはきっとlibpq-dev *** libpq-devインストール #highlight(){{ $ sudo aptitude install libpq-dev }} *** ヘッダファイル確認 ディレクトリ /usr/include/postgresql/ に件のヘッダファイルがインストールされるみたい。 #highlight(){{ $ ll /usr/include/postgresql/ total 176 drwxr-xr-x 8 root root 4096 2011-09-29 20:51 ./ drwxr-xr-x 41 root root 4096 2011-09-29 20:51 ../ drwxr-xr-x 2 root root 4096 2011-09-29 20:51 catalog/ -rw-r--r-- 1 root root 24635 2012-06-04 13:09 c.h drwxr-xr-x 3 root root 4096 2011-09-29 20:51 internal/ drwxr-xr-x 2 root root 4096 2011-09-29 20:51 libpq/ -rw-r--r-- 1 root root 2270 2012-06-04 13:09 libpq-events.h -rw-r--r-- 1 root root 19646 2012-06-04 13:09 libpq-fe.h drwxr-xr-x 2 root root 4096 2011-09-29 20:51 mb/ drwxr-xr-x 2 root root 4096 2011-09-29 20:51 nodes/ -rw-r--r-- 1 root root 24844 2012-06-04 13:09 pg_config.h -rw-r--r-- 1 root root 7583 2012-06-04 13:09 pg_config_manual.h -rw-r--r-- 1 root root 1111 2012-06-04 13:09 pg_config_os.h -rw-r--r-- 1 root root 349 2012-06-04 13:09 pg_trace.h -rw-r--r-- 1 root root 13126 2012-06-04 13:09 port.h -rw-r--r-- 1 root root 1837 2012-06-04 13:09 postgres_ext.h -rw-r--r-- 1 root root 790 2012-06-04 13:09 postgres_fe.h -rw-r--r-- 1 root root 20694 2012-06-04 13:09 postgres.h drwxr-xr-x 2 root root 4096 2011-09-29 20:51 utils/ }} * テストデータ作成 *** ユーザテーブル作成 #highlight(){{ $ psql chapatidb chapatidb=# create table users (id bigint, name varchar(50), email varchar(50)); CREATE TABLE }} *** 読み込むテキスト作成 値の間の空白はタブです #highlight(){{ $ cat users.txt 1 ちゃぱてぃ chapati@example.com 2 ぶるーべれー blue@example.com 3 かぼちゃパイ kabocha@example.com }} *** テキスト読み込み \copyコマンドで、テキストファイルをDBに読み込めるようです。 $ psql chapatidb chapatidb=# \copy users from users.txt *** 読み込み結果確認 #highlight(){{ chapatidb=# select * from users; id | name | email ----+--------------+--------------------- 1 | ちゃぱてぃ | chapati@example.com 2 | ぶるーべれー | blue@example.com 3 | かぼちゃパイ | kabocha@example.com (3 rows) }} * テストプログラム作成、コンパイル、実行 *** pgtest.c作成 &reg(pgtest.c) PostgreSQLをプログラムで操作する http://www.atmarkit.co.jp/flinux/rensai/postgres03/postgres03.html#3 上記のC言語サンプルをテーブル名等リテラルだけ変更しました。 #highlight(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] = "chapatidb"; /* データベース名はハードコーディング */ char sql[255]; int i; PGconn *con; PGresult *res; char *kou1,*kou2,*kou3; /* DBとの接続 */ con = PQsetdb("","",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 users"); res = PQexec(con,sql); if (PQresultStatus(res) != PGRES_TUPLES_OK) { /* SQLの実行に失敗したときのエラー処理 */ fprintf(stderr,"%s",PQerrorMessage(con)); exit(1); } printf("id name email\n"); printf("--------------------------------------\n"); for(i = 0; i < 3 ;i++) { kou1 = PQgetvalue(res,i,0); kou2 = PQgetvalue(res,i,1); kou3 = PQgetvalue(res,i,2); printf("%s %s %s\n",kou1,kou2,kou3); } PQclear(res); } }} *** コンパイル -Iオプションでヘッダファイルの場所を指定して、-lpqでPostgreSqlライブラリの使用を明示しているのかな? #highlight(){{ $ gcc pgtest.c -I/usr/include/postgresql -lpq }} *** 実行] すごいです、動きました。 #highlight(){{ $ ./a.out id name email -------------------------------------- 1 ちゃぱてぃ chapati@example.com 2 ぶるーべれー blue@example.com 3 かぼちゃパイ kabocha@example.com }}
Ubuntu server11.04上にインスールしたPostgreSqlに、C言語でアクセスしてみたいと思います。 -以下の記事から、テストデータ作成、テストプログラムをとても参考にさせていただきました。 PostgreSQLをプログラムで操作する http://www.atmarkit.co.jp/flinux/rensai/postgres03/postgres03.html#3 * 環境構築 C言語からPostgreSqlを操作するにはlibpqというパッケージが必要みたい。 *** libpqで検索 #highlight(){{ $ sudo aptitude search libpq p libpq-dev - header files for libpq5 (PostgreSQL librar i A libpq5 - PostgreSQL C client library p libpqxx-2.6.9ldbl - C++ library to connect to PostgreSQL p libpqxx-2.6.9ldbl-dbg - C++ library to connect to PostgreSQL (debu p libpqxx-3.0 - C++ library to connect to PostgreSQL p libpqxx-3.0-dbg - C++ library to connect to PostgreSQL (debu p libpqxx-dev - C++ library to connect to PostgreSQL (deve p libpqxx-doc - C++ library to connect to PostgreSQL (docu p libpqxx3-dev - C++ library to connect to PostgreSQL (deve p libpqxx3-doc - C++ library to connect to PostgreSQL (docu }} libpq5がPostgreSqlと一緒にインストールされたみたい。 でも必要なのはきっとlibpq-dev *** libpq-devインストール #highlight(){{ $ sudo aptitude install libpq-dev }} *** ヘッダファイル確認 ディレクトリ /usr/include/postgresql/ に件のヘッダファイルがインストールされるみたい。 #highlight(){{ $ ll /usr/include/postgresql/ total 176 drwxr-xr-x 8 root root 4096 2011-09-29 20:51 ./ drwxr-xr-x 41 root root 4096 2011-09-29 20:51 ../ drwxr-xr-x 2 root root 4096 2011-09-29 20:51 catalog/ -rw-r--r-- 1 root root 24635 2012-06-04 13:09 c.h drwxr-xr-x 3 root root 4096 2011-09-29 20:51 internal/ drwxr-xr-x 2 root root 4096 2011-09-29 20:51 libpq/ -rw-r--r-- 1 root root 2270 2012-06-04 13:09 libpq-events.h -rw-r--r-- 1 root root 19646 2012-06-04 13:09 libpq-fe.h drwxr-xr-x 2 root root 4096 2011-09-29 20:51 mb/ drwxr-xr-x 2 root root 4096 2011-09-29 20:51 nodes/ -rw-r--r-- 1 root root 24844 2012-06-04 13:09 pg_config.h -rw-r--r-- 1 root root 7583 2012-06-04 13:09 pg_config_manual.h -rw-r--r-- 1 root root 1111 2012-06-04 13:09 pg_config_os.h -rw-r--r-- 1 root root 349 2012-06-04 13:09 pg_trace.h -rw-r--r-- 1 root root 13126 2012-06-04 13:09 port.h -rw-r--r-- 1 root root 1837 2012-06-04 13:09 postgres_ext.h -rw-r--r-- 1 root root 790 2012-06-04 13:09 postgres_fe.h -rw-r--r-- 1 root root 20694 2012-06-04 13:09 postgres.h drwxr-xr-x 2 root root 4096 2011-09-29 20:51 utils/ }} * テストデータ作成 *** ユーザテーブル作成 #highlight(){{ $ psql chapatidb chapatidb=# create table users (id bigint, name varchar(50), email varchar(50)); CREATE TABLE }} *** 読み込むテキスト作成 &ref(user.txt) 値の間の空白はタブです #highlight(){{ $ cat users.txt 1 ちゃぱてぃ chapati@example.com 2 ぶるーべれー blue@example.com 3 かぼちゃパイ kabocha@example.com }} *** テキスト読み込み \copyコマンドで、テキストファイルをDBに読み込めるようです。 $ psql chapatidb chapatidb=# \copy users from users.txt *** 読み込み結果確認 #highlight(){{ chapatidb=# select * from users; id | name | email ----+--------------+--------------------- 1 | ちゃぱてぃ | chapati@example.com 2 | ぶるーべれー | blue@example.com 3 | かぼちゃパイ | kabocha@example.com (3 rows) }} * テストプログラム作成、コンパイル、実行 *** pgtest.c作成 &ref(pgtest.c) PostgreSQLをプログラムで操作する http://www.atmarkit.co.jp/flinux/rensai/postgres03/postgres03.html#3 上記のC言語サンプルをテーブル名等リテラルだけ変更しました。 #highlight(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] = "chapatidb"; /* データベース名はハードコーディング */ char sql[255]; int i; PGconn *con; PGresult *res; char *kou1,*kou2,*kou3; /* DBとの接続 */ con = PQsetdb("","",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 users"); res = PQexec(con,sql); if (PQresultStatus(res) != PGRES_TUPLES_OK) { /* SQLの実行に失敗したときのエラー処理 */ fprintf(stderr,"%s",PQerrorMessage(con)); exit(1); } printf("id name email\n"); printf("--------------------------------------\n"); for(i = 0; i < 3 ;i++) { kou1 = PQgetvalue(res,i,0); kou2 = PQgetvalue(res,i,1); kou3 = PQgetvalue(res,i,2); printf("%s %s %s\n",kou1,kou2,kou3); } PQclear(res); } }} *** コンパイル -Iオプションでヘッダファイルの場所を指定して、-lpqでPostgreSqlライブラリの使用を明示しているのかな? #highlight(){{ $ gcc pgtest.c -I/usr/include/postgresql -lpq }} *** 実行 すごいです、動きました。 #highlight(){{ $ ./a.out id name email -------------------------------------- 1 ちゃぱてぃ chapati@example.com 2 ぶるーべれー blue@example.com 3 かぼちゃパイ kabocha@example.com }}

表示オプション

横に並べて表示:
変化行の前後のみ表示: