lolor

lolor

lolor : Logical-replication-friendly replacement for PostgreSQL large objects

Overview

ID Extension Package Version Category License Language
9570
lolor
lolor
1.2.2
ETL
PostgreSQL
C
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--s-dt-
No
Yes
No
Yes
no
yes
Relationships
Schemas lolor
See Also
spock
snowflake

works on pgedge kernel fork. Requires lolor.node

Packages

Type Repo Version PG Major Compatibility Package Pattern Dependencies
EXT
PIGSTY
1.2.2
18
17
16
15
14
lolor -
RPM
PIGSTY
1.2.2
18
17
16
15
14
lolor_$v pgedge_$v
DEB
PIGSTY
1.2.2
18
17
16
15
14
pgedge-$v-lolor pgedge-$v
Linux / PG PG18 PG17 PG16 PG15 PG14
el8.x86_64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
el8.aarch64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
el9.x86_64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
el9.aarch64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
el10.x86_64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
el10.aarch64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
d12.x86_64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
d12.aarch64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
d13.x86_64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
d13.aarch64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
u22.x86_64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
u22.aarch64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
u24.x86_64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
u24.aarch64
MISS
PIGSTY 1.2.2
MISS
MISS
MISS
Package Version OS ORG SIZE File URL
lolor_17 1.2.2 el8.x86_64 pigsty 29.4 KiB lolor_17-1.2.2-1PIGSTY.el8.x86_64.rpm
lolor_17 1.2.2 el8.aarch64 pigsty 28.5 KiB lolor_17-1.2.2-1PIGSTY.el8.aarch64.rpm
lolor_17 1.2.2 el9.x86_64 pigsty 28.6 KiB lolor_17-1.2.2-1PIGSTY.el9.x86_64.rpm
lolor_17 1.2.2 el9.aarch64 pigsty 27.8 KiB lolor_17-1.2.2-1PIGSTY.el9.aarch64.rpm
lolor_17 1.2.2 el10.x86_64 pigsty 28.8 KiB lolor_17-1.2.2-1PIGSTY.el10.x86_64.rpm
lolor_17 1.2.2 el10.aarch64 pigsty 28.0 KiB lolor_17-1.2.2-1PIGSTY.el10.aarch64.rpm
pgedge-17-lolor 1.2.2 d12.x86_64 pigsty 16.6 KiB pgedge-17-lolor_1.2.2-1PIGSTY~bookworm_amd64.deb
pgedge-17-lolor 1.2.2 d12.aarch64 pigsty 15.9 KiB pgedge-17-lolor_1.2.2-1PIGSTY~bookworm_arm64.deb
pgedge-17-lolor 1.2.2 d13.x86_64 pigsty 16.7 KiB pgedge-17-lolor_1.2.2-1PIGSTY~trixie_amd64.deb
pgedge-17-lolor 1.2.2 d13.aarch64 pigsty 15.9 KiB pgedge-17-lolor_1.2.2-1PIGSTY~trixie_arm64.deb
pgedge-17-lolor 1.2.2 u22.x86_64 pigsty 18.1 KiB pgedge-17-lolor_1.2.2-1PIGSTY~jammy_amd64.deb
pgedge-17-lolor 1.2.2 u22.aarch64 pigsty 17.3 KiB pgedge-17-lolor_1.2.2-1PIGSTY~jammy_arm64.deb
pgedge-17-lolor 1.2.2 u24.x86_64 pigsty 17.8 KiB pgedge-17-lolor_1.2.2-1PIGSTY~noble_amd64.deb
pgedge-17-lolor 1.2.2 u24.aarch64 pigsty 17.0 KiB pgedge-17-lolor_1.2.2-1PIGSTY~noble_arm64.deb

Source

pig build pkg lolor;		# build rpm/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install this extension with pig:

pig install lolor;		# install via package name, for the active PG version

pig install lolor -v 17;   # install for PG 17

Create this extension with:

CREATE EXTENSION lolor;

Usage

lolor: Logical-replication-friendly replacement for PostgreSQL large objects

Makes PostgreSQL large objects compatible with logical replication by storing them in non-catalog tables.

Enabling

CREATE EXTENSION lolor;

Configure the node identifier in postgresql.conf:

lolor.node = 1  -- unique node ID (1 to 2^28)

Optionally adjust the search path:

SET search_path = lolor, "$user", public, pg_catalog;

Large Object Operations

Once installed, the standard lo_* functions are redirected to use lolor’s tables:

-- Create a large object
SELECT lo_create(0);

-- Import a file into a large object
SELECT lo_import('/path/to/file.bin');

-- Export a large object to a file
SELECT lo_export(oid, '/path/to/output.bin');

-- Open, read, write, seek, close
SELECT lo_open(oid, x'40000'::int);  -- INV_WRITE
SELECT lowrite(fd, 'data'::bytea);
SELECT loread(fd, 1024);
SELECT lo_close(fd);

-- Delete a large object
SELECT lo_unlink(oid);

Replication Setup

Add lolor tables to your replication set:

-- For spock/pgedge replication
SELECT spock.repset_add_table('default', 'lolor.pg_largeobject');
SELECT spock.repset_add_table('default', 'lolor.pg_largeobject_metadata');

Internal Tables

The extension manages large objects in:

  • lolor.pg_largeobject - stores object data chunks
  • lolor.pg_largeobject_metadata - stores object metadata

Limitations

  • Native PostgreSQL large object functionality cannot be used while lolor is active
  • Migration of existing native large objects to lolor is not supported
  • ALTER LARGE OBJECT, GRANT ON LARGE OBJECT, COMMENT ON LARGE OBJECT, and REVOKE ON LARGE OBJECT are not supported
  • Requires PostgreSQL 16 or newer
Last updated on