Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?
@kumakichiwel

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

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

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);

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?