數(shù)據(jù)表管理
AnalyticDB PostgreSQL版數(shù)據(jù)庫(kù)中的表與其它關(guān)系型數(shù)據(jù)庫(kù)中的表類(lèi)似,不同的是表中的行被分布在不同Segment上,表的分布策略決定了在不同Segment上面的分布情況。
創(chuàng)建普通表
CREATE TABLE命令用于創(chuàng)建一個(gè)表,創(chuàng)建表時(shí)可以定義以下內(nèi)容:
使用CREATE TABLE
命令創(chuàng)建表,格式如下:
CREATE TABLE table_name (
[ { column_name data_type [ DEFAULT default_expr ] -- 表的列定義
[column_constraint [ ... ] -- 列的約束定義
]
| table_constraint -- 表級(jí)別的約束定義
])
[ WITH ( storage_parameter=value [, ... ] ) -- 表存儲(chǔ)格式定義
[ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ] -- 表的分布鍵定義
[ partition clause] -- 表的分區(qū)定義
示例:
以下示例中的建表語(yǔ)句創(chuàng)建了一個(gè)表,使用trans_id作為分布鍵,并基于date設(shè)置了RANGE分區(qū)功能。
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);
創(chuàng)建臨時(shí)表
臨時(shí)表(Temporary Table)會(huì)在會(huì)話結(jié)束時(shí)自動(dòng)刪除,或選擇性地在當(dāng)前事務(wù)結(jié)束的時(shí)候刪除,用于存儲(chǔ)臨時(shí)中間結(jié)果。創(chuàng)建臨時(shí)表的命令如下:
CREATE TEMPORARY TABLE table_name(…)
[ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP}]
臨時(shí)表的行為在事務(wù)塊結(jié)束時(shí)的行為可以通過(guò)上述語(yǔ)句中的ON COMMIT來(lái)控制。
PRESERVE ROWS:在事務(wù)結(jié)束時(shí)候保留數(shù)據(jù),這是默認(rèn)的行為。
DELETE ROWS:在每個(gè)事務(wù)塊結(jié)束時(shí),臨時(shí)表的所有行都將被刪除。
DROP:在當(dāng)前事務(wù)結(jié)束時(shí),會(huì)刪除臨時(shí)表。
示例:
創(chuàng)建一個(gè)臨時(shí)表,事務(wù)結(jié)束時(shí)候刪除該臨時(shí)表。
CREATE TEMPORARY TABLE temp_foo (a int, b text) ON COMMIT DROP;
表約束的定義
您可以在列和表上定義約束來(lái)限制表中的數(shù)據(jù),但是有以下一些限制:
CHECK約束引用的列只能在其所在的表中。
UNIQUE和PRIMARY KEY約束必須包含分布鍵列,UNIQUE和PRIMARY KEY約束不支持追加優(yōu)化表和列存表。
允許FOREIGN KEY 約束,但實(shí)際上并不會(huì)做外鍵約束檢查。
分區(qū)表上的約束必須應(yīng)用到所有的分區(qū)表上,不能只應(yīng)用于部分分區(qū)表。
約束命令格式如下:
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 Constraints)
檢查約束(Check Constraints)指定列中的值必須滿(mǎn)足一個(gè)布爾表達(dá)式,例如:
CREATE TABLE products
( product_no integer,
name text,
price numeric CHECK (price > 0) );
非空約束(Not-Null Constraints)
非空約束(Not-Null Constraints)指定列不能有空值,例如:
CREATE TABLE products
( product_no integer NOT NULL,
name text NOT NULL,
price numeric );
唯一約束(Unique Constraints)
唯一約束(Unique Constraints)確保一列或者一組列中包含的數(shù)據(jù)對(duì)于表中所有的行都是唯一的。包含唯一約束的表必須是哈希分布,并且約束列需要包含分布鍵列,例如:
CREATE TABLE products
( product_no integer UNIQUE,
name text,
price numeric)
DISTRIBUTED BY (product_no);
主鍵約束(Primary Keys Constraints)
主鍵約束(Primary Keys Constraints)是一個(gè)UNIQUE約束和一個(gè) NOT NULL約束的組合。包含主鍵約束的表必須是哈希分布,并且約束列需要包含分布鍵列。如果一個(gè)表具有主鍵,這個(gè)列(或者這一組列)會(huì)被默認(rèn)選中為該表的分布鍵,例如:
CREATE TABLE products
( product_no integer PRIMARY KEY,
name text,
price numeric)
DISTRIBUTED BY (product_no);
更多信息
更多信息,請(qǐng)參見(jiàn)Greenplum官網(wǎng)文檔。