
benastsec/postgres-pg-cron本镜像基于官方PostgreSQL数据库镜像构建,预安装并配置了pg-cron扩展。pg-cron是PostgreSQL的轻量级定时任务扩展,允许用户直接在数据库中定义、调度和管理定时执行的SQL任务,无需依赖外部调度工具(如crontab、Airflow),适用于需要数据库级定时操作的场景。
* * * * *)定义任务周期通过以下命令快速启动包含pg-cron的PostgreSQL容器:
bashdocker run -d \ --name postgres-pg-cron \ -e POSTGRES_USER=myuser \ -e POSTGRES_PASSWORD=mypassword \ -e POSTGRES_DB=mydb \ -p 5432:5432 \ -v postgres-data:/var/lib/postgresql/data \ your-image-name:tag
注意:需将
your-image-name:tag替换为实际镜像名称和标签
创建docker-compose.yml文件进行更灵活的配置:
yamlversion: '3.8' services: postgres-pg-cron: image: your-image-name:tag container_name: postgres-pg-cron environment: POSTGRES_USER: myuser POSTGRES_PASSWORD: mypassword POSTGRES_DB: mydb # 可选:设置时区(影响cron任务时间计算) TZ: Asia/Shanghai ports: - "5432:5432" volumes: - postgres-data:/var/lib/postgresql/data # 可选:挂载自定义postgresql.conf(如需调整pg-cron配置) # - ./postgresql.conf:/etc/postgresql/postgresql.conf restart: unless-stopped volumes: postgres-data:
支持官方PostgreSQL镜像的所有环境变量,核心变量说明:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
POSTGRES_USER | 超级用户名称 | postgres |
POSTGRES_PASSWORD | 超级用户密码 | 无(建议必设) |
POSTGRES_DB | 初始数据库名称 | 与POSTGRES_USER相同 |
TZ | 容器时区(影响cron任务时间) | UTC |
pg-cron默认已通过shared_preload_libraries启用,无需额外配置。如需自定义pg-cron参数(如任务日志级别),可通过挂载postgresql.conf文件调整:
ini# postgresql.conf 中pg-cron相关配置(可选) shared_preload_libraries = 'pg_cron' # 已默认配置,无需修改 cron.log_statement = 'on' # 记录任务执行日志(可选,默认'off') cron.max_running_jobs = 10 # 最大并发任务数(默认5)
连接数据库后,通过cron.schedule函数创建定时任务,语法如下:
sql-- 语法:cron.schedule(job_name, cron_expression, sql_statement) -- 示例1:每分钟执行一次数据清理 SELECT cron.schedule( 'clean-expired-data', -- 任务名称 '* * * * *', -- 每分钟执行(cron表达式) 'DELETE FROM logs WHERE created_at < NOW() - INTERVAL ''7 days''' -- 执行的SQL ); -- 示例2:每天凌晨3点生成日报表 SELECT cron.schedule( 'daily-report', '0 3 * * *', -- 每天3:00执行 'CALL generate_daily_report()' -- 执行存储过程 );
查看所有任务:
sqlSELECT * FROM cron.job;
修改任务周期:
sqlSELECT cron.alter_job('clean-expired-data', schedule => '0 */6 * * *'); -- 每6小时执行
删除任务:
sqlSELECT cron.unschedule('clean-expired-data');
通过挂载卷(如示例中的-v postgres-data:/var/lib/postgresql/data)确保数据库数据和任务配置在容器重启后不丢失。
cron模式下,容器重启后任务会自动恢复POSTGRES_USER指定的用户)可创建/管理任务,普通用户需通过GRANT授权TZ环境变量)一致,建议显式设置时区避免时间偏差cron.job_run_details表查看:
sqlSELECT * FROM cron.job_run_details WHERE jobid = (SELECT jobid FROM cron.job WHERE jobname = 'clean-expired-data') ORDER BY start_time DESC;

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务