web-dev-qa-db-ja.com

psycopg2によるPostgresqlからRedshiftへの移行でのエラーの診断

以下を含むジョブクラスを実行しています。

  • SQLステートメントを発行できるPostgresql接続
  • 同じことができるRedshift接続
  • 2つの間の仲介として機能するS3接続

私が取っている現在のプロセスは、ケースごとに赤方偏移が異なる列を処理しています。使用される列のタイプ(重複したタイプを無視して、必要に応じて残りを与えることができます)は次のとおりです。

 id                             integer          NOT NULL,
 client_id                      integer          NOT NULL,
 manual_dt                      date,
 scheduled_at                   timestamp,
 some_other_id                  varchar(255),
 is_good                        integer          DEFAULT 0 NOT NULL,
 url                            varchar(4096)    NOT NULL,
 image_width                    integer,
 image_dim_ratio                float8,
 invalid_reason                 varchar(256)     DEFAULT NULL::character varying

この初期ロードでコピーする必要があるレコードは合計で約230万個あります。これをSELECTおよびCOPYとしてpostgresqlで使用し、S3にアップロードしてから、RedshiftのCOPYを使用してs3ソースから取得しています。このすべては、必要に応じて投稿することもできます。

これは、100、1000、10000、100000、および1000000レコードのロードで機能します。ただし、セット全体またはレコードの正確な数の制限に移動すると、次のトレースが表示されます。

psycopg2.extensions.TransactionRollbackError: canceling statement due to conflict with recovery

詳細:削除する必要がある行バージョンを表示するために、ユーザークエリが必要だった可能性があります。

これがコピーを停止している原因ですか、それとも間違ったトラックにあり、別の問題ですか?

3
yburyug

これは、クエリを非常に長く実行できないpostgresqlレプリカをクエリするためです。唯一の解決策は、データベース管理者にそのレプリカのクエリ制限を増やすか、代わりに本番環境にヒットするよう依頼することです。

2
Geesu