COPYコマンドを使用して、ファイルからPython経由でPGSQLにデータを挿入しようとしています。Python PostgreSQL(INSERTだけでなく)INSERTまたはUPDATEに使用されるCOPYコマンド
cmd = ("COPY %s (%s) FROM STDIN WITH (FORMAT CSV, NULL '_|NULL|_')" %
(tableName, colStr))
cursor.copy_expert(cmd, io)
私は最初のテーブルを空にすることなく、このCOPYコマンドを実行できるようにしかし好む:ターゲット表が空であるか、私は一意のキーの衝突は存在しません事前に確保するとき、これは非常によく動作します。 SQL COPYで 'INSERTまたはUPDATE'型操作を実行する方法はありますか?
ソリューションを更新
COPYが完了した後、私は(Djangoのメソッド内で)私のCSV COPYデータ・ソースに「tmpDom」の値を強制して、次のようにやってしまいました。
ここの_domainフィールドは、私の特定のスキーマの論理グループです。それは、私はダミーの一時的な値の下にすべての新しいデータを読み込むことができますし、1つのトランザクションで私たちは新しいデータの値を更新しながらそれを置き換えてすべての古いデータを削除します。
with transaction.atomic():
klas.objects.filter(_domain=curObj).delete()
klas.objects.filter(_domain=tmpDom).update(_domain=curObj)
つのオプション::/:1)2)[ 'file_fdw'](HTTPSを使用する一時テーブルにコピーして、そこからアップサートを行うただし、個々のアイテムをラップするためにcolStrを分解する必要があります/www.postgresql.org/docs/current/static/file-fdw.html)extension –