pg_cron
може да се зарежда само като споделена библиотека. Трябва да го посочите в postgres.conf
файл. Тъй като всички скриптове в docker-entrypoint-init.d
се изпълняват след стартиране на postgres сървъра (с pg_ctl start
), всички промени в shared_preload_libraries
в postgres.conf
може да стане достъпен след рестартиране (с pg_ctl restart
).
Пример от реалния свят:
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;
Забележка :
- редът на изпълнение на скрипта има значение и се подрежда по имена на файлове
pg_cron
става наличен в db посочено сcron.database_name