通过docker安装
ps: 如果需要携带gis的版本,则只需要替换 镜像源为 【postgis/postgis:14-3.1】 即可
# 定义上海时区
echo "Asia/shanghai" > /etc/timezone
# 生成 localtime 文件
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 创建docker镜像 [postgres官方14版本]
docker run --name ali-postgres \
--hostname ali-postgres \
-tid \
--privileged \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-e POSTGRES_PASSWORD=ali123456 \
--ulimit nofile=265536:265536 \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
--shm-size 32g \
-p 5432:5432 \
postgres:14
docker 相关重要参数解释说明
# 指定pg生成的主要数据存储目录,其中 postgresql.conf 在该目录底下,有需要可以通过 【 -v /宿主机路径/data:/var/lib/postgresql/data 】 进行路径映射挂载
-e PGDATA=/var/lib/postgresql/data/pgdata
# 设定密码
-e POSTGRES_PASSWORD=ali123456
# 这个参数必须设置,大小是基于共享内存的大小进行设定,当使用 【 VACUUM analyze 】时,没有该配置,会导致无法回收膨胀的空间和收集相关统计信息
--shm-size 32g
通过上述docker的docker创建脚本进行创建后,就可以正常启动pg14了
特别说明,该版本引入了 lz4 压缩引擎,默认的是 pglz 压缩引擎,lz4压缩率和性能都比pglz的相对要好
# 资料信息来源:https://www.postgresql.org/docs/14/runtime-config-client.html#GUC-DEFAULT-TOAST-COMPRESSION
# 基于配置文件 postgresql.conf 调整pg的默认压缩引擎为 lz4,会自动根据 toast_tuple_target设置的触发值将大字段进行压缩
default_toast_compression = 'lz4' # 'pglz' or 'lz4'
# 基于sql语句调整自动触发压缩的条件,toast_tuple_target默认为2040字节,调节范围为128-8160
alter table 【tbName】 set (toast_tuple_target=128);
# 动态调整字段压缩引擎
ALTER TABLE 【tbName】 ALTER COLUMN 【columnName】
SET COMPRESSION lz4;
# 查看压缩引擎 pg_column_compression 显示当前字段触发的压缩引擎
select pg_column_size(【字段A】),pg_column_compression(【字段A】) from 【tableName】
示例
CREATE TABLE tb_pg_compression (
-- 没改配置文件时 默认 pglz
pg_txt text COMPRESSION pglz,
-- 指定 lz4 , 性能更好!!!
lz4_txt text COMPRESSION lz4,
default_txt text
);
-- 模拟插入大字段数据
INSERT INTO tb_pg_compression VALUES( repeat('1234567890', 1000),repeat('1234567890', 1000), repeat('1234567890', 1000));
-- 显示存储类型和大小
SELECT pg_column_compression(pg_txt),pg_column_size(pg_txt),pg_column_compression(lz4_txt),pg_column_size(lz4_txt),pg_column_compression(default_txt),pg_column_size(default_txt) FROM tb_pg_compression;
-- 显示默认存储引擎
show default_toast_compression;
通过以上小案例,大家就可以自己动手玩起来,慢慢一个个尝试下pg14的新特性,感受pg的强大吧!