そのダンプファイルを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を介して大量のデータをインポートするには時間がかかる場合がありますが、機能します。