PostgreSQL 教程

PostgreSQL 安装与配置

本章将带你一步步在不同的操作系统上安装 PostgreSQL,并强调每种环境下需要注意的核心事项。

1. 安装前的准备工作

在正式开始安装之前,评估以下几个关键因素,能确保你的安装过程更加顺畅。

1.1 系统要求

PostgreSQL 的系统要求通常不高,但具体取决于你的使用场景。对于开发或测试,一台普通电脑就足够了。但如果用于生产环境,请仔细考虑以下因素:

  • 操作系统: PostgreSQL 支持多种操作系统,包括 Windows、macOS、Linux 等。请根据你的服务器或工作站选择合适的版本。
  • 硬件资源: 评估 CPU、内存 (RAM) 和磁盘空间。针对小型的开发数据库,极少的资源即可运行;但如果是拥有大量并发连接的大型数据库,增加内存和使用更快的存储设备会大幅提升性能。
  • 存储规划: 根据预期的数据库规模规划存储空间。PostgreSQL 擅长处理大型数据库,但充足的物理存储是前提。建议使用 SSD 固态硬盘以获得更快的读写速度。
  • 网络条件: 如果你计划远程访问数据库,稳定且安全的网络连接至关重要。

1.2 选择安装方式

安装 PostgreSQL 有多种途径,各有优势:

  • 官方安装程序: 这是最常见的方法,为 Windows、macOS 和 Linux 提供了对新手友好的图形界面安装包。它通常捆绑了 pgAdmin 等基础工具。
  • 包管理器 (Package Manager): 在 Linux 系统上,使用包管理器(如 Debian/Ubuntu 上的 apt,或 CentOS/RHEL 上的 yum)可以简化安装过程并自动处理依赖关系。
  • Docker 容器: Docker 允许你在容器中运行 PostgreSQL,这非常适合在不同环境中保持一致的部署体验。
  • 源码编译: 高级用户可以选择直接从源码编译 PostgreSQL,以实现最大程度的定制化。

1.3 安全注意事项

在安装和配置 PostgreSQL 时,安全是重中之重:

  • 用户账户: 在安装过程中,系统会创建一个 PostgreSQL 超级用户账户(通常名为 postgres)。务必为该账户设置一个强密码。
  • 防火墙: 配置你的防火墙以允许通过 5432 端口(PostgreSQL 的默认端口)进行连接,但仅限受信任的来源。
  • 身份验证: PostgreSQL 支持多种身份验证方式。默认的 ident 模式可能不适合生产环境。建议使用 md5 或更加安全的 scram-sha-256 进行密码加密。

2. 在 Windows 上安装

官方的 PostgreSQL 安装程序为 Windows 用户提供了最直接的安装方式。

2.1 下载安装程序

  1. 访问 PostgreSQL 官方网站 (www.postgresql.org)。
  2. 导航至“Downloads (下载)”页面。
  3. 选择 Windows 版本。
  4. 下载你需要的 PostgreSQL 版本的安装程序。

2.2 运行安装程序

  1. 双击运行下载的 .exe 文件。
  2. 按照屏幕上的图形界面提示进行操作。
  3. 安装程序会引导你完成以下核心步骤:
    • 安装目录 (Installation Directory): 选择 PostgreSQL 的安装位置。默认路径通常是 C:\Program Files\PostgreSQL\<版本号>
    • 数据目录 (Data Directory): 这是存放你数据库文件的位置。默认路径通常是 C:\Program Files\PostgreSQL\<版本号>\data。为了兼顾性能和备份需求,通常建议将数据存储在单独的硬盘驱动器上。
    • 组件 (Components): 选择要安装的组件。建议勾选核心的 PostgreSQL Server (服务器)、pgAdmin (图形化管理工具) 以及 Command Line Tools (命令行工具)。
    • 密码 (Password): 为超级用户 postgres 设置强密码。该用户在数据库中拥有最高管理员权限。
    • 端口 (Port): 默认端口为 5432。除非有特殊原因导致端口冲突,否则保持默认即可。
    • 本地化 (Locale): 选择数据库集群的默认区域设置。

2.3 验证安装

安装完成后,你可以通过以下方式验证:

  • pgAdmin: 启动 pgAdmin,使用 postgres 用户和安装时设置的密码连接到 PostgreSQL 服务器。
  • psql: 打开 Windows 命令提示符 (CMD),输入 psql -U postgres。这将以 postgres 用户的身份连接到服务器,系统会提示你输入密码。

3. 在 macOS 上安装

在 macOS 上,你可以使用 EnterpriseDB 提供的图形化安装程序,或者使用 Homebrew 这样的包管理器。

3.1 使用 EnterpriseDB 安装程序

这种方法与 Windows 的安装过程非常相似。

  1. 访问 PostgreSQL 官网并导航至“Downloads”。
  2. 选择 macOS 版本并下载对应的安装包。
  3. 运行下载的 .app 镜像文件。
  4. 按照屏幕提示,依次选择安装目录、数据目录、组件、密码、端口和本地化设置。

3.2 使用 Homebrew

Homebrew 是 macOS 上极受欢迎的包管理工具。

如果你还没安装 Homebrew,请先在终端 (Terminal) 运行以下命令安装:

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

更新 Homebrew 软件库:

brew update

安装 PostgreSQL:

brew install postgresql

启动 PostgreSQL 后台服务:

brew services start postgresql

验证安装是否成功:

psql -U postgres

配置环境变量
通过 Homebrew 安装后,你可能需要将 PostgreSQL 的路径添加到环境变量中。
在终端执行以下命令将其加入 PATH:

echo 'export PATH="/opt/homebrew/opt/postgresql@14/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

(注意:请根据你安装的具体版本和使用的 Shell 配置文件进行相应调整。)

4. 在 Linux (Debian/Ubuntu) 上安装

在基于 Debian 的系统(如 Ubuntu)上,apt 包管理器是你的最佳选择。

4.1 添加 PostgreSQL 仓库并安装

更新本地软件包索引:

sudo apt update

安装 postgresql 及其附加组件:

sudo apt install postgresql postgresql-contrib

注:postgresql-contrib 包内含许多实用的附加工具和功能扩展。

4.2 配置与启动

安装完成后,PostgreSQL 服务通常会自动启动。你可以用以下命令检查其运行状态:

sudo systemctl status postgresql

默认情况下,PostgreSQL 使用 "peer(对等)" 身份验证模式。这意味着如果你当前登录的操作系统用户也是 postgres,你就可以直接无密码连接数据库。

4.3 提升安全性配置

首先,为数据库中的 postgres 用户设置密码:

sudo -u postgres psql

进入数据库命令行后执行 SQL:

ALTER USER postgres PASSWORD '输入你的强密码';
\q

接着,配置 PostgreSQL 使用安全的 md5scram-sha-256 验证模式。这需要编辑 pg_hba.conf 文件(它掌管着客户端的认证规则):

sudo nano /etc/postgresql/<版本号>/main/pg_hba.conf

找到关于本地连接的部分,将 METHOD(认证方法)更改为 md5scram-sha-256。示例如下:

# "local" 仅限 Unix 域套接字连接
local   all             postgres                                md5
# IPv4 本地连接:
host    all             all             127.0.0.1/32            md5
# IPv6 本地连接:
host    all             all             ::1/128                 md5

保存退出后,重启服务使配置生效:

sudo systemctl restart postgresql

5. 在 Linux (CentOS/RHEL) 上安装

在基于 Red Hat 的系统(如 CentOS/RHEL)上,我们使用 yum 包管理器。

5.1 添加仓库并安装

从官方 PostgreSQL Yum 仓库安装 RPM 源包:

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

(提示:请根据你的 CentOS/RHEL 版本调整链接中的 EL-8 部分。)

安装 PostgreSQL 服务器和客户端包:

sudo yum install -y postgresql14-server postgresql14

(提示:请根据你想要的 PostgreSQL 版本调整 postgresql14。)

5.2 初始化数据库

首次安装后必须初始化数据库目录:

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

5.3 启动与开机自启

启动 PostgreSQL 服务:

sudo systemctl start postgresql-14

设置服务为开机自动启动:

sudo systemctl enable postgresql-14

5.4 安全性配置

CentOS/RHEL 上的安全配置步骤与 Debian/Ubuntu 相似:

  1. postgres 用户设置密码。
  2. 编辑对应的 pg_hba.conf 文件,将身份验证修改为 md5scram-sha-256
  3. 重启 PostgreSQL 服务 (sudo systemctl restart postgresql-14)。

6. 使用 Docker 安装 PostgreSQL

Docker 提供了一种极其便捷的方式,在独立隔离的容器中运行 PostgreSQL,确保你的应用在任何环境中都能得到一致的部署结果。

6.1 安装 Docker

如果你尚未安装 Docker,请访问 Docker 官网 (www.docker.com) 获取适合你操作系统的安装指南。

6.2 运行 PostgreSQL 容器

首先,拉取官方的 PostgreSQL 镜像:

docker pull postgres

(你也可以指定具体版本,例如:docker pull postgres:14)

启动并运行容器:

docker run --name postgresdb -e POSTGRES_PASSWORD=你的强密码 -p 5432:5432 -d postgres

参数详解:

  • --name postgresdb: 为你的容器命名。
  • -e POSTGRES_PASSWORD=你的强密码: 设置 postgres 用户的环境变量密码。注意: 在生产环境中绝对不要硬编码密码,应当使用 Docker Secrets 或安全的环境变量注入机制。
  • -p 5432:5432: 将宿主机的 5432 端口映射到容器内部的 5432 端口。
  • -d: 让容器在后台(分离模式)运行。

验证容器是否正在运行:

docker ps

6.3 连接到容器

容器运行后,你可以像连接普通本地数据库一样,使用 psql 或 pgAdmin 进行连接。主机名 (Hostname) 使用 localhost127.0.0.1,端口是 5432,用户为 postgres,密码为你运行容器时设定的密码。

6.4 使用 Docker 卷 (Volumes) 实现数据持久化

默认情况下,一旦 Docker 容器被停止或删除,内部产生的数据就会永久丢失。为了持久化保存数据,我们需要使用 Docker 数据卷 (Volumes)。

第一步:创建一个 Docker 卷

docker volume create postgres_data

第二步:挂载数据卷并运行容器

docker run --name postgresdb -e POSTGRES_PASSWORD=你的强密码 -p 5432:5432 -v postgres_data:/var/lib/postgresql/data -d postgres

参数解析:

  • -v postgres_data:/var/lib/postgresql/data: 这一步极为关键,它将你刚创建的 postgres_data 数据卷,挂载到了容器内部存放数据的默认目录 /var/lib/postgresql/data 上。这样即使容器被销毁,数据依然安全存放在宿主机的数据卷中。