以下を含むジョブクラスを実行しています。
私が取っている現在のプロセスは、ケースごとに赤方偏移が異なる列を処理しています。使用される列のタイプ(重複したタイプを無視して、必要に応じて残りを与えることができます)は次のとおりです。
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
詳細:削除する必要がある行バージョンを表示するために、ユーザークエリが必要だった可能性があります。
これがコピーを停止している原因ですか、それとも間違ったトラックにあり、別の問題ですか?
これは、クエリを非常に長く実行できないpostgresqlレプリカをクエリするためです。唯一の解決策は、データベース管理者にそのレプリカのクエリ制限を増やすか、代わりに本番環境にヒットするよう依頼することです。