*目次 [#ce3bb365] #contents *SQLはpgAdmin3でサンプルコードが取得できる。 [#q56b1a73] 久しぶりにPOSTGRESQLを使った、もう10年ぶりぐらいだ、 いまでは、pgAdmin3とかいう、GUIで制御可能なインタフェースが用意されている。 *DB作製 [#vfbadcff] 作製する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; *スキーマ作製 [#p452f5a2] スキーマを作製するサンプル 初期権限などの設定を細かく指定するため、最初に設計をしておいたほうがいい。 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; *psqlの日本語設定 [#f5d56f3b] 10年ぶりに使ってからさらに数年たった。前回使っていたバージョンが思い出せない。 確か8.1とかだったかと思う。今は、9.3だ。また、数年後に思い出すかもしれない。 psqlをcygwinで使ってみた。 日本語の設定をする。いまどき大体文字コードはUTF-8で統一しているところが多い。 過去のサイトを見るとSJISに設定する例が載っていたが、やはり自分にはUTF-8がいい。 設定してうまくいったのでメモしておく。 **.bashrcまたは、.bash_profileに登録しておく設定 [#a86b27e9] export LANG=ja_jp.UTF-8 **psqlで実行 [#b308fc34] \encoding UTF-8 設定ファイルに入れても、無効だった。他にやり方はあるのだろうけれども、 仕方がないので上のコマンドをたたく。 *情報源 [#taf361fd] http://yanor.net/wiki/?PostgreSQL%2F%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E7%AE%A1%E7%90%86%2Fpsql%2F%E3%83%A6%E3%83%BC%E3%82%B6%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB *一覧 [#sf27cd98] **テーブル一覧 [#w9637d06] psqlを使うと、ショートカットコマンド風になっているが、インデックスのDDL情報を引き出すには、こっちのほうがいい。スキーマは、デフォルトでpublicなので、 下記の例においては求めるスキーマによって変える必要がある。 ***サンプル [#f6891e16] SELECT * FROM pg_tables where schemaname='public' ORDER BY tablename; **インデックス一覧 [#p9d789c0] ユーザの作成したインデックスを出力するのはこちら SELECT * FROM pg_indexes i inner join pg_tables t on t.tablename=i.tablename where t.schemaname='public'; **インデックスのDDL生成 [#v6f85461] pg_dumpは残念なことにプライマリキーの定義やインデックスの定義を吐き出さない。 オプションで用意しておいてほしいところだが、ない。 その代わりといってはなんだが、下記のコマンドで生成される ***テーブル名がt_target_geo_coordの場合の例 [#ya043e58] 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