错误:分布式表的唯一索引必须包含散列分布列。啥时候从 postgresql 迁移到 postgresql-xl

Posted

技术标签:

【中文标题】错误:分布式表的唯一索引必须包含散列分布列。啥时候从 postgresql 迁移到 postgresql-xl【英文标题】:ERROR: Unique index of distributed table must contain the hash distribution column. when do migration from postgresql to postgresql-xl错误:分布式表的唯一索引必须包含散列分布列。什么时候从 postgresql 迁移到 postgresql-xl 【发布时间】:2019-10-24 09:41:32 【问题描述】:

我通过 pg_dump 从 postgresql 转储 sql 并得到下表定义:

CREATE TABLE administrator (
    mtime bigint,
    email text,
    group_id bigint,
    user_account text NOT NULL
);
ALTER TABLE ONLY administrator ADD CONSTRAINT administrator_pkey PRIMARY KEY (user_account);

我设置 postgresql-xl 然后导入它返回的 sql 文件:

错误:分布式表的唯一索引必须包含散列分布列。

Postgres-XL manual 说:

如果未指定 DISTRIBUTE BY,则将选择具有 UNIQUE 约束的列作为分布键。如果未指定此类列,则分布列是定义中的第一个符合条件的列。如果没有找到这样的列,则该表将由 ROUNDROBIN 分发。

如果这是真的,为什么我的 sql 文件导入仍然返回错误?

【问题讨论】:

我认为当您创建该表时,它会自动选择 mtime 作为分布列。因此,您不能添加主键。尝试使主键定义成为创建表的一部分。我认为它会这样工作。 【参考方案1】:
Drop Table administrator ;

CREATE TABLE administrator (
    mtime bigint,
    email text,
    group_id bigint,
    user_account text NOT NULL
) DISTRIBUTE BY HASH(user_account);

ALTER TABLE administrator ADD CONSTRAINT administrator_pkey PRIMARY KEY (user_account);

将解决问题。

【讨论】:

以上是关于错误:分布式表的唯一索引必须包含散列分布列。啥时候从 postgresql 迁移到 postgresql-xl的主要内容,如果未能解决你的问题,请参考以下文章

Mysql索引分类及实现原理

学习笔记:散列

MySQL索引

mysql索引

「进阶」MySQL中如何使用索引

若是指定创建的索引列唯一,则应在创建索引的语句中使用啥子句