PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

la création de l'extension pg_cron dans docker-entrypoint-initdb.d échoue

pg_cron peut être chargé uniquement en tant que bibliothèque partagée. Vous devez le spécifier dans postgres.conf dossier. Depuis tous les scripts dans docker-entrypoint-init.d sont exécutés après le démarrage du serveur postgres (avec pg_ctl start ), toutes les modifications apportées à shared_preload_libraries dans postgres.conf peut devenir disponible après redémarrage (avec pg_ctl restart ).

Exemple concret :

002-setup.sh :

#!/bin/sh

# Remove last line "shared_preload_libraries='citus'"
sed -i '$ d' ${PGDATA}/postgresql.conf

cat <<EOT >> ${PGDATA}/postgresql.conf
shared_preload_libraries='pg_cron,citus'
cron.database_name='${POSTGRES_DB:-postgres}'
EOT

# Required to load pg_cron
pg_ctl restart

003-main.sql :

CREATE EXTENSION pg_cron;

Avis :

  1. l'ordre d'exécution des scripts est important et est trié par noms de fichiers
  2. pg_cron devient disponible dans db spécifié avec cron.database_name