@clickup/pg-microsharding

中文文档
2.27.1发布于 2026/03/11MITTypeScriptCommonJS近 30 天下载 9.8万

PostgreSQL 的微软支持

此软件包已被标记为弃用

This package is no longer maintained

中文使用文档
文档目录19 节
  1. 使用量
  2. 环境变量
  3. 配置文件: pg- microsharding. config.ts
  4. DSN和地址数据库
  5. 命令行工具
  6. 显示集群布局: pg- 微硬化列表
  7. 分配新微硬体: pg- 微硬体分配
  8. 移动一微硬: pg-微硬化移动
  9. 清理已移动的旧副本: pg- 微硬清理
  10. 重新平衡所有岛屿: pg-微硬再平衡
  11. 从一个岛上撤离所有微硬体(退役)
  12. 微软岛体重:pg-微硬系数
  13. 无下行时间的Schema: pg-微硬拷贝
  14. 防止复制
  15. 构造索引创建性能
  16. PostgreSQL 存储函数 API
  17. 安装到数据库
  18. 列表 活动 shards: microsharding.list active shards ()
  19. 微硬调试视图

pg-微硬化: 对 PostgreSQL 的微硬化支持

另见 TypeScript API 文档。 。 。 .

CI run

这个 pg-微硬化 CLI工具可以跨多个 PostgreSQL 服务器进行微硬分解管理. 您可以做以下工作:

  • 添加并去除微硬的策略.
  • 将一个微软从一个 PostgreSQL 服务器移动到另一个没有停机时间的服务器 .
  • 多个服务器之间自动再平衡微软,使每个服务器的大小大致相同.
  • 复制正常的 PostgreSQL schemas(与微软无关) 从一个主机复制到另一个没有停机时间(考虑无停机倒置-存储工作流程).
  • 激活并解除微硬体.
  • 假设活动微硬计划.
  • 查看整个集群布局:微硬的策略是什么位置,大小,有多少读取/写出经验.
  • 加权再平衡:当一个服务器看起来超载时,可以"分解出"一些从它到其他服务器来达到等重负.

每个微硬是带有后缀的PostgreSQL计划. Microshard schemas拥有同一套同名的表格;它取决于更高层次的工具,以保持所有这些表格的系统同步(例如参见: 缩写 页:1.

使用量

pg-microsharding install
  [--schema-name-fmt=SCHEMA_NAME_FMT]
  [--dsn=DSN | --dsns=DNS1,DSN2,...]

pg-microsharding list | ls
  [--weight-sql='SELECT returning weight with optional unit']
  [--verbose]
  [--dsn=DSN | --dsns=DNS1,DSN2,...]
  [--json]

pg-microsharding allocate
  --shard=N | --shards=N-M
  --migrate-cmd='shell command to run migrations'
  --activate={yes | no}
  [--dsn=DSN | --dsns=DNS1,DSN2,...]

pg-microsharding factor
  --shard=N | --shards=N,M,... | --shards=DSN-PREFIX
  --factor=P|+P.Q|-P.Q|"*P.Q"
  [--dsn=DSN | --dsns=DNS1,DSN2,...]

pg-microsharding move
  --shard=N
  --from=DSN-OR-DSN-PREFIX-OR
  --to=DSN-OR-DSN-PREFIX
  --activate-on-destination={yes | no}
  [--wait]
  [--validate-fks]
  [--max-replication-lag-sec=N]
  [--dsns=DNS1,DSN2,...]
  [--deactivate-sql='SQL $1 SQL']

pg-microsharding rebalance
  --activate-on-destination={yes | no}
  [--wait]
  [--validate-fks]
  [--deactivate-sql='SQL $1 SQL']
  [--weight-sql='SELECT returning weight with optional unit']
  [--decommission=DSN1,DSN2,...]
  [--max-replication-lag-sec=N]
  [--parallelism=N]
  [--dsn=DSN | --dsns=DNS1,DSN2,...]

pg-microsharding cleanup
  [--dsn=DSN | --dsns=DNS1,DSN2,...]

pg-microsharding copy
  --schema=SCHEMA-NAME
  --from=DSN-OR-DSN-PREFIX-OR
  --to=DSN-OR-DSN-PREFIX
  [--wait]
  [--validate-fks]
  [--max-replication-lag-sec=N]
  [--dsns=DNS1,DSN2,...]

环境变量

该工具接收来自命令行选项的参数,但允许使用环境变量为大多数设定默认值.

一些变量是 psql 命令的标准 :

  • PGUSER: 默认数据库用户
  • PGPASSWORD: 默认数据库密码
  • PGHOST: 默认数据库主机(或多个主机,逗号分隔)
  • PGPORT: 默认数据库端口
  • PGDATABASE: 默认数据库名称
  • PGSSLMODE: 默认 SSL 模式( 如“ prefer ”)
  • PGOPTIONS: 选项( 如 -c maintenance_work_mem=500MB用于创建索引

自定义工具本身的变量 :

  • DSNS 或者说 PGDSNS 或者说 PGHOST: 默认值 --dsns 选项,以逗号分隔的DSN列表(见下文)
  • MIGRATE_CMD: 默认值 --migrate-cmd 选项
  • WEIGHT_SQL: 默认值 --weight-sql 选项
  • DEACTIVATE_SQL: 默认值 --deactivate-sql 选项
  • PARALLELISM: 默认值 --parallelism 选项
  • MAX_REPLICATION_LAG_SEC: 默认值 --max-replication-lag-sec 选项
  • SCHEMA_NAME_FMT: 默认值 --schema-name-fmt (仅适用
    以安装动作;如果没有通过, "sh%04d" 用于)

配置文件: pg- microsharding. config.ts

您可以不设置环境变量,而是导出相同的精确值 pg-microsharding.config.ts 例如,通过直接从文件 输入框架 集群配置 :

import { cluster } from "ents/cluster";

export default async function(action: "apply" | "undo" | string) {
  const islands = cluster.options.islands();
  return {
    PGDSNS: islands
      .map((island) => island.nodes.map(({ host }) => host)
      .flat()
      .join(","),
    PGPORT: 5432, // we don't want to use pgbouncer port here
    PGUSER: firstNode.user,
    PGPASSWORD: firstNode.password,
    PGDATABASE: firstNode.database,
    PGSSLMODE: firstNode.ssl ? "prefer" : undefined,
    MIGRATE_CMD: "yarn -s pg-mig",
  };
}

除非我们.. --skip-config 标记被通过, 文件 pg-microsharding.config.ts 是从当前工作目录开始在所有父文件夹中搜索 pg-microsharding 正在运行(通常您想要将其保存在工程的根上,靠近其他配置文件).

您可以导出一个正则函数,一个Async函数,甚至一个普通常态对象.

DSN和地址数据库

选项 --dsns,如果需要,应该是一个被逗号分隔的DSN列表.

另外,还可以通过复制的DSN,甚至复制的DSN:该工具会过滤出它们,并在列表中仅保留主DSN.

DSN格式示例( 部分默认来自环境变量):

  • postgresql://user:pass@hostname/db?options (所有部分都是可选的)
  • hostname:port/db (除主机名外的所有部分都是可选的)

命令行工具

这个 pg-microsharding 库包括两个部分:

  1. 一个CLI工具,允许您用微软来操纵.
  2. 一组 PostgreSQL 存储的函数可以从您的应用程序调用它们 .

显示集群布局: pg- 微硬化列表

pg-microsharding list

此动作打印出所有 PostgreSQL 岛屿(由 DNSn 指定) , microshards 和一些统计数据的列表 .

若为 --json 旗被通过,打印输出的JSON版本. 否则,会打印出一种伪图文的表示.

单位 --verbose 模式,还打印关于插入/更新/删除、索引扫描和后继扫描的详细统计数据.

分配新微硬体: pg- 微硬体分配

pg-microsharding allocate --shards=301-309 --activate=yes

此动作允许您在集群中创建更多微硬的策略. 微软由第一DSN指向的主机PostgreSQL上创建,因此完成后运行 pg-microsharding rebalance 把新计划传播到其他节点.

每个微硬可以是"活性",也可以是"活性". 当你创建它们时,你告诉工具,如果微软立即被激活(从而可见于 microsharding_list_active_shards() API)或无. 你以后总可以使用相同的精确命令(这是一等能)激活计划.

工具运行 --migrate-cmd 命令在创建不活动微软后,假定您的迁移工具将正确初始化.

移动一微硬: pg-微硬化移动

pg-microsharding move \
  --shard=42 --from=host1 --to=host2 \
  --activate-on-destination=yes \
  --max-replication-lag-sec=20

微软能从一个PostgreSQL节点移动到另一个节点. 在移动微硬时不需要停止写作:该工具使用PostgreSQL逻辑复制来流出每个微硬表的数据,最终获得快速写出锁来完成移动.

迁移行动涉及许多方面和角落,其中包括:

  • 即使对大型微硬体来说动作也很快. 该工具在内部使用与下列数据复制相同的方法: pg_dump. 首先重新创建目的地的表格结构,但大多数索引和外国关键限制除外(现阶段只创建主要关键索引或REPLICA IDENTITY索引,因为逻辑复制需要它们才能有效)。 然后,它利用内置的PostgreSQL tableync工人复制数据;这个过程很快,因为它将数据分批插入,不更新索引. 最后,该工具将产生其余的指数和外国关键制约因素(这是您可能希望增加的) 维护 工作 mem 财务报告和审定财务报表 最大 并行 维护 工人 对于您传递到 pg- 微硬化的角色, 或者使用 PGOPTIONS 环境变量,因为它直接影响索引的创建时间)。 总的来说,这种方法比起使用逻辑订阅的天真方式,由~10x加速了复制.
  • 在每一个长跑步骤上,该工具都显示一个描述性的进步信息:迄今为止复制了多少个拖累,经过了%,还剩多少时间,它执行的SQL查询是什么(动态地在控制台上更新块)等.
  • 它还显示所有实体复制源和目的地的复制滞后统计,加上临时订阅的逻辑复制滞后.
  • 默认情况下,目的地节点上的外国密钥是用 NOT VALID 条款。 这严重地加速了移动,因为我们假设出源上的外钥是有效的,我们不想花时间重新验证. 你可以通过传递来修正这种行为 --validate-fks 旗帜:动作需要更多时间.
  • 最终,该工具会激活目的地的微硬并解除源头的功能,但只有在复制后数秒的后缀下降到某些合理阈值以下(默认为20秒,但您可以通过更低的值来安全地站入一侧)时才能完成. 因此书写锁被保证只获得一瞬间.
  • 该工具在自动创建的 tmux 会话中运行全部. 如果您不小心断开, 那么只需连接回并重运行相同的命令行: 而不是运行另一个移动动作, 如果会跳回现有的会话中 .

如果你不确定,你可以不激活目的地的微硬(并且不解除源头的微硬)通过移动来练习 --activate-on-destination=no 选项。 这就像一个"干跑"模式,工具在那里完成所有的工作,除了最后一步. 目的地上移动的schema不会被激活,它也会被用一些长的描述前缀来更名(包括移动日期).

随时都可以用 ^C 中止动作. 它很安全:半移动数据会留在目的地,但微硬的图案会重现在那里的隐形等. microsharding_list_active_shards() API(见下文)。 如果您重新运行 move 行动,它从头开始.

除了印刷到控制台, move 动作还将相同的输出写入日志文件 /tmp/pg-microsharding.$uid 目录。 每个单个动作都会创建自己的文件前缀有时间戳并包括所移动的微硬数字.

清理已移动的旧副本: pg- 微硬清理

pg-microsharding cleanup

当移动一个或多个微软时,pg-microsharding不会从源主机中删除旧的复制. 取而代之的是,它重新命名了chema(使用一些带有日期的长描述前缀)并解除了它.

后来,当你确定一切进展顺利时,可以通过运行清理动作来取出这样的"备份"副本. 它具有互动性:它将告诉你它想要删除什么,并要求明确确认.

重新平衡所有岛屿: pg-微硬再平衡

pg-microsharding rebalance --activate-on-destination=yes

此动作并行运行多个"移动"子动作,使用 tmux 缩写 窗关 注意需要 tmux : 它允许在服务器上的您的 SSH 控制台被断开时恢复再平衡( 在这种情况下, 只需运行 rebalance 动作,您将“跳入”现有的会话.

在运行动作前,动作会计算出每个硬度的权重(默认情况下,权重为以字节表示的微硬表大小,由每硬"权重因子"突起;见下文). 然后,它估计,哪些微硬体需要移动到哪个岛屿,以便实现大致一致的分布. 该算法很复杂:除了其他的休克外,它试图确保每个岛屿得到的微硬体数量大致相同,大小相当(例如如果分配出100个新的空微硬体,那么再平衡将统一分布到各个岛屿上).

重新平衡计划完成后,该工具会将其打印给您并请求您的确认. 你总是可以跑 pg-microsharding rebalance 然后按下 ^C 以刚刚看到,什么 将 如果你重新平衡就会发生.

重新平衡后,结果可能如下:

在任何 tmux 面板中,您可以在任何时候中止使用 ^C 的再平衡 。 它和流产一样安全 move 行动.

从一个岛上撤离所有微硬体(退役)

pg-microsharding rebalance \
  --decommission=host2 --activate-on-destination=yes

这种"再平衡"动作模式允许您从集群中去掉一个PostgreSQL主机,甚至可以将PostgreSQL升级到下一个没有停机时间的主要版本. 它将所有微软从提供的DSN中移动出,因此主机变成了"空".

例如,退役后,结果可能类似(通知一个节点变成空):

现在,您可以将主机从集群中移除或升级为PostgreSQL,再将微硬体再平衡回(跨出不同主要PostgreSQL版本的再平衡工作精细).

微软岛体重:pg-微硬系数

pg-microsharding factor --shards=host1 --factor="*1.2"

想象一下,你拥有10个PostgreSQL岛屿, 带有再平衡的微软, 在你的监测图上,你看到一些岛屿的装载量比所有其他岛屿都多。 例如,它可能会遇到更高的CPU负载,更高的磁盘吞吐量等.

这种情况通常发生,因为一个微软变得太大,或者有些微软中有一个客户数据引起比一般客户数据更多的负载. 如果你不想过多调查这个案子,你可以通过人工"分解"从那个过载的岛屿到其他岛屿的一小部分微软来"胶带".

当你跑的时候 pg-microsharding factor --factor="*1.2",工具会人为地将每个微硬在提供的主机上的"重量"增加(在这个例子中,增加1.2,即增加20%). 然后在微硬体中记住这些信息(并显示于 list ),因此可以运行再平衡并"解散"一些微软在其他主机中. 因此,你的目标岛会变得负载较少(平均),通过多次重复这一步骤,可以实现更公平的负载分配.

"重量增加因子"在技术上被存储为SQL对微硬子计划的评论,移动时会与微硬子一起行走.

无下行时间的Schema: pg-微硬拷贝

pg-microsharding copy \
  --schema=my-schema --from=host1 --to=host2 \
  --wait \
  --max-replication-lag-sec=20

这个动作与移动动作非常相类似,但它并不解除/激活微硬体,因此它可能被用于其他常规的PostgreSQL schemas. 不同于使用常规 pg_dump 和还原,您可以继续向源主机发送信件,在动作运行时,更改最终会在目的地重放.

使用这个操作非常方便 --wait 旗帜:在这种情况下,在移除逻辑订阅之前,它会请求用户的确认,因此你有机会停止在源主机上写作,并在完成动作并移除逻辑订阅之前迅速将流量重新导向目的地.

防止复制

该工具在移动或再平衡微软时,试图不影响目的地节点的复制滞后. 等到落后下降 --max-replication-lag-sec 在运行重操作前秒(或直到用户按下Shift+S来强制继续).

另外, 如果你想让工具明确暂停, 等待用户按下 Shift+ 在启动目的地节点的硬盘前,你可以使用 --wait 选项.

构造索引创建性能

在移动或再平衡微硬体时,索引的创建可能需要相当长的时间. 你可以告诉 pg-microsharding 使用更多的内存和运行更快的路过 PGOPTIONS 与工具的环境变量, 类似于您在 psql 中如何这样做 :

PGOPTIONS="-c maintenance_work_mem=500MB -c max_parallel_maintenance_workers=4" \\
  pg-microsharding rebalance ...

您可能想要增加一些选项 :

一般来说,在这些选项中设置高值是安全的,因为这些选项只在运行查询的会话中应用,比如: CREATE INDEX ,不影响其他数据库会话/声音.

PostgreSQL 存储函数 API

这是 pg-microsharding 工具的第二部分: 一组存储的函数, 您添加到您的数据库中 .

安装到数据库

要手动安装或升级数据库中存储的函数,没有迁移工具,请运行 install 动作 :

pg-microsharding install

否则,在您的上下迁移中运行以下 SQL 文件以安装(或升级)并解开工具 :

  • sql/pg-microsharding-up.sql:安装/更新库
  • sql/pg-microsharding-down.sql:去除安装

例如:

-- mig/20250628100000.add-pg-microsharding.public.up.sql
CREATE SCHEMA microsharding;
SET search_path TO microsharding;
\ir ../pg-microsharding/sql/pg-microsharding-up.sql
-- mig/20250628100000.add-pg-microsharding.public.dn.sql
SET search_path TO microsharding;
\ir ../pg-microsharding/sql/pg-microsharding-down.sql
DROP SCHEMA microsharding;

在上述例子中,我们为库创建了分块计划,但并非强制:您也可以将其安装到计划中 public (所有API函数都有: microsharding_ 前缀).

列表 活动 shards: microsharding.list active shards ()

此函数返回当前 PostgreSQL 数据库中活动微硬策略的列表 。 当使用工具时 输入框架写在你的 Cluster 对象 :

export const cluster = new Cluster({
  shards: {
    nameFormat: "sh%04d",
    discoverQuery:
      "SELECT unnest FROM unnest(microsharding.microsharding_list_active_shards())",
  },
  ...
});

微硬调试视图

这个 microsharding_migration_after() 函数为组中的每个已磨损的表格创建所谓的“调试视图” :

SELECT microsharding.microsharding_migration_after();

比如说,你有 sh0001.users, (中文(简体) ), sh0002.users 等表格,然后创建调试视图 public.users 定义如下:

-- This is what pg-microsharding creates automatically.
CREATE VIEW public.users AS
  SELECT * FROM sh0001.users
  UNION ALL
  SELECT * FROM sh0002.users
  UNION ALL
  ...;

更甚者,如果您通过所有 PostgreSQL 主机的列表,这些主机可以在没有密码的情况下访问对方(例如它们有) /var/lib/postgresql/N/.pgpass 文件),然后这些调试视图将工作 跨越所有节点上的所有障碍,包括偏僻点 (使用时) 外国数据包 函数 :

SELECT microsharding.microsharding_migration_after('host1,host2,host3');

这么说吧 用于调试目的,可以运行查询 覆盖所有主机上的所有微硬体 在你身边 psql 届会.

当然 调试视图不适合生产流量:在PostgreSQL中跨节点通信,以及查询规划,工作效率不足. 甚至不要尝试,使用应用程序级的微硬路由,比如. 输入框架 提供.

$ psql
postgres=# SELECT shard, email FROM users
  WHERE created_at > now() - '1 hour'::interval;
-- Prints all recent users from all microshards, including
-- the microshards on other PosgreSQL nodes! Use for
-- debugging purposes only.

截止 microsharding_migration_before(),在对微硬表格应用任何更改之前,必须先拨打它:

SELECT microsharding.microsharding_migration_before();

该函数将上述调试视图全部删除。 例如,如果从表格中去掉一列,PostgreSQL将不会允许您这样做,这个一栏在任何视图中都会被提及,因此重要的是放下视图,然后重新创建.

通常,你只是打电话 microsharding_migration_before() 在您的移民前序列中,然后打电话 microsharding_migration_after() 在你的移民后步骤.

版本与发布记录

@clickup/pg-microsharding 共发布 27 个版本,首次发布于 2024/09/16;过去 12 个月发布了 1 个版本。

版本发布日期距今
2.27.1latest2026/03/117 个月前
2.24.52025/09/161.1 年前
2.24.42025/08/261.2 年前
2.24.32025/07/161.3 年前
2.24.22025/07/151.3 年前
2.24.12025/07/121.3 年前

关于 @clickup/pg-microsharding 的常见问题

@clickup/pg-microsharding 是什么?

PostgreSQL 的微软支持注意:该包已被作者标记为弃用——This package is no longer maintained

如何安装 @clickup/pg-microsharding?

在项目目录运行 npm install @clickup/pg-microsharding,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 pg-microsharding,可以用 npx pg-microsharding 直接运行。

@clickup/pg-microsharding 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@clickup/pg-microsharding 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@clickup/pg-microsharding 可以商用吗?

@clickup/pg-microsharding 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@clickup/pg-microsharding 的下载量有多少?

根据 npm 官方下载统计,@clickup/pg-microsharding 在 2026/10/10 – 2026/11/08 这 30 天内被下载 97,701 次,日均约 3,257 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@clickup/pg-microsharding 还在维护吗?

最新版本 2.27.1 发布于 2026/03/11(7 个月前);至今共发布 27 个版本,其中过去 12 个月发布了 1 个;首次发布于 2024/09/16。作者已将其标记为弃用,新项目建议寻找替代方案。