*目次 [#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

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS