PostgreSQL 安装:一份全面的分步指南

在 Linux、macOS 或 Windows 上安装 PostgreSQL,然后创建用户、验证访问权限并配置安全的网络连接。

PostgreSQL 安装:全面分步指南

PostgreSQL 的安装通常很简单,但在 Linux、macOS 和 Windows 上的具体细节有所不同。目标不仅仅是让服务运行起来;你还需要一个可用的数据库用户、一种干净的连接方式以及安全的网络访问默认设置。

使用本指南为开发或小型服务器设置安装 PostgreSQL,然后根据你操作系统的当前软件包调整路径和版本号。

前提条件

在开始安装过程之前,请确保你的系统满足以下基本要求:

  • 管理权限:你需要在 Linux/macOS 上拥有 sudo 权限,或在 Windows 上拥有管理员权限,才能安装软件和配置系统服务。
  • 互联网连接:需要下载安装包。
  • 足够的磁盘空间:虽然初始安装相对较小,但你的数据库会增长。请确保你有足够的磁盘空间来存储数据。

在 Linux 上安装

Linux 发行版通常通过其默认软件包仓库提供 PostgreSQL,这使得安装非常简单。

Debian/Ubuntu

对于基于 Debian 的系统(如 Ubuntu),你可以使用 apt 安装 PostgreSQL。

  1. 更新软件包列表:始终先更新包管理器的列表,以确保你获得最新的可用软件包。

    sudo apt update
    
  2. 安装 PostgreSQL:安装 postgresql 软件包,它通常包含服务器、客户端工具和文档。你可以指定一个版本(例如 postgresql-16),或者仅使用 postgresql 安装默认版本。

    sudo apt install postgresql postgresql-contrib
    

    postgresql-contrib 软件包提供了额外的实用程序和功能。

    注意:在 Debian/Ubuntu 上,PostgreSQL 服务通常在安装后自动启动,并且会创建一个默认的 postgres 用户(既是系统用户也是数据库用户)。

  3. 验证安装:检查服务状态。

    sudo systemctl status postgresql
    

    你应该会看到输出显示 active (exited)active (running)。如果主服务单元管理多个作为独立进程运行的集群,那么 exited 是正常的。

RHEL/CentOS/Fedora

对于基于 Red Hat 的系统,请使用 dnf(对于较旧的 CentOS/RHEL 版本,使用 yum)。

  1. 安装 PostgreSQL 仓库:PostgreSQL 提供了自己的仓库,用于获取比默认操作系统仓库中可能提供的版本更新的版本。建议使用此仓库获取最新的稳定版本。

    sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    # 对于 EL-9,请使用:sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    # 如果需要,请将 EL-8-x86_64 替换为你特定的操作系统版本和架构。
    
  2. 禁用默认的 PostgreSQL 模块(如果适用):某些 RHEL/CentOS 版本有一个默认的 PostgreSQL 模块。禁用它以避免与 PGDG 仓库冲突。

    sudo dnf -qy module disable postgresql
    
  3. 安装 PostgreSQL:安装服务器和 contrib 软件包。将 16 替换为你想要的版本。

    sudo dnf install -y postgresql16-server postgresql16-contrib
    
  4. 初始化数据库集群:与 Debian/Ubuntu 不同,在基于 RHEL 的系统上,你通常需要手动初始化数据库集群。

    sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
    

    根据你安装的版本调整路径 /usr/pgsql-16/binpostgresql-16-setup

  5. 启动并启用 PostgreSQL 服务:启动服务并将其配置为开机自启。

    sudo systemctl enable postgresql-16
    sudo systemctl start postgresql-16
    
  6. 验证安装:检查服务状态。

    sudo systemctl status postgresql-16
    

在 macOS 上安装

在 macOS 上,Homebrew 是安装 PostgreSQL 的推荐且最简单的方法。

  1. 安装 Homebrew(如果你还没有安装):

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    

    按照屏幕上的说明进行操作,包括将 Homebrew 添加到你的 PATH 中。

  2. 安装 PostgreSQL:使用 Homebrew 安装 PostgreSQL。你可以指定一个版本(例如 postgresql@16),或者默认安装最新的稳定版本。

    brew install postgresql
    
  3. 启动 PostgreSQL 服务:Homebrew 将 PostgreSQL 安装为后台服务。

    brew services start postgresql
    

    停止它:brew services stop postgresql 重启它:brew services restart postgresql

  4. 验证安装:检查 psql 是否可用并已连接。

    psql -V
    

    要连接到默认数据库:

    psql postgres
    

    提示:如需可视化的应用程序体验,请考虑使用 Postgres.app,它提供了一种无需命令行即可运行和管理 PostgreSQL 的简单方法。

在 Windows 上安装

对于 Windows,EnterpriseDB (EDB) 图形化安装程序是本地 PostgreSQL 设置最常用的方法。

  1. 下载安装程序:访问官方 PostgreSQL 下载页面(www.postgresql.org/download/windows/)并下载适用于你 Windows 版本的最新 EDB 安装程序。

  2. 运行安装程序:执行下载的 .exe 文件。安装向导将指导你完成整个过程。

    • 安装目录:选择 PostgreSQL 的安装位置(例如 C:\Program Files\PostgreSQL\16)。
    • 数据目录:选择数据库文件的存储位置(例如 C:\Program Files\PostgreSQL\16\data)。这至关重要,理想情况下应位于快速、可靠的磁盘上。
    • postgres 超级用户密码:为默认的 postgres 数据库超级用户设置一个强密码。记住此密码,因为你需要它来进行初始连接。
    • 端口:默认的 PostgreSQL 端口是 5432。除非有冲突,否则通常可以保留默认设置。
    • 区域设置:为你的数据库集群选择默认区域设置。
  3. Stack Builder:安装完成后,EDB 安装程序可能会启动 Stack Builder。此工具有助于安装额外的驱动程序、工具和扩展(如 pgAdmin 4)。强烈建议安装 pgAdmin 4,以便使用图形界面管理你的数据库。

  4. 验证安装:安装完成后,你可以打开 pgAdmin 4(通常在“开始”菜单的“PostgreSQL 16”或类似文件夹下),并尝试使用 postgres 超级用户和你设置的密码连接到本地服务器。

初始配置和安装后步骤

安装 PostgreSQL 后,这些步骤对于功能性和安全的设置至关重要。

1. 设置 PATH 环境变量(可选,主要针对 Windows/macOS,如果找不到 psql

为了从任何终端位置轻松运行 psql 和其他 PostgreSQL 二进制文件,请将 PostgreSQL 的 bin 目录添加到系统的 PATH 中。

  • Linux:通常由包管理器处理,但如果没有,请将 /usr/pgsql-X.Y/bin(RHEL)或 /usr/lib/postgresql/X.Y/bin(Debian/Ubuntu)添加到你的 PATH
  • macOS (Homebrew)brew 会自动处理此操作。
  • Windows:在 EDB 安装过程中,有一个添加到 PATH 的选项。如果未选择,你可以通过 系统属性 > 环境变量 手动添加 C:\Program Files\PostgreSQL\16\bin(调整版本)。

2. 访问 psql 终端

psql 是 PostgreSQL 的命令行界面,对于管理和查询至关重要。

  • Linux/macOS:切换到 postgres 系统用户(安装期间创建)。

    sudo -i -u postgres
    psql
    

    你现在已作为 postgres 用户连接到 postgres 数据库。输入 \q 退出。

  • Windows:从开始菜单(PostgreSQL 16 > SQL Shell (psql))打开 SQL Shell (psql)。它将提示你输入服务器详细信息和 postgres 用户密码。

3. 创建新的数据库用户和数据库

最佳实践是不要使用 postgres 超级用户进行日常应用程序操作。创建一个新的专用用户和数据库。

  1. postgres 超级用户身份登录(如上所示)。

  2. 创建一个新用户(角色)

    CREATE USER myuser WITH PASSWORD 'strong_password';
    

    提示:将 myuserstrong_password 替换为安全的凭据。

  3. 创建一个新数据库并分配所有权

    CREATE DATABASE mydatabase OWNER myuser;
    
  4. 授予权限(如果需要,或者 CREATE DATABASE 的所有者会处理基本操作)

    GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
    
  5. 退出 psql

    \q
    

4. 配置 pg_hba.conf 以实现网络访问

pg_hba.conf 文件控制客户端身份验证。默认情况下,PostgreSQL 可能只允许来自 localhost(127.0.0.1)的连接。

  • 位置:此文件通常位于 PostgreSQL 数据目录中(例如,Debian/Ubuntu 上的 /var/lib/postgresql/16/main/pg_hba.conf,RHEL 上的 /var/lib/pgsql/16/data/pg_hba.conf,或 Windows 上的 C:\Program Files\PostgreSQL\16\data\pg_hba.conf)。

  • 编辑文件(以 root/管理员身份):

    sudo nano /etc/postgresql/16/main/pg_hba.conf
    

    (根据你的操作系统和版本调整路径)。

    要允许 myuser 使用密码身份验证从受信任的子网连接,请添加如下一行:

    # TYPE DATABASE  USER            ADDRESS                 METHOD
    host  mydatabase  myuser          192.168.1.0/24          scram-sha-256
    

    scram-sha-256 是现代 PostgreSQL 部署中首选的密码方法。除非服务器也受到严格的防火墙规则保护并且你确实需要广泛的访问权限,否则请避免使用 0.0.0.0/0

  • 重新加载 PostgreSQL:修改 pg_hba.conf 后,你必须重新加载 PostgreSQL 服务才能使更改生效。

    sudo systemctl reload postgresql # Linux
    # 对于 macOS 上的 Homebrew:
    # brew services restart postgresql
    # 对于 Windows,通过 Services.msc 重启 PostgreSQL 服务
    

5. 配置 postgresql.conf(网络监听)

默认情况下,PostgreSQL 通常只监听 localhost。要接受来自其他机器的连接,你需要修改 postgresql.conf

  • 位置:此文件通常与 pg_hba.conf 位于同一目录中。

  • 编辑文件

    sudo nano /etc/postgresql/16/main/postgresql.conf
    

    找到 listen_addresses 参数,并且仅在远程客户端需要连接时更改它:

    #listen_addresses = 'localhost' # 要监听的 IP 地址;
    listen_addresses = 'localhost,192.168.1.10'
    

    使用服务器的真实私有 IP 地址代替 192.168.1.10listen_addresses = '*' 也可以,但它应与限制性的 pg_hba.conf 和防火墙规则配合使用。

  • 重启 PostgreSQL:对 postgresql.conf 的更改需要完全重启服务。

    sudo systemctl restart postgresql # Linux
    # brew services restart postgresql # macOS
    # 对于 Windows,通过 Services.msc 重启 PostgreSQL 服务
    

验证你的安装

完成所有配置后,执行最终验证:

  1. 检查 PostgreSQL 服务状态systemctl status postgresqlbrew services list 或 Windows 服务)。

  2. 以你的新用户身份连接到你的新数据库

    psql -h localhost -U myuser -d mydatabase
    

    系统将提示你输入 myuser 的密码。如果成功,你将看到 mydatabase=> 提示符。输入 \q 退出。

    如果从另一台机器连接,请将 localhost 替换为服务器的 IP 地址。

提示和最佳实践

  • 强密码:始终为所有数据库用户(尤其是 postgres 超级用户)使用强且唯一的密码。
  • 专用数据目录:对于生产环境,考虑将数据目录放在专用卷或 RAID 阵列上,以提高性能和可靠性。
  • 定期备份:从第一天起就实施稳健的备份策略。PostgreSQL 的 pg_dumppg_basebackup 实用程序是执行此操作的绝佳工具。
  • 保持更新:保持你的 PostgreSQL 安装更新,以受益于错误修复、安全补丁和新功能。使用系统的包管理器或遵循 EDB 安装程序的更新过程。
  • 防火墙配置:如果允许远程连接,请确保你的系统防火墙(例如 ufwfirewalld、Windows 防火墙)已配置为允许端口 5432(或你选择的端口)上的入站流量。

要点

安装 PostgreSQL 后,验证服务,使用 psql 连接,创建一个应用程序角色,并保持远程访问范围狭窄。对于生产环境,在数据库开始保存重要数据之前,你的下一步应该是备份和监控。