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 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务