在 Postgresql 中创建分区表

Wan*_*oso 1 postgresql database-partitioning postgresql-10

我正在尝试找到一个创建分区表的示例。我有一些包含许多元组的表,我可以根据一列的值对它们进行分类,但是,我只是找到使用范围和日期的示例(我的列是 varchar,在其他表中是 int/外键)。我正在尝试用这种技术来加快我的选择速度。

这是我的 CREATE 表之一(源列将用于对该表进行分区):

CREATE TABLE tb_hit_source (
Hit_SourceId bigserial NOT NULL,
Source varchar(50) NOT NULL,
UniqueId varchar(50) NOT NULL,
tb_hit_HitId int8 NOT NULL,
CONSTRAINT tb_hit_source_ak_1 UNIQUE (Source, tb_hit_HitId, UniqueId) NOT DEFERRABLE INITIALLY IMMEDIATE,
CONSTRAINT tb_hit_source_pk PRIMARY KEY (Hit_SourceId)
);
CREATE INDEX tb_hit_source_idx_1 on tb_hit_source (Source ASC);
CREATE INDEX tb_hit_source_idx_2 on tb_hit_source (tb_hit_HitId ASC);
ALTER TABLE tb_hit_source ALTER COLUMN Hit_SourceId SET DEFAULT nextval('"HitSourceId_seq_tb_hit_source"');;
Run Code Online (Sandbox Code Playgroud)

Jas*_*sen 6

创建表做。

CREATE TABLE tb_hit_source (
Hit_SourceId bigserial NOT NULL,
Source varchar(50) NOT NULL,
UniqueId varchar(50) NOT NULL,
tb_hit_HitId int8 NOT NULL,
CONSTRAINT tb_hit_source_ak_1 
    UNIQUE (Source, tb_hit_HitId, UniqueId) NOT DEFERRABLE,
CONSTRAINT tb_hit_source_pk PRIMARY KEY (Hit_SourceId)
PARTITION BY RANGE (Source);
Run Code Online (Sandbox Code Playgroud)

然后,要创建分区,请在范围的每一端使用相同的值来强制使用单值分区。

CREATE TABLE tb_hit_source_a PARTITION OF tb_hit_source
    FOR VALUES FROM ('a') TO ('a');
Run Code Online (Sandbox Code Playgroud)

ETC。

podtgresql 11 允许PARTITION BY LIST (source)更简单地声明分区。

CREATE TABLE tb_hit_source_a PARTITION OF tb_hit_source
    FOR VALUES IN ('a');
Run Code Online (Sandbox Code Playgroud)