跳转到主要内容

lolor

让 PostgreSQL 大对象兼容逻辑复制的扩展

概览

扩展包名版本分类许可证语言
lolor1.2.2ETLPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
9580lolor否是否是是否lolor

works on pgedge kernel fork. Requires lolor.node

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY1.2.21817161514lolor-
RPMPIGSTY18.61817161514pgedge-$v-
DEBPIGSTY18.61817161514pgedge-$v-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64N/A
el8.aarch64N/A
el9.x86_64N/A
el9.aarch64N/A
el10.x86_64N/A
el10.aarch64N/A
d12.x86_64N/A
d12.aarch64N/A
d13.x86_64N/A
d13.aarch64N/A
u22.x86_64N/A
u22.aarch64N/A
u24.x86_64N/A
u24.aarch64N/A
u26.x86_64N/A
u26.aarch64N/A

构建

您可以使用 pig build 命令构建 lolor 扩展的 RPM / DEB 包:

pig build pkg lolor         # 构建 RPM / DEB 包

安装

您可以直接安装 lolor 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

安装
pig install lolor;          # 当前活跃 PG 版本安装
pig
pig ext install -y lolor -v 18  # PG 18
pig ext install -y lolor -v 17  # PG 17
pig ext install -y lolor -v 16  # PG 16
pig ext install -y lolor -v 15  # PG 15
dnf
dnf install -y pgedge-18       # PG 18
dnf install -y pgedge-17       # PG 17
dnf install -y pgedge-16       # PG 16
dnf install -y pgedge-15       # PG 15
apt
apt install -y pgedge-18   # PG 18
apt install -y pgedge-17   # PG 17
apt install -y pgedge-16   # PG 16
apt install -y pgedge-15   # PG 15

创建扩展:

CREATE EXTENSION lolor;

用法

来源:

配置并启用

在创建大对象前,为每个写入节点分配不同的非零 lolor.node;上游文档规定范围为 1 到 2^28。配置服务参数,并在每个参与的数据库中创建扩展:

lolor.node = 1
CREATE EXTENSION lolor;
SET search_path = lolor, "$user", public, pg_catalog;

控制文件固定使用 lolor 模式,声明为可信安装,且不允许重定位。上游 README 要求 PostgreSQL 16 或更新版本;当前 Pigsty pgEdge 组合包另外通过了 15–18 的构建测试,但这一打包结果不能证明任意原版 PostgreSQL 15 安装都受支持。

大对象工作流

WITH created AS (
  SELECT lo_from_bytea(0, convert_to('example data', 'UTF8')) AS oid
)
SELECT oid, convert_from(lo_get(oid), 'UTF8') AS contents FROM created;

lo_create()、lo_get()、lo_put() 和 lo_unlink() 等标准调用使用替换后的函数。通过 lo_open()、loread()、lowrite() 和 lo_close() 进行描述符访问时,必须保持在同一个事务内。文件导入和导出操作的是服务端路径,仍受相应函数与文件系统权限限制。

扩展使用 lolor.pg_largeobject 和 lolor.pg_largeobject_metadata 两张表;原来的系统目录函数会改名保留,使禁用或移除扩展时能够恢复原生函数名称。

复制

已有 Spock 复制集时,将两张表都纳入:

SELECT spock.repset_add_table('default', 'lolor.pg_largeobject');
SELECT spock.repset_add_table('default', 'lolor.pg_largeobject_metadata');

在所有节点安装兼容版本,并协调节点标识符与对象所有权。仅创建扩展不会建立逻辑复制拓扑。

升级与边界

1.2.2 修复扩展升级和数据库大版本升级行为,并新增 lolor.disable()、lolor.enable() 和 lolor.is_enabled()。应当 先更新 lolor,再运行 pg_upgrade;该修复不会追溯修复已经用旧扩展文件尝试的大版本升级:

ALTER EXTENSION lolor UPDATE TO '1.2.2';
SELECT lolor.is_enabled();

禁用操作改变当前生效的原生函数名称,不会迁移已存储的大对象。上游不提供原生大对象迁移功能;启用 lolor 时,原生大对象功能和 lolor 存储不能混用。上游不支持 ALTER LARGE OBJECT、GRANT ON LARGE OBJECT、COMMENT ON LARGE OBJECT 和 REVOKE ON LARGE OBJECT。应为两张普通表安排备份、恢复与复制。

这个页面对您有帮助吗?