PostgreSQLへC言語で接続する

MySQLが一段落したので今度はPostgreSQLへ接続してみます。

ソースファイルはこちら(C言語)
pg20060521-1

PostgreSQLとMySQLでは値の取り出し方法が違うみたいですね。C++でクラス化する際には共通のほ方法で利用できるように考慮したほうが良いですね。(DBI使ったほうが早いとか置いといて)

もうひとつ重大な問題がこのソースにはあります。SELECTで*を指定しておいて取り出し時に何番目というやり方で行っていること。つまりテーブルのフィールドに追加変更があった場合にプログラムが動かなくなってしまう危険があります。単にSELECTで*を使わなければ良いのですがそれでも要素名でアクセスできないのは可読性に影響します。

C++版は以上を考慮に入れてMySQL版と移植性の高いものを作ってみます。

PostgreSQLの基本コマンド

PostgreSQLにログインしたとき良く使うコマンドの一覧
ログインするとき
# su – postgres
# psql -d [DB名] -U [ユーザ名]
※どんなDBが登録されているか不明な場合はtemplate1を指定します。(殆どの場合存在しています)

データベースの一覧を表示する
l

ログインしたデータベース内のテーブルの一覧を表示する
d

テーブルの定義を表示する。
d [テーブル名]

ログアウト
q

PostgreSQLのバックアップとリストア

そういえば、インストールと起動だけでバックアップ関係は記録してなかった。

PostgreSQLの場合はpg_dumpを使ってバックアップを取ります。
その前にpostgresユーザーになりましょう。

# su – postgres

データベースtestをバックアップ

# pg_dump test > test.dmp

ここで指定したtest.dmpはデータベースのバックアップ先ファイル名です。

今度は、バックアップしたデータベースを復元(リストア)します。

確認のため先程のtestを消します。

# dropdb test

そして空で作り直します。

# createdb test

リストア

# psql -e test < test.dmp

注意点として、データベースのエンコード情報を合わせて操作してください。特にcreatedbを行うとき等。