すべてのプロダクト
Search
ドキュメントセンター

PolarDB:フラッシュバックを落とす

最終更新日:Nov 13, 2025

はアンドゥログを提供しません。 偶発的な操作により、データが失われる可能性があります。 たとえば、DROP TABLEステートメントの実行後にデータが失われる可能性があります。 のフラッシュバック機能を使用すると、削除されたテーブルをすばやく復元し、ごみ箱を表示および消去して、データを復元できます。

注意事項

  • 重要なテーブルを削除するときは、ドロップフラッシュバック機能を有効にすることを推奨します。 日常的な操作にドロップフラッシュバック機能を使用する場合は注意が必要です。

  • ドロップフラッシュバック機能を有効にすると、削除されたテーブルはごみ箱モードで実行されるスペースに移動します。 テーブルは実際には削除されないため、テーブルが占有しているスペースは解放されません。 そのため、ごみ箱に大量のデータが蓄積されると、大量のディスク容量が占有される可能性がある。 定期的にごみ箱をクリアすることをお勧めします。

  • この場合、削除されたテーブルの依存関係を削除する試みは失敗する可能性があります。これは、テーブルが実際には削除されず、テーブルがこれらの依存関係を使用するためです。

  • 削除されたテーブルは、recyclebinモードで実行されるスペースに移動されます。 recyclebinという名前のモードは作成しないでください。recyclebinモードのテーブルはpurge recyclebinステートメントでクリアできます。

  • ドロップフラッシュバック機能が有効になっている場合、次の操作はサポートされません。

    • 削除されたパーティションテーブルと一時テーブルはフラッシュバックできません。 パーティションテーブルと一時テーブルは実際に削除され、復元できません。

    • sql_dropイベントトリガーはサポートされていません。

パラメーター

パラメーター

データ型

説明

polar_enable_flashback_drop

BOOL

ドロップフラッシュバック機能を有効にするかどうかを指定します。 デフォルト値: OFF。 有効な値:

  • ON

  • OFF

構文

ドロップフラッシュバック機能は、次のSQL文をサポートします。

  • テーブルの削除

    drop table table_name;         # Move the table to the space which runs in the recyclebin mode. 
    drop table table_name purge;   # Delete the table. The table cannot be restored.

  • 削除されたテーブルの復元

    flashback table table_name to before drop;                        # Restore the deleted table. If tables with the same name exist, the latest table is restored. 
    flashback table table_name to before drop rename to table_name_1; # Restore and rename the deleted table.

  • ごみ箱からファイルを完全に削除

    purge table table_name;       
    説明

    同じ名前のテーブルが存在する場合、最も古いテーブルが削除されます。

  • ごみ箱をクリアする

    purge recyclebin;   
    説明

    polar_super_user権限は、ごみ箱をクリアするときに必要です。

  • ごみ箱情報の表示

    show recyclebin;      

性能テスト

  • テスト用のデータを準備します。

    test1テーブルとテーブルtest2テーブルを作成し、それらにデータを挿入します。

    CREATE TABLE test1(id int primary key, name text);
    
    CREATE TABLE test2(id int primary key, name text);
    
    INSERT INTO test1 select t,repeat('test1',1024) from generate_series(1, 10000) as t;
    
    INSERT INTO test2 select t,repeat('test2',1024) from generate_series(1, 10000) as t;
    \dt

    サンプル結果:

             List of relations
     Schema | Name  | Type  |  Owner
    --------+-------+-------+----------
     public | test1 | table | postgres
     public | test2 | table | postgres
    (2 rows)
  • テーブルを削除し、ごみ箱を表示します。

    • test1およびtest2テーブルを削除します。

      DROP TABLE test1;
      
      DROP TABLE test2;
      
      \dt

      サンプル結果:

      Did not find any relations.
    • ごみ箱を表示します。

      show recyclebin;

      サンプル結果:

       table_catalog |         table_name          | table_type
      ---------------+-----------------------------+------------
       postgres      | public$test1$69461331094004 | BASE TABLE
       postgres      | public$test2$69461332967609 | BASE TABLE
      (2 rows)
  • 削除されたテーブルをフラッシュバックします。

    • 削除されたテーブルを復元します。

      FLASHBACK TABLE test1 TO BEFORE DROP;
      
      FLASHBACK TABLE test2 TO BEFORE DROP RENAME TO test3;
      
      \dt

      サンプル結果:

         List of relations
       Schema | Name  | Type  |  Owner
      --------+-------+-------+----------
       public | test1 | table | postgres
       public | test3 | table | postgres
      (2 rows)
      説明

      test2テーブルの名前がtest3に変更されました。

    • 復元されたデータを表示します。

      test1テーブルのデータを表示します。

      SELECT count(*) FROM test1;

      サンプル結果:

       count
      -------
       10000
      (1 row)

      test3テーブルのデータを表示します。

      SELECT count(*) FROM test3;

      サンプル結果:

       count
      -------
       10000
      (1 row)