sql >> Database >  >> RDS >> PostgreSQL

het maken van de pg_cron-extensie binnen docker-entrypoint-initdb.d mislukt

pg_cron kan alleen worden geladen als gedeelde bibliotheek. Je moet het specificeren in postgres.conf het dossier. Aangezien alle scripts in docker-entrypoint-init.d worden uitgevoerd nadat de postgres-server is gestart (met pg_ctl start ), alle wijzigingen in shared_preload_libraries in postgres.conf kan beschikbaar worden na herstart (met pg_ctl restart ).

Voorbeeld uit de echte wereld:

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;

Opmerking :

  1. volgorde van scriptuitvoering is van belang en wordt geordend op bestandsnaam
  2. pg_cron komt beschikbaar in db gespecificeerd met cron.database_name


  1. CSV importeren naar MySQL

  2. Update een MySQL-tabel met waarden van een andere

  3. Complexe WordPress-query met meerdere query's

  4. Oracle inconsistent prestatiegedrag van query