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

AnalyticDB:テーブルの管理

最終更新日:Mar 29, 2026

AnalyticDB for PostgreSQL のテーブルは、リレーショナルデータベースのテーブルと同様に動作しますが、1 つの重要な違いがあります:行がコンピュートノード間で分散される点です。各テーブルのディストリビューションポリシーによって、行がどのように分散されるかが決定されます。

標準テーブルの作成

CREATE TABLE を使用してテーブルを定義します。テーブル作成時に、以下の項目を指定できます:

構文:

CREATE TABLE table_name (
  [ { column_name data_type [ DEFAULT default_expr ]   -- 列定義
     [column_constraint [ ... ]]                        -- 列レベルの制約
  ]
     | table_constraint                                 -- テーブルレベルの制約
  ])
  [ WITH ( storage_parameter=value [, ... ] ) ]         -- ストレージモデル
  [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]  -- 分散キー
  [ partition clause]                                   -- パーティショニング戦略

例:

以下の例では、sales テーブルを作成し、trans_id を分散キーとして、日付に基づく範囲パーティショニングを適用しています。

CREATE TABLE sales (
  trans_id int,
  date date,
  amount decimal(9,2),
  region text)
  DISTRIBUTED BY (trans_id)
  PARTITION BY RANGE(date)
  (start (date '2018-01-01') inclusive
   end (date '2019-01-01') exclusive every (interval '1 month'),
   default partition outlying_dates);

一時テーブルの作成

一時テーブルは、セッションまたはトランザクションの実行期間中に中間データを格納するために使用されます。デフォルトでは、一時テーブルはセッション終了時に自動的に削除されます。

構文:

CREATE TEMPORARY TABLE table_name(...)
    [ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP}]

ON COMMIT 句を使用すると、現在のトランザクション終了時にテーブルに対してどのような処理が行われるかを制御できます。

オプション動作
PRESERVE ROWSすべての行を保持します(デフォルト動作)。
DELETE ROWSすべての行を削除しますが、テーブル構造は保持します。
DROPテーブル全体を削除します。

例:

CREATE TEMPORARY TABLE temp_foo (a int, b text) ON COMMIT DROP;

制約の定義

制約は、列レベルまたはテーブルレベルで、テーブルに格納可能なデータを制限します。

制約を定義する前に、以下のルールを確認してください:

  • CHECK 制約は、定義対象のテーブル内の列のみを参照できます。

  • UNIQUE 制約および PRIMARY KEY 制約には、分散キーを含める必要があります。これらの制約は、追加最適化(AO)テーブルおよび列指向テーブルでは許可されません。

  • FOREIGN KEY 制約は定義可能ですが、強制されません。

  • 1 つのパーティションで定義された制約は、他のすべてのパーティションにも適用されます。個別のパーティションに対して制約をスコープ指定することはできません。

構文:

UNIQUE ( column_name [, ... ] )
  | PRIMARY KEY ( column_name [, ... ] )
  | CHECK ( expression )
  | FOREIGN KEY ( column_name [, ... ] )
           REFERENCES table_name [ ( column_name [, ... ] ) ]
           [ key_match_type ]
           [ key_action ]
           [ key_checking_mode ]

CHECK 制約

CHECK 制約は、列値がブール値式を満たすことを要求します。

CREATE TABLE products (
  product_no integer,
  name text,
  price numeric CHECK (price > 0)
);

NOT NULL 制約

NOT NULL 制約は、列に NULL 値を含めることを禁止します。

CREATE TABLE products (
  product_no integer NOT NULL,
  name text NOT NULL,
  price numeric
);

UNIQUE 制約

UNIQUE 制約は、列または列グループの値がすべての行にわたって一意であることを保証します。テーブルはハッシュ分散である必要があり、制約対象の列には分散キーを含める必要があります。

CREATE TABLE products (
  product_no integer UNIQUE,
  name text,
  price numeric)
  DISTRIBUTED BY (product_no);

PRIMARY KEY 制約

PRIMARY KEY 制約は、UNIQUE 制約と NOT NULL 制約を組み合わせたものです。テーブルはハッシュ分散である必要があり、制約対象の列には分散キーを含める必要があります。

テーブルにプライマリキーが定義されている場合、プライマリキー列(または列グループ)がデフォルトで分散キーとして使用されます。

CREATE TABLE products (
  product_no integer PRIMARY KEY,
  name text,
  price numeric)
  DISTRIBUTED BY (product_no);