PgSQL数据库分区
:分区的意思就是把逻辑上的一个大表分割成物理上的几个小块
分区建立规则:
1.建立主表:
2.创建分区继承(inherits):
3.定义约束(或者定义索引):
4 定义tigger(触发器):
举例说明:
1。create table
create table articles (
id serial not null,
topic varchar(255),
content text,
poster varchar(100),
posttime timestamp
);
2。创建分区
create table articles_q1 (
check ( posttime >= timestamp '2007-01-01 00:00:01' and postgime < timestamp '2007-04-01 00:00:01')
) inherits (articles);
create table articles_q2 (
check ( posttime >= timestamp '2007-04-01 00:00:01' and posttime < timestamp '2007-07-01 00:00:01')
) inherits (articles);
create table articles_q3 (
check ( posttime >= timestamp '2007-07-01 00:00:01' and posttime < timestamp '2007-10-01 00:00:01')
) inherits (articles);
create table articles_q4 (
check ( posttime >= timestamp '2007-10-01 00:00:01' and posttime < timestamp '2008-01-01 00:00:01')
) inherits (articles);
3。定义主键索引
alter table articles_q1 add primary key (id);
alter table articles_q2 add primary key (id);
alter table articles_q3 add primary key (id);
alter table articles_q4 add primary key (id);
4。创建触发器函数
create function insert_articles() returns trigger as $$
declare
cur_timestamp timestamp;
begin
raise exception 'yes';
exception
when raise_exception then
begin
cur_timestamp := now();
if cur_timestamp >= timestamp '2007-01-01 00:00:01' and cur_timestamp < timestamp '2007-04-01 00:00:01' then
insert into articles_q1 (topic,content,poster,posttime) select NEW.topic,NEW.content,NEW.poster,now();
elsif cur_timestamp >= timestamp '2007-04-01 00:00:01' and cur_timestamp < timestamp '2007-07-01 00:00:01' then
insert into articles_q2 (topic,content,poster,posttime) select NEW.topic,NEW.content,NEW.poster,now();
elsif cur_timestamp >= timestamp '2007-07-01 00:00:01' and cur_timestamp < timestamp '2007-10-01 00:00:01' then
insert into articles_q3 (topic,content,poster,posttime) select NEW.topic,NEW.content,NEW.poster,now();
else
insert into articles_q4 (topic,content,poster,posttime) select NEW.topic,NEW.content,NEW.poster,now();
end if;
end;
return null;
end;
$$ language plpgsql;
create trigger tg_insert_articles before insert on articles
for each row execute procedure insert_articles();
5.测试
insert into articles (topic,content,poster,posttime) values ('topic','content','wo','2007-09-15 00:00:00');
返回:
INSERT 0 0
查看结果:
select * from articles;
显示有一条记录
select * from only articles;
没有任何记录
select * from articles_q3;
有一条记录,表示成功(注意:这里是表示添加数据时是在2007第三季度,如果不是第三季的话注意改变表名)
6.开启约束排除
set constraint_exclusion = on;
explain select count(id) from articles where posttime >= timestamp '2007-09-14 00:00:00';
这样它只会查找q3与q4两个表,关闭后它会查找q1~q4四个表。
本文示例参考:http://www.phpchina.com/2145/viewspace_15265.html
分享到:
相关推荐
PostgreSQL表分区和子表及删除所有的数据库表 最近需求要求统计DNS近7天每天的解析情况。数据量相对大,所以我这边对表进行分区。 对每天的数据进行分区存储。主表只存储近7天的数据,7天之前的数据删掉。所以我...
osm2pgsql是一个用于将OpenStreetMap(OSM)数据导入到PostgreSQL数据库的工具,它是OSM数据处理生态中的重要组成部分。OSM是一种开源的地理信息系统,允许用户自由地创建、编辑和分享地理数据。PostgreSQL则是一个...
pgsql创建自增ID,建表,创建索引,创建分区表
PostgreSQL 10是其的一个重要版本,引入了许多新特性,如并行查询、分区表等。 2. **数据库文档**:数据库文档是记录数据库结构、逻辑关系、业务规则和操作流程的重要文件,对于团队协作、代码审查、系统维护及故障...
官方给出的指导意见是:当表的大小超过了数据库服务器的物理内存大小则应当使用分区表,接下来结合一个例子具体记录一下创建分区表的详细过程。 创建分区表 首先看一下需求,现在有一张日志表,现在需要按表中的操作...
在标签“java database”中,虽然主要讨论的是pgsql,但Java的提及暗示了可能使用Java连接到pgsql数据库进行测试。Java的JDBC(Java Database Connectivity)API广泛用于与各种数据库进行交互,包括pgsql。因此,...
在数据库管理中,分区表是一种优化查询性能的技术,它将一个大表分成多个较小、更易管理的部分,每个部分称为一个分区。PostgreSQL作为一个强大的开源关系型数据库管理系统,支持多种分区策略,如范围、列表、哈希等...
PostgreSQL,简称PGSQL,是一种开源的对象关系型数据库管理系统(ORDBMS),以其强大的功能、稳定性以及高度的可扩展性而受到全球开发者的广泛赞誉。在提供的“PGSQL9.5免安装版(32位)”中,我们无需进行复杂的...
osm2pgsql是一款强大的开源工具,主要用于将OpenStreetMap(OSM)的数据导入到PostgreSQL数据库中。OpenStreetMap是一个全球性的、由志愿者维护的地理信息系统,它提供了免费的地图数据,包括道路、建筑、公园、交通...
osm2pgsql是一款用于将OpenStreetMap(OSM)数据导入PostgreSQL数据库的工具,它创建了一个适合高效查询的地理空间数据库模式。这个工具对于那些需要处理和分析大量地理信息,比如地图服务提供商、城市规划者或者...
- **表分区(Table Partitioning)**: 支持基于范围或列表的表分区,便于管理和优化大规模数据集。 - **返回查询结果(RETURNING)**: 可以在INSERT、UPDATE和DELETE语句中使用RETURNING子句,获取受影响行的数据。 ...
PostgreSQL 11 新增支持哈希分区,哈希分区根据分区键的 hash 值进行分布式存储,分区键可以是单列或多列。为了保持分区均匀,需要选择合适的分区键。哈希分区包含两个属性,MODULUS 属性是哈希分区的个数,对每个...
在PostgreSQL数据库系统中,表分区是一种优化大数据存储和查询性能的技术。表分区将一个大表分解成多个小表,每个小表(分区)管理一部分数据。这种设计使得查询和管理大规模数据更为高效,因为数据库可以针对每个...
PostgreSQL 默认分区 可选 - BRIN 与 Btree 索引 准备 PostgreSQL 数据库 安装 PostgreSQL v11 准备 Zabbix 数据库 创建空的历史*和趋势*表格 PostgreSQL 分区管理器扩展 (pg_partman) 安装 pg_partman 配置文件 ...
这为数据库设计提供了一种灵活的方式来组织相似类型的数据,特别是当需要对一组共享相同属性的数据进行分组时尤为有效。 #### 表继承的基础概念 表继承的概念类似于面向对象编程中的类继承。在一个继承关系中,父...
在PostgreSQL数据库管理系统中,获取表名和字段名是数据库管理员和开发人员日常工作中常见的任务。这有助于了解数据库结构,进行数据操作、查询优化或设计新的应用程序。以下是一些关于如何在PostgreSQL中获取这些...
2. 扩展函数:Navicat针对PostgreSQL的特性,提供了许多特有的函数和操作,如窗口函数、分区表、JSON处理等,方便用户进行复杂的数据库操作。 3. PL/pgSQL编辑器:内建的PL/pgSQL编辑器支持编写和调试存储过程,...
- 初始化数据库集群:`/usr/pgsql-11/bin/initdb -D /var/lib/pgsql/11/data`(路径可能因系统配置而异) - 配置 PostgreSQL:编辑 `/var/lib/pgsql/11/data/postgresql.conf` 和 `/var/lib/pgsql/11/data/pg_hba....