PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Das Erstellen der pg_cron-Erweiterung in docker-entrypoint-initdb.d schlägt fehl

pg_cron kann nur als gemeinsam genutzte Bibliothek geladen werden. Sie müssen es in postgres.conf angeben Datei. Da alle Skripte in docker-entrypoint-init.d werden ausgeführt, nachdem der Postgres-Server gestartet wurde (mit pg_ctl start ), alle Änderungen an shared_preload_libraries in postgres.conf kann nach dem Neustart verfügbar werden (mit pg_ctl restart ).

Beispiel aus der realen Welt:

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;

Hinweis :

  1. Die Reihenfolge der Skriptausführung ist wichtig und wird nach Dateinamen geordnet
  2. pg_cron wird in db verfügbar angegeben mit cron.database_name