課題への挑戦
MySQL で試したことを PostgreSQL でやるとどうなるか。
先ずはテーブル作成
$ psql83 -U postgres postgres=# create table master(tmp1 varchar(10), tmp2 varchar(10), tmp3 varchar(10) ); CREATE TABLE postgres=# create table code(tmp1 varchar(10), tmp2 varchar(10), tmp3 varchar(10), tmp4 varchar(10)); CREATE TABLE
コピー文でデータを投入。
ちなみに psql で接続中のカレントディレクトリはDB本体が存在するディレクトリ以下になる。
小生の場合は/opt/local/var/db/postgresql83/defaultdb なので、この下にコピーする元ネタを配置。
postgres=# copy master from 'master.csv' delimiters ','; COPY 6 postgres=# copy code from 'code.csv' delimiters ','; COPY 6
絶対パスで指定すればすむ話だけどいろいろ面倒なので…
準備が整ったので結果を出力。
postgres=# \a Output format is unaligned. // SELECT 結果をフォーマット無しで返す。 postgres=# \t Showing only tuples. // ヘッダ行、出力件数を表示しない。 postgres=# \pset fieldsep ',' Field separator is ",". // セパレータを変更
上記は psql 接続が終了するまでの反映。一回切断するともとに戻ります。懐かしい…
あとは出力先を指定してSELECT文を発行と。ちなみにファイルの出力先は接続したときのディレクトリがカレントになります。ので権限が無くてファイルが出力できないよー的なことは通常発生しないはず。
postgres=# \o result.csv postgres=# select * from master m,code c where m.tmp1 = c.tmp1;
結果確認ー
postgres=# \q $ cat result.csv 123,aaa,bbb,123,test2,test_test,test5 456,iii,jjj,456,test4,test_test,test3 789,kkk,mmm,789,test6,test_test,test1 123,ccc,ddd,123,test2,test_test,test5 123,eee,fff,123,test2,test_test,test5 111,ggg,hhh,111,test1,test_test,test6
PostgreSQLだとこんな感じか…