为什么不能创建分区表

use*_*057 4 postgresql create-table database-partitioning postgresql-9.6

我正在尝试创建带有分区的简单表。

这是我的命令:

CREATE TABLE measurement (
    city_id         int not null,
    logdate         date not null,
    peaktemp        int,
    unitsales       int
) PARTITION BY RANGE (logdate);
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

SQL 错误 [42601]:错误:“PARTITION”处或附近的语法错误

无法理解是问题..

我正在使用 PostgreSQL 9.6.3

IMS*_*SoP 5

PostgreSQL 10添加了“声明性表分区”,即分区作为 DBMS 的一流功能,具有自己的语法。

在较早的版本中,您可以使用“表继承”稍加努力就达到相同的效果。手册中一个页面描述了如何手动执行此操作,总结为:

  1. 创建“主”表,所有分区都将从该表继承。
  2. 创建多个“子”表,每个表都从主表继承。
  3. 向分区表添加表约束以定义每个分区中允许的键值。
  4. 对于每个分区,在键列上创建一个索引,以及您可能需要的任何其他索引。
  5. 或者,定义触发器或规则以将插入到主表中的数据重定向到适当的分区。
  6. 确保在 postgresql.conf 中没有禁用 constraint_exclusion 配置参数。如果是,查询将不会按需要进行优化。

为使这更容易,如果您无法升级到版本 10,您可以使用诸如pg_partman 之类的扩展,它为您提供设置和管理分区集的附加功能。