我有从 docker-compose 运行的 Citus,我从官方网站获取了 yaml,并最初从 2 个节点运行它
docker-compose -p citus up --scale worker=2 -d
之后我添加表格
CREATE TABLE IF NOT EXISTS messages (
text TEXT NOT NULL,
"from" CHARACTER VARYING NOT NULL,
"to" CHARACTER VARYING NOT NULL,
"shardId" CHARACTER VARYING NOT NULL
);
然后我调用SELECT create_distributed_table('messages', 'shardId');
shardId 来获取“from”和“to”变量的哈希值,范围从 0 到 31,到目前为止一切正常,我看到每个聊天都有自己的分片。
但当我尝试重新分片我的集群时
set POSTGRES_PASSWORD=pass && docker-compose -p citus up --scale worker=5 -d
并通过节点重新平衡数据
SELECT citus_rebalance_start();
我收到错误,说我无法在没有 pk 的情况下重新平衡表,因此我添加了一个 pk(id),然后我收到错误,说我无法将 create_distributed_table 的值设置为 pk 或在唯一约束下
SELECT create_distributed_table('messages', 'shardId');
错误:无法对“消息”创建约束详细信息:分布式关系不能具有不包含分区列的 UNIQUE、EXCLUDE 或 PRIMARY KEY 约束(如果是 EXCLUDE,则使用相等运算符)。
所以我走进了死胡同,我该怎么做才能操纵 create_distributed_table 方法中的密钥?