贝博恩创新科技网

PostgreSQL在Linux上如何安装配置?

目录

  1. 第一部分:安装 PostgreSQL

    PostgreSQL在Linux上如何安装配置?-图1
    (图片来源网络,侵删)
    • 使用 APT 包管理器 (推荐用于 Ubuntu/Debian)
    • 使用 YUM/DNF 包管理器 (推荐用于 CentOS/RHEL/Fedora)
    • 从源码编译安装 (高级用户)
    • 验证安装
  2. 第二部分:PostgreSQL 基础配置

    • 初始化数据库集群
    • 启动、停止和重启服务
    • 连接到 PostgreSQL 服务器
    • 修改 postgres 用户密码
  3. 第三部分:数据库基本操作

    • 创建数据库
    • 创建用户和角色
    • 权限管理
    • 连接到特定数据库
  4. 第四部分:数据操作

    • 创建表
    • 插入、查询、更新、删除数据
    • 使用 psql 的元命令
  5. 第五部分:进阶配置与工具

    PostgreSQL在Linux上如何安装配置?-图2
    (图片来源网络,侵删)
    • 配置远程访问
    • 使用 pgAdmin 进行图形化管理
    • 使用 pg_dumppg_restore 进行备份与恢复
    • 开机自启配置
  6. 第六部分:常见问题与排错

    • 如何查看错误日志?
    • 连接失败怎么办?

第一部分:安装 PostgreSQL

使用 APT 包管理器 (Ubuntu/Debian)

这是在 Debian 系统上最简单、最推荐的方式。

  1. 导入 APT 仓库密钥 PostgreSQL 官方维护着自己的 APT 仓库,需要先导入它们的 GPG 密钥以确保软件包的完整性和真实性。

    # 下载密钥环文件
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  2. 添加 APT 仓库源 创建一个 sources.list.d 文件来添加 PostgreSQL 官方源。

    PostgreSQL在Linux上如何安装配置?-图3
    (图片来源网络,侵删)
    # 创建源列表文件
    sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
    • $(lsb_release -cs) 会自动检测你的 Ubuntu/Debian 版本代号(如 jammy, focal, buster, bullseye)。
  3. 更新包列表并安装 更新你的系统包列表,然后安装 PostgreSQL 服务器。

    # 更新包列表
    sudo apt update
    # 安装 PostgreSQL 服务器(默认安装最新稳定版)
    sudo apt install postgresql postgresql-contrib
    • postgresql: 核心服务器程序。
    • postgresql-contrib: 包含一些额外的实用工具和功能。

使用 YUM/DNF 包管理器 (CentOS/RHEL/Fedora)

  1. 安装 EPEL 仓库 yumdnf 默认不包含 PostgreSQL 官方源,需要先安装 EPEL (Extra Packages for Enterprise Linux) 仓库。

    # 对于 CentOS/RHEL 7/8
    sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    # 对于 Fedora
    sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/FEDORA-$(rpm -E %{fedora})-x86_64/pgdg-fedora-repo-latest.noarch.rpm
  2. 安装 PostgreSQL 服务器 安装你需要的 PostgreSQL 版本,这里以安装 PostgreSQL 15 为例。

    # 对于使用 yum 的系统 (CentOS/RHEL 7)
    sudo yum install -y postgresql15-server postgresql15-contrib
    # 对于使用 dnf 的系统 (CentOS/RHEL 8+, Fedora)
    sudo dnf install -y postgresql15-server postgresql15-contrib
  3. 初始化数据库 使用 postgresql-15-setup 脚本初始化数据库集群。

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

从源码编译安装 (高级用户)

这种方式灵活性最高,但最复杂,不推荐新手使用。

  1. 安装编译依赖

    # Ubuntu/Debian
    sudo apt install build-essential libreadline-dev zlib1g-dev flex bison
    # CentOS/RHEL
    sudo yum groupinstall "Development Tools"
    sudo yum install readline-devel zlib-devel flex bison
  2. 下载并解压源码

    wget https://ftp.postgresql.org/pub/source/v15.3/postgresql-15.3.tar.gz
    tar -xvzf postgresql-15.3.tar.gz
    cd postgresql-15.3
  3. 配置、编译和安装

    # 配置安装路径(/usr/local/pgsql)
    ./configure --prefix=/usr/local/pgsql
    # 编译(需要较长时间)
    make
    # 安装(需要 root 权限)
    sudo make install

验证安装

安装完成后,PostgreSQL 服务通常会自动启动,我们可以检查其状态。

# Ubuntu/Debian
sudo systemctl status postgresql
# CentOS/RHEL/Fedora
sudo systemctl status postgresql-15

如果看到 active (running),则表示安装成功。


第二部分:PostgreSQL 基础配置

初始化数据库集群

  • APT 安装:这一步在安装过程中通常自动完成。
  • YUM/DNF 安装:你需要手动运行 initdb 命令(如上一步所示)。

数据库集群的数据文件默认存储在:

  • Ubuntu/Debian: /var/lib/postgresql/<版本号>//main/
  • CentOS/RHEL: /var/lib/pgsql/<版本号>/data/

启动、停止和重启服务

# 启动服务
sudo systemctl start postgresql
# 停止服务
sudo systemctl stop postgresql
# 重启服务
sudo systemctl restart postgresql
# 设置开机自启
sudo systemctl enable postgresql

连接到 PostgreSQL 服务器

PostgreSQL 安装后会创建一个名为 postgres 的超级用户和一个同名的操作系统用户,我们可以通过 psql 命令行工具连接。

# 切换到 postgres 操作系统用户
sudo -i -u postgres
# 连接到 PostgreSQL 服务器(会默认连接到 postgres 数据库)
psql

成功连接后,你会看到 postgres=# 的提示符。

修改 postgres 用户密码

psql 命令行中,使用 ALTER USER 命令。

postgres=# \password postgres
Enter new password:
Enter it again:

或者直接使用 SQL 语句:

ALTER USER postgres WITH PASSWORD 'your_new_strong_password';

注意:在生产环境中,请务必使用强密码。


第三部分:数据库基本操作

创建数据库

psql 中,使用 CREATE DATABASE 命令。

CREATE DATABASE myapp_db;

或者在命令行中直接创建:

createdb myapp_db

创建用户和角色

创建一个新用户,并赋予其创建数据库的权限。

CREATE USER myapp_user WITH PASSWORD 'another_strong_password';

在 PostgreSQL 中,"用户"和"角色"几乎没有区别,一个拥有登录权限的角色就是一个用户。

权限管理

myapp_db 数据库的所有权限授予 myapp_user

GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;

如果你想授予该用户在数据库中创建表、序列等的权限,还需要:

GRANT ALL PRIVILEGES ON SCHEMA public TO myapp_user;

连接到特定数据库

退出当前 psql 会话(使用 \q),然后重新连接到新创建的数据库。

# 退出 psql
postgres=# \q
# 使用新用户连接到新数据库
psql -d myapp_db -U myapp_user

系统可能会提示你输入 myapp_user 的密码。


第四部分:数据操作

创建表

myapp_db 数据库中,创建一个简单的 users 表。

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
  • SERIAL: 自动递增的整数类型,非常适合用作主键。
  • PRIMARY KEY: 主键约束。
  • UNIQUE: 唯一约束,确保没有重复值。
  • NOT NULL: 非空约束。
  • DEFAULT CURRENT_TIMESTAMP: 默认值为当前时间。

插入、查询、更新、删除数据

  1. 插入数据

    INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');
    INSERT INTO users (username, email) VALUES ('bob', 'bob@example.com');
  2. 查询数据

    -- 查询所有用户
    SELECT * FROM users;
    -- 查询特定用户
    SELECT * FROM users WHERE username = 'alice';
  3. 更新数据

    UPDATE users SET email = 'alice_new@example.com' WHERE username = 'alice';
  4. 删除数据

    DELETE FROM users WHERE username = 'bob';

使用 psql 的元命令

psql 中,以反斜杠 \ 开头的命令是元命令,用于与 psql 工具本身交互,而不是发送给 PostgreSQL 服务器。

  • \l: 列出所有数据库。
  • \c database_name: 连接到指定数据库。
  • \dt: 列出当前数据库中的所有表。
  • \d table_name: 显示表的详细结构(列、类型、约束等)。
  • \q: 退出 psql

第五部分:进阶配置与工具

配置远程访问

默认情况下,PostgreSQL 只监听本地回环地址 0.0.1,要允许远程连接,需要修改 postgresql.confpg_hba.conf 文件。

  1. 修改 postgresql.conf

    # 编辑配置文件
    sudo nano /etc/postgresql/15/main/postgresql.conf # (Ubuntu/Debian)
    # 或
    sudo nano /var/lib/pgsql/15/data/postgresql.conf # (CentOS/RHEL)

    找到 listen_addresses 参数,并将其修改为 ,表示监听所有网络接口。

    # - Connection Settings -
    listen_addresses = '*'     # what IP address(es) to listen on;
                               # comma-separated list of addresses;
                               # defaults to 'localhost'; use '*' for all
  2. 修改 pg_hba.conf (Host-Based Authentication) 这个文件用于控制哪些主机可以以何种方式连接。

    sudo nano /etc/postgresql/15/main/pg_hba.conf # (Ubuntu/Debian)
    # 或
    sudo nano /var/lib/pgsql/15/data/pg_hba.conf # (CentOS/RHEL)

    在文件末尾添加一行,允许来自任何 IP 地址的、使用 md5 密码认证的 myapp_user 用户连接到 myapp_db 数据库。

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    host    myapp_db        myapp_user      0.0.0.0/0               md5
    • host: 表示 TCP/IP 连接。
    • 0.0.0/0: 匹配所有 IPv4 地址,在生产环境中,应将其限制为特定的 IP 地址或 IP 段,168.1.0/24
    • md5: 使用 MD5 加密密码,对于新版本,可以考虑使用 scram-sha-256,它更安全。
  3. 重启 PostgreSQL 服务

    sudo systemctl restart postgresql

使用 pgAdmin 进行图形化管理

pgAdmin 是一个功能强大的开源图形化管理工具。

  1. 安装

    # Ubuntu/Debian
    sudo apt install pgadmin4
    # CentOS/RHEL (可能需要 EPEL)
    sudo yum install pgadmin4
  2. 访问 安装后,通常可以通过浏览器访问 http://<your_server_ip>:80http://<your_server_ip>:8888 来设置 pgAdmin 的管理员账户。

  3. 连接服务器pgAdmin 中,右键点击 "Servers" -> "Register" -> "Server...",填写你的服务器信息:

    • Host name/address: 你的服务器 IP 地址。
    • Port: 5432 (默认)。
    • Maintenance database: postgres (默认)。
    • Username: postgres 或你创建的其他用户。
    • Password: 对应的密码。

使用 pg_dumppg_restore 进行备份与恢复

  1. 备份数据库

    # 备份整个数据库到一个自定义格式文件
    pg_dump -U myapp_user -F c -f myapp_db_backup.dump myapp_db
    • -U: 指定用户。
    • -F c: 指定自定义格式。
    • -f: 指定输出文件名。
  2. 恢复数据库 在恢复之前,需要确保目标数据库存在且为空,或者先删除它再创建。

    # 删除旧数据库(如果存在)
    dropdb myapp_db -U myapp_user
    # 创建新数据库
    createdb myapp_db -U myapp_user
    # 从备份文件恢复
    pg_restore -U myapp_user -d myapp_db myapp_db_backup.dump

第六部分:常见问题与排错

如何查看错误日志?

日志是排错的关键,日志位置通常在 postgresql.conf 中由 log_directorylog_filename 参数定义。

  • Ubuntu/Debian: 默认在 /var/log/postgresql/ 目录下。
  • CentOS/RHEL: 默认在 /var/log/pgsql/ 目录下。
# 查看最新的日志
tail -f /var/log/postgresql/postgresql-15-main.log

连接失败怎么办?

  1. 检查服务状态sudo systemctl status postgresql,确保服务正在运行。
  2. 检查防火墙:确保服务器的防火墙(如 ufwfirewalld)允许 5432 端口的入站连接。
    • UFW (Ubuntu): sudo ufw allow 5432/tcp
    • Firewalld (CentOS): sudo firewall-cmd --permanent --add-port=5432/tcp && sudo firewall-cmd --reload
  3. 检查 pg_hba.conf:确认你的 IP 地址和认证方式配置正确。
  4. 检查 postgresql.conf:确认 listen_addresses 设置正确,并且没有其他网络问题。
  5. 查看日志:这是最重要的一步,日志中会明确指出连接失败的原因(如认证失败、拒绝连接等)。

这份教程为你提供了一个在 Linux 上使用 PostgreSQL 的完整起点,PostgreSQL 是一个非常强大的系统,还有很多高级特性等待你去探索,如主从复制、逻辑复制、分区表等,希望这份指南对你有帮助!

分享:
扫描分享到社交APP
上一篇
下一篇