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)
创建表做。
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)
| 归档时间: |
|
| 查看次数: |
10553 次 |
| 最近记录: |