久しぶりにPOSTGRESQLを使った、もう10年ぶりぐらいだ、
いまでは、pgAdmin3とかいう、GUIで制御可能なインタフェースが用意されている。
作製するdb01とすると
-- Database: db01 -- DROP DATABASE db01; CREATE DATABASE db01 WITH OWNER = postgres ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'Japanese, Japan' LC_CTYPE = 'Japanese, Japan' CONNECTION LIMIT = -1;
スキーマを作製するサンプル
初期権限などの設定を細かく指定するため、最初に設計をしておいたほうがいい。
CREATE SCHEMA sc01 AUTHORIZATION postgres; GRANT ALL ON SCHEMA sc01 TO public; ALTER DEFAULT PRIVILEGES IN SCHEMA sc01 GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO public WITH GRANT OPTION;
ALTER DEFAULT PRIVILEGES IN SCHEMA sc01 GRANT SELECT, UPDATE, USAGE ON SEQUENCES TO public WITH GRANT OPTION;
ALTER DEFAULT PRIVILEGES IN SCHEMA sc01 GRANT EXECUTE ON FUNCTIONS TO public WITH GRANT OPTION;
10年ぶりに使ってからさらに数年たった。前回使っていたバージョンが思い出せない。
確か8.1とかだったかと思う。今は、9.3だ。また、数年後に思い出すかもしれない。
psqlをcygwinで使ってみた。 日本語の設定をする。いまどき大体文字コードはUTF-8で統一しているところが多い。
過去のサイトを見るとSJISに設定する例が載っていたが、やはり自分にはUTF-8がいい。
設定してうまくいったのでメモしておく。
export LANG=ja_jp.UTF-8
\encoding UTF-8
設定ファイルに入れても、無効だった。他にやり方はあるのだろうけれども、 仕方がないので上のコマンドをたたく。
psqlを使うと、ショートカットコマンド風になっているが、インデックスのDDL情報を引き出すには、こっちのほうがいい。スキーマは、デフォルトでpublicなので、
下記の例においては求めるスキーマによって変える必要がある。
SELECT * FROM pg_tables where schemaname='public' ORDER BY tablename;
ユーザの作成したインデックスを出力するのはこちら
SELECT * FROM pg_indexes i inner join pg_tables t on t.tablename=i.tablename where t.schemaname='public';
pg_dumpは残念なことにプライマリキーの定義やインデックスの定義を吐き出さない。
オプションで用意しておいてほしいところだが、ない。 その代わりといってはなんだが、下記のコマンドで生成される
SELECT indexdef FROM pg_indexes i inner join pg_tables t on t.tablename=i.tablename where t.schemaname='public' and t.tablename='t_target_geo_coord';
自分がやりたいことは、リモートのインデックス生成情報を得ることだ。
psqlは標準入力を受け付けてくれるので、下記のような書き方になる。
echo "SELECT indexdef FROM pg_indexes i inner join pg_tables t on t.tablename=i.tablename where t.schemaname='public' and t.tablename='t_target_geo_coord';" |psql -h IPアドレス -p ポート -U ユーザ名 -f - -d データベース名 | grep CREATE