
银河麒麟V10离线部署PostgreSQL17全攻略从依赖包到性能调优实战在国产化操作系统浪潮下银河麒麟V10作为主流国产操作系统其安全稳定的特性使其成为政企关键业务的首选平台。而PostgreSQL作为功能最强大的开源关系数据库其17版本在性能、安全性和可扩展性方面均有显著提升。本文将深入剖析在完全离线环境下部署PostgreSQL17的全流程技术细节特别针对国产化环境中特有的依赖包缺失、系统参数冲突等痛点问题提供系统级解决方案。1. 离线环境准备与依赖包管理1.1 系统基础环境检测在银河麒麟V10上部署PostgreSQL17前必须对系统环境进行全面检测。执行以下命令获取关键系统信息# 检查系统版本 cat /etc/kylin-release # 检查内核版本 uname -r # 检查CPU架构 lscpu | grep Architecture # 检查内存容量 free -h # 检查磁盘空间 df -h / /pgdb关键指标要求内存 ≥ 4GB生产环境建议8GB以上磁盘空间 ≥ 50GB数据目录单独挂载为佳CPU架构需与PostgreSQL二进制包匹配常见为x86_64或aarch641.2 离线依赖包全集准备银河麒麟V10基于CentOS生态但部分软件包存在兼容性问题。以下是PostgreSQL17编译运行所需的核心依赖包清单依赖包类别必备组件可选组件基础库glibc, libstdc, zlib, readlinelibxslt, libxml2开发工具gcc, make, bison, flexcmake, git加密支持openssl, libssl-devkrb5, libldap压缩库lz4, zstdbzip2, snappy系统工具systemd, pamselinux-policy提示建议提前在联网环境中使用yum download或dnf download命令下载完整依赖链可使用以下命令生成依赖树repoquery --requires --recursive --resolve postgresql17-server | sort -u1.3 依赖包离线安装实战将准备好的依赖包上传至目标服务器后采用以下方案进行批量安装# 创建本地YUM仓库 mkdir -p /opt/pg_deps tar -xzf pg_deps.tar.gz -C /opt/pg_deps createrepo /opt/pg_deps # 配置临时仓库 cat /etc/yum.repos.d/pg_local.repo EOF [pg_local] namePostgreSQL Local Dependencies baseurlfile:///opt/pg_deps enabled1 gpgcheck0 EOF # 批量安装依赖 yum --disablerepo* --enablerepopg_local install -y \ libicu-devel libxml2-devel lz4-devel \ python3-devel openssl-devel readline-devel常见问题处理依赖冲突使用--nodeps参数强制安装但需测试功能完整性版本不匹配通过rpm -Uvh --oldpackage降级处理麒麟特有包部分系统组件需使用麒麟官方提供的替换包2. PostgreSQL17源码编译优化2.1 源码获取与预处理从PostgreSQL官网获取17版本源码包后需进行国产化适配调整wget https://ftp.postgresql.org/pub/source/v17.6/postgresql-17.6.tar.gz tar -xzf postgresql-17.6.tar.gz cd postgresql-17.6 # 麒麟系统特定补丁 sed -i s/-lrt// configure sed -i s/-lssp_nonshared// src/Makefile.global.in2.2 编译参数深度优化针对银河麒麟V10的CPU特性进行编译优化以下为推荐配置命令./configure \ --prefix/usr/local/pgsql17 \ --with-systemd \ --with-lz4 \ --with-zstd \ --with-openssl \ --with-icu \ --with-python \ --with-perl \ --enable-debug \ --enable-nlszh_CN \ CFLAGS-O2 -marchnative -mtunenative \ LDFLAGS-Wl,-rpath/usr/local/pgsql17/lib关键参数解析-marchnative自动检测CPU指令集优化-with-systemd支持systemd服务管理-Wl,-rpath设置运行时库搜索路径-enable-nlszh_CN启用中文错误消息2.3 并行编译与安装充分利用多核CPU加速编译过程make -j $(nproc) world make install-world编译完成后验证关键组件/usr/local/pgsql17/bin/postgres --version /usr/local/pgsql17/bin/psql --version3. 系统级深度调优配置3.1 内核参数专业调优针对数据库负载特性修改/etc/sysctl.confcat /etc/sysctl.conf EOF # 内存管理 vm.swappiness 10 vm.dirty_ratio 30 vm.dirty_background_ratio 10 # 网络栈优化 net.core.rmem_max 4194304 net.core.wmem_max 4194304 net.ipv4.tcp_keepalive_time 300 # PostgreSQL专用 kernel.sem 250 512000 100 2048 kernel.shmmax 68719476736 kernel.shmall 4294967296 EOF sysctl -p3.2 资源限制与安全加固在/etc/security/limits.conf中为postgres用户设置专用限制postgres soft nofile 65536 postgres hard nofile 65536 postgres soft nproc 16384 postgres hard nproc 16384 postgres soft stack 10240 postgres hard stack 32768安全加固措施禁用不必要的SUDO权限配置专用的postgres用户组设置严格的目录权限chmod 750 /usr/local/pgsql17 chown -R postgres:postgres /usr/local/pgsql174. 数据库初始化与生产配置4.1 定制化initdb配置使用专用参数初始化数据库集群sudo -u postgres /usr/local/pgsql17/bin/initdb \ -D /pgdata/17/main \ --encodingUTF8 \ --localezh_CN.UTF-8 \ --lc-collatezh_CN.UTF-8 \ --lc-ctypezh_CN.UTF-8 \ --data-checksums关键选项说明--data-checksums启用页校验和生产环境必选--locale设置中文排序规则-D指定独立的数据目录4.2 生产级postgresql.conf配置优化后的核心参数配置示例# 连接设置 listen_addresses * max_connections 500 superuser_reserved_connections 10 # 内存配置 shared_buffers 4GB work_mem 16MB maintenance_work_mem 1GB # 检查点优化 checkpoint_timeout 15min checkpoint_completion_target 0.9 # WAL日志 wal_level replica wal_buffers 16MB wal_compression on # 并行查询 max_parallel_workers_per_gather 4 max_parallel_workers 84.3 高可用与备份准备配置归档与复制功能mkdir -p /pgdata/17/archive chown postgres:postgres /pgdata/17/archive # 修改postgresql.conf archive_mode on archive_command test ! -f /pgdata/17/archive/%f cp %p /pgdata/17/archive/%f设置pg_hba.conf允许复制连接host replication repuser 192.168.1.0/24 scram-sha-2565. 服务化管理与监控集成5.1 systemd服务单元配置创建/etc/systemd/system/postgresql17.service[Unit] DescriptionPostgreSQL 17 Database Server Afternetwork.target [Service] Typenotify Userpostgres Grouppostgres EnvironmentPGDATA/pgdata/17/main ExecStart/usr/local/pgsql17/bin/postgres -D ${PGDATA} ExecReload/bin/kill -HUP $MAINPID KillModemixed TimeoutSec0 [Install] WantedBymulti-user.target启用服务systemctl daemon-reload systemctl enable --now postgresql17 systemctl status postgresql175.2 监控与维护脚本创建健康检查脚本/usr/local/bin/pg_monitor.sh#!/bin/bash PGPORT5432 PGUSERpostgres PGHOST/var/run/postgresql check_pg_isready() { /usr/local/pgsql17/bin/pg_isready -h $PGHOST -p $PGPORT -U $PGUSER } check_pg_connections() { /usr/local/pgsql17/bin/psql -h $PGHOST -p $PGPORT -U $PGUSER -c \ SELECT count(*) FROM pg_stat_activity WHERE state active; -t } # 主检查逻辑 case $1 in isready) check_pg_isready ;; connections) check_pg_connections ;; *) echo Usage: $0 {isready|connections} ;; esac6. 国产化环境专项适配6.1 麒麟系统兼容性问题解决常见问题及解决方案glibc版本冲突# 检查兼容性 strings /lib64/libc.so.6 | grep GLIBC_ # 解决方案 patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 \ --set-rpath /opt/pg_deps/glibc-2.28:/usr/local/pgsql17/lib \ /usr/local/pgsql17/bin/postgresSELinux策略配置# 生成自定义策略模块 audit2allow -a -M pgpolicy /var/log/audit/audit.log semodule -i pgpolicy.pp国产CPU优化飞腾/鲲鹏使用-marcharmv8-acrccrypto编译参数龙芯添加-marchloongarch64 -mabilp64d参数6.2 性能基准测试使用pgbench进行压力测试# 初始化测试数据 sudo -u postgres /usr/local/pgsql17/bin/pgbench -i -s 100 # 运行测试 sudo -u postgres /usr/local/pgsql17/bin/pgbench \ -c 50 -j 4 -T 300 \ -M prepared \ -r \ -P 10典型优化前后对比基于飞腾2000指标默认配置优化后TPS12562843平均延迟(ms)39.817.699%延迟(ms)142537. 安全加固与审计配置7.1 密码策略强化修改postgresql.conf启用密码复杂度password_encryption scram-sha-256创建密码策略函数CREATE OR REPLACE FUNCTION check_password_complexity() RETURNS event_trigger AS $$ BEGIN IF tg_tag ALTER ROLE OR tg_tag CREATE ROLE THEN IF current_setting(password_encryption) ! scram-sha-256 THEN RAISE EXCEPTION 必须使用SCRAM-SHA-256加密; END IF; IF length(new_password) 12 THEN RAISE EXCEPTION 密码长度至少12个字符; END IF; END IF; END; $$ LANGUAGE plpgsql; CREATE EVENT TRIGGER enforce_password_policy ON ddl_command_end WHEN TAG IN (CREATE ROLE, ALTER ROLE) EXECUTE FUNCTION check_password_complexity();7.2 审计日志配置启用详细审计功能# postgresql.conf log_statement ddl log_connections on log_disconnections on log_hostname on log_line_prefix %m [%p] %q%u%h 创建审计扩展CREATE EXTENSION pg_audit; ALTER SYSTEM SET pg_audit.log READ,WRITE; ALTER SYSTEM SET pg_audit.log_relation on;8. 常见故障排除指南8.1 启动失败诊断流程检查日志journalctl -u postgresql17 --no-pager -n 50 tail -n 100 /pgdata/17/main/log/postgresql-*.log端口冲突检测ss -tulnp | grep 5432 netstat -tulnp | grep postgres权限问题检查namei -l /pgdata/17/main sudo -u postgres ls -la /pgdata/17/main8.2 性能问题排查工具实时监控SELECT * FROM pg_stat_activity WHERE state active; SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;锁等待分析SELECT blocked_locks.pid AS blocked_pid, blocking_locks.pid AS blocking_pid, blocked_activity.usename AS blocked_user, blocking_activity.usename AS blocking_user FROM pg_catalog.pg_locks blocked_locks JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid blocked_locks.pid JOIN pg_catalog.pg_locks blocking_locks ON blocking_locks.locktype blocked_locks.locktype AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid AND blocking_locks.pid ! blocked_locks.pid JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid blocking_locks.pid WHERE NOT blocked_locks.GRANTED;存储性能测试# 随机读写测试 fio --filename/pgdata/testfile --size1G --direct1 --rwrandrw --bs8k \ --ioenginelibaio --iodepth256 --runtime120 --numjobs4 --time_based \ --group_reporting --nameiops-test9. 版本升级与迁移策略9.1 逻辑升级方案使用pg_dumpall进行全量迁移# 旧版本导出 /usr/local/pgsql16/bin/pg_dumpall -U postgres -h /tmp -p 5432 \ | gzip pg16_full_backup.gz # 新版本导入 gunzip -c pg16_full_backup.gz | /usr/local/pgsql17/bin/psql -U postgres -h /tmp -p 54339.2 物理升级方案使用pg_upgrade进行原地升级# 停止旧实例 systemctl stop postgresql16 # 执行升级 sudo -u postgres /usr/local/pgsql17/bin/pg_upgrade \ -b /usr/local/pgsql16/bin \ -B /usr/local/pgsql17/bin \ -d /pgdata/16/main \ -D /pgdata/17/main \ --link \ --check升级后验证/usr/local/pgsql17/bin/vacuumdb --all --analyze-in-stages /usr/local/pgsql17/bin/reindexdb --all10. 扩展生态与国产适配10.1 常用扩展安装PostGIS地理信息yum install -y postgis31_17时序数据库TimescaleDB# 从源码编译 git clone https://github.com/timescale/timescaledb cd timescaledb git checkout v2.13.0 ./bootstrap -DREGRESS_CHECKSOFF -DPROJECT_INSTALL_METHODsource make -C build install分布式扩展CitusCREATE EXTENSION citus; SELECT citus_set_coordinator_host(coordinator, 5432);10.2 国产数据库兼容方案达梦兼容模式SET compatible_mode DM;人大金仓适配# 安装KES迁移工具 rpm -ivh kingbase-extension-*.rpm神通数据库连接CREATE EXTENSION oracle_fdw; CREATE SERVER oscar_server FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver //192.168.1.100:2003/OSRDB);11. 备份恢复全方案11.1 物理备份策略配置基础备份脚本/usr/local/bin/pg_basebackup.sh#!/bin/bash DATE$(date %Y%m%d) BACKUP_DIR/pgbackup/base/$DATE LOG_FILE/var/log/pg_backup_$DATE.log mkdir -p $BACKUP_DIR chown postgres:postgres $BACKUP_DIR sudo -u postgres /usr/local/pgsql17/bin/pg_basebackup \ -D $BACKUP_DIR \ -Ft \ -z \ -Xs \ -P \ -h /var/run/postgresql \ -p 5432 \ -U replicator 21 | tee -a $LOG_FILE # 保留最近7天备份 find /pgbackup/base/ -type d -mtime 7 -exec rm -rf {} \;11.2 逻辑备份增强方案使用pg_dump定制化备份#!/bin/bash DATE$(date %Y%m%d) DB_LIST$(sudo -u postgres /usr/local/pgsql17/bin/psql -l -t | awk {print $1} | grep -vE template[0-9]|postgres) for DB in $DB_LIST; do sudo -u postgres /usr/local/pgsql17/bin/pg_dump \ -Fc \ -Z 6 \ -f /pgbackup/logical/${DB}_${DATE}.dump \ $DB done11.3 时间点恢复(PITR)配置配置归档命令archive_mode on archive_command rsync -a %p barmanbackup-server:/pg_archive/%f创建恢复配置cat /pgdata/17/main/recovery.conf EOF restore_command rsync -a barmanbackup-server:/pg_archive/%f %p recovery_target_time 2024-03-20 14:30:00 recovery_target_action promote EOF12. 性能监控与优化体系12.1 监控指标采集配置Prometheus exporter# 安装postgres_exporter wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.14.0/postgres_exporter-0.14.0.linux-amd64.tar.gz tar -xzf postgres_exporter-*.tar.gz mv postgres_exporter /usr/local/bin/ # 创建系统服务 cat /etc/systemd/system/postgres_exporter.service EOF [Unit] DescriptionPostgreSQL Exporter Afternetwork.target [Service] Userpostgres EnvironmentDATA_SOURCE_NAMEpostgresql://postgreslocalhost:5432/postgres?sslmodedisable ExecStart/usr/local/bin/postgres_exporter \ --extend.query-path/etc/postgres_exporter_queries.yaml Restartalways [Install] WantedBymulti-user.target EOF12.2 性能优化矩阵关键优化参数对照表参数类别小规模系统(4C8G)中型系统(16C32G)大型系统(32C64G)shared_buffers1GB8GB16GBwork_mem4MB16MB32MBmaintenance_work_mem256MB1GB2GBmax_worker_processes41632max_parallel_workers_per_gather2816effective_cache_size3GB24GB48GB12.3 查询优化技术索引优化建议SELECT schemaname, tablename, attname, n_distinct, most_common_vals, most_common_freqs, histogram_bounds FROM pg_stats WHERE schemaname NOT IN (pg_catalog, information_schema) ORDER BY n_distinct DESC LIMIT 20;执行计划分析EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT * FROM large_table WHERE create_time now() - interval 30 days;统计信息更新ANALYZE VERBOSE large_table;13. 容器化部署方案13.1 Docker定制镜像构建专用DockerfileFROM kylin:v10-sp2 RUN yum install -y lz4-devel zstd-devel openssl-devel readline-devel ARG PG_VERSION17.6 RUN curl -o /tmp/postgresql-${PG_VERSION}.tar.gz \ https://ftp.postgresql.org/pub/source/v${PG_VERSION}/postgresql-${PG_VERSION}.tar.gz \ tar -xzf /tmp/postgresql-${PG_VERSION}.tar.gz -C /tmp \ cd /tmp/postgresql-${PG_VERSION} \ ./configure --prefix/usr/local/pgsql \ --with-lz4 \ --with-zstd \ --with-openssl \ make -j$(nproc) world \ make install-world \ rm -rf /tmp/postgresql-${PG_VERSION}* ENV PATH/usr/local/pgsql/bin:$PATH ENV PGDATA/var/lib/postgresql/data RUN groupadd -r postgres \ useradd -r -g postgres postgres \ mkdir -p $PGDATA \ chown postgres:postgres $PGDATA VOLUME /var/lib/postgresql/data COPY docker-entrypoint.sh /usr/local/bin/ ENTRYPOINT [docker-entrypoint.sh] EXPOSE 5432 CMD [postgres]13.2 Kubernetes部署方案PostgreSQL StatefulSet配置示例apiVersion: apps/v1 kind: StatefulSet metadata: name: postgresql spec: serviceName: postgresql replicas: 3 selector: matchLabels: app: postgresql template: metadata: labels: app: postgresql spec: containers: - name: postgresql image: custom-postgres:17.6 ports: - containerPort: 5432 name: postgresql volumeMounts: - name: pgdata mountPath: /var/lib/postgresql/data env: - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: postgresql-secrets key: password volumeClaimTemplates: - metadata: name: pgdata spec: accessModes: [ ReadWriteOnce ] storageClassName: local-storage resources: requests: storage: 100Gi14. 国产中间件集成14.1 达梦数据库迁移工具使用DM迁移工具进行数据迁移./dmfrmt64 -s postgres -h source-pg -p 5432 -U postgres -W password \ -t dm -H target-dm -P 5236 -U SYSDBA -W password \ -m full -n 4 -c 1000014.2 东方通TongWeb适配配置TongWeb连接池resource-ref res-ref-namejdbc/PostgreSQLDS/res-ref-name res-typejavax.sql.DataSource/res-type init-param param-namedriverClassName/param-name param-valueorg.postgresql.Driver/param-value /init-param init-param param-nameurl/param-name param-valuejdbc:postgresql://pg-server:5432/appdb/param-value /init-param init-param param-nameusername/param-name param-valueappuser/param-value /init-param init-param param-namepassword/param-name param-value${DB_PASSWORD}/param-value /init-param /resource-ref14.3 金蝶中间件集成配置Apusic连接PostgreSQL# apusic-conf/domains/mydomain/config/jdbc.properties postgres.jdbc.driverorg.postgresql.Driver postgres.jdbc.urljdbc:postgresql://localhost:5432/erpdb postgres.jdbc.usererpuser postgres.jdbc.passwordsecurepass123 postgres.jdbc.maxActive50 postgres.jdbc.maxIdle1015. 高可用架构设计15.1 流复制集群搭建配置主从复制# 主库创建复制用户 sudo -u postgres psql -c CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD RepliPass123; # 从库基础备份 sudo -u postgres pg_basebackup -h master-pg -p 5432 -U replicator \ -D /pgdata/17/replica -Ft -Xs -P -R15.2 Patroni自动故障转移Patroni配置示例scope: pg_cluster name: pg_node1 restapi: listen: 0.0.0.0:8008 connect_address: 192.168.1.101:8008 etcd: hosts: - 192.168.1.100:2379 - 192.168.1.101:2379 - 192.168.1.102:2379 bootstrap: dcs: ttl: 30 loop_wait: 10 retry_timeout: 10 maximum_lag_on_failover: 1048576 postgresql: use_pg_rewind: true parameters: max_connections: 500 shared_buffers: 4GB wal_level: replica hot_standby: on max_wal_senders: 10 wal_keep_size: 1GB postgresql: listen: 0.0.0.0:5432 connect_address: 192.168.1.101:5432 data_dir: /pgdata/17/main bin_dir: /usr/local/pgsql17/bin pgpass: /var/lib/postgresql/.pgpass authentication: replication: username: replicator password: RepliPass123 superuser: username: postgres password: PostgresPass123 create_replica_methods: - basebackup basebackup: max-rate: 100M16. 安全合规配置16.1 数据脱敏方案安装anon扩展实现数据脱敏CREATE EXTENSION anon; SELECT anon.init(); -- 配置脱敏规则 SECURITY LABEL FOR anon ON COLUMN users.email IS MASKED WITH FUNCTION anon.fake_email(); SECURITY LABEL FOR anon ON COLUMN users.phone IS MASKED WITH FUNCTION anon.partial(phone,2,$$****$$,2); -- 启用脱敏 SELECT anon.start_dynamic_masking();16.2 审计日志合规配置详细审计策略-- 创建审计策略 CREATE AUDIT POLICY dml_policy ACTIONS ALL ON ALL TABLES; CREATE AUDIT POLICY ddl_policy ACTIONS CREATE, ALTER, DROP ON DATABASE; -- 应用策略 AUDIT TABLE dml_policy; AUDIT DATABASE ddl_policy; -- 查询审计记录 SELECT * FROM pg_audit ORDER BY event_time DESC LIMIT 10;17. 性能压测与调优17.1 TPC-C基准测试使用BenchmarkSQL进行TPC-C测试# 配置props.pg文件 dbpostgres driverorg.postgresql.Driver connjdbc:postgresql://localhost:5432/tpcc usertpcc passwordtpccpass warehouses10 loadWorkers4 terminals20 runMins60 # 运行测试 ./runBenchmark.sh props.pg17.2 自定义压力测试使用pgbench自定义场景-- 创建测试表 CREATE TABLE pgbench_accounts ( aid serial PRIMARY KEY, abalance int NOT NULL, ainfo text, adata jsonb ); -- 准备测试数据 INSERT INTO pgbench_accounts (abalance, ainfo, adata) SELECT (random()*10000)::int, md5(random()::text), jsonb_build_object( name, md5(random()::text), age, (random()*80)::int, address, md5(random()::text) ) FROM generate_series(1,1000000); -- 自定义测试脚本 cat custom_test.sql EOF \set aid random(1, 1000000) BEGIN; UPDATE pgbench_accounts SET abalance abalance 1 WHERE aid :aid; SELECT abalance FROM pgbench_accounts WHERE aid :aid; COMMIT; EOF # 运行测试 pgbench -c 50 -j 4 -T 300 -f custom_test.sql18. 运维自动化体系18.1 Ansible部署剧本PostgreSQL部署playbook示例- hosts: pg_servers become: yes vars: pg_version: 17.6 pg_port: 5432 pg_data: /pgdata/17/main pg_home: /usr/local/pgsql17 tasks: - name: Install dependencies yum: name: - gcc - make - readline-devel - zlib-devel - openssl-devel state: present - name: Download PostgreSQL get_url: url: https://ftp.postgresql.org/pub/source/v{{ pg_version }}/postgresql-{{ pg_version }}.tar.gz dest: /tmp/postgresql-{{ pg_version }}.tar.gz - name: Extract source unarchive: src: /tmp/postgresql-{{ pg_version }}.tar.gz dest: /tmp remote_src: yes - name: Configure PostgreSQL command: | ./configure --prefix{{ pg_home }} \ --with-openssl \ --with-libxml \ --with-systemd args: chdir: /tmp/postgresql-{{ pg_version }} - name: Compile and install command: | make -j$(nproc) world make install-world args: chdir: /tmp/postgresql-{{ pg_version }} - name: Create postgres user user: name: postgres system: yes shell: /bin/bash - name: Create data directory file: path: {{ pg_data }} state: directory owner: postgres group: postgres mode: 0750 - name: Initialize database command: {{ pg_home }}/bin/initdb -D {{ pg_data }} -U postgres become_user: postgres - name