*目次 [#ce3bb365] #contents *SQLはpgAdmin3でサンプルコードが取得できる。 [#q56b1a73] 久しぶりにPOSTGRESQLを使った、もう10年ぶりぐらいだ、 いまでは、pgAdmin3とかいう、GUIで制御可能なインタフェースが用意されている。 *インストールの注意点 [#o1935cfc] スペース入りのフォルダにインストールすると cygwinの引数設定で、設定ファイルが見つからないとか、サーバ起動のファイルが見つからないとか言い出すので、スペース入りのフォルダに入れないこと **スペースがあると困る例 [#lb4c525e] pg_ctl reload -D $DATADIR *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 *dateフォルダにあるpostgresql.confのclient_encodingの値 [#t596eda1] UTF-8にしたい場合、次のように書く client_encoding = UNICODE または client_encoding = UTF-8 再起動をかけないと反映されない。 *設定を反映 cygwinの場合 [#v5564108] pg_ctl reload [-D DATADIR] [-s] *PostgreSQLでencoding,collate,ctypeの初期値を変更する方法 [#re0b252c] **URL [#o8e5e537] http://symfoware.blog68.fc2.com/blog-entry-947.html でも、ja_JP.UTF-8で登録しようとしたらエラーだった。 *データベース作成 [#d450394e] pgAdmin3というツールで自動生成されるDB作成のコードは下記の通りだが、 エンコードがないとかでエラーになった。 -- Database: postgres -- DROP DATABASE postgres; CREATE DATABASE postgres WITH OWNER = postgres ENCODING = 'SQL_ASCII' TABLESPACE = pg_default LC_COLLATE = 'C' LC_CTYPE = 'C' CONNECTION LIMIT = -1; COMMENT ON DATABASE postgres IS 'default administrative connection database'; LC_COLLATE = 'C'だと並べ替えで日本語を指定するときに困るのでは? エンコードはUNICODEを使いたいし、その場合の、並べ替え方法はJapanese_Japan.932を使いたい。 テンプレートを使えというメッセージが出ている。サンプルをググって、 次のコードを実行できました。 CREATE DATABASE データベース名 WITH OWNER = postgres ENCODING = 'UNICODE' TEMPLATE template0;