PostgreSQL 是一个功能强大的开源对象关系数据库系统,它使用并扩展了 SQL 语言,并结合了许多功能,可以安全地存储和扩展最复杂的数据工作负载。PostgreSQL 的起源可以追溯到 1986 年,作为加州大学伯克利分校 POSTGRES 项目的一部分,并且在核心平台上拥有超过 35 年的积极开发经验。PostgreSQL 因其经过验证的架构、可靠性、数据完整性、强大的功能集、可扩展性以及软件背后的开源社区始终如一地提供高性能和创新解决方案的奉献精神而赢得了良好的声誉。PostgreSQL 可在所有主要操作系统上运行,自 2001 年以来一直符合 ACID 标准,并具有强大的附加组件,例如流行的 PostGIS 地理空间数据库扩展器。毫不奇怪,PostgreSQL 已成为许多人和组织选择的开源关系数据库。

PostgreSQL 除了其强大的功能外,还支持许多环境变量,这些环境变量可以通过在命令行中设置或在启动脚本中设置来使用,以控制其行为。了解这些环境变量可以帮助 DBA 更好地管理 PostgreSQL 数据库。

接下来,我们来介绍几个常用的Postgres环境变量。

1. PGHOST

指定 PostgreSQL 服务器的主机名或 IP 地址。它通常用于客户端工具,如psql,以指定要连接的数据库服务器的位置。

[postgres@shawnyan ~]$ export PGHOST=192.168.8.151
[postgres@shawnyan ~]$ psql
psql (15.2)
Type "help" for help.

(postgres@192) [postgres] 10:19:34# \conninfo
You are connected to database "postgres" as user "postgres" on host "192.168.8.151" at port "5432".

2. PGPORT

指定 PostgreSQL 服务器的端口号。默认端口为5432,但是如果我们将其更改为其他端口,可以在PGPORT环境变量中指定相应的端口号。

[postgres@shawnyan ~]$ export PGPORT=6666
[postgres@shawnyan ~]$ psql
psql (15.2)
Type "help" for help.

(postgres@192) [postgres] 10:21:30# \conninfo
You are connected to database "postgres" as user "postgres" on host "192.168.8.151" at port "6666".

3. PGDATABASE

指定连接到的数据库名称。例如,我们可以设置PGDATABASE为"shawnyan",表示连接到名为"shawnyan"的数据库。

[postgres@shawnyan ~]$ export PGDATABASE=shawnyan
[postgres@shawnyan ~]$ psql
psql (15.2)
Type "help" for help.

(postgres@192) [shawnyan] 10:22:30# \conninfo
You are connected to database "shawnyan" as user "postgres" on host "192.168.8.151" at port "6666".

4. PGUSER

指定连接到 PostgreSQL 的用户名。例如,我们可以设置PGUSER为"shawnyan",表示使用"shawnyan"用户连接到PostgreSQL。

[postgres@shawnyan ~]$ export PGUSER=shawnyan
[postgres@shawnyan ~]$ psql
psql (15.2)
Type "help" for help.

(shawnyan@192) [shawnyan] 10:26:41# \conninfo
You are connected to database "shawnyan" as user "shawnyan" on host "192.168.8.151" at port "6666".

5. PGPASSWORD

指定连接到 PostgreSQL 的密码。出于安全考虑,建议仅在脚本或命令行中临时使用此环境变量,而不是在配置文件或脚本中硬编码密码。例如,我们可以设置PGPASSWORD为"shawnyan",表示使用"shawnyan"密码连接到PostgreSQL。

[postgres@shawnyan data]$ psql
Password for user shawnyan: 
psql (15.2)
Type "help" for help.

(shawnyan@192) [shawnyan] 10:29:18# \q
[postgres@shawnyan data]$ export PGPASSWORD=shawnyan
[postgres@shawnyan data]$ psql
psql (15.2)
Type "help" for help.

(shawnyan@192) [shawnyan] 10:29:28# \conninfo
You are connected to database "shawnyan" as user "shawnyan" on host "192.168.8.151" at port "6666".

6. PGDATA

指定 PostgreSQL 数据库的数据目录。例如,我们可以设置PGDATA为/var/lib/pgsql/15/data,如此在使用pg_ctl命令时,无需再次指定-D数据目录。

[postgres@shawnyan data]$ unset PGDATA
[postgres@shawnyan data]$ pg_ctl restart
pg_ctl: no database directory specified and environment variable PGDATA unset
Try "pg_ctl --help" for more information.
[postgres@shawnyan data]$ pg_ctl restart -D /var/lib/pgsql/15/data
waiting for server to shut down.... done
server stopped
waiting for server to start....2024-02-17 10:31:02.876 CST [17844] LOG:  redirecting log output to logging collector process
2024-02-17 10:31:02.876 CST [17844] HINT:  Future log output will appear in directory "log".
 done
server started
[postgres@shawnyan data]$ export PGDATA=/var/lib/pgsql/15/data
[postgres@shawnyan data]$ pg_ctl restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2024-02-17 10:31:18.632 CST [17866] LOG:  redirecting log output to logging collector process
2024-02-17 10:31:18.632 CST [17866] HINT:  Future log output will appear in directory "log".
 done
server started

7. PGCLIENTENCODING

指定客户端编码。如果不指定,则默认选择服务器设定。例如,如果我们想使用UTF-8编码,可以将PGCLIENTENCODING设置为"UTF8"。

[postgres@shawnyan log]$ export PGCLIENTENCODING=EUC_TW
[postgres@shawnyan log]$ psql
psql (15.2)
Type "help" for help.

(shawnyan@192) [shawnyan] 10:52:24# show client_encoding ;
 client_encoding 
-----------------
 EUC_TW
(1 row)

8. PGOPTIONS

指定自定义设置选项。例如,运行回归测试套件时使用的自定义服务器设置可以在 PGOPTIONS 环境变量中设置。

make check PGOPTIONS="-c debug_parallel_query=regress -c work_mem=50MB"

再如,可以在启用新客户端会话时加入变量设置。

[postgres@shawnyan ~]$ env PGOPTIONS="-c statement_timeout=10s" psql
psql (15.2)
Type "help" for help.

(shawnyan@192) [shawnyan] 10:59:47# select pg_sleep(15);
ERROR:  canceling statement due to statement timeout

9. PGDATESTYLE

指定服务器端或客户端的日期格式环境变量,也可以使用PGTZ来改变日期显示的时区。例如,

[postgres@shawnyan ~]$ psql -c 'select now()'
              now              
-------------------------------
 2024-02-17 11:12:58.144437+08
(1 row)

[postgres@shawnyan ~]$ export PGDATESTYLE='Postgres, MDY'
[postgres@shawnyan ~]$ psql -c 'select now()'
                 now                 
-------------------------------------
 Sat Feb 17 11:13:03.115172 2024 CST
(1 row)

[postgres@shawnyan ~]$ export PGTZ='PST8PDT'
[postgres@shawnyan ~]$ psql -c 'select now()'
                 now                 
-------------------------------------
 Fri Feb 16 19:13:12.459388 2024 PST
(1 row)

类似地,还有其他一些不太常用的环境变量,如:PGLOCALEDIR,PGSSLMODE,PGCONNECT_TIMEOUT,PGAPPNAME,PG_OOM_ADJUST_FILE,PG_OOM_ADJUST_VALUE,PG_REGRESS_DIFF_OPTS,这里不再一一介绍。

本文由mdnice多平台发布


严少安
6 声望3 粉丝

DBA