PolarDB for PostgreSQLはアンドゥログを提供しません。 偶発的な操作により、データが失われる可能性があります。 たとえば、DROP TABLEステートメントの実行後にデータが失われる可能性があります。 PolarDB for PostgreSQLのフラッシュバック機能を使用すると、削除されたテーブルをすばやく復元し、ごみ箱を表示および消去して、データを復元できます。
前提条件
この機能は、次のエンジンを実行するPolarDB for PostgreSQLクラスターでサポートされています。
PostgreSQL 11 (バージョン1.1.30以降)
PostgreSQL 14 (バージョン14.9.15.0以降)
次のいずれかのステートメントを実行して、PolarDB for PostgreSQLクラスターのリビジョンバージョンを照会できます。
PostgreSQL 11
ショーpolar_version;
PostgreSQL 14
select version();
注意事項
重要なテーブルを削除するときは、ドロップフラッシュバック機能を有効にすることを推奨します。 日常的な操作にドロップフラッシュバック機能を使用する場合は注意が必要です。
ドロップフラッシュバック機能を有効にすると、削除されたテーブルはごみ箱モードで実行されるスペースに移動します。 テーブルは実際には削除されないため、テーブルが占有しているスペースは解放されません。 そのため、ごみ箱に大量のデータが蓄積されると、大量のディスク容量が占有される可能性がある。 定期的にごみ箱をクリアすることをお勧めします。
この場合、削除されたテーブルの依存関係を削除する試みは失敗する可能性があります。これは、テーブルが実際には削除されず、テーブルがこれらの依存関係を使用するためです。
削除されたテーブルは、recyclebinモードで実行されるスペースに移動されます。 recyclebinという名前のモードは作成しないでください。recyclebinモードのテーブルは
purge recyclebin
ステートメントでクリアできます。ドロップフラッシュバック機能が有効になっている場合、次の操作はサポートされません。
削除されたパーティションテーブルと一時テーブルはフラッシュバックできません。 パーティションテーブルと一時テーブルは実際に削除され、復元できません。
sql_drop
イベントトリガーはサポートされていません。
パラメーター
パラメーター | データ型 | 説明 |
polar_enable_flashback_drop | BOOL | ドロップフラッシュバック機能を有効にするかどうかを指定します。 デフォルト値: OFF。 有効な値:
|
構文
ドロップフラッシュバック機能は、次のSQL文をサポートします。
テーブルの削除
drop table table_name; # recyclebinモードで実行されるスペースにテーブルを移動します。 drop table table_name purge; # テーブルを削除します。 テーブルを復元できません。
削除されたテーブルの復元
フラッシュバックテーブルtable_nameをドロップ前にします。# 削除されたテーブルを復元します。 同じ名前のテーブルが存在する場合、最新のテーブルが復元されます。 フラッシュバックテーブルtable_nameをドロップ前にtable_name_1に変更します。# 削除されたテーブルを復元して名前を変更します。
ごみ箱からファイルを完全に削除
パージテーブルtable_name;
説明同じ名前のテーブルが存在する場合、最も古いテーブルが削除されます。
ごみ箱をクリアする
パージrecyclebin;
説明polar_super_user権限は、ごみ箱をクリアするときに必要です。
ごみ箱情報の表示
ショーrecyclebin;
性能テスト
テスト用のデータを準備します。
test1テーブルとテーブル
test2
テーブルを作成し、それらにデータを挿入します。CREATE TABLE test1(id intプライマリキー、名前テキスト); CREATE TABLE test2(id intプライマリキー、名前テキスト); INSERT INTO test1 select t,repeat('test1',1024) from generate_series(1, 10000) as t; INSERT INTO test2を選択し、generate_series(1、10000) からtとして ('test2' 、1024) を繰り返します。\dt
サンプル結果:
リレーションのリスト スキーマ | 名前 | タイプ | 所有者 ------- ------ ---------- ---------------- public | test1 | テーブル | postgres public | test2 | テーブル | postgres (2行)
テーブルを削除し、ごみ箱を表示します。
test1
およびtest2
テーブルを削除します。ドロップテーブルtest1; ドロップテーブルtest2; \dt
サンプル結果:
関係は見つかりませんでした。
ごみ箱を表示します。
ショーrecyclebin;
サンプル結果:
table_catalog | table_name | table_type -------------- ----------------------------- --------------- postgres | public$test1$69461331094004 | ベーステーブル postgres | public$test2$69461332967609 | ベーステーブル (2行)
削除されたテーブルをフラッシュバックします。
削除されたテーブルを復元します。
ドロップ前にフラッシュバックテーブルtest1をします。ドロップ前のフラッシュバックテーブルtest2はtest3に名前を付けます。\dt
サンプル結果:
リレーションのリスト スキーマ | 名前 | タイプ | 所有者 ------- ------ ---------- ---------------- public | test1 | テーブル | postgres public | test3 | テーブル | postgres (2行)
説明test2
テーブルの名前がtest3
に変更されました。復元されたデータを表示します。
test1
テーブルのデータを表示します。SELECT count(*) FROM test1;
サンプル結果:
カウント ------- 10000 (1行)
test3
テーブルのデータを表示します。SELECT count(*) FROM test3;
サンプル結果:
カウント ------- 10000 (1行)