- 追加された行はこの色です。
- 削除された行はこの色です。
*目次 [#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
*プライマリキーも別途出力する [#s79bbe7f]
*データベースを部分的に出力する [#u56fdf84]
ファイル指定の方法が、癖があるようだ。
http://d.hatena.ne.jp/deeeki/20080613/pgsqlcopycsv
*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;
*copyコマンド [#o47e5276]
ファイルパスの指定とかできる風に書いてあるけれども、cygwinのパスはかけなかった。
こんな感じの書き方でいけた。パスの先頭にEをつけるとか、おまじないの世界へようこそ。
copy "t_meteor_gpv_data" from E'c:/cygwin/home/こんなかんじのファイルパス' with csv;