pglite_fusion

在PG表中嵌入SQLite数据库作为数据类型

概览

扩展包名版本分类许可证语言
pglite_fusion0.0.6TYPEMITRust
ID扩展名BinLibLoadCreateTrustReloc模式
3540pglite_fusion-
相关扩展duckdb_fdw sqlite_fdw prefix semver unit pgpdf md5hash asn1oid

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.0.61817161514pglite_fusion-
RPMPIGSTY0.0.61817161514pglite_fusion_$v-
DEBPIGSTY0.0.61817161514postgresql-$v-pglite-fusion-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
el9.x86_64
el9.aarch64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
el10.x86_64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
el10.aarch64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
d12.x86_64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
d12.aarch64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
d13.x86_64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
d13.aarch64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
u22.x86_64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
u22.aarch64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
u24.x86_64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
u24.aarch64
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6
PIGSTY 0.0.6

构建

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

pig build pkg pglite_fusion         # 构建 RPM / DEB 包

安装

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

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

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

pig install pglite_fusion;          # 当前活跃 PG 版本安装
pig ext install -y pglite_fusion -v 18  # PG 18
pig ext install -y pglite_fusion -v 17  # PG 17
pig ext install -y pglite_fusion -v 16  # PG 16
pig ext install -y pglite_fusion -v 15  # PG 15
pig ext install -y pglite_fusion -v 14  # PG 14
dnf install -y pglite_fusion_18       # PG 18
dnf install -y pglite_fusion_17       # PG 17
dnf install -y pglite_fusion_16       # PG 16
dnf install -y pglite_fusion_15       # PG 15
dnf install -y pglite_fusion_14       # PG 14
apt install -y postgresql-18-pglite-fusion   # PG 18
apt install -y postgresql-17-pglite-fusion   # PG 17
apt install -y postgresql-16-pglite-fusion   # PG 16
apt install -y postgresql-15-pglite-fusion   # PG 15
apt install -y postgresql-14-pglite-fusion   # PG 14

预加载配置

shared_preload_libraries = 'pglite_fusion';

创建扩展

CREATE EXTENSION pglite_fusion;

用法

https://github.com/frectonz/pglite-fusion/blob/main/README.md

以下是一些使用示例。

-- 加载 PG 扩展
CREATE EXTENSION pglite_fusion;

-- 创建一个包含 SQLite 列的表
CREATE TABLE people (
                        name     TEXT NOT NULL,
                        database SQLITE DEFAULT init_sqlite('CREATE TABLE todos (task TEXT)')
);

-- 向 people 表中插入一行数据
INSERT INTO people VALUES ('frectonz');

-- 为 "frectonz" 创建一条待办事项
UPDATE people
SET database = execute_sqlite(
        database,
        'INSERT INTO todos VALUES (''solve multitenancy'')'
               )
WHERE name = 'frectonz';

-- 为 "frectonz" 创建一条待办事项
UPDATE people
SET database = execute_sqlite(
        database,
        'INSERT INTO todos VALUES (''buy milk'')'
               )
WHERE name = 'frectonz';

-- 查询 frectonz 的信息
SELECT
    name,
    (
        SELECT json_agg(get_sqlite_text(sqlite_row, 0))
        FROM query_sqlite(
                database,
                'SELECT * FROM todos'
             )
    ) AS todos
FROM
    people
WHERE
    name = 'frectonz';

API 文档

empty_sqlite

创建一个空的 SQLite 数据库,并将其作为二进制对象返回。可用于在 PostgreSQL 列中初始化一个空的 SQLite 数据库。

使用示例:

SELECT empty_sqlite();

query_sqlite

对存储为二进制对象的 SQLite 数据库执行 SQL 查询,并将结果以 JSON 编码的行集合形式返回。该函数适用于查询存储在 PostgreSQL 列中的 SQLite 数据库。

参数:

  • sqlite:要查询的 SQLite 数据库,以二进制对象形式存储。
  • query:要在 SQLite 数据库上执行的 SQL 查询字符串。

使用示例:

SELECT * FROM query_sqlite(
        database,
        'SELECT * FROM todos'
              );

execute_sqlite

对存储为二进制对象的 SQLite 数据库执行 SQL 语句(如 INSERTUPDATEDELETE)。更新后的 SQLite 数据库将作为二进制对象返回,以便后续继续操作。

参数:

  • sqlite:要执行 SQL 语句的 SQLite 数据库,以二进制对象形式存储。
  • query:要在 SQLite 数据库上执行的 SQL 语句。
使用示例:
UPDATE people
SET database = execute_sqlite(
        database,
        'INSERT INTO todos VALUES (''solve multitenancy'')'
               )
WHERE name = 'frectonz';

init_sqlite

创建一个 SQLite 数据库,并在其上执行指定的初始化查询。可用于初始化一个已包含所需表结构的 SQLite 数据库。

参数:

  • query:要在 SQLite 数据库上执行的 SQL 语句。
使用示例:

CREATE TABLE people (
                        name     TEXT NOT NULL,
                        database SQLITE DEFAULT init_sqlite('CREATE TABLE todos (task TEXT)')
);

get_sqlite_text

query_sqlite 返回的行中提取指定列的文本值。使用此函数可从查询结果中获取文本类型的值。

参数:

  • sqlite_rowquery_sqlite 返回的结果行。
  • index:要从行中提取的列索引。

使用示例:

SELECT get_sqlite_text(sqlite_row, 0)
FROM query_sqlite(database, 'SELECT * FROM todos');

get_sqlite_integer

query_sqlite 返回的行中提取指定列的整数值。使用此函数可从查询结果中获取整数类型的值。

参数:

  • sqlite_rowquery_sqlite 返回的结果行。
  • index:要从行中提取的列索引。

使用示例:

SELECT get_sqlite_integer(sqlite_row, 1)
FROM query_sqlite(database, 'SELECT * FROM todos');

get_sqlite_real

query_sqlite 返回的行中提取指定列的实数(浮点数)值。使用此函数可从查询结果中获取实数类型的值。

参数:

  • sqlite_rowquery_sqlite 返回的结果行。
  • index:要从行中提取的列索引。

使用示例:

SELECT get_sqlite_real(sqlite_row, 2)
FROM query_sqlite(database, 'SELECT * FROM todos');

最后修改 2026-03-08: add extension catalog (baacba6)