
huntress/postgres-partman本镜像基于官方PostgreSQL数据库构建,预安装并配置了pg_partman扩展。pg_partman是一款强大的表分区管理工具,专为简化PostgreSQL表分区(尤其是时间序列数据)的创建、维护和自动化管理而设计,支持自动分区创建、过期分区清理、分区模板定制等功能,适用于需要高效管理大量时序数据或大型分区表的场景。
使用以下命令启动容器,映射端口并设置数据库密码:
bashdocker run -d \ --name pg-partman-db \ -e POSTGRES_PASSWORD=StrongPassword123 \ -e POSTGRES_USER=dbadmin \ -e POSTGRES_DB=timeseries_db \ -p 5432:5432 \ postgres-with-pg_partman:latest
容器启动后,通过psql连接数据库并启用扩展(首次使用需执行):
bash# 进入容器 docker exec -it pg-partman-db psql -U dbadmin -d timeseries_db # 在数据库中启用pg_partman CREATE EXTENSION pg_partman;
以按天分区的日志表为例,创建自动维护的分区结构:
sql-- 创建父表(注意:父表需为未分区表,由pg_partman管理分区) CREATE TABLE metrics ( id SERIAL, metric_name TEXT, value NUMERIC, recorded_at TIMESTAMPTZ NOT NULL ); -- 使用pg_partman创建时间序列分区(按天分区,保留30天数据,提前创建7天分区) SELECT partman.create_parent( p_parent_table => 'public.metrics', -- 父表名 p_control => 'recorded_at', -- 分区控制字段(时间类型) p_type => 'time', -- 分区类型(time/list/range) p_interval => 'daily', -- 分区间隔(hourly/monthly等) p_retention := '30 days', -- 保留30天数据 p_premake := 7 -- 提前创建7天的未来分区 );
pg_partman依赖定期执行维护函数以创建/清理分区,推荐通过以下方式配置:
方式1:使用cron任务(需容器内安装cron)
bash# 在容器内添加cron任务(每天凌晨2点执行维护) echo "0 2 * * * psql -U dbadmin -d timeseries_db -c 'SELECT partman.run_maintenance();'" | crontab -
方式2:使用pg_cron扩展(若已安装)
sql-- 创建定时任务(每小时执行一次维护) SELECT cron.schedule( 'pg_partman_maintenance', '0 * * * *', 'SELECT partman.run_maintenance();' );
| 变量名 | 说明 | 默认值 |
|---|---|---|
| POSTGRES_PASSWORD | 数据库超级用户密码 | 无(必填) |
| POSTGRES_USER | 数据库用户名 | postgres |
| POSTGRES_DB | 默认数据库名 | 与POSTGRES_USER相同 |
| PG_PARTMAN_AUTO_MAINT | 是否自动启用维护模式 | true |
| PG_PARTMAN_RETENTION | 默认分区保留时间(如"30 days") | 无(需手动配置) |
| PG_PARTMAN_PREAMBLE | 维护日志前缀 | pg_partman_maintenance |
yamlversion: '3.8' services: pg-partman: image: postgres-with-pg_partman:latest container_name: pg-partman ports: - "5432:5432" environment: POSTGRES_PASSWORD: StrongPassword123 POSTGRES_USER: dbadmin POSTGRES_DB: metrics_db PG_PARTMAN_RETENTION: "90 days" volumes: - pg_data:/var/lib/postgresql/data restart: unless-stopped volumes: pg_data:
CREATE EXTENSION pg_partman;才能使用分区功能partman.run_maintenance()定期执行pg_dump -Fc格式
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务