結論的には「ローカルにPostgreSQLを立てるのと同じ操作感で普通にロードできちゃいました」です。
composeでは、DBユーザにadmin権限をもらえません。
よって、王道である「copy」コマンドは使えません。PostgreSQLが入っているOSにログインができるわけでもないのでpg_restore等も使えません。なので。。。
・「¥copy」コマンドを使う(頭の「¥」がポイント) 今回はこれ!
・JavaやPerlからJDBC接続等でデータを入れる
・なんかツールがあるらしい?Transporter?
https://www.compose.io/articles/how-postgresql-fits-compose/
データロードの概要
・データの場所:作業用PCのローカル
・ロード先:Compose(クラウド)上のPostgreSQL
・作業用PCから、Compose上のPostgreSQLにログインをして、ローカルのファイルをベースにデータロード。
手順1:PostgreSQLにCLIで接続する
Overviewタブをクリックすると「Connect info」に書いてあるpsqlの定義をそのままコピペ(パスワードが最初は伏せ字になってますから、show/changeのところをクリックしてみて表示させる)。コピペしたコマンドを実行します(いろいろ伏せ字になってますのでご注意)。
$ psql --host 'hostname.com' --port 99999 --username 'admin' 'test'
psql (9.3.1, server 9.4.6)
WARNING: psql major version 9.3, server major version 9.4.
Some psql features might not work.
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
test=>
DB名 => と出てくれば、接続完了です。
手順2:¥copyコマンドでデータをロードする
なんかMarkdown記法のせいで変な色になってますが気にしないでください。
#時間を測定するように設定する
test=> \timing
Timing is on.
#PostgreSQLでPCローカルのデータをロード。¥copyコマンドを使用。ちなみにテキストのサイズは23MB。
test=> \copy customer from '/datadir/customer.txt' (delimiter '|');
Time: 18355.775 ms
#データがきちんとロードできているか確認
test=> select count(*) from customer;
count
--------
150000
(1 row)
手順3:データロードの時間はこんなかんじ
TPC-Hのデータを1GB分にしてデータロード。インターネットは家庭用の光回線です。
だいたい足し算すると、1GBを10分ちょいでロード、、といったところでしょうか。
このロードにはPostgreSQLにデータをinsertした時間だけじゃなくて、自分のPCのローカルにあるファイルをクラウド上にアップして、それをPostgreSQLにinsertした時間、なわけですので自宅のインターネットの速度を考えてみたら、、かなり普通な値じゃないかなと思います。
まとめ:家のインターネット経由で、普通にPostgreSQLを使う感覚でComposeのDBaaS環境にデータをロードできた
できました!特にクラウドだからなんか遅いとかは感じなかったです。
要は普通に「PostgreSQL」の環境がクラウドで提供されているってことでした。