Installer pg_local_cache sur un serveur PostgreSQL existant

Installez l’extension avec un paquet Linux vérifié ou compilez-la avec la chaîne d’outils PGXS de PostgreSQL. Les deux chemins nécessitent un seul redémarrage contrôlé de PostgreSQL avant CREATE EXTENSION.

Planifiez une fenêtre de maintenance : la première activation modifie shared_preload_libraries. Conservez ses entrées existantes et ne redémarrez le bon cluster qu’après la réussite des vérifications préalables.

Choisir un chemin d’installation

Chemin Adapté à Responsable du redémarrage
Dernier binaire vérifié Cluster Linux amd64 local bootstrap pg_ctl
Binaire vérifié figé Production et opérations managées systemd, pg_ctl ou opérateur externe
Compilation source PGXS Plateforme non prise en charge ou installation PostgreSQL personnalisée Votre procédure d’exploitation habituelle

Les binaires publiés prennent en charge PostgreSQL 14-18 sous Linux amd64 avec glibc ou musl. Les exemples de version figée ci-dessous utilisent pg_local_cache 2.0.1.

Installation rapide d’un binaire

Pour un cluster local contrôlé par pg_ctl :

curl -fsSL https://github.com/profundium/pg_local_cache/releases/latest/download/install-latest.sh | bash -s -- app

Remplacez app par le nom de la base de données. Cela active le mode SQL uniquement avec pg_local_cache.port = 0.

Le bootstrap résout un seul tag de version, vérifie fetch-release.sh par rapport au SHA256SUMS de cette version, sélectionne l’archive PostgreSQL et libc correspondante, la vérifie, l’installe, redémarre, crée l’extension et exécute local_cache.health().

Si curl | bash n’est pas autorisé par votre politique, inspectez d’abord le script :

curl -fsSLO https://github.com/profundium/pg_local_cache/releases/latest/download/install-latest.sh
less install-latest.sh
bash install-latest.sh app

Installation contrôlée d’un binaire

Téléchargez une version figée avec son helper publié :

curl -fsSLO https://github.com/profundium/pg_local_cache/releases/download/v2.0.1/fetch-release.sh
bash fetch-release.sh --release-tag v2.0.1 --output-directory ./pg_local_cache-package

Exécutez les vérifications préalables, puis choisissez explicitement le responsable du redémarrage :

sudo ./pg_local_cache-package/install.sh preflight --database app
sudo ./pg_local_cache-package/install.sh install \
  --database app \
  --restart-method systemd \
  --systemd-unit postgresql@16-main

Les méthodes de redémarrage prises en charge sont systemd, pg_ctl et none. Utilisez none avec Patroni, un opérateur Kubernetes ou un autre contrôleur externe. Redémarrez via ce contrôleur, puis vérifiez :

sudo ./pg_local_cache-package/install.sh verify --database app

L’installateur affiche un répertoire d’état. Conservez-le jusqu’à la fin de la vérification ; il contient la sauvegarde en ligne nécessaire à recover.

Compiler depuis les sources

Utilisez le même pg_config que le serveur PostgreSQL cible. Installez d’abord les en-têtes de développement du serveur, un compilateur C et GNU Make.

git clone --branch v2.0.1 --depth 1 https://github.com/profundium/pg_local_cache.git
cd pg_local_cache
make PG_CONFIG=/usr/lib/postgresql/16/bin/pg_config
sudo make install PG_CONFIG=/usr/lib/postgresql/16/bin/pg_config

Compilez depuis un checkout propre afin que le binaire enregistre son commit Git. L’installation source ne copie que les fichiers de l’extension. Poursuivez avec la configuration du preload, le redémarrage et l’initialisation SQL ci-dessous.

Configurer avant le redémarrage

Configuration SQL uniquement minimale avec la capacité et le budget mémoire par défaut :

shared_preload_libraries = 'pg_local_cache'
pg_local_cache.database = 'app'
pg_local_cache.role = 'local_cache_worker'
pg_local_cache.cache_entries = 16384
pg_local_cache.memory_budget_mb = 384
pg_local_cache.port = 0

Conservez toutes les entrées existantes de shared_preload_libraries. Remplacez app par le vrai nom de la base ici et dans les GRANT SQL ci-dessous. Le budget mémoire concerne l’extension, pas l’ensemble du serveur PostgreSQL.

Dimensionnez ensemble cache_entries, les états de relations, les clients, les workers et memory_budget_mb. La vérification préalable de l’installateur binaire rejette les plans incohérents. Les compilations source nécessitent la même revue de capacité avant le redémarrage ; n’augmentez pas le nombre d’entrées sans revoir le budget mémoire.

Initialiser une installation source

Après le redémarrage, connectez-vous à la base configurée en tant que superutilisateur de base de données. Pour une première installation manuelle, exécutez :

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;

Le binaire installe ce rôle et ses privilèges de métadonnées ; ignorez ce bloc lorsque cette configuration est déjà terminée. Pour un pg_local_cache.role personnalisé, utilisez ce nom partout. Ne réutilisez pas un rôle propriétaire de tables applicatives.

Le rôle est requis même avec pg_local_cache.port = 0. L’attachement de table le valide aussi en mode SQL uniquement. Il doit être distinct du propriétaire de la table et posséder les attributs et privilèges de métadonnées ci-dessus. attach_table gère son accès à chaque table mappée. Aucun mot de passe ni écouteur réseau n’est nécessaire pour le mode SQL uniquement.

Attacher une table

Utilisez une table permanente existante avec une clé primaire prise en charge. En tant que superutilisateur de base dans la base configurée :

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

N’accordez à un rôle applicatif existant que ce dont il a besoin :

GRANT SELECT ON public.items TO app_user;
GRANT USAGE ON SCHEMA local_cache TO app_user;
GRANT EXECUTE ON FUNCTION local_cache.mget(regclass, anyarray) TO app_user;

Les SELECT ordinaires ne sont pas réécrits par l’extension.

Vérifier le remplissage à froid et le hit à chaud

SELECT local_cache.invalidate('public.items');
SELECT local_cache.mget('public.items'::regclass, ARRAY[1]::bigint[]);
SELECT local_cache.mget('public.items'::regclass, ARRAY[1]::bigint[]);
SELECT local_cache.stats();

Confirmez que local_cache.health() est prêt, que le mapping a convergé et que les compteurs du cache SQL évoluent comme prévu.

Activer RESP2 en option

RESP2 ajoute un écouteur, des processus workers et un token partagé. Il utilise le même rôle PostgreSQL dédié requis pour l’attachement des tables :

sudo ./pg_local_cache-package/install.sh preflight \
  --database app \
  --mode resp \
  --token-file /secure/path/token

sudo ./pg_local_cache-package/install.sh install \
  --database app \
  --mode resp \
  --token-file /secure/path/token \
  --restart-method systemd \
  --systemd-unit postgresql@16-main

Gardez l’écouteur sur 127.0.0.1 ou derrière un TLS authentifié. Les clients RESP partagent le rôle worker configuré et ne reçoivent pas le contexte ACL PostgreSQL propre au client SQL.

Récupérer une installation binaire échouée

Utilisez le répertoire d’état affiché par l’installateur :

sudo ./pg_local_cache-package/install.sh recover \
  --state-directory /path/printed/by/install

Ne récupérez pas après qu’un nouveau postmaster a accepté du trafic sans avoir revu l’état enregistré et l’impact opérationnel.

Dépannage

Ensuite : lisez la référence technique pour les contrats SQL, la cohérence, le dimensionnement mémoire, la supervision et la sécurité RESP.

Mis à jour .