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