Ale*_*ung 3 postgresql psql docker timescaledb
如果我在文件中创建pg_cron扩展名,则dockerdocker-entrypoint-initdb.d/init.sql映像将无法运行,docker logs <id>只会显示“没有这样的容器”。这是相关的 .sql 片段:
CREATE DATABASE my_database;
\c my_database;
CREATE EXTENSION IF NOT EXISTS postgis CASCADE;
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
CREATE EXTENSION IF NOT EXISTS pg_cron CASCADE;
Run Code Online (Sandbox Code Playgroud)
但是,如果我在 docker run 命令完成后创建 pg_cron 扩展(即删除上面的最后一行并psql --file在docker run完成后单独运行它),扩展将成功创建(无论如何,postgis 和 timescaledb 扩展似乎都很好)。
有什么原因我不能创建 pg_cron 扩展docker-entrypoint-init.d吗?有正确的地方吗?
我的 docker run 命令如下:
docker run -d \
--name my_container --rm \
-p 5432:5432 \
-clog_line_prefix="%m [%p]: [%l-1] %u@%d" \
-clog_error_verbosity=VERBOSE \
-cshared_preload_libraries='timescaledb,pg_cron' \
-ccron.database_name='my_database'
Run Code Online (Sandbox Code Playgroud)
小智 5
pg_cron只能作为共享库加载。您必须在postgres.conf文件中指定它。由于所有脚本 indocker-entrypoint-init.d都是在 postgres 服务器启动(使用pg_ctl start)之后执行的,因此所有对shared_preload_librariesin 的更改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
Run Code Online (Sandbox Code Playgroud)
003-main.sql :
CREATE EXTENSION pg_cron;
Run Code Online (Sandbox Code Playgroud)
注意:
pg_cron在指定的数据库中可用cron.database_name| 归档时间: |
|
| 查看次数: |
2713 次 |
| 最近记录: |