(二)PostgreSQL常用的配置文件(1)

PostgreSQL常用的配置文件(1)

1 postgresql.conf参数文件

postgresql.conf 是 PostgreSQL 数据库的主要配置文件,用于控制数据库实例的行为和特性,一般在$PGDATA目录下。这个文件包括了众多的配置选项,比如内存使用限制、连接设置、日志记录规则等。根据系统资源和应用需求对这些参数进行调整,可以优化数据库的性能、安全性和可用性。

以下是一些常见的postgresql.conf 配置参数及其说明,以帮助我们了解如何配置 PostgreSQL:

  1. 监听地址(listen_addresses):

    • 控制 PostgreSQL 监听哪些网络地址。您可以设置为 'localhost' 以便仅接受来自本机的连接,或者设为 '*' 以接受任何地址的连接。
    • 端口(port):

      • PostgreSQL 服务监听的端口,默认是 5432。
      • 最大连接数(max_connections):

        • 同时连接到数据库的客户端最大数量。需要根据系统资源进行适当配置。
        • 共享缓冲区(shared_buffers):

          • PostgreSQL 用于缓存数据的内存大小。通常设置为系统内存的15%-25%。
          • 工作内存(work_mem):

            • 每个数据库操作可用的内存量,影响排序、哈希操作的性能。
            • 维护工作内存(maintenance_work_mem):

              • 数据库维护操作(如索引创建和VACUUM操作)能使用的最大内存。
              • 自动清理(autovacuum):

                • 控制自动清理进程参数。自动清理用于回收空间,更新表的统计信息,非常关键。
                • 日志记录设置(log_*):

                  • 控制日志的生成和管理,如 log_statement 定义记录哪些类型的SQL语句,log_directory和log_filename定义日志文件的存储位置和名称规则等。
                  • WAL配置(wal_level, max_wal_senders等):

                    • WAL(Write-Ahead Logging)相关的配置,决定了日志的详细程度、复制功能以及点对点延迟等。
                    • 时间和区域设置(timezone, lc_*):

                      • 控制服务器的时区和区域设置,例如lc_messages控制系统消息的语言,timezone确定时间戳的时区等。

2 pg_hba.conf配置文件

pg_hba.conf 是 PostgreSQL 数据库的一个重要配置文件,用于控制客户端对数据库的访问权限,一般在$PGDATA目录下。HBA 代表“host-based authentication”,即基于主机的认证。通过编辑这个文件,我们可以细致地指定哪些用户可以从哪些主机上以何种方式连接到数据库实例中的哪个数据库。

pg_hba.conf文件中的每条记录定义了一种连接类型、一个客户端IP地址(范围)、数据库、用户以及用于该连接的认证方法。下面是pg_hba.conf中一些常用的认证方法:

  • trust:允许连接而不进行密码认证。这是最不安全的认证方法,通常仅在非常可信的环境中使用,比如仅限本机访问的配置。
  • reject:拒绝所有连接。
  • md5:使用MD5加密的密码进行认证。
  • password:使用明文密码进行认证(不推荐,除非连接是通过SSL加密)。
  • peer:基于操作系统的用户身份进行认证(仅适用于本地连接)。
  • ident:使用ident服务器进行认证(适用于TCP/IP连接)。
  • scram-sha-256:使用SCRAM-SHA-256进行密码认证。这是一种安全的认证方式,推荐使用。

    下面是一个pg_hba.conf文件中可能的示例条目:

    # 类型  数据库   用户   地址         认证方法
    local  all      all                  trust
    host   all      all    127.0.0.1/32  md5
    host   all      all    ::1/128       md5
    host   mydb     user1  192.168.0.0/24 scram-sha-256
    

    对pg_hba.conf进行的修改在重新加载配置文件或重启数据库服务后立即生效。我们可以通过PostgreSQL的pg_ctl reload命令或SQL命令SELECT pg_reload_conf();来重新加载配置,无需重启数据库服务。

    编辑此文件时要格外小心,错误的配置可能导致无法连接到数据库。建议在进行任何更改之前备份pg_hba.conf文件。

    3 .pgpass配置文件

    .pgpass 文件是一种用于存储 PostgreSQL 数据库的用户名和密码的配置文件,目的是简化客户端连接到数据库时的认证过程。通过使用 .pgpass 文件,用户或应用程序可以在不需要交互式输入密码的情况下连接数据库,这在自动化脚本和后台任务中特别有用。

    .pgpass 文件通常位于用户的主目录下,具体位置和格式要求如下:

    文件位置:

    • Linux/Unix/MacOS:文件应该命名为 .pgpass 并放在用户的主目录下,路径通常是 ~/.pgpass。
    • Windows:文件应该命名为 pgpass.conf 并放在 %APPDATA%\postgresql\ 目录下。

      文件权限:

      • Linux/Unix/MacOS:为了确保安全性,.pgpass 文件的权限应该设置为仅用户可读(chmod 0600 ~/.pgpass),以避免其他用户查看文件内容。

        文件格式:

        .pgpass 文件中的每一行都应该遵循以下格式:

        hostname:port:database:username:password
        
        • hostname:要连接的数据库服务器的主机名或IP地址。使用 * 表示任意主机。
        • port:数据库服务器的端口。使用 * 表示任意端口。
        • database:要连接的数据库名称。使用 * 表示任意数据库。
        • username:用于认证的用户名。
        • password:对应用户名的密码。

          我们可以在 .pgpass 文件中添加多条记录,每条记录占一行,以支持不同的数据库连接。

          示例:

          *:*:*:myuser:mypassword
          localhost:5432:mydb:myuser:mypassword
          192.168.1.100:5432:*:otheruser:otherpassword
          

          注意: 尽管使用 .pgpass 文件可以避免在每次连接数据库时输入密码,但要注意保护好该文件,防止密码泄露。

          当使用如 psql 或其他基于 libpq 的客户端程序时,如果连接字符串中未提供密码,客户端会自动寻找 .pgpass 文件以获取认证信息。

          4 pg_service.conf

          pg_service.conf 文件是 PostgreSQL 用来存储数据库连接信息的一个服务文件。通过在 pg_service.conf 文件中定义服务,应用程序和客户端工具可以使用服务名代替完整的连接字符串来连接到数据库。这样可以简化连接过程,并增加配置的灵活性。下面是如何配置 pg_service.conf 文件的一些基础步骤:

          步骤 1: 定位或创建 pg_service.conf 文件

          首先,确定 pg_service.conf 文件的位置。如果文件不存在,您可以自己创建一个。pg_service.conf`这个文件通常位于以下位置之一:

          • Linux/Unix/MacOS: ~/.pg_service.conf
          • Windows: %APPDATA%\postgresql\pg_service.conf

            步骤 2: 编辑 pg_service.conf 文件

            使用文本编辑器打开 pg_service.conf 文件。文件中的每一项服务都需要在新行里定义,格式如下:

            [服务名]
            host=主机名
            port=端口号
            dbname=数据库名
            user=用户名
            password=密码
            
            • 服务名:方括号 [ ] 内的文本,代表你将用来引用数据库连接的名字。
            • host:数据库服务器的地址,可以是 IP 地址或域名。
            • port:数据库服务器的端口,默认是 5432。
            • dbname:你要连接的数据库名称。
            • user:用于连接数据库的用户名。
            • password:用户的密码。

              示例配置:

              [myservice]
              host=localhost
              port=5432
              dbname=mydatabase
              user=myuser
              password=mypassword
              

              步骤 3: 保存并使用服务

              保存 pg_service.conf 文件后,我们就可以在支持的 PostgreSQL 客户端工具中使用定义的服务名来连接数据库了。例如,如果我们使用 psql 工具,可以这样连接到上面定义的服务:

              psql service=myservice
              

              这条命令会告诉 psql 使用 pg_service.conf 文件中 [myservice] 部分定义的参数来连接数据库。

              注意事项:

              • 确保 pg_service.conf 文件的权限设置正确,避免敏感信息(例如数据库密码)暴露给不该有权限的用户。
              • 使用 pg_service.conf 文件可以帮助我们组织和管理数据库连接信息,但请谨慎处理包含明文密码的文件。

                使用 pg_service.conf 提供了一种方便且灵活的方式来管理 PostgreSQL 数据库连接信息,特别是在需要管理多个数据库连接时。

                5 pg_ident.conf配置文件

                pg_ident.conf 文件是 PostgreSQL 中用于配置用户映射的文件。通过用户映射,数据库管理员可以控制哪些操作系统用户能以哪些数据库用户身份连接到数据库,特别是在使用像 “peer” 或 “ident” 这样的基于操作系统身份的认证方法时非常有用。该文件通常位于 PostgreSQL 数据目录中,与 postgresql.conf 和 pg_hba.conf 等关键配置文件一起。

                配置说明

                在 pg_ident.conf 文件中,每个映射都由以下三个部分组成:

                • 映射名称:一个标识符,用于在 pg_hba.conf 文件中引用该映射规则。
                • 系统用户名:操作系统级别的用户名,或者当使用 “ident” 认证时的 ident 服务返回的用户名。
                • 数据库用户名:数据库内部的用户名,该操作系统用户将映射到此数据库用户。

                  格式

                  每行的格式如下:

                  映射名称 系统用户名 数据库用户名
                  

                  字段之间由空格或制表符分隔。可以使用 # 开头的行添加注释。

                  示例

                  假设我们有一个操作系统用户 john,我们希望他能够作为数据库用户 dbadmin 连接到数据库。我们可以在 pg_ident.conf 文件中添加以下条目:

                  # 映射名称    系统用户名    数据库用户名
                  myusermap       john           dbadmin
                  

                  然后,在 pg_hba.conf 文件中,我们需要相应地配置使用这个映射名称。例如:

                  # 类型   数据库     用户    地址       认证方法   映射名称
                  local   all        all              peer        myusermap
                  

                  这样配置之后,当操作系统用户 john 尝试通过 Unix 套接字(local 表示本地连接)连接到任何数据库时,PostgreSQL 会试图使用 peer 方法进行认证。根据 myusermap 映射规则,john 会以 dbadmin 用户身份进行认证。

                  注意事项

                  • 修改 pg_ident.conf 文件后,通常需要重新加载 PostgreSQL 配置或重启数据库服务才能使改动生效(例如,通过运行 SELECT pg_reload_conf(); 命令)。
                  • 在配置用户映射时要小心,因为不当的配置可能会导致安全问题,允许未授权的用户获得对数据库的访问权限。

                    谨记:心存敬畏,行有所止。