`

PgSQL数据库分区

 
阅读更多

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表分区和子表及删除所有的数据库表.zip

    PostgreSQL表分区和子表及删除所有的数据库表 最近需求要求统计DNS近7天每天的解析情况。数据量相对大,所以我这边对表进行分区。 对每天的数据进行分区存储。主表只存储近7天的数据,7天之前的数据删掉。所以我...

    osm2pgsql(OSM数据导入到Postgres中工具)

    osm2pgsql是一个用于将OpenStreetMap(OSM)数据导入到PostgreSQL数据库的工具,它是OSM数据处理生态中的重要组成部分。OSM是一种开源的地理信息系统,允许用户自由地创建、编辑和分享地理数据。PostgreSQL则是一个...

    pgsql创建自增ID,建表,创建索引,创建分区表.txt

    pgsql创建自增ID,建表,创建索引,创建分区表

    postgresql10数据库生成文档工具

    PostgreSQL 10是其的一个重要版本,引入了许多新特性,如并行查询、分区表等。 2. **数据库文档**:数据库文档是记录数据库结构、逻辑关系、业务规则和操作流程的重要文件,对于团队协作、代码审查、系统维护及故障...

    PostgreSQL分区表(partitioning)应用实例详解

    官方给出的指导意见是:当表的大小超过了数据库服务器的物理内存大小则应当使用分区表,接下来结合一个例子具体记录一下创建分区表的详细过程。 创建分区表 首先看一下需求,现在有一张日志表,现在需要按表中的操作...

    pgsql的并发问题

    在探讨"pgsql的并发问题"时,我们深入研究了PostgreSQL如何处理并发操作以及如何确保在不影响性能的情况下,应用程序查询能够获得正确的结果。这涉及到的关键概念包括多版本并发控制(MVCC)、两阶段锁定(2PL)以及...

    pgsql performance test doc

    在标签“java database”中,虽然主要讨论的是pgsql,但Java的提及暗示了可能使用Java连接到pgsql数据库进行测试。Java的JDBC(Java Database Connectivity)API广泛用于与各种数据库进行交互,包括pgsql。因此,...

    Python-实现轻松创建PostgreSQL的分区表DDL

    在数据库管理中,分区表是一种优化查询性能的技术,它将一个大表分成多个较小、更易管理的部分,每个部分称为一个分区。PostgreSQL作为一个强大的开源关系型数据库管理系统,支持多种分区策略,如范围、列表、哈希等...

    PGSQL9.5免安装版(64位)

    - **表分区(Table Partitioning)**: 支持基于范围或列表的表分区,便于管理和优化大规模数据集。 - **返回查询结果(RETURNING)**: 可以在INSERT、UPDATE和DELETE语句中使用RETURNING子句,获取受影响行的数据。 ...

    PGSQL9.5免安装版(32位)

    PostgreSQL,简称PGSQL,是一种开源的对象关系型数据库管理系统(ORDBMS),以其强大的功能、稳定性以及高度的可扩展性而受到全球开发者的广泛赞誉。在提供的“PGSQL9.5免安装版(32位)”中,我们无需进行复杂的...

    osm2pgsql-OSM数据导入到Postgres中工具

    osm2pgsql是一款强大的开源工具,主要用于将OpenStreetMap(OSM)的数据导入到PostgreSQL数据库中。OpenStreetMap是一个全球性的、由志愿者维护的地理信息系统,它提供了免费的地图数据,包括道路、建筑、公园、交通...

    osm2pgsql

    osm2pgsql是一款用于将OpenStreetMap(OSM)数据导入PostgreSQL数据库的工具,它创建了一个适合高效查询的地理空间数据库模式。这个工具对于那些需要处理和分析大量地理信息,比如地图服务提供商、城市规划者或者...

    PostgreSQL 创建表分区

    在PostgreSQL数据库系统中,表分区是一种优化大数据存储和查询性能的技术。表分区将一个大表分解成多个小表,每个小表(分区)管理一部分数据。这种设计使得查询和管理大规模数据更为高效,因为数据库可以针对每个...

    PostgreSQL 11-16版本主要特性.pdf

    PostgreSQL 11 新增支持哈希分区,哈希分区根据分区键的 hash 值进行分布式存储,分区键可以是单列或多列。为了保持分区均匀,需要选择合适的分区键。哈希分区包含两个属性,MODULUS 属性是哈希分区的个数,对每个...

    zabbix-postgres-partitioning:Zabbix PostgreSQL 11 版本机分区

    PostgreSQL 默认分区 可选 - BRIN 与 Btree 索引 准备 PostgreSQL 数据库 安装 PostgreSQL v11 准备 Zabbix 数据库 创建空的历史*和趋势*表格 PostgreSQL 分区管理器扩展 (pg_partman) 安装 pg_partman 配置文件 ...

    PostgreSQL表的继承和分区

    这为数据库设计提供了一种灵活的方式来组织相似类型的数据,特别是当需要对一组共享相同属性的数据进行分组时尤为有效。 #### 表继承的基础概念 表继承的概念类似于面向对象编程中的类继承。在一个继承关系中,父...

    PostgreSQL获取表名和字段名

    在PostgreSQL数据库管理系统中,获取表名和字段名是数据库管理员和开发人员日常工作中常见的任务。这有助于了解数据库结构,进行数据操作、查询优化或设计新的应用程序。以下是一些关于如何在PostgreSQL中获取这些...

    navicat数据库客户端工具

    2. 扩展函数:Navicat针对PostgreSQL的特性,提供了许多特有的函数和操作,如窗口函数、分区表、JSON处理等,方便用户进行复杂的数据库操作。 3. PL/pgSQL编辑器:内建的PL/pgSQL编辑器支持编写和调试存储过程,...

    pg11rpm.zip

    - 初始化数据库集群:`/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....

Global site tag (gtag.js) - Google Analytics