PostgreSQLPostgreSQLでディスク容量の測定PostgreSQLってデータディレクトリーの名前が数字になっているのでどのディレクトリーとデータベースが対応しているか直感的にわからないため各データベースが使用しているディスク容量を調べるにはツールが必要になります。それで、本やネットで調べるとoid2nameを使えばOidとデータベース名の対応を表示してくれるみたい。数字のディレクトリーはOidのようです。公式ページや本ではREADME.oid2nameを見れと一言だけしか書いてないので使い方はREADME.oid2nameを参照することにしました。...が、そもそもソースコンパイルではoid2nameが入っていない。oid2name導入についての記述がどこにも見当たらない。一応Makefileはあるので考えられる方法で導入してみることに。oid2nameのソースがおいてある場所は/usr/local/src/postgresql-8.1.0/contrib/oid2name/でした。ここに、README.oid2nameMakefileoid2name.cの3つのファイルがあります。本体と同じくoid2nameも通常のmakeでは利用できませんでした。makeを探しに行ってくれるので/usr/bin/makeで打ってしまっても大丈夫だったりします。これでoid2nameが/usr/local/pgsql/bin/oid2nameにインストールされました。pg_defaultPオプションはパスワードです。ローカルでの認証をtrustにしている場合は不要だと思いますが、それはあまり好ましくないのでパスワード設定しておきましょう。このコマンドは対話的にパスワードを入力できず上記のようにコマンドライン上か~/.pgpassに設定する必要があるので困り者です。10305のようにテーブルのoidを確認して次のようにコマンドを打ちます。pg_toast_2618実際テーブルレベルになってくるとデータベース側が定義したものが多すぎて単純に振り分けるのが困難ですね。上記はサンプル通りファイルサイズの多い順でやってみましたが、独自で定義したテーブルは出てきていません。脱線しましたが、データベースごとの測定は簡単にできます。先程testデータベースのoidは16452と分かりましたのでduコマンドで測定します。1でもいいと思います。先月のMT4検証で気になっていたのがデフォルトのPostgreSQLはローカルマシンでDBに接続するときは誰でも入れてしまうなーっと。これはpg_hba.confの設定でローカルマシンからの接続は無条件に許可しているからでした。共用サーバになるといろいろな人が利用するのではこれではマズいと設定の見直し。passwordlocalはコマンドラインで通常接続するときに使用しているUNIXドメインソケット、hostがTCP/IPで接続するときの設定です。デフォルトではMETHODがtrustになっていますがこれをpasswordに変えることでDB接続時にPostgreSQL内で設定したユーザパスワードが必要になります。パスワード未設定のユーザは接続できなくなるので事前に設定の確認をしてください。管理人.postgreSQLをC++から利用するこの前、MySQLにて二重接続を行いましたがそれのpostgreSQL版を作成し今度はフィールド名にて値の取得を行ってみました。ソースは以下の通り、動作確認はFreeBSD6.0です。pg_cpp20060611-1今度はstd::mapを使ってMySQL版との共通化を考えよう...。管理人.PostgreSQLへC言語で接続するMySQLが一段落したので今度はPostgreSQLへ接続してみます。ソースファイルはこちら(C言語)pg20060521-1PostgreSQLとMySQLでは値の取り出し方法が違うみたいですね。C++でクラス化する際には共通のほ方法で利用できるように考慮したほうが良いですね。(DBI使ったほうが早いとか置いといて)もうひとつ重大な問題がこのソースにはあります。SELECTで*を指定しておいて取り出し時に何番目というやり方で行っていること。テーブルのフィールドに追加変更があった場合にプログラムが動かなくなってしまう危険があります。SELECTで*を使わなければ良いのですがそれでも要素名でアクセスできないのは可読性に影響します。C++版は以上を考慮に入れてMySQL版と移植性の高いものを作ってみます。[ユーザ名]※どんなDBが登録されているか不明な場合はtemplate1を指定します。(殆どの場合存在しています)データベースの一覧を表示するlログインしたデータベース内のテーブルの一覧を表示するdテーブルの定義を表示する。管理人.PostgreSQLのバックアップとリストアそういえば、インストールと起動だけでバックアップ関係は記録してなかった。PostgreSQLの場合はpg_dumpを使ってバックアップを取ります。その前にpostgresユーザーになりましょう。test.dmpここで指定したtest.dmpはデータベースのバックアップ先ファイル名です。今度は、バックアップしたデータベースを復元(リストア)します。確認のため先程のtestを消します。testそして空で作り直します。test.dmp注意点として、データベースのエンコード情報を合わせて操作してください。createdbを行うとき等。644b50b88cd2b93e465bb8ff30da09edFreeBSDの最小構成ではgmakeが入ってないのでmake時に失敗するためgmakeをインストール。installpostgresグループとユーザーを作成する。このとき出来るならばgidとuidを70にセットする。これはアーカイブを解凍したときにchownを省略できるため。(元々postgresのuid/gidは70で定義されているみたい)※意味がわからなければ解凍後chownでpostgresにしてください。今回はpwコマンドを初めて使ったので(というかリファレンス不足でpwコマンドの詳細が不明)uidとgidは後から編集しました。/etc/groupuid/gidが変わったのでホームディレクトリの所有者・グループを修正。日本語を使用するとき必要。TCP/IP経由で接続する場合に使用。現在多くのサーバーシステムでは必須。最小構成以外でLinuxやBSDを入れている人は、rpmやportsのpostgresが混入していないかチェックしてください。起動していてポートが使えなかったり、バージョンやディレクトリ構成の差異によって予期せぬ不具合を起こします。/usr/local/etc/rc.d/postgres.shオプションやパス等が正しいか確認する。/usr/local/etc/rc.d/postgres.shこれで自動起動の設定は完了です。iオプションを有効にしているので外部からの接続が制限できているかpostgresユーザーになって下記のファイルを確認します。デフォルトではこのようになっておりlocalhost以外からは接続できないように設定されているようです。これだけでは安心できないので前段にファイヤーウォールを設置した方が良いと思います。ディスプレイ対応へMacで音声入力する。