Instala pg_local_cache en un servidor PostgreSQL existente

Esta guía cubre Linux con PostgreSQL 14–18. La instalación y configuración requieren privilegios de superusuario de la base de datos. Añadir la extensión a shared_preload_libraries requiere reiniciar PostgreSQL una vez.

1. Requisitos

Al compilar desde el código fuente, usa el pg_config del servidor de destino. Planifica el reinicio con el servicio u operador que administre el clúster de PostgreSQL.

2. Instala un paquete

Descarga el paquete y SHA256SUMS para la versión principal de PostgreSQL y la arquitectura correspondientes desde la misma versión de GitHub.

Debian y Ubuntu

Descarga postgresql-<major>-pg-local-cache_<version>-1_<arch>.deb. Los paquetes se compilan en Debian 12 y requieren glibc 2.36 o posterior. El manifiesto enumera todos los archivos de la versión; usa --ignore-missing si solo descargas algunos.

Verifica la suma de comprobación y la procedencia de la compilación; después, instala:

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

RHEL, Rocky Linux y AlmaLinux 9

Estos RPM requieren PostgreSQL de PGDG con la misma versión principal. Configura el repositorio Yum de PGDG para tu versión de EL y la versión principal de PostgreSQL, e instala desde PGDG postgresql<major>-server antes del paquete de la extensión. El RPM se instala en /usr/pgsql-<major>. Los paquetes de PostgreSQL de la distribución usan nombres, rutas y servicios distintos; para esos servidores, sigue las instrucciones de compilación desde el código fuente.

Descarga el .rpm correspondiente a la versión principal de PostgreSQL y a la arquitectura. Verifícalo e instálalo:

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

PGXN

Instala el cliente PGXN, los encabezados de desarrollo del servidor PostgreSQL de destino, un compilador de C y GNU Make. Indica el pg_config del servidor; PGXN usa el primero que encuentra en PATH si no se indica. La fase de instalación requiere privilegios de root. Consulta las opciones de instalación de PGXN.

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

Compila desde el código fuente

Instala los encabezados de desarrollo de la versión de PostgreSQL de destino, un compilador de C y GNU Make. Compila e instala la extensión con el pg_config de esa versión:

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

3. Configura postgresql.conf

Conserva las entradas existentes de shared_preload_libraries y añade pg_local_cache. Sustituye app por el nombre de la base de datos que atenderá la extensión.

Configurar el listener RESP

Configura el listener RESP con un rol worker dedicado, un archivo de token protegido y TLS nativo. La configuración siguiente activa mTLS al confiar en una CA de cliente. TLS nativo para RESP requiere PostgreSQL compilado con soporte de 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

Sustituye 10.0.0.10 por una dirección accesible para los clientes. TLS está desactivado de forma predeterminada; para activarlo se necesitan el certificado y la clave del servidor. Esta configuración protege con TLS un listener RESP fuera de loopback y verifica certificados de cliente mediante la CA. Para usar TLS con autenticación solo del servidor, deja vacío pg_local_cache.tls_ca_file y omite los certificados de cliente. TLS para RESP es independiente de los ajustes ssl_* de PostgreSQL. Sin TLS, un listener fuera de loopback requiere pg_local_cache.allow_plaintext_network = on; limita esta opción explícita a una red de confianza.

La clave privada debe seguir la regla de PostgreSQL para claves de servidor: modo 0600 si pertenece al usuario del sistema operativo de PostgreSQL, o propiedad de root con modo 0640 y lectura para el grupo del servidor.

La clave privada debe seguir la regla de PostgreSQL para claves de servidor: modo 0600 si pertenece al usuario del sistema operativo de PostgreSQL, o propiedad de root con modo 0640 y lectura para el grupo del servidor.

Dimensiona conjuntamente las entradas de caché, los estados de relación, los workers y los clientes, además de memory_budget_mb. Consulta las recomendaciones de capacidad y memoria en la referencia técnica.

4. Reinicia PostgreSQL

Usa el servicio u operador que administra el clúster. Con systemd:

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

En Patroni, cambia la configuración del clúster y reinícialo mediante Patroni:

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

Para Kubernetes, crea una imagen de PostgreSQL personalizada que incluya el paquete correspondiente y despliega mediante tu operador. Las imágenes de extensión para CloudNativePG están previstas.

5. Inicializa

Conéctate a la base de datos configurada como superusuario de la base de datos. Crea la extensión y un rol worker dedicado; después, concédele acceso a los metadatos:

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;

Mantén el rol worker separado de los propietarios de tablas de la aplicación. Asocia cada tabla permanente con una clave primaria compatible:

Asocia una tabla

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

Comprueba el estado

SELECT local_cache.health();

Confirma que la extensión está lista y que las asociaciones están actualizadas.

6. Actualiza

Para actualizar de 3.0.0 a 3.1.0, sigue la guía de actualización. Si usas 2.x, sigue primero la ruta encadenada de la guía pasando por 3.0.0 hasta 3.1.0. Migra las aplicaciones de SQL mget a RESP MGET, instala el paquete 3.1.0 correspondiente, reinicia PostgreSQL y actualiza la extensión en cada base de datos donde esté instalada:

ALTER EXTENSION pg_local_cache UPDATE;

7. Desinstala

Desasocia todas las tablas y elimina la extensión como superusuario de la base de datos. Quita pg_local_cache de shared_preload_libraries, reinicia PostgreSQL y elimina el paquete con el gestor correspondiente:

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>

A continuación, consulta la referencia técnica sobre SQL, memoria, monitorización y seguridad de RESP.

Documentación de 2.x: https://github.com/profundium/pg_local_cache/tree/v2.0.4/docs

Actualizado .