目录
-
第一部分:安装 PostgreSQL
(图片来源网络,侵删)- 使用 APT 包管理器 (推荐用于 Ubuntu/Debian)
- 使用 YUM/DNF 包管理器 (推荐用于 CentOS/RHEL/Fedora)
- 从源码编译安装 (高级用户)
- 验证安装
-
第二部分:PostgreSQL 基础配置
- 初始化数据库集群
- 启动、停止和重启服务
- 连接到 PostgreSQL 服务器
- 修改
postgres用户密码
-
第三部分:数据库基本操作
- 创建数据库
- 创建用户和角色
- 权限管理
- 连接到特定数据库
-
第四部分:数据操作
- 创建表
- 插入、查询、更新、删除数据
- 使用
psql的元命令
-
第五部分:进阶配置与工具
(图片来源网络,侵删)- 配置远程访问
- 使用
pgAdmin进行图形化管理 - 使用
pg_dump和pg_restore进行备份与恢复 - 开机自启配置
-
第六部分:常见问题与排错
- 如何查看错误日志?
- 连接失败怎么办?
第一部分:安装 PostgreSQL
使用 APT 包管理器 (Ubuntu/Debian)
这是在 Debian 系统上最简单、最推荐的方式。
-
导入 APT 仓库密钥 PostgreSQL 官方维护着自己的 APT 仓库,需要先导入它们的 GPG 密钥以确保软件包的完整性和真实性。
# 下载密钥环文件 wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
-
添加 APT 仓库源 创建一个
sources.list.d文件来添加 PostgreSQL 官方源。
(图片来源网络,侵删)# 创建源列表文件 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)。
-
更新包列表并安装 更新你的系统包列表,然后安装 PostgreSQL 服务器。
# 更新包列表 sudo apt update # 安装 PostgreSQL 服务器(默认安装最新稳定版) sudo apt install postgresql postgresql-contrib
postgresql: 核心服务器程序。postgresql-contrib: 包含一些额外的实用工具和功能。
使用 YUM/DNF 包管理器 (CentOS/RHEL/Fedora)
-
安装 EPEL 仓库
yum或dnf默认不包含 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 -
安装 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
-
初始化数据库 使用
postgresql-15-setup脚本初始化数据库集群。sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
从源码编译安装 (高级用户)
这种方式灵活性最高,但最复杂,不推荐新手使用。
-
安装编译依赖
# 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
-
下载并解压源码
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
-
配置、编译和安装
# 配置安装路径(/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: 默认值为当前时间。
插入、查询、更新、删除数据
-
插入数据
INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com'); INSERT INTO users (username, email) VALUES ('bob', 'bob@example.com'); -
查询数据
-- 查询所有用户 SELECT * FROM users; -- 查询特定用户 SELECT * FROM users WHERE username = 'alice';
-
更新数据
UPDATE users SET email = 'alice_new@example.com' WHERE username = 'alice';
-
删除数据
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.conf 和 pg_hba.conf 文件。
-
修改
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 -
修改
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 md5host: 表示 TCP/IP 连接。0.0.0/0: 匹配所有 IPv4 地址,在生产环境中,应将其限制为特定的 IP 地址或 IP 段,168.1.0/24。md5: 使用 MD5 加密密码,对于新版本,可以考虑使用scram-sha-256,它更安全。
-
重启 PostgreSQL 服务
sudo systemctl restart postgresql
使用 pgAdmin 进行图形化管理
pgAdmin 是一个功能强大的开源图形化管理工具。
-
安装
# Ubuntu/Debian sudo apt install pgadmin4 # CentOS/RHEL (可能需要 EPEL) sudo yum install pgadmin4
-
访问 安装后,通常可以通过浏览器访问
http://<your_server_ip>:80或http://<your_server_ip>:8888来设置pgAdmin的管理员账户。 -
连接服务器 在
pgAdmin中,右键点击 "Servers" -> "Register" -> "Server...",填写你的服务器信息:- Host name/address: 你的服务器 IP 地址。
- Port:
5432(默认)。 - Maintenance database:
postgres(默认)。 - Username:
postgres或你创建的其他用户。 - Password: 对应的密码。
使用 pg_dump 和 pg_restore 进行备份与恢复
-
备份数据库
# 备份整个数据库到一个自定义格式文件 pg_dump -U myapp_user -F c -f myapp_db_backup.dump myapp_db
-U: 指定用户。-F c: 指定自定义格式。-f: 指定输出文件名。
-
恢复数据库 在恢复之前,需要确保目标数据库存在且为空,或者先删除它再创建。
# 删除旧数据库(如果存在) 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_directory 和 log_filename 参数定义。
- Ubuntu/Debian: 默认在
/var/log/postgresql/目录下。 - CentOS/RHEL: 默认在
/var/log/pgsql/目录下。
# 查看最新的日志 tail -f /var/log/postgresql/postgresql-15-main.log
连接失败怎么办?
- 检查服务状态:
sudo systemctl status postgresql,确保服务正在运行。 - 检查防火墙:确保服务器的防火墙(如
ufw或firewalld)允许5432端口的入站连接。- UFW (Ubuntu):
sudo ufw allow 5432/tcp - Firewalld (CentOS):
sudo firewall-cmd --permanent --add-port=5432/tcp&&sudo firewall-cmd --reload
- UFW (Ubuntu):
- 检查
pg_hba.conf:确认你的 IP 地址和认证方式配置正确。 - 检查
postgresql.conf:确认listen_addresses设置正确,并且没有其他网络问题。 - 查看日志:这是最重要的一步,日志中会明确指出连接失败的原因(如认证失败、拒绝连接等)。
这份教程为你提供了一个在 Linux 上使用 PostgreSQL 的完整起点,PostgreSQL 是一个非常强大的系统,还有很多高级特性等待你去探索,如主从复制、逻辑复制、分区表等,希望这份指南对你有帮助!
