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

PolarDB:フラッシュバックドロップ

最終更新日:Jan 14, 2026

PolarDB for PostgreSQL (Oracle 互換) には UNDO ログがないため、開発者や運用保守エンジニアによる `DROP TABLE` の実行などの誤操作は、データ損失を引き起こす可能性があります。PolarDB for PostgreSQL (Oracle 互換) は、フラッシュバックドロップ機能をサポートしています。この機能は、削除されたテーブルを迅速に復元し、ごみ箱を管理することで、データの回復を支援します。

適用範囲

この機能は、Oracle 構文互換 2.0 およびマイナーエンジンバージョン 2.0.14.9.15.0 以降の PolarDB for PostgreSQL (Oracle 互換) で利用できます。

説明

コンソールでマイナーエンジンバージョン番号を表示するか、SHOW polardb_version; 文を実行することで確認できます。ご利用のクラスターがバージョンの要件を満たしていない場合は、マイナーエンジンバージョンをアップグレードしてください。

注意事項

  • 重要なテーブルを削除する場合にのみ、フラッシュバックドロップ機能を有効にしてください。定型的な操作では、この機能の利用には注意が必要です。

  • フラッシュバックドロップ機能は、削除されたテーブルを完全に削除するのではなく、ごみ箱に移動します。テーブルが占有していたディスク領域は解放されません。これにより、時間の経過とともに大量のディスク領域が消費される可能性があります。ごみ箱は定期的に空にする必要があります。

  • フラッシュバックドロップ機能が有効な場合、削除されたテーブルの依存関係を削除しようとすると、失敗する可能性があります。これは、テーブルが完全に削除されておらず、依然としてこれらの依存関係に依存しているためです。

  • 削除されたテーブルは recyclebin スキーマに移動されます。recyclebin という名前のスキーマは作成しないでください。recyclebin という名前のスキーマ内のテーブルは、purge recyclebin 文によってクリアされます。

  • フラッシュバックドロップ機能を有効にすると、以下の操作はサポートされません。

    • パーティションテーブルと一時テーブルでは、フラッシュバックドロップはサポートされていません。これらのテーブルは完全に削除され、回復することはできません。

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

パラメーター

パラメーター名

データ型

説明

polar_enable_flashback_drop

BOOL

フラッシュバックドロップ機能を有効または無効にします。有効値:

  • ON:機能を有効にします。

  • OFF:機能を無効にします。(デフォルト)

構文

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

  • 削除ポリシー

    drop table table_name;         #テーブルをごみ箱に移動します。
    drop table table_name purge;   #テーブルを完全に削除します。テーブルは回復できません。
  • 削除されたテーブルの復元

    flashback table table_name to before drop;                        #削除されたテーブルを復元します。同じ名前のテーブルが存在する場合、最新のものが復元されます。
    flashback table table_name to before drop rename to table_name_1; #削除されたテーブルを復元し、名前を変更します。
  • ごみ箱からテーブルを完全に削除

    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)