我在启动过程中收到的错误是:

waiting for server to start....2024-03-13 03:20:52.400 UTC [57] FATAL:  could not access file "cron": No such file or directory

Cron可执行文件位于以下路径:

# which cron
/usr/sbin/cron

我执行了以下步骤来设置pg_cron:

Dockerfile有以下几行:

FROM docker.io/library/postgres
RUN apt-get update && \
    apt-get install -y \
    cron \
    postgresql-`postgres -V | awk '{print $3}' | awk -F. '{print $1}'`-cron

其中最后一行变成postgresql-16-cron

启动脚本/docker-Entrypoint-initdb.d/0001-pg_cron.sh包含以下行:

#!/bin/sh

# We need to append a line to the end of postgresql.conf to load the cron shared library
echo -e "shared_preload_libraries='cron'\ncron.database_name = 'mydb'" >> ${PGDATA}/postgresql.conf

# Dump the postgres.conf file for debugging
cat ${PGDATA}/postgresql.conf

# Execute pg_ctl restart so that postgres reloads the updated config file
pg_ctl restart

postgresql. conf的转储显示它的结尾确实有上面的行:

#------------------------------------------------------------------------------
# CUSTOMIZED OPTIONS
#------------------------------------------------------------------------------

# Add settings for extensions here
shared_preload_libraries='cron'
cron.database_name = 'mydb'

有没有人在最新的Postgres 16这个扩展上取得了成功?

推荐答案

GB Dockerfile

FROM docker.io/library/postgres

RUN apt-get update && \
    apt-get install -y \
    cron \
    postgresql-`postgres -V | awk '{print $3}' | awk -F. '{print $1}'`-cron

COPY setup-pg-cron.sh /docker-entrypoint-initdb.d/

ENV POSTGRES_PASSWORD "password"

GB setup-pg-cron.sh

#!/bin/bash

cat <<EOT >> /var/lib/postgresql/data/postgresql.conf
shared_preload_libraries='pg_cron'
cron.database_name='postgres'
EOT

构建并运行.

docker build -t postgres-cron . && docker run -it postgres-cron

您应该在启动日志(log)的末尾看到:

pg_cron scheduler started

Postgresql相关问答推荐

利用PostgreSQL查询中表的顺序来计算包含每次时间的时间范围

时间戳的postgreSQL-to_char如果为零,则不显示微秒

Postgres:创建分区需要很长时间

Gorm 中的更新将created_at、updated_at 作为默认时间

postgres 中的模式前缀,被调用元素的范围

从 Postgres 字段中的多个值中进行 Select

如何在 Postgres 中的列上删除唯一约束?

冲突中的 Postgres 会更新复合主键

在 PostgreSQL 中将时间转换为秒

带有双引号的 postgresql COPY 和 CSV 数据

Postgres UPDATE with ORDER BY,怎么做?

无法使用 sequelize 从本地 node 应用程序连接到 heroku postgresql 数据库

从没有行的计数中获取 0 值

在 postgresql 中将 bool 转换为 int

判断materialized视图的上次刷新时间

每个数据库提供程序类型允许的最大参数数是多少?

如果 PostgreSQL count(*) 总是很慢,如何对复杂查询进行分页?

Postgresql:备份所有表 struct ,但只备份少数数据表

如何减少存储(缩减)我的 RDS 实例?

postgresql DB中唯一键的正确数据类型是什么?