@b4run/ postgres- 存储
支持Postgres持续使用B4. 运行的检查站、代理协议线条以及跨应用程序的许可.
当 : 你正在用共享的Postgres 来取代 B4.run 本地的耐用商店.
安装
pnpm add @b4run/postgres-storage pg
示例
import { Pool } from "pg"
import { createPostgresThreadsStore } from "@b4run/postgres-storage"
const pool = new Pool({ connectionString: process.env.DATABASE_URL })
const threadsStore = createPostgresThreadsStore({ pool })
await threadsStore.ready()
// During application shutdown:
await threadsStore.close()
await pool.end()
每个商店都接受 schema (默认) public和 tablePrefix (默认) b4),所以数个
应用程序或部署环境可以共享一个数据库。 两者都必须是小写 SQL
匹配标识符 ^[a-z_][a-z0-9_]*$;如果需要的话,移民通行证会创造出计划。 通过
检查器、线程存储和权限存储的值相同。 应用软件
b4 build 联 合 国 hono 或者说 vercel 目标通过 B4_PG_SCHEMA 财务报告和审定财务报表
B4_PG_TABLE_PREFIX 运行时间绑定代替.
运行时间和稳定性
@b4run/postgres-storage是一个支持的边缘安全应用表面,需要注入结构池。 被测试的边缘路径是当地工人用一个Neon WebSocket游泳池;这不是对每个边缘主机的声称.@b4run/postgres-storage/node是一个支持的仅节点应用程序表面,可创建pg连接字符串中的池.
移民是每个商店的记忆。 除非 ownsPool: true;由节点条目创建的池是商店拥有的. 在应用程序关闭期间关闭商店和呼叫者拥有的集合.
请求范围运行录用
createPostgresRunAdmission({ pool }) 协调一个线程的归属
复制品。 每个请求创建一个实例, 初始化其 ready() 方法,以及
通过它 pool 用于该请求所用的每个运行时间商店。 初始化和
授权查询可在获得之前进行。 打电话 tryAcquire(threadId)
在读取决定运行或接受回调的检查点之前
答对. A 类 false 结果意味着另一个请求拥有线程并可能被重审.
已获取实例拒绝不同的线索; 释放和所有权损失为
终端。 等着 release() 完成或使用
close() 同时关闭这个实例所拥有的一个池。 来电供应的游泳池留下来
打开,除非 ownsPool 已经设定。 节点条目也接受 connectionString。 。 。 .
违约租约为30秒,每10秒续约. leaseDurationMs 财务报告和审定财务报表
heartbeatIntervalMs 接受正整数毫秒;心跳必须是
短于租赁。 过期并更新使用数据库时钟. 观察
signal 在所有权丧失或解除后停止工作。 过期的拥有者不能
更新或承诺运行时间存储写入, 即使在另一个请求接管之后 .
这种协调并不能提供准确的外部工具效应.
一旦获得, pool.query() 在短边栏中执行一个语句
交易. pool.connect() 进一步支持明确 BEGIN (或
START TRANSACTION, (中文(简体) ), COMMIT (或 END),以及 ROLLBACK,带有可选跟踪
分号。 嵌入式交易、保存点、交易控制修改器,以及
在有栅栏的查询中拒绝多个语句。 SQL 文字和评论
可能包含分号。 栅栏 SQL 接受诸如 $1· ;
通过这些参数传递数据。 位置参数以外的美元标志
sQL 文本中的标记和后鞭被拒绝,包括美元引用
字符串和美元标识符。 界值可能包含这些字符.
这个故意限制的 SQL 子集为运行时商店服务; 它不是一个
任意 SQL 执行接口。 围绕个人完成这些交易
存储操作; 不要通过模型生成来保存它们。 一个同步客户端
release() 在提供基础连接之前完成回滚
用于再利用。 释放或失去的入院治疗从未恢复无栅栏进入.
对于自定义的节点取入嵌入,请使用其有栅栏的商店返回录入
从 requestStores迁移 全部 由于活动
栅栏故意拒绝多报表迁移批次。 时间到了
在实际执行清理后,在授权后提出索偿要求并最后确定所有权.
生成 Vercel/ Hono 输出自动提供此接线 .
import {
createPostgresClientToolCallStore,
createPostgresPermissionsStore,
createPostgresPool,
createPostgresRunAdmission,
createPostgresThreadsStore,
postgresCheckpointer,
} from "@b4run/postgres-storage/node"
const requestStores = async () => {
const pool = createPostgresPool({ connectionString: process.env.DATABASE_URL })
try {
const runAdmission = createPostgresRunAdmission({ pool })
const naming = { pool: runAdmission.pool }
const stores = {
checkpointer: postgresCheckpointer(naming),
clientToolStore: createPostgresClientToolCallStore(naming),
permissionsStore: createPostgresPermissionsStore(naming),
threadsStore: createPostgresThreadsStore(naming),
}
await Promise.all([runAdmission.ready(), ...Object.values(stores).map((store) => store.ready())])
return {
...stores,
runAdmission,
dispose: async () => {
try { await runAdmission.close() } finally { await pool.end() }
},
}
} catch (error) {
await pool.end()
throw error
}
}
这个栅栏可以围住注入的检查站,线程,权限,以及客户端工具商店.
单独配置的内存和靴子自有的审批赠与商店不包接.
现有管理下的工作空间限制 requestStores 现予保留.
进程本地运行的登记册仍然是不共享嵌入的默认值
允许; 仅共享 Postgres 数据并不能提供执行排除.
相关
- Postgres 存储 API 引用 确切的选择、商店和生命周期.
- 持久性和租赁性 ——应用配置和部署指导.
@b4run/sqlite-storage——当地SQLite坚持.@b4run/permissions——许可存储合同.
成熟和支持
B4.run为1.0前置,其公用地表可以改变. 所有可公布的 B4. 运行包作为一个固定组一起发布; 审查 @b4run/postgres-storage 更改日志 财务报告和审定财务报表 升级指南 升级前。 用于支持, 使用 GitHub 讨论; 报告缺陷 GitHub 问题。 。 。 .
许可证
麻省理工学院. 见 仓库许可证。 。 。 .