在现有 PostgreSQL 服务器上安装 pg_local_cache

本指南适用于 Linux 和 PostgreSQL 14–18。安装和配置需要数据库超级用户权限。将扩展加入 shared_preload_libraries 后需要重启一次 PostgreSQL。

1. 要求

从源码构建时,请使用目标服务器对应的 pg_config。应由负责管理 PostgreSQL 集群的服务或 operator 安排重启。

2. 安装软件包

从同一个 GitHub 发布版本下载适用于 PostgreSQL 主版本和系统架构的软件包及 SHA256SUMS。

Debian 和 Ubuntu

下载 postgresql-<major>-pg-local-cache_<version>-1_<arch>.deb。软件包在 Debian 12 上构建,要求 glibc 版本不低于 2.36。校验清单包含该版本的全部文件;只下载部分文件时请使用 --ignore-missing。

先验证校验和与构建来源,再安装:

sha256sum -c --ignore-missing SHA256SUMS
gh attestation verify <file>.deb --repo profundium/pg_local_cache
sudo apt install ./<file>.deb

RHEL、Rocky Linux 和 AlmaLinux 9

这些 RPM 要求使用相同主版本的 PGDG PostgreSQL。请为你的 EL 版本和 PostgreSQL 主版本启用 PGDG Yum 仓库,并先从 PGDG 安装 postgresql<major>-server。扩展 RPM 安装在 /usr/pgsql-<major>。发行版自带的 PostgreSQL 软件包使用不同的软件包名、 路径和服务名;这类服务器请按源码构建说明操作。

下载与 PostgreSQL 主版本和系统架构匹配的 .rpm。验证后安装:

sha256sum -c --ignore-missing SHA256SUMS
gh attestation verify <file>.rpm --repo profundium/pg_local_cache
sudo dnf install ./<file>.rpm

PGXN

安装 PGXN 客户端、目标 PostgreSQL 服务器的开发头文件、C 编译器和 GNU Make。请明确指定目标服务器的 pg_config;否则 PGXN 会使用 PATH 中第一个找到的版本。安装系统文件需要 root 权限。参见 PGXN install 选项。

pgxn install --pg_config /path/to/pg_config --sudo sudo pg_local_cache

从源码构建

安装目标 PostgreSQL 版本的开发头文件、C 编译器和 GNU Make。使用该版本的 pg_config 编译并安装扩展:

make PG_CONFIG=/path/to/pg_config && \
  sudo make PG_CONFIG=/path/to/pg_config install

3. 配置 postgresql.conf

保留 shared_preload_libraries 中已有的条目,并添加 pg_local_cache。将 app 替换为扩展服务的数据库名称。

配置 RESP 监听器

使用专用 worker 角色、受保护的令牌文件和原生 TLS 配置 RESP listener。以下配置通过信任客户端 CA 启用双向 TLS (mTLS)。 启用原生 RESP TLS 要求 PostgreSQL 构建时包含 OpenSSL 支持。

shared_preload_libraries = 'pg_local_cache'
pg_local_cache.database = 'app'
pg_local_cache.role = 'local_cache_worker'
pg_local_cache.port = 6380
pg_local_cache.bind_address = '10.0.0.10'
pg_local_cache.auth_token_file = '/secure/path/token'
pg_local_cache.cache_entries = 16384
pg_local_cache.memory_budget_mb = 384
pg_local_cache.tls = on
pg_local_cache.tls_cert_file = '/secure/path/resp.crt'
pg_local_cache.tls_key_file = '/secure/path/resp.key'
pg_local_cache.tls_ca_file = '/secure/path/client-ca.crt'
pg_local_cache.tls_min_protocol_version = 'TLSv1.2'
pg_local_cache.allow_plaintext_network = off

将 10.0.0.10 替换为客户端可访问的地址。TLS 默认关闭;启用时必须提供服务器证书和密钥。此配置使用 TLS 保护非 loopback RESP listener,并通过 CA 设置验证客户端证书。若只验证服务器,请将 pg_local_cache.tls_ca_file 留空并省略客户端证书。RESP TLS 与 PostgreSQL 的 ssl_* 配置独立。未启用 TLS 时,loopback 之外的 listener 必须设置 pg_local_cache.allow_plaintext_network = on;此显式选项仅限可信网络。

私钥须遵循 PostgreSQL 服务器密钥文件规则:若归 PostgreSQL 操作系统用户所有,权限为 0600;或者归 root 所有、权限为 0640,并可由服务器所属组读取。

请共同规划缓存条目数、关系状态、worker 和客户端数量,以及 memory_budget_mb。容量和内存建议见技术参考。

4. 重启 PostgreSQL

通过管理该集群的服务或 operator 执行重启。使用 systemd 时:

# Debian and Ubuntu
sudo systemctl restart postgresql@<major>-main
# RHEL, Rocky Linux, and AlmaLinux
sudo systemctl restart postgresql-<major>

使用 Patroni 时,请更新集群配置并通过 Patroni 重启:

patronictl edit-config <cluster>
patronictl restart <cluster>

在 Kubernetes 中,构建包含对应软件包的自定义 PostgreSQL 镜像,再通过 operator 部署。CloudNativePG 扩展镜像正在规划中。

5. 初始化

以数据库超级用户连接到已配置的数据库。创建扩展和专用 worker 角色,并授予其访问元数据的权限:

CREATE EXTENSION IF NOT EXISTS pg_local_cache;
CREATE ROLE local_cache_worker LOGIN NOINHERIT NOSUPERUSER
    NOCREATEDB NOCREATEROLE NOREPLICATION NOBYPASSRLS;
GRANT CONNECT ON DATABASE app TO local_cache_worker;
GRANT USAGE ON SCHEMA local_cache TO local_cache_worker;
GRANT SELECT ON TABLE local_cache.mapping TO local_cache_worker;

请将 worker 角色与应用表所有者角色分开。为每个具有受支持主键的永久表启用缓存:

关联表

SELECT local_cache.attach_table('public.items'::regclass);

检查状态

SELECT local_cache.health();

确认扩展已就绪,映射已同步。

6. 升级

从 3.0.0 升级到 3.1.0 时,请遵循升级指南。从 2.x 升级时,先按指南完成经由 3.0.0 的连续升级,再升级到 3.1.0。将应用从 SQL mget 迁移到 RESP MGET,安装对应的 3.1.0 软件包,重启 PostgreSQL, 然后在每个安装了该扩展的数据库中更新扩展:

ALTER EXTENSION pg_local_cache UPDATE;

7. 卸载

以数据库超级用户身份解除所有表的关联并删除扩展。从 shared_preload_libraries 中移除 pg_local_cache,重启 PostgreSQL,再用相应的软件包管理器卸载软件包:

SELECT local_cache.detach_table('public.items'::regclass);
DROP EXTENSION pg_local_cache;
sudo apt remove postgresql-<major>-pg-local-cache
sudo dnf remove pg_local_cache_<major>

下一步:参阅技术参考,了解 SQL、内存规划、监控和 RESP 安全性。

2.x 版本文档:https://github.com/profundium/pg_local_cache/tree/v2.0.4/docs

更新于 .