AnalyticDB for PostgreSQLテーブルは、リレーショナルデータベースのテーブルと似ていますが、テーブル行が計算ノードに分散されている点が異なります。 テーブル内の行の分布は、テーブルの分布ポリシーによって決まります。
標準テーブルの作成
CREATE TABLEステートメントを使用して、テーブルを作成できます。 テーブルを作成するときは、次の項目を定義できます。
CREATE TABLE
ステートメントを実行して、テーブルを作成します。 次の構文が使用されます。
CREATE TABLE table_name (
[ { column_name data_type [ DEFAULT default_expr ] -- Define a column for the table.
[column_constraint [ ... ] -- Define a constraint for the column.
]
| table_constraint -- Define a constraint for the table.
])
[ WITH ( storage_parameter=value [, ... ] ) -- Define the storage model for the table.
[ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ] -- Define a distribution key for the table.
[ partition clause] -- Define a partitioning strategy for the table.
例:
この例では、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制約を使用して、ブール式を満たす列を指定できます。 例:
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制約は、UNIQUE制約およびNOT NULL制約からなる。 PRIMARY KEY制約を含むテーブルはハッシュ分散されている必要があり、制約列には配布キーが含まれている必要があります。 既定では、テーブルに主キーがある場合、主キー列はテーブルの配布キーとして使用されます。 例:
CREATE TABLE products
( product_no integer PRIMARY KEY,
name text,
price numeric)
DISTRIBUTED BY (product_no);