pglite_fusion
在PG表中嵌入SQLite数据库作为数据类型
仓库
frectonz/pglite-fusion
https://github.com/frectonz/pglite-fusion
源码
pglite-fusion-0.0.6.tar.gz
pglite-fusion-0.0.6.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pglite_fusion | 0.0.6 | TYPE | MIT | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 3540 | pglite_fusion | 否 | 是 | 是 | 是 | 否 | 否 | - |
| 相关扩展 | duckdb_fdw sqlite_fdw prefix semver unit pgpdf md5hash asn1oid |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.0.6 | 1817161514 | pglite_fusion | - |
| RPM | PIGSTY | 0.0.6 | 1817161514 | pglite_fusion_$v | - |
| DEB | PIGSTY | 0.0.6 | 1817161514 | postgresql-$v-pglite-fusion | - |
构建
您可以使用 pig build 命令构建 pglite_fusion 扩展的 RPM / DEB 包:
pig build pkg pglite_fusion # 构建 RPM / DEB 包
安装
您可以直接安装 pglite_fusion 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
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 语句(如 INSERT、UPDATE 或 DELETE)。更新后的 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_row:query_sqlite返回的结果行。index:要从行中提取的列索引。
使用示例:
SELECT get_sqlite_text(sqlite_row, 0)
FROM query_sqlite(database, 'SELECT * FROM todos');
get_sqlite_integer
从 query_sqlite 返回的行中提取指定列的整数值。使用此函数可从查询结果中获取整数类型的值。
参数:
sqlite_row:query_sqlite返回的结果行。index:要从行中提取的列索引。
使用示例:
SELECT get_sqlite_integer(sqlite_row, 1)
FROM query_sqlite(database, 'SELECT * FROM todos');
get_sqlite_real
从 query_sqlite 返回的行中提取指定列的实数(浮点数)值。使用此函数可从查询结果中获取实数类型的值。
参数:
sqlite_row:query_sqlite返回的结果行。index:要从行中提取的列索引。
使用示例:
SELECT get_sqlite_real(sqlite_row, 2)
FROM query_sqlite(database, 'SELECT * FROM todos');