Release Notes

2.3.0(2022-08-16)

改善

  • IBM PowerでのRedHat Enterprise Linux (RHEL) 8のサポート (ppc64le)

  • IBM PowerでのSLES 12 SP5のサポート(ppc64le)

  • IBM PowerでのSLES 15 SP3のサポート(ppc64le)

  • x86_64でのUbuntu 22.04(Jammy)のサポート

  • x86_64でのDebian 11(ブルズアイ)のサポート

2.2.0(2022-06-14)

新機能

  • --dry-run 実行モードを追加しました。これにより、ユーザーは比較セッションを実行せずに.ini ファイルを検証し、いくつかの有用な比較情報を表示できます(LIV-142、RT78462):

  • 比較セッション中に受信したアボートメッセージは時系列で印刷されます

  • 接続がタイブレーカーまたは信頼できるソースであるかどうか、および到達可能かどうかを含む接続のリストを表示します。

  • Table Filter が構成されている場合は表示します。

  • 比較に含まれるテーブルをリストします。これは、Table Filter を適用した後のすべての接続に存在する共通テーブルのリストです。各テーブルについて、該当する場合、Column Filter 、Row Filter およびComparison Key を示します。

改善

  • x86_64でのSLES 12のサポート(LIV-112)。

  • x86_64でのSLES 15のサポート(LIV-113)。

  • Postgres kwlist のソースコード(LIV-141、RT80745)に従って予約語のリストを更新しました。

  • メインのプログレスバーのパーセンテージが、整数ではなく浮動小数点数を使用するようになりました。以前は、数値が切り上げられていました(LIV-138、RT80745)。

  • EPASでedb_redwood_date が有効になっている場合、 date 列はtimestamp 列として作成されます。この型の不一致は、以前に共通ハッシュの不一致として検出され、行全体の比較がトリガーされました。これらの場合にedb_redwood_date 設定をチェックすることにより、共通ハッシュ(完全な行よりも高速)でこの不一致を処理することにより、パフォーマンスが向上します。

  • ハッシュ不一致ログメッセージをWARNINGからDEBUGに降格しました(LIV-145)。

  • ログには、メッセージにapplication_name が含まれます(LIV-141)。

  • data_fetch_mode = prepared_statements (デフォルト)の場合、PostgresまたはEPASのRow Filter で現在のタイムスタンプを使用する動作を文書化しました。この場合、data_fetch_mode = server_side_cursors_with_hold またはserver_side_cursors_without_hold も設定する必要があります(LIV-155)。

  • 検出された発散の数が増加した場合に適用DMLスクリプトを生成するときのパフォーマンスが向上しました(LIV-159)。

バグ修正

  • 配列列が比較キーと見なされると、テーブルでの比較が例外により中止される問題を修正しました(LIV-38、LIV-154、RT81758)。

  • ハートビートによってのみ、比較ラウンド後に発散および処理された行の数が適切に更新されない問題は解決されました。この場合、行は古く、最後のハートビート以降の位置のみを示しています。比較にかかる時間がmin_time_between_heart_beats よりも短いテーブルの場合、常にゼロを示していました(LIV-149、RT75805)

  • 未処理の例外が原因で比較ワーカーがハングするコーナーケースを修正しました(LIV-140、RT80745)。

  • OracleとPostgresを比較するときに誤検出を回避するための10進値の正規化(LIV-153)。

  • comparison_algorithm = block_hash とbuffer_size = 1 で、相違が見つかった場合、カーソル前進アルゴリズム(LIV-150)の問題が原因で比較が進められないコーナーケースを修正しました。

  • 複数のフィルターセクションで同じテーブルを設定できるようにします (LIV-156)。

2.1.0(2022-03-31)

新機能

  • Postgres- BDR 4(LIV-131)のサポート。

  • ハートビートごとに比較の進行状況をログに記録するようにLiveCompareに指示する新しい設定min_time_between_heart_beats は、 INFO ログレベルを使用してデフォルトで30秒に設定されます。

  • 新しい設定comparison_cost_limit とcomparison_cost_delay は、0より大きい場合、各ワーカーにcomparison_cost_limit 行数を処理した後にcomparison_cost_delay 秒(たとえば、 0.5 )昼寝をするように指示します。

その他の変更

  • 最近の調査により、一般的なユースケースのパフォーマンスが低下することが判明したため、parallel_chunk_rows のデフォルト値は0 に設定されています。詳細については、設定(LIV-130)のドキュメントを参照してください。

  • CanAdvanceCursors メソッドからの処理された行数に関するログメッセージをDEBUG に降格しました。

バグ修正

  • timestamp(6) データ型のOracleとPostgresの比較でORA-01830 で失敗する問題を修正しました(LIV-127)。

2.0.0(2022-02-15)

重大な変更

  • パッケージの名前が2ndq-livecompare からedb-livecompare に変更されました。

  • 実行可能ファイルは2ndq-livecompare からlivecompare に名前が変更されました。

新機能

  • Comparison Key と呼ばれる設定の新しいセクションにより、ユーザーはテーブルごとにカスタム比較キー(列のリスト)を定義できます。これは、主キーまたは一意のインデックスのないテーブルで役立ちます(LIV-5)。

  • テーブルにユーザー定義の比較キーまたは主キーがない場合、LiveCompareはテーブルの一意のインデックスを使用しようとします。テーブルは複数の一意のインデックスを持つことができるため、 LiveCompare は列がnullを許容しないインデックスを使用することを好みます。不可能な場合、LiveCompareは列の少ない最初の一意のインデックスを使用しようとします。一意のインデックスがない場合、LiveCompareはテーブルのすべての列を比較キーとして使用しようとします。 LiveCompareは一意のインデックスからのnull許容列を無視しないことに注意してください(LIV-39)。

  • テーブルのすべての列を比較キーとして使用する場合、LiveCompareはNULL可能な列を無視して、すべての列を検討する際の誤検出を回避するようになりました。この動作は、 ignore_nullable = false (LIV-96)を設定することで無効にできます。

  • ユーザー定義の比較キーまたはテーブルのすべての列を比較キーとして使用する場合、LiveCompareは一意性を強制するかどうかを確認するようになりました。列セットを使用しているときに値が重複している場合、LiveCompareはテーブルでの比較を中止します。この動作は、 check_uniqueness_enforcement = false を設定することで無効にできます。

パフォーマンスの向上

  • Oracle 12c以降では、LiveCompareは既に共通のハッシュを使用してcomparison_algorithm = block_hash とcomparison_algorithm = row_hash を使用できます。これらはより高速で、マルチプルのワーカープロセス間でテーブルを分割できます。これは、Oracle 12cで導入された standard_hash() 関数を使用してOracle側で実行されます。現在、LiveCompareは、ユーザーがsys.dbms_crypto Oracleシステムパッケージ(LIV-79)に対するEXECUTE 権限を持っている場合、同等の機能sys.dbms_crypto.hash() を使用して、Oracle 11gでcomparison_algorithm = block_hash およびcomparison_algorithm = row_hash も許可します。

その他の改善

  • Oracle 21c(LIV-47)のサポートを追加しました。

  • LiveCompareスキーマをレプリケーション対応(BDR、 pglogicalまたはネイティブ論理レプリケーション)データベースに追加できるようになりました(LIV-42)。

  • LiveCompareは、PostgreSQL 14の新しいpg_read_all_data ロールを使用できます(LIV-73)。

  • データベースバージョンがサポートされていない場合は、適切なメッセージで中止します。

バグ修正

  • DML生成時のエラーを回避するために、ユニコードシーケンス\u0000 を適切に引用します。

・テーブルを複数のラウンドに分割した場合、合計行数が誤って表示される問題を修正しました(LIV-14)。

  • Oracle上の空のBLOB とPostgresの空のbytea を比較すると、誤検知が生成される問題を修正しました(LIV-103)。

  • 接続の問題が原因で比較セッション全体が中止される問題を修正しました。 LiveCompareは再接続して、可能な場合は比較を続行できるようになりました(LIV-84)。

  • 相違がある場合の再チェックモードでの未処理の例外を修正しました(LIV-107)。

  • テーブルが接続に存在せず、logical_replication_mode が無効になっている場合、テーブル比較が中止されない問題を修正しました(LIV-108)。

  • timestamp データ型のフィールドがOracleとPostgresの間で常に一致しないハッシュを生成していた問題を修正しました。

  • 無視された列が一般的なハッシュでまだ考慮されている問題を修正しました。

非推奨の通知

  • Oracle 10g(LIV-47)へのサポートを終了しました。

1.18.1(2021-12-14)

バグ修正

  • 非同期接続で内部の丸い部分の列名設定が考慮されていない問題を修正しました(LIV-95)。

1.18.0(2021-12-01)

パフォーマンスの向上

  • Oracle用の新しいQueryBlockデータフェッチメソッドを実装しました。アルゴリズムは同じソケットから行をフェッチし続けます。Oracleでは、以前は最後に処理されたマルチ列のPK値を過ぎて行をフェッチする必要があった行値式を含む不等号演算子が許可されないため、より効率的です。これにより、OracleとPostgresの比較のパフォーマンスが大幅に向上します。 PostgreSQLでは行値式を含む不等号演算子が許可されているため、 LiveCompareは準備されたステートメントを使用して同じアルゴリズムを使用して、膨張とxmin ホライズンの抑制の観点から影響を与えません。したがって、PostgresとPostgresのパフォーマンスはこの実装の影響を受けません(LIV-83、RT75644、RT75675、RT75332)。

  • comparison_algorithm = block_hash 使用時にバッファーをリセットする必要がなくなりました。ハッシュが一致しないブロックが見つかると、 LiveCompare は、一致しないブロック(既にフェッチされている)内のすべての行が個別に比較されるまで正しく comparison_algorithm = row_hash に切り替え、次のバッファーをフェッチするためにcomparison_algorithm = block_hash に戻ります。これにより、OracleとPostgres、およびPostgresとPostgresの比較(LIV-85、LIV-86、RT75644、RT75675、RT75332)のパフォーマンスが向上します。

  • comparison_algorithm がblock_hash またはrow_hash (現在Oracle 12以降が必要)に設定されている場合、LiveCompareはOracleとPostgresの比較でも大きなテーブルを分割できるようになりました。ハッシュはデータベース側で行われるため、以前はPostgres対Postgresでのみ可能でした。 OracleとPostgresは共通のハッシュ関数を共有していないため、MD5に基づく共通の行ハッシュを整数ハッシュに変換して、テーブルデータをマルチプルのワーカーに分割できるようにしました。 Oracleでは、パフォーマンス上の理由からデータベース側で実行できなかったため、このハッシュをPython側で計算します。 OracleとPostgresのテーブル分割の並列処理のコストは、PostgresとPostgresの場合と同じではないため、OracleとPostgresでは、 parallel_chunk_rows をデフォルトの1000万よりも高く設定することをお勧めします。たとえば、1億以上に設定すると、アルゴリズムは非常に大きなテーブルのみを分割します(LIV-87)。

その他の改善

  • EDB Extended PostgreSQL 14およびEDB Advanced PostgreSQL 14(LIV-71、LIV-72)のサポート。

  • 相違の検査に役立つOracle rowid を収集する(LIV-90、RT75644、RT75675)。

  • 相違の検査に役立つLiveRound比較アルゴリズムのログを改善しました(LIV-91、RT75644、RT75675)。

バグ修正

  • oracle_fetch_fk_metadata が尊重されない問題を修正しました(LIV-92)。

  • ログが多いユースケースでlog_level = debug を使用すると、ログキューがいっぱいだったためにLiveCompareが未処理の例外で終了する可能性がある問題を修正しました。 Unixシステムでは、キューの最大サイズは32676です。基本のPython実装がログレコードを非同期にエンキューしたために問題が発生しました。解決策は、Python実装をオーバーライドしてログレコードを同期的にエンキューすることでした。これは、 log_level = debug およびログが多いユースケース(LIV-93)

1.17.0(2021-10-01)

改善

  • PostgreSQL 14(LIV-66)のサポートを追加しました。

  • Debian 11(LIV-70)のサポートを追加しました。

バグ修正

  • --recheck は常にセッションIDを必要とします (LIV-76)。

  • ドキュメントのマイナーな修正(LIV-26、LIV-68、LIV-80)。

1.16.0(2021-08-04)

パフォーマンスの向上

  • OracleとPostgresの比較セッションで、一般的なユースケースのパフォーマンスを向上させるMD5に基づいた共通の行ハッシュを使用できるようになりました。以前は、OracleとPostgresの比較はcomparison_algorithm = full_row に制限されていましたが、現在はcomparison_algorithm = row_hash またはcomparison_algorithm = block_hash も使用できます。デフォルトでは、comparison_algoritm = block_hash に設定されています。 Oracleの制限により、共通ハッシュ、BLOB、およびCLOBフィールドの使用は2000文字に制限され、行全体の幅は4000文字を超えることはできません。共通ハッシュの要件を満たさないテーブルは、 comparison_algorithm = full_row を使用して個別に比較できます。詳細については、ドキュメントを確認してください(RT72038、LIV-61)。

  • buffer_size のデフォルト値を256行から4096行に増やしました。

  • parallel_chunk_rows のデフォルト値を100万行から1000万行に増やしました。

1.15.0(2021-06-06)

改善

  • --conflicts 実行モードの競合フィルタリングを導入しました。 (LIV-40)

  • LiveCompareは、照合が指定されていない場合、混合テクノロジの比較(OracleとPostgreSQLなど)でforce_collate = C を想定します(LIV-44)。

  • 既に追加されたEPAS 13へのサポートに加えて、EPAS 11および12(LIV-48)へのサポートを追加しました。

バグ修正

  • OracleとPostgreSQLの比較でLiveCompareが動かなくなった (RT71243 / LIV-43)

  • --conflicts で作成された比較セッションで--recheck を実行できないバグを修正しました (LIV-50)

1.14.0(2021-05-14)

新機能

  • BDR 3クラスターに固有の新しい--conflicts 実行モード。 BDR 3.6の場合、テーブルbdr.apply_log がチェックされ、 BDR 3.7の場合、テーブルbdr.conflict_history がチェックされます。 LiveCompareは、競合がログに記録された行(key_tuple 、local_tuple 、remote_tuple 、およびapply_tuple )からPK値を抽出し、既にPK値でフィルター処理されている影響を受けたテーブルでのみ自動クラスター全体の比較を実行できます。次に、比較により、クラスター内のすべてのノードの現在の行バージョンが確認されます。 BDRの競合のみをチェックすることにより、比較は--compare モードよりもはるかに高速であるため、頻繁に実行してクラスターの一貫性を確保することが実行可能であり、推奨されます。

改善

  • LiveCompareは、特定のテーブルが存在しない場合、またはテーブルがレプリケーションセットの構成に従ってレプリケートされたデータを受信しない場合に、 BDRノードを無視できるようになりました。以前はすべての接続で比較が実行されましたが、比較コンセンサスは必要に応じてテーブルごとにノードを自動的に除外できます。コンセンサスマジョリティは、テーブルが存在し、テーブルがノードがサブスクライブしているレプリケーションセットに関連付けられているノード間で引き続き達成されます。これにより、 BDR Witnessノード(LIV-29)を適切に無視することを含め、レプリケーションセットによって定義された異なるアーキテクチャを持つBDRクラスターで比較できます。

  • すべての実行モードの短い説明を表示する--help のメッセージを改善しました(LIV-28)。

  • 列がNULL可能かどうかに関する情報は、テーブルのメタデータにも収集されるようになりました(LIV-28)。

  • ドキュメントで、列が主キーの一部である場合、ソートできないデータ型がstring に変換されることを明確にしました(LIV-4)。

  • oracle_ignore_unsortable がOracleのPKの一部ではないソートできない列を無視することをドキュメントで明確化しました(LIV-26)。

  • data_fetch_mode がprepared_statements (デフォルト)またはserver_side_cursors_with_hold (LIV-26)に設定されている場合、parallel_data_fetch を有効にできる(デフォルトで)ことをドキュメントで明確にしました。

  • max_parallel_workers のデフォルト値が2であることをドキュメントで明確化しました(LIV-26)。

バグ修正

  • LiveCompareは型をスキーマ修飾名として扱うようになりました。この修正の前に、LiveCompareはsearch_path 外のタイプを見つけることができませんでした(LIV-35)。

非推奨

  • BDR 3.7で非推奨になったbdr.difference_fix* 関数の使用を削除しました。これらの関数はPostgreSQLスーパーユーザではなくbdr_superuser を必要とするため、 BDR 3.6用に生成されたDMLスクリプトにまだ含まれています。これはドキュメント(LIV-1、LIV-31)で明確にされています。

1.13.1(2021-04-14)

バグ修正

  • Oracle データ型 RAW および ROWID のサポートに関する問題を修正しました (RT69656)。

  • Oracle からのバイナリオブジェクトフィールドが NULL の場合の未処理の例外を修正しました (RT69656)。

  • ドル引用符で囲まれた文字列を含むOracle x Postgres比較サポートの問題を修正しました(RT69656)。

  • 特定のPostgreSQLの予約キーワードとして名前付けられた列が引用され、比較で考慮されないコーナーケースを修正しました(RT69656)。

1.13.0(2021-02-25)

パフォーマンスの向上

  • PostgreSQL接続にのみ適用される新しい設定data_fetch_mode を実装しました。次のいずれかの値を想定できます。 - prepared_statements :このバージョンおよび以前のバージョンのデフォルトの動作。準備されたステートメントを使用してデータを取得します。データベース上のフットプリントが小さく、一般的なユースケースで優れたパフォーマンス。運用データベースには stronly をお勧めします。 - server_side_cursors_with_hold :サーバー側のカーソルWITH HOLD を使用してデータを取得します。これは、データの各チャンクがLiveCompareに送信される前に一時ファイルで具体化されるため、xmin を抑制し、データベースのメモリと一時ファイルの使用量を増やす可能性があります。その結果、複数の小さなテーブルの方が高速になる可能性があり、テストと移行のシナリオに推奨されます。 - server_side_cursors_without_hold :サーバー側のカーソルWITHOUT HOLD を使用してデータをフェッチします。xmin を保持できますが、データベースのメモリと一時ファイルの使用量はWITH HOLD よりも低くなります。大規模なテーブルの場合は高速になる可能性があるため、負荷の低いデータベースにお勧めします。

その他の改善

  • 新しい設定abort_on_setup_error を実装しました。有効にすると、テーブルの比較ラウンドを設定するときにエラーが発生した場合、比較セッション全体を中止するようにLiveCompareに指示します。デフォルトで無効になっています。つまり、LiveCompareは何らかの理由でセットアップフェーズが失敗したテーブルをログに記録し、無視します。

  • 新しい設定abort_on_setup_error のため、設定setup_max_attempts およびsetup_min_interval_between_attempts は廃止されました。

1.12.0(2021-02-11)

新機能

  • 新しい設定session_replication_role を実装しました。有効にすると、適用スクリプトの先頭でsession_replication_role をreplica に設定します(RM20247、RT69742)。

  • 新しい設定split_updates を実装しました。有効にすると、 UPDATE ステートメントを対応するDELETE およびINSERT ステートメントに分割します(RM20355、RT69742)。

  • 新しい接続設定fetch_fk_metadata 、特定の接続で外部キーに関するメタデータを取得するかどうかを指示します。デフォルトで有効になっています。

  • 新しい一般設定oracle_fetch_fk_metadata 。Oracle接続のfetch_fk_metadata の値をオーバーライドします。デフォルトで無効(RM20244、RT69656)。

  • 新しい一般設定float_point_round 。浮動小数点値を比較するときに指定された10進数で丸めるようにLiveCompareに指示します。デフォルトで無効になっています(RT69381)。

削除された機能

  • --fix 実行モードを削除しました。ユーザーは、LiveCompareが生成するDMLスクリプトを確認することをお勧めします。

改善

  • LiveCompareで生成された適用スクリプトには、先頭にdifference_fix_start_query も含まれ、DMLを適用する前にテーブルの所有者を設定するようになりました。

  • comparison_algorithm = full_row はparallel_chunk_rows を尊重し、すべての接続で比較されるテクノロジーがPostgreSQLの場合、テーブルを複数のワーカーに分割します。テーブル分割を無効にするには、 parallel_chunk_rows = 0 を設定します。

  • EPASを比較するときにシステムスキーマsys のテーブルを除外する(RM20392)。

  • max_parallel_workers のデフォルト値を2から4に増やしました。

バグ修正

  • comparison_algorithm = block_hash で、パラレルワーカーが処理していたデータチャンクに相違がある場合のパフォーマンスの低下を修正しました。

  • custom_dollar_quoting_delimiter のデフォルトのランダムに生成された文字列が原因で、FIPS対応のオペレーティングシステムでLiveCompareがクラッシュする問題を修正しました(RT70032、RM20378)。

  • oracle_ignore_unsortable またはcolumn_intersection がすべての列を削除しても、LiveCompareが比較を実行しようとする問題を修正しました。現在、 LiveCompare はこれらのテーブルでの比較を中止し、適切なメッセージをログに記録します。

  • LiveCompareがcustom_dollar_quoting_delimiter を使用してPK値を表していないコーナーケースを修正しました(RT69656)。

  • --recheck モードでLiveCompareを実行すると、順序付けが異なるために出力スキーマの制約が損なわれる可能性があるバグを修正しました。

1.11.0(2021-01-19)

改善

  • LiveCompareによって生成されるDMLコマンドの順序の新しい設定difference_statement_order 、デフォルトでdelete_update_insert に設定されます(RT69742、RM20245)。

  • EnterpriseDB PostgreSQL Advanced Serverのサポート - EPAS 13。

  • CentOSおよびRHELシステムでのPostgreSQL 13のパッケージ化。

バグ修正

  • 最小PK値が既にデータの最後に達したカーソルの最大PK値より大きいためにカーソルがまだ初期化されていない場合、以前のカーソルは初期化されますが、そのデータは終了(RT69742、RM20249)。

  • LiveCompareがlogical_replication_mode = pglogical のときにInitial Connection とnode_name を許可していないバグを修正しました(RM19795)。

  • LiveCompareがschema_qualified_table_names = off のときに強制するのではなく、schema_qualified_table_names = on のときに強制的にoracle_user_tables_only = on を強制していたバグを修正しました(RT69656)。

  • comparison_algorithm = full_row の場合、文字列が適切にクォートされないバグを修正しました(RM20251)。

  • 生成されたDMLで文字列が適切に引用されないバグを修正しました。

1.10.1(2020-10-29)

バグ修正

  • 初期メタデータフェッチフェーズで行われる、各テーブルの最小および最大プライマリキー値のフェッチのパフォーマンスを向上しました(RM19681、RT69088)。

  • 比較セッションを再開でき、実行モード--fix および--recheck は、同じメジャーバージョンの場合、別のLiveCompareバージョンで以前に作成した比較セッションに対して実行できます。例:セッションが1.10.0で作成され、顧客がLiveCompareを1.10.1にアップグレードしてから--fix を実行した場合、セッションは同じメジャーバージョンで作成されたため、LiveCompareは--fix モードの実行を許可します(RM19686、RT69088) 。

  • LiveCompareメタデータでRow Filter を保存するときの一重引用符の問題を修正しました(RM19682、RT69088)。

  • LiveCompareのデフォルトのドルクォーティング区切り文字(custom_dollar_quoting_delimiter が設定されていない場合)が固定されたハッシュ文字列になりました。実行間でランダム設定値が変更されたため、比較セッションを再開できませんでした(RM19684、RT69091)。

  • custom_dollar_quoting_delimiter の設定をoff で明示的に無効にできるようになりました。つまり、LiveCompareはデフォルトのハッシュ文字列を区切り文字として使用します。 (RM19685、RT69091)。

1.10.0(2020-10-02)

改善

  • 新しい一般設定custom_dollar_quoting_delimiter 、Postgres DMLコマンドを生成するときに文字列を引用する方法をLiveCompareに指示します。設定されていない場合(デフォルト)、LiveCompareはランダムな文字列を生成してドル引用符の区切り文字として使用します(RT68950、RM19159)。

  • LiveCompareは、セッションの最初の実行(セッション作成)と次の実行(resume 、--recheck または--fix )の間に設定も接続属性も変更されていないことをチェックするようになりました。

  • バックグラウンドまたは別のシェルウィンドウで実行中にLiveCompareをソフトに停止できるようになりました(RM18564)。

バグ修正

  • ユーザーがapply_on_the_<node>.sql ファイルを使用して手動で修正を適用した後、--recheck モードで実行中にLiveCompareが差分の数を正しく更新していませんでした。

  • LiveCompareを--recheck モードで複数回実行すると、apply_on_the_<node>.sql ファイルに複製されたエントリが表示され、サマリーに違い/修正の複製数が表示されます。

  • サマリービューで多数の相違があるとinteger out of range エラーが発生する。

1.9.1(2020-08-13)

バグ修正

  • 特定のプラットフォームに存在しない可能性のあるPOSIX定数を処理しました(RM18197)。

  • パーティション分割されたテーブルを処理するときに、ユーザーがテーブルフィルターを設定してパーティションを削除すると、LiveCompareはマスターテーブルとフィルターされたものを除く他のすべての子の両方を比較します。これは修正されました。 (RM16912)。

1.9.0(2020-08-06)

新機能

  • 設定full_comparison_mode = on|off は非推奨になり、新しいblock_hash アルゴリズム設定を許可する新しい設定comparison_algorithm に置き換えられました-これにより、基本テストで50%のパフォーマンスが向上しました。サポートされているアルゴリズムの完全なリストは次のとおりです。 - full_row (古いfull_comparison_mode = on と同じ): ハッシュを使用した行比較を無効にします。また、ハッシュに依存しているため、テーブル分割も無効になります。設定 parallel_chunk_rows は無視され、テーブルは分割されません。この場合、完全な比較は、行を列ごとに比較することによって実行されます。 PostgreSQL以外のデータ接続がある場合、LiveCompareは自動的にcomparison_algorithm = full_row を設定します。 - row_hash (旧full_comparison_mode = off と同じ) : ハッシュを使用した行比較を有効にし、テーブル分割を有効にします。テーブルは分割されるため、各ワーカーはテーブルごとに最大parallel_chunk_rows を比較します。データ行はPostgreSQLでハッシュされるため、比較はfull_row よりも高速です。ただし、特定の行についてハッシュが一致しない場合、その特定の行について、LiveCompareはfull_row アルゴリズムにフォールバックします(つまり、行ごとに比較します)。この設定は、すべてのデータ接続がPostgreSQLの場合にのみ許可されます。 - block_hash (新しく実装された比較アルゴリズム): row_hash と同じように動作しますが、行ごとに比較する代わりに、LiveCompareは「ブロックハッシュ」、つまり、フェッチされたデータバッファー内のすべての行のハッシュ(最大buffer_size 行)。概念的には、2レベルのマークルツリーのように機能します。ブロックハッシュが一致する場合、 LiveCompare はブロック全体を進めます(これが、この比較アルゴリズムがrow_hash よりも高速な理由です)。ブロックハッシュが一致しない場合、 LiveCompare は row_hash にフォールバックし、バッファー内で行ごとに比較を実行して、発散する行を見つけます。この設定は、すべてのデータ接続がPostgreSQLの場合にのみ許可されます。これがデフォルト値(RM14146)です。

  • LiveCompareは、エラーで終了する前に、各テーブルセットアップで数回試行できるようになりました。この動作を構成するために2つの新しい設定が追加されました。setup_max_attempts (デフォルトは3)とsetup_min_interval_between_attempts (デフォルトは30秒)です(RM17518)。

改善

  • LiveCompareの出力は、> を使用して出力をリダイレクトしているときに出力ファイルに印刷され、ssh を介してLiveCompareを実行しているときにも表示されるようになりました。

  • ログとデバッグを改善するためにコンセンサスがリファクタリングされました(RM17107)。

  • 比較セッションの最後に、LiveCompareがログレベルに応じて、検出された問題のカウンターを表示するようになりました(RM18196)。

  • Tieの場合、すべてのノードに対してDMLが生成されるようになりました(RM16656)。

  • LiveCompareは、特定のテーブルで相違が見つかった場合、テーブルのサマリーに無視される列の最大数を表示するようになりました(RM16581)。

  • LiveCompareは、Output またはInitial (指定されている場合)の適切なメッセージで中止されるようになりました。接続に到達できません。また、到達可能なデータ接続が2つ未満の場合は、適切なメッセージで中止します。 2つ以上到達可能な場合、その1つだけを比較します(RM14030)。

  • DebianおよびUbuntuパッケージにはpython3-setuptools が必要になりました(RM17232)。

  • サポートされている最小のPythonバージョンとLinuxディストリビューションに関するドキュメントを明確化しました(RM17232)。

  • パーティション分割されたテーブルを扱う場合、LiveCompareはマスターテーブルを使用する代わりに各パーティションをスキャンすることを優先します。このようにして、行数のより良い見積もりと、ワーカー間のジョブのより良い分割を実現します。

  • 差分カウントの代わりにPOSIX標準のリターンコードを使用する (RM18197)。

  • TPAexecを使用してLiveCompareをインストールする方法を示すドキュメントに、サンプルconfig.yml の例を追加しました(RM15312)。

  • --recheck および--fix モードのログを改善しました (RM15768)。

  • 例外が発生した場合、ログにPythonスタックトレースが含まれます(RM17158)。

  • PgBouncerを介してPostgreSQLに接続するLiveCompareに関するいくつかの考慮事項をドキュメントに含めました(RM18019)。

  • vw_running_processes ビューにround_id およびround_part フィールドを追加しました。これは、LiveCompareの実行がcronジョブとしてスケジュールされている場合の比較の進行状況を確認するのに役立ちます。

バグ修正

  • Output Connection でtuple concurrently updated を引き起こしたConsensusの競合状態を修正しました(RM17107)。

  • num_processed_rows が実際の値よりも高く報告される問題を修正しました(RM17373)。

  • 実行中に何らかの問題が見つかった場合、LiveCompareはsuccessfully executed を報告しなくなりました(RM17289)。

  • ユーザーがmax_parallel_workers <= 0を設定した場合にハングしないように、少なくとも1人のワーカーを強制しました。

  • 印刷されたテーブルの大きな整数の固定番号形式。 LiveCompareは、科学表記法を使用する代わりに数値全体を表示するようになりました(RM16683)。

  • --fix モード実行後、--recheck モードが誤った差分ステータスを報告する問題を修正しました(RM15953)。

  • 無視された列のリストがテーブルのメタデータで誤って報告される問題を修正しました (RM17663)。

  • 別の信頼できるソースまたはタイブレーカーでLiveCompareを再実行すると、相違が同点として誤って報告される問題を修正しました(RM17909)。

1.8.0(2020-06-15)

新機能

  • 新しい設定 difference_sources_of_truth 、どの接続が常にコンセンサスを得るかを指示するために使用されます。 consensus_mode をsource_of_truth に設定する必要があります(RM15952)。

  • セッションフォルダーが作成される場所を示す新しい設定work_directory 。 cronジョブとしてスケジュールされたLiveCompareを実行するのに役立ちます(RM16476)。

改善

  • 差分修正DMLスクリプトに書き込まれるDMLコマンドの順序は、外部キーを考慮に入れるようになりました。 --fix 実行モードでも同じ順序が使用されます(RM15766)。

  • LiveCompareは、既知の接続IDのリストに対してdifference_tie_breakers およびdifference_sources_of_truth をチェックするようになりました。不明な接続IDが指定された場合、ユーザーにエラーが表示され、比較が中止されます(RM16622)。

  • CentOS 8およびUbuntu 20.04のサポートを追加しました(RM14480、RM14619、RM14974)。

  • 通常のテーブルを印刷するときに、データがnullの場合に空のセルが印刷される。代わりに [null] を出力するようになりました(RM16686)。

バグ修正

  • Coverityスキャナーで検出された軽微な問題を修正(RM16623)。

  • メインスクリプトが3つのパラメーターのみで呼び出されたときに正しく処理し、セッションIDか実行モードかを正しく区別します。

  • 表データを転置形式で印刷するときに、データがnullの場合、フィールド全体が省略される。この問題は修正されました(RM16686)。

1.7.0(2020-05-18)

重大な変更

  • 実装されたLiveCompare実行モード: - --compare :デフォルトの実行モード。比較のみを実行し、並列で実行されているスレッドを再確認/修正することに違いはありません。比較中に、検出された各違いは、後で再チェックとオプションの自動修正のためにdifference_log テーブルに保存されます。・ --recheck : compare モードで作成済みのセッションに対して何度でも実行できます。一つ一つ違いを再確認し、difference_log テーブルを更新します。・ --fix : compare モードで作成済みのセッションに対して実行できます。違いを1つずつ再確認し、自動的に修正を試み、difference_log テーブルを更新します。

  • 比較モードでは、相違のリストを保持するビューはvw_open_differences ですが、再チェックおよび修正モードの場合、ビューはvw_differences です。

  • 自動修正モードでは、 BDR >= 3.6.18の場合、LiveCompareはbdr_local_only_origin と呼ばれる新しく作成された複製起点を使用します。

  • 設定difference_mode 、min_time_between_difference_checks 、max_difference_check_attempts およびdifference_check_nap_time を削除しました。

  • 設定live_mode 、min_time_between_rounds 、およびmax_tail_rounds_before_full_round を削除しました。

  • show_progress_bars の設定が有効になっていて(デフォルトで)、Pythonモジュールtqdm が< 4.16.0、LiveCompareはアップグレード方法を説明して中断します。

新機能

  • デフォルトで無効になっている新しい一般設定column_intersection を実装しました。この設定を有効にすると、PK列が同じである限り、LiveCompareは異なる列セットを含むテーブルの比較を許可します。比較で考慮される列のセットは、すべての接続のテーブルに存在する列の共通部分です(RM14147、RT67064)。

  • 新しいセクションColumn Filter を実装しました。ここでは、テーブルごとに、比較で無視する列のコンマ区切りリストを定義できます。 PKの一部である列は無視できません。このセクションのフォーマットは、 Row Filter セクション(RM14629、RT67064)と同様に、1行に1つのテーブルです。

  • デフォルトで無効になっている新しい一般設定oracle_ignore_unsortable を実装しました。有効にすると、テーブルにPKがない場合、Oracleのソートできないデータ型(BLOB、CLOB、NCLOB、BFILE)の列を無視するようにLiveCompareに指示します。この設定を有効にする場合は、column_intersection も有効にすることをお勧めします(RT67064)。

  • デフォルトで無効になっている新しい一般設定oracle_user_tables_only を実装しました。有効にすると、Oracleにログインしているユーザーからのみテーブルのメタデータを取得するようにLiveCompareに指示します。また、Table Filter -> tables はスキーマ名なしでテーブル名でフィルタリングできるようになりました(RT67064)。

  • デフォルトで有効な新しい一般設定schema_qualified_table_names を実装しました。それを無効にすると、スキーマ修飾テーブル名を使用せずにテーブルを比較できます。Oracle x Postgres比較では、 oracle_user_tables_only も有効にする必要がありますが、Postgres x Postgresでは、同じデータベース内であっても、異なるスキーマの下にあるテーブルを比較できます。また、 schema_qualified_table_names が有効になっている場合、 Table Filter -> tables 、Row Filter 、およびColumn Filter はスキーマ名なしでテーブル名を許可します。 (RM14901、RT67042)。

  • schema_qualified_table_names が有効でstart_query が設定されていない場合(デフォルト)、LiveCompareはCVE-2018-1058 (RM15391)から保護するためにstart_query を使用してsearch_path をクリアします。

  • 新しい一般設定force_collate を実装しました。デフォルトではoff に設定されます。これは、PostgreSQLで照合が強制されないことを意味します。有効な照合名に設定すると、照合が異なるPostgresデータベース、またはPostgresにC 以外の照合がある場合はOracleとPostgresデータベースを比較すると役立ちます(この場合、ユーザーはforce_collate = C を設定する必要があります)(RM15016、RT67064)。

  • デフォルトで無効になっている新しい一般設定fetch_row_origin を実装しました。この設定を有効にすると、LiveCompareは各行のBDR/pglogicalオリジン名を取得します(RM14487)。

  • 比較中に例外が見つかった場合、LiveCompareは特定のテーブルの比較ラウンドを中止し、新しい列rounds.round_error にエラーを書き込み、失敗したワーカーをプールに戻します。

  • LiveCompareの一般的な進行状況バーに、比較中にエラーが発生したために中止されたテーブルの数が表示されるようになりました。

改善

  • 最初に接続を開き、データベース接続を再利用します (RT67042)。

  • ユーザーに設定ファイルを読み取る権限がない場合のエラーメッセージを明確にしました (RT67064)。

  • Table Filter とRow Filter には一般設定schema_qualified_table_names が無効になっていない限りスキーマ修飾テーブル名が必要であることをドキュメントで明確化し、構成例を提供しました(RM15311、RT67669)。

  • 構成ファイルに認識されない設定が見つかった場合、エラーメッセージで中断します。

  • 必要な接続数についてドキュメントで明確化。

  • CentOS / RHELのEPELリポジトリへの依存関係に関するドキュメントを明確化。

  • postgres オペレーティングシステムユーザー用のcx_Oracle Pythonモジュールのインストール方法に関するドキュメントを明確にしました。

  • セッションディレクトリとログファイルにlc_ プレフィックスを追加しました。

  • いずれかの接続でtechnology = oracle とPythonモジュールcx_Oracle が見つからない場合、LiveCompareは現在のユーザーの最新のcx_Oracle をインストールする方法の説明を中止します。

  • 自動生成されたDML *.sql スクリプトには、 BDRのSET LOCAL bdr.xact_replication = off; 句が含まれています。

バグ修正

  • 列名がPostgresの予約語であるため、列名の不一致が誤って評価され、OracleとPostgresのテーブル比較が中止される問題を修正しました(RT67064)。

  • Oracle: テキスト列を含むPKがORA-00920: invalid relational operator エラーを生成することがある問題を修正 (RT67064)

  • ソートできないデータ型の列がORDER BY 句で適切に処理されないOracleとPostgresの問題を修正しました(RT67064)。

  • 設定difference_allow_null_updates が誤って解釈されていたため、UPDATE が列をNULL に設定していないDMLジェネレーターの問題を修正しました。

  • 比較カーソルが適切に進行しないコーナーケースを修正しました。

  • ユーザーが既に終了した比較セッションを再開しようとしたときのエラーメッセージを修正しました。

1.6.0(2020-04-03)

  • PostgreSQL >= 11の場合、 hashtext の代わりにhashtextextended を使用して比較ワーカー間でデータを分割します (RT67167、RM13664)。

  • Oracle PKの列名のリストに重複する列名があり、エラーが発生して比較が中止される問題を修正しました(RT67064、RTM14145)。

  • 最初にデータ接続に接続できない場合、LiveCompareは比較セッション全体を中止するようになりました(RT67042)。

  • ラウンド状態が頻繁に保存され、min_time_between_round_saves を尊重しない問題を修正しました。パフォーマンスを向上させます。

  • 接続とクエリの問題のログを改善しました。

1.5.0(2020-03-13)

  • Oracleはparallel_data_fetch をサポートしていないため、接続の1つがOracleの場合、parallel_data_fetch の設定は自動的に無効になります。

  • 実行できるラウンドの最大数と処理できる行と1回の比較で見つかる差分を増やしました(データ型はinteger 〜bigint )(RM13664、RT67167)。

  • プログレスバーをASCIIからUnicodeに変更。

  • 5秒ごとに経過したグローバルプログレスバーを更新します。

  • グローバル進行状況バーからレートと推定時間を削除し、接続数を追加しました。

  • Pythonモジュール TQDM >= 4.16が利用可能な場合、グローバル進行状況バーに追加の統計(検出された違いと適用された自動修正の数)が表示されます。

  • テーブルが分割されていても、最大プロセス数が比較予定のテーブル数によって制限される問題を修正した。

  • テーブルのメタデータを取得するときのログの冗長性をINFOからDEBUGに減らしました。

  • 手動(Ctrl-C)または自動割り込み(stop_after_time )が発生したログケースを含みます。

1.4.0(2020-02-13)

  • 多方向比較のパフォーマンスを向上させるために、並列データフェッチを実装しました。パラレルデータフェッチはデフォルトで有効になっていますが、 parallel_data_fetch = off を設定して無効にできます。

  • 行がローカル、つまり xmin がレプリケーションオリジンに関連付けられていない問題を修正しました (RT66906)。

1.3.0(2020-01-30)

  • 多方向比較:LiveCompareは、任意の数の接続を比較できるようになりました。比較は、すべてのノードから同時にデータを取得することによって実行されます。これにより、コンセンサス(クォーラムベースと単純過半数の両方がサポートされます)とタイブレーカー接続のオプションのリストに基づいて、データの不整合を判断できます。新しいビューvw_consensus を使用して、LiveCompareがどのように機能したかの詳細を確認できます。

  • 新しい一般設定all_bdr_nodes を追加しました。有効にすると、ユーザーはBDRノードをポイントするInitial Connection セクションのみを指定でき、LiveCompareはBDRクラスター内のすべてのアクティブノードを考慮して接続のリストを構築します。 bdr.node_summary ビューに表示されるように、LiveCompareがノードDSNを使用してすべてのBDRノードに接続できる必要があることに注意してください。

  • データ比較で相違が見つかったときにどの接続(またはBDRノード)が正しいと見なされるかを決定する、新しい一般設定consensus_mode を追加しました。 simple_majority またはquorum_based です。 consensus_mode = quorum_based の場合、新しい設定difference_required_quorum (0.0〜1.0の値、デフォルト0.5)が考慮されます。デフォルトはconsensus_mode = simple_majority です。

  • 新しい設定difference_tie_breakers を追加しました。データに相違がある場合にコンセンサスが正しい接続またはノードを決定できない場合に役立ちます。接続名のコンマ区切りリストである必要があります。例: difference_tie_breakers = node1,node2 。この例では、セクションnode1 Connection およびnode2 Connections を.iniファイルまたはbdr_all_nodes = on で定義する必要があり、Initial Connection のみが定義されていますが、 node1 およびnode2 は有効なBDRノード名である必要があります。デフォルトでは、接続はタイブレーカーと見なされません。

・ 多元比較では、接続部名に「Left」「Right」以外の接続名も可能です。下位互換性が維持されているため、ユーザーは引き続きLeft Connection とRight Connection を定義できますが、上記で説明したようにdifference_tie_breakers の定義が必要になるのは2つの接続のみです。以前は、「左」接続は常にタイブレーカーと見なされました。つまり、自動差分修正が有効になっている場合は正しいと見なされました。

  • 多方向比較では、接続の1つだけがPostgreSQLと異なる必要があります。

  • 新しい設定stop_after_time を実装して、数秒後にLiveCompareを手動で中断できます。デフォルトでは stop_after_time = 0 これは、LiveCompareが自動的に停止しないことを意味します(手動Ctrl-cのみ)。 LiveCompareは、すべての場合にCtrl-cを使用して手動で停止できます。 LiveCompareが手動で中断されたか自動で中断されたかに関係なく、コマンドラインでセッションIDを引数として渡すことで再開できます。

  • 新しいテーブルdifference_fix は、各データ接続で実行された(または実行しようとした)正確なDML LiveCompare、時間、エラー(ある場合)を保存します。スクリプト applied_*.sql にも、同じように適用されたDMLが含まれます。

  • LiveCompareはテーブルの所有者をテーブルのメタデータに保存するようになりました。

  • 差分修正トランザクションのタイムスタンプを2000-01-01から2010-01-01に変更しました。これはBDR < に対してのみ有効です。 3.6.11、3.6.11以降、組み込み関数 bdr.difference_fix_xact_set_avoid_conflict が使用されるため。

  • 自動修正が無効になっている場合、 BDRデータベースにbdr_livecompare レプリケーションオリジンが不必要に作成されていた問題を修正しました。

  • 比較ワーカープロセスが正常に終了しない場合がある問題を修正しました。

  • CI:LiveCompareパッケージがUbuntu 18.04 LTS用にもビルドされるようになりました。

1.2.0(2020-01-03)

  • LiveCompareは、OracleとPostgresの比較でBLOBフィールドをサポートするようになりました。

  • 相違点の無視:ユーザーは、出力PostgreSQL接続(RM8939)で関数<livecompare_schema_name>.accept_divergence(session_id, table_name, difference_pk) を手動で呼び出すことにより、特定の相違点の相違の再チェックを停止できます。

  • 揮発性のダイバージェンス:違いの再チェック時に一貫性のない行でxmin が変更された場合、LiveCompareは再チェックを停止し、違いを揮発性としてマークします(RM10964)。

  • 上書きされた相違:自動修正が適用された後、再チェックしてxmin が変更された場合、修正後に行が変更されたことを意味します。 LiveCompareは発散を上書き済みとしてマークします(RM10964)。

  • 修正不可能な相違:自動修正が正常に適用された後、再チェックしてもxmin が変更されていない場合、LiveCompareは相違を修正不能としてマークします(RM10964)。

  • LiveCompareは、相違がない場合にcode = 0を返し、相違がある場合にリターンコード> 0を返すようになりました。

  • テーブルフィルターと行フィルターは、すべての一般設定とともにテーブル<livecompare_schema_name>.settings に保存されるようになりました。

  • 新しい一般設定difference_check_nap_time 、新しい差分チェックスプリントを開始する前に差分チェックワーカーがスリープする秒数を制御します。デフォルト:5秒。

  • BDR 3のテーブルリストを構築するとき、LiveCompareは宣言型パーティションを考慮しません (RT66502)。

  • LiveCompareは、PostgreSQL接続に対してのみDMLスクリプトを生成するようになりました。

  • 自動修正を有効にする場合(difference_mode = live_fix またはdifference_mode = offline_fix )、右の接続がPostgreSQLである必要があります。

  • 修正されたセキュリティ問題:テーブル/列の名前とすべてのリテラルが適切に引用されます(RM12530)。

  • カラム名に予約語を使用した場合の不具合を修正しました (RM12530)。

  • ビューvw_differences の列名の問題を修正しました(RM12529)。

  • ハッシュ比較でテーブルが不必要に分割されていた問題を修正しました。

1.1.0(2019-12-18)

  • BDR 3のテーブルリストを構築するときに、LiveCompareは、Left ConnectionとRight Connectionの両方のBDRノードに関連付けられたレプリケーションセットの共通部分のみを考慮するようになりました。

  • パーティションテーブルまたはパーティションが検討されているときにテーブルリストを構築する際の問題を修正しました (RT66499)。

  • 接続の検証とテーブルリストの作成の初期ステップのログの詳細度を向上させました。

  • Oracleのエンコーディングと文字列の処理に関する問題を修正しました。

1.0.0(2019-12-03)

  • LiveCompareはBDRでレプリケーションオリジンを作成して使用できます。 BDRバージョンが3.6.11以降の場合、LiveCompareでは、 bdr_superuser 権限を持つユーザーまたはPostgreSQLスーパーユーザーがBDRファンクションbdr.difference_fix_origin_create(text) 、bdr.difference_fix_session_setup(text) 、bdr.difference_fix_session_reset() 、およびbdr.difference_fix_xact_set_avoid_conflict() を使用して複製元管理を実行する必要があります。 BDRバージョンが3.6.10以下の場合、LiveCompareはPostgreSQLの機能を利用した複製起点管理を行うためにPostgreSQLのスーパーユーザーが必要です。それ以外の場合、LiveCompareはレプリケーションオリジンを管理しようとしません。 (RT66192およびRM11000)。

  • LiveCompareは、 BDR/pglogicalの一貫性のない各行から複製元情報を取得できます。 BDRバージョンが3.6.11以降の場合、LiveCompareは各行からレプリケーションオリジン情報を取得するために bdr_superuser 権限を持つユーザーまたはPostgreSQLスーパーユーザーを必要とします。 BDRバージョンが3.6.10以下またはpglogical 3を使用している場合、 LiveCompareには各行からレプリケーション元情報を取得するためのpglogical_superuser 権限を持つユーザーまたはPostgreSQLスーパーユーザーが必要です。それ以外の場合、LiveCompareは複製起点情報を取得しようとしません(RM11971)。

  • 親テーブルが既にテーブルリストにある場合、テーブルリストからパーティションを削除します(RT65920およびRM10994)。

  • pglogicalとBDRのテーブルリストを構築するときは、常にレプリケーションセットテーブルを検討します (RT65920)。

  • 空の文字列を処理するときの問題を修正しました (RT65918 および RT65988)。

  • 0.11.0から0.12.0へのアップグレードの問題を修正しました(RT65918およびRT65988)。

  • 最小PKと最大PK値の決定の問題を修正しました。

0.12.0(2019-11-01)

  • 自動修正トランザクションで、ロールをテーブルの所有者に変更するようにdifference_fix_start_query 設定のデフォルト値を変更しました。これは、データベースユーザーが悪意のあるトリガーを作成して、LiveCompareが使用する特権ロールにアクセスするのを防ぐために行われます。その結果、右の接続のユーザーは、ロールをテーブルの所有者に切り替える必要があります(RM11000)。

  • LiveCompareがテーブルリストを構築した後、LiveCompareがテーブルの比較ラウンドを開始する前に、テーブルが削除されるか、重大なスキーマの変更を受け取った場合に処理されました。 LiveCompareは、比較ラウンドの前にテーブルに関するメタデータをチェックおよび更新するようになりました(RT65918)。

  • pg_replication_origin_session_setup 実行時の問題を修正しました (RT65988)。

  • 最大PK値の決定の問題を修正しました(RM11340)。

  • データベースに多数のテーブルがある場合に、テーブルからメタデータを取得するときのパフォーマンスの問題を修正しました。

0.11.0(2019-10-10)

  • 各差分チェックはテーブルdifference_log に記録されるようになりました。これは、時間の経過に伴う各差分の分析に役立つ情報を提供します。各違いは、次のいずれかのステータスを通過できます。- 検出(D) :違いが検出されました。 difference_mode = live_nofix またはdifference_mode = live_fix の場合、LiveCompareは、結論に至るまで(以下の他のステータスを参照)、最大N回( max_difference_check_attempts の設定で構成可能)、各再チェックの間にX秒間待機します(またmin_time_between_difference_checks を設定して構成できます)。 difference_mode = offline_nofix またはdifference_mode = offline_fix の場合、見つかった各違いはすぐに 永続的 と見なされます。 - 永続的(P) : max_difference_check_attempts 回の違いを再チェックした後、LiveCompareは再チェックを停止し、違いを 永続的 としてマークします。 If difference_mode = offline_nofix または difference_mode = offline_fix`, then all differences are marked as permanent at the moment they are detected, because there is no re-check. - Absent(A) : If before having reached max_difference_check_attempts, LiveCompare finds that the difference does not exist anymore (the row is now consistent between both databases), then LiveCompare stops re-checking and marks the difference as Absent (in previous versions, LiveCompare would remove the register from the difference table). - NotAllowed(N) : The difference was detected, but LiveCompare is forbidden to automatically fix this difference because user has limited the types of differences that can be automatically fixed (via settings difference_statements and/or difference_allow_null_updates). - Fixed(F) : The difference was automatically fixed by LiveCompare in the Right Connection, by applying the DML from field ` right_difference_differtran19

  • 出力接続の自動スキーマ変更:ユーザーがOutput Connection を以前のLiveCompareバージョンで使用されたデータベースをポイントしている場合、LiveCompareは自動的にスキーマの変更を処理します。 0.11.0の場合、LiveCompareはスキーマを再作成しますが、0.12.0以降、実装はスキーマの変更のみを適用し、ユーザーデータを保持します。

  • .ini ファイルからのセッション値を保存するテーブルconnections およびsettings を作成しました。

  • 各違いの行表現の改善:行全体がJSONとして保存されるようになりました。

  • 異なる各行の拡張列にxmin を格納します。

  • 各行の拡張列(ctid 、xmin 、origin )もJSONとして保存されるようになりました。

  • 複数行の値を持つテキスト列、バイナリデータを持つ列、および配列列のDMLを改善しました。

  • テーブルに PK がなく、複数行の文字列、null 値、または型が bytea の場合の未処理の例外を修正しました。または、テーブルにPKがあった場合、ただし、PKに上記の状況のいずれかがある場合。

0.10(2019-09-24)

  • 新しい設定difference_mode を追加しました。違いは報告されますが、修正されません。・ offline_fix :比較中のテーブルは負荷がかかっていないため、差分は再チェックされません。違いが見つかると、 Right Connection で報告され、修正されます。 - live_nofix (デフォルト) : LiveCompareは比較中のテーブルに負荷がかかっていると想定するため、LiveCompareはそれらを再チェックして、結果一貫性のためにそれらがなくなったかどうかを確認します。永久的な違いが報告されていますが、修正されていません。 - live_fix :LiveCompareは、比較中のテーブルに負荷がかかっていると想定するため、LiveCompareはそれらを再チェックして、結果一貫性のためになくなったかどうかを確認します。違いは、永続的としてマークされると報告され、修正されます。

  • difference_recheck の設定がdifference_mode にマージされました。 difference_mode = offline_nofix にマップされたdifference_recheck = off およびdifference_mode = live_fix にマップされたdifference_recheck = on の動作。

  • 新しいグローバル設定difference_statements を追加しました。これは、difference_mode = offline_nofix またはdifference_mode = live_nofix の場合にLiveCompareによってDMLスクリプトで生成されるか、またはdifference_mode = offline_fix またはdifference_mode = live_fix の場合に自動的に適用されます。 difference_statements の値は次のとおりです。

  • UPDATE SET col = NULL のようなコマンドを差分レポートまたは自動修正で許可するかどうかを決定する、新しいグローバル設定difference_allow_null_updates (デフォルトはon )を追加しました。

  • 新しいグローバル設定difference_fix_replication_origin を追加しました。手動で設定されていない場合、pglogical 3および/またはBDR 3比較のデフォルトでbdr_livecompare に設定されます。 LiveCompareは、右の接続が存在しない場合は特定のレプリケーションオリジンを作成し、difference_mode = live_fix またはdifference_mode = offline_fix の場合はこのレプリケーションオリジンを使用してすべての自動DML修正を適用します。 LiveCompareが作成するレプリケーション起点は、比較後の検証を許可するために削除されないことに注意してくださいが、必要に応じて、 SELECT pg_replication_origin_drop('<value of setting difference_fix_replication_origin>'); を使用してレプリケーション起点を削除できます。

  • 新しいグローバル設定difference_fix_start_query を追加しました。これは、各トランザクションの先頭に実行されて、右側の接続の違いを自動的に修正します。 BDR 3.6.7以降では、 difference_fix_start_query が空の場合、LiveCompareは自動的にdifference_fix_start_query = SET LOCAL bdr.xact_replication = off; を設定します。また、LiveCompareはdifference_fix_start_query を自動的に設定して、差分修正トランザクションがdifference_fix_replication_origin で指定された複製起点を使用するようにします。

  • 接続が開かれるたびに任意のクエリを実行するために使用できる新しい接続設定start_query を追加しました。

  • コンソール出力に進行状況バーを表示するかどうかを決定する新しいグローバル設定show_progress_bars (デフォルトはon )を追加しました。バッチ実行に役立ちます。

  • Postgresの比較で、見つかった各違いは行のctid も保存するようになりました。 BDR 3またはpglogical 3が使用されている場合、検出された各違いには、行のxmin のレプリケーション起点も保存されます。

  • 生成されたDMLスクリプトは、常にすべてのDMLを単一のトランザクション内に配置します。 difference_fix_start_query が(手動または自動で)定義されている場合、トランザクションの先頭に追加されます。

  • 実行の最後にグローバル進行状況バーが削除されない問題を修正しました。

  • 出力データベースの存在がチェックされていないバグを修正しました。

0.9(2019-08-30)

  • 左または右の接続でのOracleデータベースのサポート。 Oracle Instant ClientとPythonモジュールは個別にインストールする必要がありますが、Postgresデータベースには必要ありません。 LiveCompareは、Oracleに接続していなくても機能します。

  • 現在、行ハッシュとテーブル分割ハッシュはPostgreSQLとPostgreSQLの比較でのみ許可されています。いずれかの接続でPostgreSQL以外のテクノロジーが使用されている場合、新しい設定full_comparison_mode は自動的にon に設定されます。 PostgresとPostgresでもハッシュの使用を無効にしたい場合は、構成ファイルでfull_comparison_mode = on を明示的に定義できます。

  • BDR 1および2のサポート。 logical_replication_mode = bdr の場合、node_name で接続を定義し、 replication_sets でテーブルをフィルター処理できます。

  • Left Connection とRight Connection の両方の接続がPostgreSQLにある場合、行ハッシュはmd5() である必要があります。 11.それ以外の場合、両方の接続でhashtextextended() を使用します。これにより、混合PostgreSQLバージョンの比較が可能になります(たとえば、9.4と12)。

  • logical_replication_mode を設定すると、PostgreSQLのバージョンと拡張機能の存在の検証がInitial Connection およびLeft Connection に適用されます。テーブルリストはLeft Connection から構築されていることに注意してください。ただし、 Right Connection では、接続のみがチェックされます。これにより、混合テクノロジーの比較(PostgreSQLとOracle、 BDRとPostgreSQL、 BDR 2とBDR 3など)が可能になります。

  • ユーザーが差分再チェックを有効または無効にできる新しい設定difference_recheck (ブール値、デフォルトはon )。

  • テーブルスキーマの違い(列名と列のデータ型)は、後で分析するためにレポートデータベース(テーブルtables )に記録されます。

  • 左右の接続情報は、後で分析するためにレポートデータベース(テーブルsessions )に記録されています。

  • テーブルに重複する行があるコーナーケースでの差分チェックのバグを修正しました。

  • テーブルの右側の接続により多くの行がある場合の差分レポートのバグを修正しました。

  • 一時的な差異がある場合の差異報告のバグを修正しました。

0.8(2019-08-07)

  • テーブルに複数のフィールドを持つPKがある場合の単一行のフェッチを修正しました(一貫性をチェックするため)。

0.7(2019-08-06)

  • 行のないテーブルの処理を修正しました。

  • 空のセクションの処理を改善しました。

0.6(2019-06-17)

  • ログコンポーネントを変更しました。

0.5(2019-06-17)

  • バグ修正: - 順序付け演算子なしのデータ型の並べ替えのサポート。 - hashtextextended() が利用できない場合にmd5() をレコードハッシュとして使用する(PG <= 10)。・ 設定ファイルが存在しない場合、適切なメッセージを表示する。

0.4(2019-06-12)

  • 2ndQuadrant CIパイプラインに含めるための準備。

0.3(2019-05-29)

  • 接続を指定するDSNのサポート。

  • 改善されたテーブルと行のフィルター。

  • さまざまな種類の論理レプリケーションのサポート: - ネイティブ論理レプリケーション - pglogical - bdr

  • BDRのサポート - ユーザーが接続のノード名を指定できるようにします。 - ユーザーがレプリケーションセットをテーブルフィルターとして指定できるようにします。

  • さまざまなテストシナリオを作成しました。

0.2(2019-05-21)

  • ハッシュの改善:md5() の代わりにhashtext() とhashtextextended() を使用。

  • フェッチはプリペアド ステートメントを使用して実行されます。

0.1(2019-05-17)

  • PostgreSQLの初期サポート。

  • スタンドアロンモードの初期実装。