sql >> データベース >  >> RDS >> PostgreSQL

SQLITESQLダンプファイルをPOSTGRESQLに変換します

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



    1. Python、PyQt、SQLiteでコンタクトブックを作成する

    2. PostgreSQL9.0をWindowsサービスとして登録して実行します

    3. オンラインアップグレードの進捗状況

    4. PL/pgSQLのEXECUTE...USINGステートメントはレコードタイプでは機能しませんか?