LoginSignup
1
2

More than 3 years have passed since last update.

ローカルのsqliteからherokuのPostgreSQLにデータをコピーする方法

Last updated at Posted at 2018-10-23

完全に個人的な備忘です。(クソ記事すいません・・・)

sqliteからデータをcsvファイルに書き出す

sqliteのコンソールに入り

>>> sqlite3 db.sqlite
sqlite> 

モードをCSVにし、CSVにデータを書き出す。
(以下、hoge_tableのデータをコピーする場合)

sqlite> .headers on
sqlite> .mode csv
sqlite> .output hoge.csv
sqlite> select * from hoge_table;

これで hoge_table の内容が hoge.csv に出力される。

herokuのPostgreSQLにデータ投入

次にherokuのPostgreSQLに接続し

>>> heroku pg:psql
hogeapp::DATABASE=>

データをHerokuのDBにコピーする。

hogeapp::DATABASE=> \copy hoge_table from 'hoge.csv' CSV header;

この時、HerokuのPostgreSQLで過去にデータを登録したことがある場合、idが既に採番されており、PostgreSQL側のidがキー重複することがある。
その場合、以下のコマンドででidのlast_valueを確認する。
(以下はhogeテーブルのidが何番まで採番されたかを調べる)

hogeapp::DATABASE=> select * from hoge_table_id_seq;

もし、ローカル(つまりsqlite)のidが10まで採番されているのであれば、
移行後に以下のコマンドを発行して採番済みidの値を更新する

hogeapp::DATABASE=> select setval ('hoge_table_id_seq', 10);

初期化する場合は以下。

hogeapp::DATABASE=> select setval ('users_id_seq', 1, false);

以上
(数万件程度のデータなら一瞬)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2