1. 首页 > PostgreSQL教程 > 正文

PostgreSQL教程FG066-PG环境变量:配置与优化

本文档风哥主要介绍PostgreSQL数据库环境变量相关知识,包括环境变量分类、优先级规则、配置方法、多版本管理等内容,风哥教程参考PostgreSQL官方文档Environment Variables章节,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

from oracle:www.itpux.com

Part01-基础概念与理论知识

1.1 PostgreSQL数据库环境变量概述

PostgreSQL数据库环境变量是一组用于配置数据库客户端和服务器运行环境的系统变量。通过设置环境变量,可以简化数据库连接操作、指定默认参数、配置库文件路径等。正确配置环境变量是PostgreSQL数据库管理的基础工作。更多视频教程www.fgedu.net.cn

PostgreSQL数据库环境变量作用:

  • 简化数据库连接命令
  • 指定默认数据库和用户
  • 配置库文件搜索路径
  • 设置客户端编码格式
  • 控制日志输出格式

1.2 PostgreSQL数据库环境变量分类

PostgreSQL数据库环境变量按功能分类:

# PostgreSQL环境变量分类

## 连接相关环境变量
PGHOST # 数据库服务器主机名或套接字目录
PGPORT # 数据库服务器端口号
PGDATABASE # 默认连接的数据库名
PGUSER # 默认连接的用户名
PGPASSWORD # 默认连接的密码(不推荐使用)
PGPASSFILE # 密码文件路径
PGSERVICE # 服务名称(pg_service.conf中定义)
PGOPTIONS # 连接选项

## 路径相关环境变量
PGDATA # 数据目录路径
PGHOME # PostgreSQL安装目录
PATH # 可执行文件搜索路径
LD_LIBRARY_PATH # 动态库搜索路径(Linux)
DYLD_LIBRARY_PATH # 动态库搜索路径(macOS)
MANPATH # 手册页搜索路径

## 客户端相关环境变量
PGCLIENTENCODING # 客户端编码
PGDATESTYLE # 日期格式
PGTZ # 时区设置
PGSYSCONFDIR # 系统配置目录

## 调试相关环境变量
PGAPPNAME # 应用名称
PGCONNECT_TIMEOUT # 连接超时时间
PGTARGETSESSIONATTRS # 目标会话属性

## 输出相关环境变量
PGCOLOR # 彩色输出控制
PGPAGER # 分页程序

1.3 PostgreSQL数据库环境变量优先级

PostgreSQL数据库环境变量优先级规则:

# PostgreSQL参数设置优先级(从高到低)

1. SQL命令中指定的参数
psql -h fgedu.net.cn -p port -U fgedu -d fgedudb

2. 环境变量
export PGHOST=192.168.1.100
export PGPORT=5432

3. 连接服务文件(pg_service.conf)
[myservice]
fgedu.net.cn=192.168.1.100
port=5432

4. 密码文件(.pgpass)
192.168.1.100:5432:*:pgsql: password

5. 默认值
PGHOST: /tmp(Unix套接字)或localfgedu.net.cn
PGPORT: 5432
PGUSER: 当前操作系统用户名
PGDATABASE: 与PGUSER相同

# 优先级示例
# 场景:同时设置了环境变量和命令行参数
$ export PGHOST=192.168.1.100
$ export PGPORT=5432

# 命令行参数优先级更高
$ psql -h 192.168.1.200 -p 5433
# 实际连接到192.168.1.200:5433

# 使用环境变量
$ psql
# 连接到192.168.1.100:5432

风哥提示:了解环境变量优先级有助于排查连接问题,命令行参数优先级最高,环境变量次之,默认值最低。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 PostgreSQL数据库核心环境变量规划

PostgreSQL数据库核心环境变量规划建议:

# 生产环境核心环境变量规划

## 安装目录相关
PGHOME=/postgresql/fgapp/pgsql-18
PATH=$PGHOME/bin:$PATH
LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
MANPATH=$PGHOME/share/man:$MANPATH

## 数据目录相关
PGDATA=/postgresql/data

## 连接相关
PGHOST=/tmp # 本地套接字
PGPORT=5432 # 端口号
PGDATABASE=fgedudb # 默认数据库
PGUSER=pgsql # 默认用户

## 客户端相关
PGCLIENTENCODING=UTF8 # 客户端编码
PGTZ=Asia/Shanghai # 时区
PGDATESTYLE=ISO,MDY # 日期格式

## 输出相关
PGCOLOR=auto # 彩色输出
PGPAGER=less # 分页程序

# 完整配置示例
export PGHOME=/postgresql/fgapp/pgsql-18
export PGDATA=/postgresql/data
export PGPORT=5432
export PGHOST=/tmp
export PGDATABASE=fgedudb
export PGUSER=pgsql export PGCLIENTENCODING=UTF8
export PGTZ=Asia/Shanghai
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH

2.2 PostgreSQL数据库PATH路径规划

PostgreSQL数据库PATH路径规划建议:

# PATH路径规划原则

## PATH顺序
– PostgreSQL bin目录放在PATH最前面
– 确保正确的版本被优先使用
– 避免与其他软件冲突

## LD_LIBRARY_PATH规划
– PostgreSQL lib目录放在最前面
– 确保动态库正确加载
– 避免库版本冲突

## 配置示例

# 方案1:追加到现有PATH(可能存在版本冲突)
export PATH=$PATH:$PGHOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGHOME/lib

# 方案2:前置到PATH(推荐,确保优先级)
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH

# 方案3:完全替换(隔离环境)
export PATH=$PGHOME/bin:/usr/bin:/bin
export LD_LIBRARY_PATH=$PGHOME/lib

# 验证PATH配置
$ which psql
/postgresql/fgapp/pgsql-18/bin/psql

$ psql –version
psql (PostgreSQL) 18.3

$ ldd $PGHOME/bin/psql | head -5
linux-vdso.so.1 (0x00007ffcc3bfe000)
libpq.so.5 => /postgresql/fgapp/pgsql-18/lib/libpq.so.5 (0x00007f8b2c200000)
libssl.so.3 => /lib64/libssl.so.3 (0x00007f8b2c100000)
libcrypto.so.3 => /lib64/libcrypto.so.3 (0x00007f8b2be00000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8b2bc00000)

2.3 PostgreSQL数据库环境变量最佳实践

PostgreSQL数据库环境变量最佳实践建议:

# 环境变量最佳实践

## 1. 不要在环境变量中存储密码
# 错误做法
export PGPASSWORD=’MyPassword123′

# 正确做法:使用.pgpass文件
echo “192.168.1.100:5432:*:pgsql: MyPassword123” > ~/.pgpass
chmod 600 ~/.pgpass

## 2. 使用配置文件管理环境变量
# 创建配置文件
cat > /etc/profile.d/postgresql.sh << 'EOF' export PGHOME=/postgresql/fgapp/pgsql-18 export PGDATA=/postgresql/data export PATH=$PGHOME/bin:$PATH export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH EOF ## 3. 为不同用户配置不同环境 # postgres用户环境 su - pgsql cat >> ~/.bash_profile << 'EOF' export PGDATA=/postgresql/data export PGPORT=5432 export PGDATABASE=fgedudb EOF ## 4. 使用函数管理多版本环境 # 添加到~/.bashrc function pg18() { export PGHOME=/postgresql/fgapp/pgsql-18 export PGDATA=/postgresql/data/pg18 export PGPORT=5432 export PATH=$PGHOME/bin:$PATH export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH echo "PostgreSQL 18 environment activated" } ## 5. 验证环境变量配置 function pg_env_check() { echo "PGHOME: $PGHOME" echo "PGDATA: $PGDATA" echo "PGPORT: $PGPORT" echo "PGHOST: $PGHOST" echo "PGDATABASE: $PGDATABASE" echo "PGUSER: $PGUSER" echo "" echo "psql location: $(which psql)" echo "psql version: $(psql --version)" }

风哥教程针对风哥教程针对风哥教程针对生产环境建议:不要在环境变量中存储密码,使用.pgpass文件管理密码,确保文件权限为600。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 PostgreSQL数据库环境变量配置方法

3.1.1 配置系统级环境变量

# 创建系统级环境变量配置文件
$ sudo cat > /etc/profile.d/postgresql.sh << 'EOF' #!/bin/bash # postgresql.sh # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # web: `http://www.fgedu.net.cn` # web: `http://www.fgedu.net.cn` # web: http://www.fgedu.net.cn # PostgreSQL安装目录 export PGHOME=/postgresql/fgapp/pgsql-18 # 数据目录 export PGDATA=/postgresql/data # 连接参数 export PGPORT=5432 export PGHOST=/tmp # 客户端编码 export PGCLIENTENCODING=UTF8 # 时区设置 export PGTZ=Asia/Shanghai # 路径设置 export PATH=$PGHOME/bin:$PATH export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH export MANPATH=$PGHOME/share/man:$MANPATH EOF # 设置文件权限 $ sudo chmod 644 /etc/profile.d/postgresql.sh # 使配置生效 $ source /etc/profile.d/postgresql.sh # 验证配置 $ echo $PGHOME /postgresql/fgapp/pgsql-18 $ echo $PGDATA /postgresql/data $ which psql /postgresql/fgapp/pgsql-18/bin/psql $ psql --version psql (PostgreSQL) 18.3

3.1.2 配置用户级环境变量

# 为postgres用户配置环境变量
$ sudo su – pgsql # 编辑.bash_profile
$ cat >> ~/.bash_profile << 'EOF' # PostgreSQL Environment export PGHOME=/postgresql/fgapp/pgsql-18 export PGDATA=/postgresql/data export PGPORT=5432 export PGHOST=/tmp export PGDATABASE=fgedudb export PGCLIENTENCODING=UTF8 export PGTZ=Asia/Shanghai export PATH=$PGHOME/bin:$PATH export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH # PostgreSQL aliases alias pglog='tail -f $PGDATA/log/postgresql-*.log' alias pglso='psql -c "SELECT * FROM pg_stat_activity"' alias pgsize="psql -c \"SELECT datname, pg_size_pretty(pg_fgedudb_size(datname)) FROM pg_fgedudb\"" EOF # 使配置生效 $ source ~/.bash_profile # 验证配置 $ env | grep PG PGHOME=/postgresql/fgapp/pgsql-18 PGDATA=/postgresql/data PGPORT=5432 PGHOST=/tmp PGDATABASE=fgedudb PGCLIENTENCODING=UTF8 PGTZ=Asia/Shanghai # 测试连接 $ psql psql (18.3) 输入 "help" 来获取帮助信息. fgedudb=# SELECT current_fgedudb(), current_fgedu; current_fgedudb | current_fgedu ------------------+-------------- fgedudb | pgsql (1 行记录) fgedudb=# \q

3.2 PostgreSQL数据库环境变量脚本编写

3.2.1 多版本环境切换脚本

# 创建多版本切换脚本
$ sudo cat > /etc/profile.d/pg_env.sh << 'EOF' #!/bin/bash # pg_env.sh # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # web: `http://www.fgedu.net.cn` # web: `http://www.fgedu.net.cn` # web: http://www.fgedu.net.cn # PostgreSQL版本切换函数 function pg16() { export PGHOME=/usr/pgsql-16 export PGDATA=/postgresql/data/pg16 export PGPORT=5432 export PATH=$PGHOME/bin:$PATH export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH echo "========================================" echo "PostgreSQL 16 Environment Activated" echo "========================================" echo "PGHOME: $PGHOME" echo "PGDATA: $PGDATA" echo "PGPORT: $PGPORT" echo "Version: $(psql --version 2>/dev/null || echo ‘Not installed’)”
echo “========================================”
}

function pg17() {
export PGHOME=/usr/pgsql-17
export PGDATA=/postgresql/data/pg17
export PGPORT=5433
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
echo “========================================”
echo “PostgreSQL 17 Environment Activated”
echo “========================================”
echo “PGHOME: $PGHOME”
echo “PGDATA: $PGDATA”
echo “PGPORT: $PGPORT”
echo “Version: $(psql –version 2>/dev/null || echo ‘Not installed’)”
echo “========================================”
}

function pg18() {
export PGHOME=/postgresql/fgapp
export PGDATA=/postgresql/data/pg18
export PGPORT=5434
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
echo “========================================”
echo “PostgreSQL 18 Environment Activated”
echo “========================================”
echo “PGHOME: $PGHOME”
echo “PGDATA: $PGDATA”
echo “PGPORT: $PGPORT”
echo “Version: $(psql –version 2>/dev/null || echo ‘Not installed’)”
echo “========================================”
}

# 显示当前环境
function pg_env() {
echo “========================================”
echo “Current PostgreSQL Environment”
echo “========================================”
echo “PGHOME: ${PGHOME:-Not set}”
echo “PGDATA: ${PGDATA:-Not set}”
echo “PGPORT: ${PGPORT:-Not set}”
echo “PGHOST: ${PGHOST:-Not set}”
echo “PGDATABASE: ${PGDATABASE:-Not set}”
echo “PGUSER: ${PGUSER:-Not set}”
echo “PGCLIENTENCODING:${PGCLIENTENCODING:-Not set}”
echo “PGTZ: ${PGTZ:-Not set}”
echo “”
echo “psql location: $(which psql 2>/dev/null || echo ‘Not found’)”
echo “psql version: $(psql –version 2>/dev/null || echo ‘Not found’)”
echo “========================================”
}

# 显示帮助
function pg_help() {
echo “PostgreSQL Environment Management”
echo “”
echo “Usage:”
echo ” pg16 – Switch to PostgreSQL 16 environment”
echo ” pg17 – Switch to PostgreSQL 17 environment”
echo ” pg18 – Switch to PostgreSQL 18 environment”
echo ” pg_env – Show current environment settings”
echo ” pg_help – Show this help message”
}

# 默认加载PG18环境
pg18 >/dev/null 2>&1
EOF

# 设置权限
$ sudo chmod 644 /etc/profile.d/pg_env.sh

# 使配置生效
$ source /etc/profile.d/pg_env.sh

3.2.2 环境变量检查脚本

# 创建环境检查脚本
$ cat > /postgresql/scripts/pg_env_check.sh << 'EOF' #!/bin/bash # pg_env_check.sh # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # web: `http://www.fgedu.net.cn` # web: `http://www.fgedu.net.cn` # web: http://www.fgedu.net.cn echo "==========================================" echo "PostgreSQL Environment Check" echo "==========================================" echo "" # 检查必需的环境变量 echo "1. Checking required environment variables..." REQUIRED_VARS="PGHOME PGDATA PGPORT" for var in $REQUIRED_VARS; do if [ -z "${!var}" ]; then echo " [ERROR] $var is not set" else echo " [OK] $var = ${!var}" fi done echo "" # 检查PATH echo "2. Checking PATH..." PSQL_PATH=$(which psql 2>/dev/null)
if [ -z “$PSQL_PATH” ]; then
echo ” [ERROR] psql not found in PATH”
else
echo ” [OK] psql found at: $PSQL_PATH”
PSQL_VERSION=$(psql –version 2>/dev/null)
echo ” [OK] Version: $PSQL_VERSION”
fi
echo “”

# 检查LD_LIBRARY_PATH
echo “3. Checking LD_LIBRARY_PATH…”
if [ -z “$LD_LIBRARY_PATH” ]; then
echo ” [WARN] LD_LIBRARY_PATH is not set”
else
echo ” [OK] LD_LIBRARY_PATH = $LD_LIBRARY_PATH”
fi
echo “”

# 检查数据目录
echo “4. Checking PGDATA…”
if [ -d “$PGDATA” ]; then
echo ” [OK] PGDATA directory exists”
if [ -f “$PGDATA/PG_VERSION” ]; then
PG_VERSION=$(cat $PGDATA/PG_VERSION)
echo ” [OK] Database version: $PG_VERSION”
else
echo ” [WARN] PG_VERSION file not found”
fi
else
echo ” [ERROR] PGDATA directory does not exist”
fi
echo “”

# 检查连接
echo “5. Checking fgedudb connection…”
if psql -c “SELECT 1″ >/dev/null 2>&1; then
echo ” [OK] Database connection successful”
else
echo ” [ERROR] Database connection failed”
fi
echo “”

# 检查.pgpass文件
echo “6. Checking .pgpass file…”
PGPASS_FILE=”$HOME/.pgpass”
if [ -f “$PGPASS_FILE” ]; then
PGPASS_PERM=$(stat -c %a “$PGPASS_FILE” 2>/dev/null)
if [ “$PGPASS_PERM” = “600” ]; then
echo ” [OK] .pgpass exists with correct permissions (600)”
else
echo ” [WARN] .pgpass exists but permissions are $PGPASS_PERM (should be 600)”
fi
else
echo ” [INFO] .pgpass file not found”
fi
echo “”

echo “==========================================”
echo “Environment check completed”
echo “==========================================”
EOF

# 设置执行权限
$ chmod +x /postgresql/scripts/pg_env_check.sh

# 执行检查
$ /postgresql/scripts/pg_env_check.sh

3.3 PostgreSQL数据库环境变量验证与测试

3.3.1 验证环境变量配置

# 验证环境变量
$ echo “PGHOME: $PGHOME”
PGHOME: /postgresql/fgapp/pgsql-18

$ echo “PGDATA: $PGDATA”
PGDATA: /postgresql/data

$ echo “PGPORT: $PGPORT”
PGPORT: 5432

# 验证可执行文件路径
$ which psql
/postgresql/fgapp/pgsql-18/bin/psql

$ which pg_dump
/postgresql/fgapp/pgsql-18/bin/pg_dump

$ which pg_restore
/postgresql/fgapp/pgsql-18/bin/pg_restore

# 验证版本
$ psql –version
psql (PostgreSQL) 18.3

$ pg_dump –version
pg_dump (PostgreSQL) 18.3

$ pgsql –version
pgsql (PostgreSQL) 18.3

# 验证动态库
$ ldd $PGHOME/bin/psql | grep pgsql libpq.so.5 => /postgresql/fgapp/pgsql-18/lib/libpq.so.5

# 验证连接
$ psql -c “SELECT version();”
version
———————————————————————————————————
PostgreSQL 18.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), 64-bit
(1 行记录)

# 验证默认数据库
$ psql -c “SELECT current_fgedudb();”
current_fgedudb
——————
fgedudb
(1 行记录)

风哥提示:配置环境变量后务必进行验证测试,确保psql、pg_dump等工具可以正确找到,数据库连接正常。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 PostgreSQL数据库多版本环境变量管理

4.1.1 多版本环境配置实战

# 多版本PostgreSQL环境配置

# 查看已安装的PostgreSQL版本
$ ls -la /usr/pgsql-*
drwxr-xr-x. 2 root root 4096 Apr 2 10:00 /usr/pgsql-16
drwxr-xr-x. 2 root root 4096 Apr 2 10:00 /usr/pgsql-17
drwxr-xr-x. 2 root root 4096 Apr 2 10:00 /postgresql/fgapp

# 测试版本切换
$ pg16
========================================
PostgreSQL 16 Environment Activated
========================================
PGHOME: /usr/pgsql-16
PGDATA: /postgresql/data/pg16
PGPORT: 5432
Version: psql (PostgreSQL) 16.7
========================================

$ psql -c “SELECT version();” | head -2
version
—————————————————————————————————————–
PostgreSQL 16.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), 64-bit

$ pg17
========================================
PostgreSQL 17 Environment Activated
========================================
PGHOME: /usr/pgsql-17
PGDATA: /postgresql/data/pg17
PGPORT: 5433
Version: psql (PostgreSQL) 17.3
========================================

$ psql -c “SELECT version();” | head -2
version
—————————————————————————————————————–
PostgreSQL 17.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), 64-bit

$ pg18
========================================
PostgreSQL 18 Environment Activated
========================================
PGHOME: /postgresql/fgapp
PGDATA: /postgresql/data/pg18
PGPORT: 5434
Version: psql (PostgreSQL) 18.3
========================================

$ psql -c “SELECT version();” | head -2
version
—————————————————————————————————————–
PostgreSQL 18.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), 64-bit

4.2 PostgreSQL数据库环境变量常见问题处理

4.2.1 psql命令找不到问题

# 问题现象
$ psql
bash: psql: command not found…

# 排查步骤1:检查PATH
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

# 问题原因:PostgreSQL bin目录不在PATH中

# 解决方案1:临时添加
$ export PATH=/postgresql/fgapp/pgsql-18/bin:$PATH
$ psql –version
psql (PostgreSQL) 18.3

# 解决方案2:永久添加到配置文件
$ echo ‘export PATH=/postgresql/fgapp/pgsql-18/bin:$PATH’ >> ~/.bash_profile
$ source ~/.bash_profile

# 解决方案3:创建软链接
$ sudo ln -s /postgresql/fgapp/pgsql-18/bin/psql /usr/local/bin/psql
$ sudo ln -s /postgresql/fgapp/pgsql-18/bin/pg_dump /usr/local/bin/pg_dump

4.2.2 动态库加载失败问题

# 问题现象
$ psql
psql: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory

# 排查步骤1:检查库文件是否存在
$ ls -la /postgresql/fgapp/pgsql-18/lib/libpq.so.5
lrwxrwxrwx. 1 root root 12 Apr 2 10:00 /postgresql/fgapp/pgsql-18/lib/libpq.so.5 -> libpq.so.5.18

# 排查步骤2:检查LD_LIBRARY_PATH
$ echo $LD_LIBRARY_PATH

# 问题原因:LD_LIBRARY_PATH未设置

# 解决方案1:临时设置
$ export LD_LIBRARY_PATH=/postgresql/fgapp/pgsql-18/lib:$LD_LIBRARY_PATH
$ psql –version
psql (PostgreSQL) 18.3

# 解决方案2:添加到系统库配置
$ sudo echo “/postgresql/fgapp/pgsql-18/lib” > /etc/ld.so.conf.d/postgresql.conf
$ sudo ldconfig

# 验证库加载
$ ldconfig -p | grep libpq
libpq.so.5 (libc6,x86-64) => /postgresql/fgapp/pgsql-18/lib/libpq.so.5
libpq.so (libc6,x86-64) => /postgresql/fgapp/pgsql-18/lib/libpq.so

4.2.3 环境变量不生效问题

# 问题现象:修改配置文件后环境变量不生效

# 排查步骤1:检查配置文件是否正确
$ cat ~/.bash_profile | grep PG
export PGHOME=/postgresql/fgapp/pgsql-18
export PGDATA=/postgresql/data

# 排查步骤2:检查是否source了配置文件
$ echo $PGHOME

# 问题原因:修改配置文件后未source

# 解决方案
$ source ~/.bash_profile
$ echo $PGHOME
/postgresql/fgapp/pgsql-18

# 排查步骤3:检查shell类型
$ echo $SHELL
/bin/bash

# 如果使用zsh,需要修改~/.zshrc
$ echo ‘source ~/.bash_profile’ >> ~/.zshrc

# 排查步骤4:检查系统级配置
$ ls -la /etc/profile.d/postgresql.sh
-rw-r–r–. 1 root root 512 Apr 2 10:00 /etc/profile.d/postgresql.sh

# 重新登录验证
$ exit
# 重新登录
$ echo $PGHOME
/postgresql/fgapp/pgsql-18

4.3 PostgreSQL数据库环境变量自动化配置

4.3.1 自动化配置脚本

# 创建自动化配置脚本
$ cat > /postgresql/scripts/pg_env_setup.sh << 'EOF' #!/bin/bash # pg_env_setup.sh # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # web: `http://www.fgedu.net.cn` # web: `http://www.fgedu.net.cn` # web: http://www.fgedu.net.cn # PostgreSQL版本 PG_VERSION="18" PG_INSTALL_DIR="/postgresql/fgapp/pgsql-${PG_VERSION}" PG_DATA_DIR="/postgresql/data" # 检查是否为root用户 if [ "$EUID" -ne 0 ]; then echo "Please run as root" exit 1 fi echo "Setting up PostgreSQL ${PG_VERSION} environment..." # 创建系统级配置文件 cat > /etc/profile.d/postgresql.sh << ENVEOF #!/bin/bash # PostgreSQL ${PG_VERSION} Environment # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # web: `http://www.fgedu.net.cn` # web: `http://www.fgedu.net.cn` export PGHOME=${PG_INSTALL_DIR} export PGDATA=${PG_DATA_DIR} export PGPORT=5432 export PGHOST=/tmp export PGCLIENTENCODING=UTF8 export PGTZ=Asia/Shanghai export PATH=\$PGHOME/bin:\$PATH export LD_LIBRARY_PATH=\$PGHOME/lib:\$LD_LIBRARY_PATH ENVEOF chmod 644 /etc/profile.d/postgresql.sh echo "Created /etc/profile.d/postgresql.sh" # 配置动态库 echo "${PG_INSTALL_DIR}/lib" > /etc/ld.so.conf.d/postgresql.conf
ldconfig
echo “Configured dynamic library path”

# 为postgres用户配置环境
su – pgsql -c “cat >> ~/.bash_profile << 'ENVEOF' # PostgreSQL Environment export PGHOME=${PG_INSTALL_DIR} export PGDATA=${PG_DATA_DIR} export PGPORT=5432 export PGDATABASE=fgedudb export PATH=\$PGHOME/bin:\$PATH export LD_LIBRARY_PATH=\$PGHOME/lib:\$LD_LIBRARY_PATH ENVEOF" echo "Configured pgsql fgedu environment" # 验证配置 echo "" echo "Environment setup completed!" echo "Please run: source /etc/profile.d/postgresql.sh" echo "Or logout and login again" EOF # 设置执行权限 $ chmod +x /postgresql/scripts/pg_env_setup.sh # 执行配置 $ sudo /postgresql/scripts/pg_env_setup.sh

风哥提示:使用自动化脚本可以快速配置环境变量,确保配置的一致性和可重复性。from PostgreSQL:www.itpux.com

Part05-风哥经验总结与分享

5.1 PostgreSQL数据库环境变量管理最佳实践

PostgreSQL数据库环境变量管理最佳实践风哥教程风哥教程风哥教程总结:

  • 统一管理:使用系统级配置文件统一管理环境变量
  • 版本隔离:多版本环境使用函数切换,避免冲突
  • 安全存储:密码使用.pgpass文件存储,不使用环境变量
  • 验证测试:配置后务必验证,确保正确生效
  • 文档记录:记录环境变量配置,便于维护
  • 自动化部署:使用脚本自动化配置,提高效率

5.2 PostgreSQL数据库环境变量检查清单

# PostgreSQL环境变量检查清单

## 基础配置检查
□ PGHOME已设置
□ PGDATA已设置
□ PGPORT已设置
□ PATH包含$PGHOME/bin
□ LD_LIBRARY_PATH包含$PGHOME/lib

## 连接配置检查
□ PGHOST设置正确
□ PGDATABASE设置正确
□ PGUSER设置正确
□ .pgpass文件配置正确

## 验证检查
□ psql命令可执行
□ pg_dump命令可执行
□ pg_restore命令可执行
□ 数据库连接正常
□ 版本号正确

## 安全检查
□ 未在环境变量中存储密码
□ .pgpass文件权限为600
□ 配置文件权限正确

5.3 PostgreSQL数据库环境管理工具推荐

PostgreSQL数据库环境管理相关工具推荐:

  • pgenv:PostgreSQL版本管理工具
  • pg_ctl:PostgreSQL服务控制工具
  • envsubst:环境变量替换工具
  • direnv:目录级环境变量管理
  • ansible:自动化配置管理工具
风哥风哥教程风哥教程风哥教程总结:正确配置环境变量是PostgreSQL数据库管理的基础,建议使用系统级配置文件统一管理,多版本环境使用函数切换,密码使用.pgpass文件安全存储。更多视频教程www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息