pg_map

pg_lake 内置并依赖的 PostgreSQL Map 数据类型。

概览

扩展包名版本分类许可证语言
pg_lake3.4OLAPApache-2.0C
ID扩展名BinLibLoadCreateTrustReloc模式
2560pg_lakelake
2561pg_extension_baseextension_base
2562pg_extension_updaterextension_updater
2563pg_mapmap_type
2564pg_lake_engine__lake__internal__nsp__
2565pg_lake_iceberglake_iceberg
2566pg_lake_table__pg_lake_table_writes
2567pg_lake_copypg_catalog
相关扩展
下游依赖pg_lake_engine

This packaged provider is Snowflake pg_lake pg_map 3.4, not the unrelated semenikhind/pg_map 1.0 array-mapping extension. The catalog name is unique, so the packaged provider supersedes that source-only row and is reassigned with the pg_lake family to OLAP ID 2563. Extension SQL/control version is 3.4; source and DEB/RPM package version is 3.4.0.

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY3.41817161514pg_lake-
RPMPIGSTY3.4.01817161514pg_lake_$v-
DEBPIGSTY3.4.01817161514postgresql-$v-pg-lake-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64N/AN/AN/AN/AN/A
el8.aarch64N/AN/AN/AN/AN/A
el9.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
el9.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
el10.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
el10.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d12.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d12.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d13.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d13.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u22.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u22.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u24.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u24.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u26.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u26.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A

构建

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

pig build pkg pg_lake         # 构建 RPM / DEB 包

安装

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

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

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

pig install pg_lake;          # 当前活跃 PG 版本安装
pig ext install -y pg_lake -v 18  # PG 18
pig ext install -y pg_lake -v 17  # PG 17
pig ext install -y pg_lake -v 16  # PG 16
dnf install -y pg_lake_18       # PG 18
dnf install -y pg_lake_17       # PG 17
dnf install -y pg_lake_16       # PG 16
apt install -y postgresql-18-pg-lake   # PG 18
apt install -y postgresql-17-pg-lake   # PG 17
apt install -y postgresql-16-pg-lake   # PG 16

创建扩展

CREATE EXTENSION pg_map;

用法

来源:

pg_map 从 PostgreSQL 类型生成强类型键值对映射域。生成的映射是一个复合键值对数组,具有特定类型的提取、基数、条目和操作符函数。它被 pg_lake 用于嵌套数据,也可以直接使用。

创建并使用一个映射类型

CREATE EXTENSION pg_map;

-- Requires a privileged role; PUBLIC execution is revoked.
SELECT map_type.create('text', 'integer');
-- map_type.key_text_val_int

构造一个值并通过生成的函数或 -> 操作符读取:

SELECT map_type.extract(
    '{"(me,1)","(myself,2)","(i,3)"}'::map_type.key_text_val_int,
    'i'
);
-- 3

SELECT
    '{"(me,1)","(myself,2)","(i,3)"}'::map_type.key_text_val_int
    -> 'myself';
-- 2

SELECT key, value
FROM map_type.entries(
    '{"(me,1)","(myself,2)","(i,3)"}'::map_type.key_text_val_int
);

生成的 API

  • map_type.create(keytype regtype, valtype regtype, typname text default null): 以幂等方式创建或返回键/值对的映射类型。
  • map_type.extract(map, key) 和生成的 map -> key:返回指定键的值。
  • map_type.cardinality(map): 返回条目数量。
  • map_type.entries(map): 将映射扩展为 key, value 行。
  • 生成的名称通常遵循 map_type.key_<keytype>_val_<valuetype>;当需要受控名称时,请提供 typname

类型和生命周期注意事项

  • 数组类型不能用作映射键。支持数组值和嵌套生成的映射类型。
  • 调用 map_type.create 会创建 PostgreSQL 类型、函数和操作符。将其视为模式 DDL 并在迁移中运行,而不是每次请求代码中运行。
  • 生成的对象作为 pg_map 的依赖项进行注册;当使用 CASCADE 删除扩展时,它们及其依赖的列可能会被移除。
  • 映射值使用 PostgreSQL 复合数组语法。重复键和排序语义应根据应用程序选择的构建路径进行测试,而不是假设来自 JSON 对象。
  • 版本 3.4 相对于 3.3 没有更改映射 SQL API。