2007-11-07

PostgreSQL 8.1 以降のメンテツールのもと

メンテツールそのものじゃないです。とりあえず上げてみるテスト。こんなのがあると sh スクリプトとかと組み合わせやすいかなーと思う。

DB一覧

最も単純にはこう。

psql -U postgres -t -A -F " " -l | awk '{print $1}'

ただしこれだと template0, template1, postgres が含まれてしまう。

psql -U postgres -t -A -F " " \
-c "select datname from pg_database where not datistemplate;"

にすれば postgres は入っちゃうけど「使える」データベースの一覧が採れる。

テーブル一覧

とりあえずテーブル名だけ

psql -U postgres -c "\d" $DBNAME
psql -U postgres -t -A -F " " -c "\d" $DBNAME | awk '{print $2}'

権限情報付きはこう。

psql -U postgres -c "\dp" $DBNAME
psql -U postgres -t -A -F " " -c "\dp" $DBNAME | awk '{print $2, $4}'

権限付きはいっぺんに取得できない。上と組み合わせてこんな感じ。勘違いして必死こいて awk で sql を組み立てたバージョンも晒しておきます。ほ、ほら、sql を書き換えればいろんな情報が採れるよ!とかほざいておく。

psql -U postgres -c "select relname,relacl from pg_class where relname \
in (`psql -U postgres -t -A -F ' ' -c '\d' $DBNAME | awk '{print $2}' |\
awk -F '\n' -v RS='' -v ORS='' 'BEGIN {print \"\047\"}\
{gsub(/\n/,\"\047,\047\"); print}\
END {print \"\047\"}'`)" $DBNAME

なんでこんなまどろっこしいことやってるかっていうと pg_class の結果からシステムが用意したテーブルかどうかを判断する基準が分からなかったから。

スクリプトの長さはともかく、SQL を生読みするよりは多少権限付与の状態が見やすい……んじゃないかなぁ。

{ }

の中を , で split するとかは好きずきってことで。

select relname,relacl from pg_class where relname in

の部分を

select relname,relfilenode,relpages,relacl from pg_class where relname in

ってやっとくとディスクスペースの確認もしやすくなる1。インデックスとか入ってないけどそこら辺は適当で、ひとつ。

role一覧

※ たぶん 8.1 以降専用なのはここだけだと思う。

まずはまんま。

psql -U postgres -c "\du"

ユーザー名とグループのみに絞ってテキストデータだけにするとこんな感じ。

psql -U postgres -t -A -F '|' -c '\du' | awk -F \| '{print $1, $6}'
  1. この page の単位ってよく知らないけど、node が分かれば ls -lh? とかで容量の確認はできる。ま、フツーそんな細かいレベルの情報は必要にならないというか、そんなの気にしちゃダメっぽい。もっとざっくり効率がいいか悪いかとかディスクに収まるかどうかだけ見ろと言いたいらしいぞ。知らんけど。 

Web業界と Un*x と Cygwin

駄文 - プログラミングと Shell - IT戦記

モテたいやつは Un*x 使って shell 使って書けと。(嘘)

仰るように基本テキスト処理っつーのは大きいと思います。テキストが「インターフェイス」なのよね。ただ CLI は最初の心理障壁がべらぼうに高いので、GUI のツールにできっこねー技をいくつか披露しておくと(してもらうと)多少はマシかもしんない。別にオレたちゃマゾっ気があって Terminal 開いてるわけじゃない。ジョブズが好きだから Mac 使ってんじゃない。

話がそれた。

cygwin は wget とかでがっつりローカルにミラー作っておくとインストールも更新も早くて楽です。最近はそんなことしなくてもみんな十分回線が速いのかしら。

あとはいつも言ってることのくり返し。

cygwin のメリットは

  • ファイルシステムが Windows と分離しないのに完全な1システムとして動く
    • 同じコマンドを個別にインストールするのと違って楽だし統一感もある
    • cofs 使ったことないんでその辺は分かりまへん
  • shell から Windows のコマンドもそのまま呼べる

この2点だと思う。で、ターミナルは絶対変えた方がよい。これは

から。

/cygdrive/c/

になる問題は

cd /
ln -s /cygdrive/c
ln -s /cygdrive/d

しとくとよいよ。

最近の cygwin は screen もまともに使えるし、結構便利なんじゃないかな。

About

例によって個人のなんちゃらです