postgres

複数行結果が返ってくるものを文字列結合。 ARRAY_TO_STRING(ARRAY(SELECT name FROM TABLE_NAME WHERE id IN(1, 2, 3)), ',') 今までいちいちストアド書いてた・・・。参考記事: http://d.hatena.ne.jp/mb_strlen/20100322/1269246561#

8.4でUTF-8以外でcreatedb

>createdb -E EUC_JP --locale=ja_JP.EUC_JP --template=template0 -U postgres -O ユーザー名 データベース名

timestamp型をdateにキャストして比較するとIndexが効かない

cr_tsp::date = current_dateなどで今日の日付と比較した場合Indexが効かない。 cr_tsp >= current_date::timestamp AND cr_tsp とすると良い。他にいい方法があればいいけど。 注:current_timestampじゃなくてdateを::timestampでキャストしているのは0時0…

継承が使えそうで使い物になっていない。

http://www.postgresql.jp/document/8.4/html/ddl-inherit.html 警告の部分にもあるように、親テーブルのPRIMARYKEYを子テーブルに引き継ぐことが出来ないので使い物にならない。 正確にいうと親テーブルを含んだ制約に出来ない。

Lock

http://www.postgresql.jp/document/8.3/html/explicit-locking.html

年度を取得

exp_dateを年度に変換したいとする。(date型かtimestamp型) select case when date_part('month',exp_date) という風にするといい。元号変換はしていないので注意。

Updateに別テーブルの値を使う。

update TBL_A set price=B.price from TBL_B B where code = B.code みたいな感じでFROMをつけて対応する。

pg_dump -FC(カスタムフォーマット)を指定のDBにpg_restore

備忘録的な。 pg_restore -Fc -O -U ユーザー名 -d データベース名 ダンプファイル名 また、一部分のテーブルだけ移植したいときなどで数が結構多い時は一回全部ダンプして リストア時に-tでテーブル指定してリストアすると楽。