@ fjall/ 点击之家
用于 ClickHouse 迁移容器的运行时间助手 。 计算用户列表 @fjall/components-infrastructure ClickHouseDatabase 可写字的用户 users_local 存储。 此外,还有一艘通用的SQL档案跑车和一个连接-复线助手.
安装
npm install @fjall/clickhouse @clickhouse/client
@clickhouse/client 是同级依赖——消费者提供运行时间客户端.
合同
框架的承诺是外形,而不是这个包的API. 一个客户滚动 他们自己的消费者读 相同的env vars.
| 新闻 var | 形状 | 制作人 |
|---|---|---|
CLICKHOUSE_MANAGED_USERS | 贾森 Array<string> 用户名 | ClickHouseDatabase.getMigrationContributions() |
USER_<NAME>_PASSWORD | 简文(每个管理下的用户输入一个) | ECS 执行Role + 秘密管理器( 无运行时间 SDK 调用) |
清单中只载有姓名——不包含SML定义的chema admin(XML定义),配置绑定是客户SQL的工作(ALTER USER <name> SETTINGS PROFILE '<profile>') (中文(简体) ).
常数名称 + env-name 帮助者 + schema 活在其中 @fjall/util/migration数字 :
import {
CLICKHOUSE_MANAGED_USERS_ENV,
ManagedUserNamesSchema,
userPasswordEnvName,
} from "@fjall/util/migration";
这批货为了方便而再出口,这样消费者就不需要两批进口了.
使用量
import {
connectWithRetry,
createConsoleMigrationLogger,
createFjallClickHouseClient,
provisionUsersFromEnv,
runSqlMigrations,
} from "@fjall/clickhouse";
const logger = createConsoleMigrationLogger("migration-runner");
const client = createFjallClickHouseClient({
url,
username,
password,
database,
});
await connectWithRetry(client, { label: "user-provision", logger });
await provisionUsersFromEnv({ client, logger });
await runSqlMigrations({ client, dir: "./clickhouse-init", logger });
用 createFjallClickHouseClient。它安装 FjallClickHouseLogger 在WARN,它写每个客户端的日志记录通过 @fjall/util作为组件下的一个遮盖线的日志 ClickHouseClient。一个失败的请求的记录名称是服务器的错误代码,其类,对于这个软件包所知道的代码,其类型,从不引用服务器的消息:该消息可以引用失败的语句及其字面值. 带有请求或答复内容的论据为: [withheld: content],无论它持有: 论点 @clickhouse/client 1.1.8.至 1.24.1 用于语句,请求的URL参数及其约束值,请求或响应头,以及错误消息(读作2026-10-13). 带终端控制序列打印为 [withheld: control characters],而一个带有一个钥匙的争论,或者一个角色JSON写作逃跑,则被忽略. @clickhouse/client属于自己的 createClient 使用其 DefaultLogger,将原始错误和请求的参数打印到控制台;其默认关卡为 @clickhouse/client-common 1.1.8.0和WARN from 1.18.1(读作2026-10-13). 如果你自己打造客户端,通过 log: { LoggerClass: FjallClickHouseLogger, level: ClickHouseLogLevel.WARN },说明关卡,以使对等区域中没有任何版本放弃警告.
一条路在任何伐木者无法到达的地方 当流中的值流 insert 失败, @clickhouse/client (每次释放1.1.8至1.2.4.1, pipelineCb 内 dist/utils/encoder.js,读取 2026-10-13 打印出溪流错误到 console.error 本身,原始, 任何安装的日志。 这个错误是呼叫者自己提出的流; 或者是编译一行扔入的,在客户端的 JSON.stringify 或在一个 json.stringify 您已经提供(a) BigInt, 圆形行, 其信息名称为 财产, 或 其自己的行 toJSON 投掷);或固定节点出错(一个 AbortError,或 socket hang up)当上传被切短或时间被切出. 破坏一个没有行数据的错误的值流, 并且只写入编码的行 .
provisionUsersFromEnv 有能有能 有能有能有能有能有能 CREATE USER IF NOT EXISTS 接下来 ALTER USER 对于每一个明显的入口, 所以反复引用是安全的.
滚出你自己的消费者
上面的Env-var合同是稳定的. 更喜欢自己提供食材的顾客会读取同一种env vars;这个包裹的助手是便利包装. 框架致力于地洞形状,而不是这个包.
如果滚动自己的,你会想复制:
- 单引出密码文字
'→''在字符串插入之前IDENTIFIED WITH … BY '…' - 任何日志输出中的口令( 使用)
maskSensitiveOutput从@fjall/util(中文(简体) ) - 顺序
CREATE USER IF NOT EXISTS在此之前ALTER USER因此,重新提供 调整漂移的证书 - 在任何移出-随机电磁门前提供设备
- 字符串插入 SQL 之前的 regex- 校验用户名( CH 不绑定标识参数)
许可证
专有——见 自由主义。 。 。 .