そのダンプファイルをpsql
に直接フィードできるはずです。 :
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
id
が必要な場合 列を「自動インクリメント」に変更し、テーブル作成行でそのタイプを「int」から「serial」に変更します。次に、PostgreSQLはその列にシーケンスを付加し、NULLIDを持つINSERTに次に使用可能な値が自動的に割り当てられるようにします。 PostgreSQLはAUTOINCREMENT
も認識しません コマンドなので、これらを削除する必要があります。
datetime
も確認する必要があります SQLiteスキーマの列をtimestamp
に変更します PostgreSQLの場合。 (これを指摘してくれたClayに感謝します。)
SQLiteにブール値がある場合は、1
を変換できます。 および0
1::boolean
へ および0::boolean
(それぞれ)または、ダンプのスキーマセクションでブール列を整数に変更し、インポート後にPostgreSQL内で手動で修正することもできます。
SQLiteにBLOBがある場合は、bytea
を使用するようにスキーマを調整する必要があります。 。おそらくいくつかのdecode
を混ぜる必要があるでしょう 同様に呼び出します。ただし、処理するBLOBが多い場合は、SQLを操作するよりも、お気に入りの言語ですばやく「n」ダーティなコピー機を作成する方が簡単な場合があります。
いつものように、外部キーがある場合は、おそらくset constraints all deferred
を調べたいと思うでしょう。 挿入順序の問題を回避するには、コマンドをBEGIN/COMMITペア内に配置します。
ブール、ブロブ、制約に関するメモを提供してくれたNicolasRileyに感謝します。
`
がある場合 一部のSQLite3クライアントによって生成されたコードでは、それらを削除する必要があります。
PostGRESQLはunsigned
も認識しません 列があるので、それを削除するか、次のようなカスタムメイドの制約を追加することをお勧めします:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
SQLiteはデフォルトでnull値を''
に設定します 、PostgreSQLではNULL
として設定する必要があります 。
SQLiteダンプファイルの構文はPostgreSQLとほとんど互換性があるように見えるので、いくつかのパッチを適用してpsql
にフィードできます。 。 SQL INSERTを介して大量のデータをインポートするには時間がかかる場合がありますが、機能します。