PostgreSQLを実際に使いながらできることの幅を広げてみる その1

とりあえずまとめから。

バックアップ
pg_dump db_name > outfile
ファイルからコマンド実行
\i FILE execute commands from file
インポート
COPY テーブル名 FROM 'CSVファイルの絶対パス' CSV;
エクスポート
COPY テーブル名 TO 'CSVファイルの絶対パス' CSV;

やったこと

PostgreSQLを業務で使っているんだけど、
select
insert
くらい知っとけば大丈夫だろみたいなノリではさすがにマズイので、
ちとPostgreSQLでできるけど知らなかったことを書いていく。

sqlの本を買って電車で地道に読み続けてるけど実際にやっぱ手動かさなきゃだめだよね。
っていう部分がかなり大きいので。

バックアップ

ずっと思ってたんだけどバックアップ。
できます。


pg_dump

というコマンドがあるので、それでできます。

コマンドラインから
pg_dump db_name > outfile
ってカンジでやるといいんだね!

これで実際にやってみると確かにdatabaseがイイカンジに出力された!
あとはこれを入れてみる(リストア)なんだけど、
最初にcreatedb -T template0 db_nameしておいてね!って書いてあるので
そのように作っておいて
psql db_name < inputfile
てなカンジでやるとちゃんとリストアできました。
もっと早く知っとけばよかった(´・ω・`)ショボーン

いきなり問題・・・データの挿入

買ってきた本の中では一番最初にCASE文の紹介があるんだけど
まず一番最初にこんなテーブル作らなきゃ話にならないわけですよ。

こんなテーブル(PopTbl)


pref_name | population

                                                  • -

徳島 | 100
香川 | 200
愛媛 | 150
高知 | 200
福岡 | 300
佐賀 | 100
長崎 | 200
東京 | 400
群馬 | 50

いやいや、create tableはしょうがないけれども
データをいちいちツッコムとか泣くしょ、俺とか思ったんですね。
まぁ入れるしかないんですけれども。

そこでpsqlした後に\?してみたわけです。すると


\i FILE execute commands from file

なんてのがあるじゃないっすか!

ってわけで早速inputってファイルを作ってその中に
手打ちで2行入れたんで少し少ないけど・・・(笑)

insert into poptbl values('愛媛', 150);
insert into poptbl values('高知', 200);
insert into poptbl values('福岡', 300);
insert into poptbl values('佐賀', 100);
insert into poptbl values('長崎', 200);
insert into poptbl values('東京', 400);
insert into poptbl values('群馬', 50);
ってカンジで
\i input
してやりました。

vimでファイル編集できるのでさほど時間がかからないわけですごくいい感じでした。

んで、最初はそれでOK、問題ないと思ったが・・・。

ちがう、ちがうよ、インポートだよ

そう、2問目にはさらに性別とかいうカラムが追加され、さらに行も列も増えていました。

いちいちinsertなんて書いていられません。
そんなときは「postgres インポート」でググればいいんですよ(笑)


tomimemo
さんより

COPY テーブル名 FROM 'CSVファイルの絶対パス' CSV;

でできます。
すごいですね、簡単ですね。

ポスグレのみならずいろいろ勉強しなきゃダメなんですが、
とりあえずsqlを勉強していきます。その2があるかは未定。