Tabel AnalyticDB for PostgreSQL berfungsi seperti tabel dalam database relasional, dengan satu perbedaan utama: barisnya didistribusikan ke berbagai node komputasi. Kebijakan distribusi setiap tabel menentukan cara baris tersebut disebar.
Buat tabel standar
Gunakan CREATE TABLE untuk mendefinisikan tabel. Saat pembuatan, Anda dapat menentukan:
Nama kolom dan tipe data-nya
Kendala (constraints)
Sintaks:
CREATE TABLE table_name (
[ { column_name data_type [ DEFAULT default_expr ] -- Definisi kolom
[column_constraint [ ... ]] -- Kendala tingkat kolom
]
| table_constraint -- Kendala tingkat tabel
])
[ WITH ( storage_parameter=value [, ... ] ) ] -- Model penyimpanan
[ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ] -- Kunci distribusi
[ partition clause] -- Strategi partisiContoh:
Contoh berikut membuat tabel sales dengan trans_id sebagai kunci distribusi dan partisi rentang berbasis tanggal.
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);Buat tabel temporary
Tabel temporary menyimpan data sementara selama sesi atau transaksi. Secara default, tabel temporary secara otomatis dihapus pada akhir sesi.
Sintaks:
CREATE TEMPORARY TABLE table_name(...)
[ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP}]Gunakan klausa ON COMMIT untuk mengontrol apa yang terjadi pada tabel di akhir transaksi saat ini:
| Opsi | Perilaku |
|---|---|
PRESERVE ROWS | Mempertahankan semua baris. Ini adalah nilai default. |
DELETE ROWS | Menghapus semua baris, tetapi mempertahankan struktur tabel. |
DROP | Menghapus tabel sepenuhnya. |
Contoh:
CREATE TEMPORARY TABLE temp_foo (a int, b text) ON COMMIT DROP;Definisikan kendala
Kendala membatasi data yang dapat disimpan dalam tabel, baik di tingkat kolom maupun tabel.
Sebelum mendefinisikan kendala, perhatikan aturan berikut:
Kendala
CHECKhanya dapat mereferensi kolom dalam tabel tempat kendala tersebut didefinisikan.Kendala
UNIQUEdanPRIMARY KEYharus mencakup kunci distribusi. Kendala ini tidak diizinkan pada tabel append-optimized (AO) atau tabel berorientasi kolom.Kendala
FOREIGN KEYdiizinkan tetapi tidak diberlakukan.Kendala yang didefinisikan pada satu partisi berlaku untuk semua partisi lainnya. Kendala tidak dapat dibatasi hanya untuk partisi tertentu.
Sintaks:
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 ]Kendala CHECK
Kendala CHECK mengharuskan nilai kolom memenuhi ekspresi Boolean.
CREATE TABLE products (
product_no integer,
name text,
price numeric CHECK (price > 0)
);Kendala NOT NULL
Kendala NOT NULL mencegah kolom berisi nilai NULL.
CREATE TABLE products (
product_no integer NOT NULL,
name text NOT NULL,
price numeric
);Kendala UNIK
Kendala UNIQUE memastikan bahwa nilai dalam satu kolom atau sekelompok kolom bersifat unik di seluruh baris. Tabel harus didistribusikan secara hash, dan kolom kendala harus mencakup kunci distribusi.
CREATE TABLE products (
product_no integer UNIQUE,
name text,
price numeric)
DISTRIBUTED BY (product_no);Kendala KUNCI UTAMA
Kendala PRIMARY KEY menggabungkan kendala UNIQUE dan kendala NOT NULL. Tabel harus didistribusikan secara hash, dan kolom kendala harus mencakup kunci distribusi.
Jika sebuah tabel memiliki kunci primer, kolom kunci primer tersebut digunakan sebagai kunci distribusi secara default.
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric)
DISTRIBUTED BY (product_no);