
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本镜像基于官方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 \ docker.xuanyuan.run/your-image-name:tag
注意:需将
your-image-name:tag替换为实际镜像名称和标签
创建docker-compose.yml文件进行更灵活的配置:
yamlversion: '3.8' services: postgres-pg-cron: image: docker.xuanyuan.run/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;
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务