Autopartitioning
================

PGDの自動パーティショニングを使用すると、テーブルを複数のパーティションに分割できます。他のテーブル、これらのパーティションの作成と削除が必要です。自動パーティション化は、データを管理可能なチャンクに分割できるため、時間の経過とともに増加する大規模なテーブルの管理に役立ちます。たとえば、古いデータを独自のパーティションにアーカイブし、データが必要でなくなったらパーティションをアーカイブまたはドロップできます。

自動パーティション化とレプリケーション
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

PGD自動パーティションは、デフォルトで、 ``bdr.autopartition``
ファンクションを介してローカルに管理されます。この機能を使用すると、テーブルの自動レンジパーティションの定義を作成または変更できます。定義が存在しない場合、作成します。それ以外の場合、既存の定義を変更します。

レンジパーティショニング
^^^^^^^^^^^^^^^^^^^^^^^^

PGD自動パーティション化は、 ``RANGE``
キーワードを使用したレンジパーティション化をサポートしています。レンジパーティション化を使用すると、列の値の範囲に基づいてテーブルをパーティション化できます。たとえば、日付でテーブルをパーティション化できます。各パーティションには、特定の日付範囲のデータが含まれます。これは、データを管理可能なチャンクに分割できるため、時間の経過とともに増加する大規模なテーブルの管理に役立ちます。

たとえば、日付でパーティション化されたテーブルを作成できます。

.. code:: sql

   CREATE TABLE measurement (
       logdate date not null,
       peaktemp int,
       unitsales int
   ) PARTITION BY RANGE (logdate);

次に、 ``bdr.autopartition``
ファンクションを使用して日次パーティションを作成し、データを1か月間保持できます。

.. code:: sql

   select bdr.autopartition(measurement, 1 day, data_retention_period := 30 days);

この機能は、日ごとにパーティションを作成し、データを30日間保持します。
30日後、パーティションは自動的に削除されます。データベーステーブルを見ると、\ ``measurement``
テーブル用に作成されたパーティションが表示されます。

.. code:: console

   pgddb=# \dt
   __OUTPUT__
                                  List of relations
    Schema |                  Name                  |       Type        |  Owner
   - -------+----------------------------------------+-------------------+----------
    public | measurement                            | partitioned table | postgres
    public | measurement_part_1231354915_2103027132 | table             | postgres
    public | measurement_part_1520219330_1231354915 | table             | postgres
    public | measurement_part_1670975046_3921991865 | table             | postgres
    public | measurement_part_2103027132_2095358725 | table             | postgres
    public | measurement_part_2877346473_1670975046 | table             | postgres
    public | measurement_part_3921991865_1520219330 | table             | postgres
   (7 rows)

なぜこれほど多くのパーティションがあるのですか？デフォルトでは、自動パーティションは将来の使用に備えて5つの高度なパーティションを作成し、2つのパーティションを除くすべてを使用するたびにそれを自動的に行うためです。これは、新しいデータに使用可能な少なくとも2つのパーティションがあることを意味します。
``bdr.autopartition`` ファンクションの\ ``minimum_advance_partitions``
および\ ``maximum_advance_partitions``
パラメーターを設定することにより、この動作を変更できます。

.. code:: sql

   bdr.autopartition(relation regclass,
           partition_increment text,
           partition_initial_lowerbound text DEFAULT NULL,
           partition_autocreate_expression text DEFAULT NULL,
           minimum_advance_partitions integer DEFAULT 2,
           maximum_advance_partitions integer DEFAULT 5,
           data_retention_period interval DEFAULT NULL,
           enabled boolean DEFAULT on,
           analytics_offload_period);
