当我执行以下 sql (它包含在由 生成的 sql 文件中)pg_dump
Greenplum 中的 Postgres9.4):
CREATE TABLE "public"."trm_concept" (
"pid" int8 NOT NULL,
"code" varchar(100) NOT NULL,
"codesystem_pid" int8,
"display" varchar(400) ,
"index_status" int8,
CONSTRAINT "trm_concept_pkey" PRIMARY KEY ("pid"),
CONSTRAINT "idx_concept_cs_code" UNIQUE ("codesystem_pid", "code")
);
我收到这个错误:
ERROR: Greenplum Database does not allow having both PRIMARY KEY and UNIQUE constraints
为什么greenplum不允许这样做?我确实需要这个独特的约束来保证某些规则,我该如何在 greenplum 中修复它?
- a
UNIQUE
约束是通过 btree 索引完成的
- 主键意味着
UNIQUE
and NOT NULL
- GreenPlum 分发给子/分片或任何您声称的内容
UNIQUE
.
格林豪泰实施UNIQUE
约束——如你所愿——该索引必须是
这样做将完全消除运行 GreenPlum 的好处。您也可以回到 PostgreSQL。
来自有关 CREATE TABLE 的文档 http://gpdb.docs.pivotal.io/4380/ref_guide/sql_commands/CREATE_TABLE.html
创建表时,有一个附加子句来声明Greenplum数据库的分配策略。如果未提供 DISTRIBUTED BY 或 DISTRIBUTED RANDOMLY 子句,则 Greenplum 使用 PRIMARY KEY(如果表有)或表的第一列作为分布键向表分配哈希分布策略。几何或用户定义数据类型的列不符合 Greenplum 分布键列的资格。如果表没有符合条件的数据类型的列,则行将根据循环或随机分布进行分布。为了确保 Greenplum 数据库系统中数据的均匀分布,您需要为每条记录选择唯一的分布键,或者如果不可能,则选择 DISTRIBUTED RANDOMLY。
同一个文档对主键说了这一点,
对于一个表来说,要有主键,它必须是散列分布的(不是随机分布的),并且主键唯一的列必须包含Greenplum分布键的所有列。
这是文档的内容创建索引 http://gpdb.docs.pivotal.io/4320/ref_guide/sql_commands/CREATE_INDEX.html
在Greenplum数据库中,仅当索引键的列与Greenplum分布键相同(或其超集)时才允许使用唯一索引。在分区表上,唯一索引仅在单个分区内受支持,而不是在所有分区中受支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)