PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

la creazione dell'estensione pg_cron all'interno di docker-entrypoint-initdb.d non riesce

pg_cron può essere caricato solo come libreria condivisa. Devi specificarlo in postgres.conf file. Poiché tutti gli script in docker-entrypoint-init.d vengono eseguiti dopo l'avvio del server postgres (con pg_ctl start ), tutte le modifiche a shared_preload_libraries in postgres.conf può diventare disponibile dopo il riavvio (con pg_ctl restart ).

Esempio nel mondo reale:

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;

Avviso :

  1. L'ordine di esecuzione dello script è importante ed è ordinato in base ai nomi dei file
  2. pg_cron diventa disponibile in db specificato con cron.database_name