2.1 CentOS / RHEL / RockyLinux
前言
PostgreSQL 是一款功能强大、开源免费的关系型数据库管理系统,常用于网站、企业应用以及数据分析场景。本文将从 Linux 系统出发,介绍 PostgreSQL 的安装、基本使用以及常用操作,帮助你快速上手。
1. 确认系统环境
在安装 PostgreSQL 前,先确认你的 Linux 发行版:
cat /etc/*release
常见的 Linux 发行版主要分为两类:
-
RedHat 系列(CentOS、RHEL、RockyLinux)
-
Debian 系列(Ubuntu、Debian)
本文会分别介绍两类系统的安装方法。
2. 安装 PostgreSQL
2.1 CentOS / RHEL / RockyLinux
-
安装官方仓库:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm
-
禁用系统自带模块(避免版本冲突):
#如报错没有dnf命令可无视,继续向下执行 sudo dnf -qy module disable postgresql
-
安装 PostgreSQL(以 15 版本为例):
sudo yum install -y postgresql15 postgresql15-server
-
初始化数据库:
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
-
设置开机自启并启动服务:
sudo systemctl enable postgresql-15 sudo systemctl start postgresql-15
2.2 Ubuntu / Debian
-
添加官方仓库和 GPG Key:
sudo apt update sudo apt install -y wget ca-certificates sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
-
安装 PostgreSQL(以 15 版本为例):
sudo apt update sudo apt install -y postgresql-15
-
启动并设置开机自启:
sudo systemctl enable postgresql sudo systemctl start postgresql systemctl status postgresql
3. 初次使用 PostgreSQL
安装完成后,系统会自动创建一个 postgres 用户和数据库。可以使用以下命令登录:
sudo -i -u postgres psql
也可以指定用户名和数据库直接登录:
psql -U postgres -d postgres
常用内置命令(\ 开头)
| 命令 | 功能 |
|---|---|
\l | 查看数据库列表 |
\c dbname | 切换数据库 |
\du | 查看用户/角色列表 |
\d tablename | 查看表结构 |
\dt | 查看所有表 |
\q | 退出 psql |
4. 数据库与用户管理
数据库操作
CREATE DATABASE testdb; -- 创建数据库 DROP DATABASE testdb; -- 删除数据库 SELECT current_database(); -- 查看当前数据库
用户与权限操作
CREATE USER testuser WITH PASSWORD '123456'; -- 创建用户 CREATE USER adminuser WITH SUPERUSER PASSWORD 'pass'; -- 创建超级用户 ALTER USER testuser WITH PASSWORD 'newpassword'; -- 修改密码 DROP USER testuser; -- 删除用户 GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser; -- 授权 REVOKE ALL PRIVILEGES ON DATABASE testdb FROM testuser; -- 撤销权限
5. 表操作与数据管理
-- 创建表
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入数据
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
-- 查询数据
SELECT * FROM users;
SELECT name, email FROM users WHERE id = 1;
-- 更新数据
UPDATE users SET email='alice123@example.com' WHERE id=1;
-- 删除数据
DELETE FROM users WHERE id=1;
-- 删除表
DROP TABLE users;
-- 清空表
TRUNCATE TABLE users;
6. 数据导入与导出
# 导出数据库 pg_dump -U postgres -d testdb -f testdb.sql # 导入数据库 psql -U postgres -d testdb -f testdb.sql # 导出并压缩 pg_dump testdb | gzip > testdb.sql.gz # 导入压缩文件 gunzip -c testdb.sql.gz | psql -U postgres -d testdb
7. 高级查询与管理
-- 查看表大小
SELECT pg_size_pretty(pg_total_relation_size('users'));
-- 查看数据库大小
SELECT pg_size_pretty(pg_database_size('testdb'));
-- 查看当前连接
SELECT * FROM pg_stat_activity;
-- 查看表及索引信息
\d+ users
8. 远程访问配置
如果需要远程连接 PostgreSQL,需要修改配置文件:
编辑 postgresql.conf:
#60行,取消注释 listen_addresses = '*'

编辑 pg_hba.conf,添加远程访问权限:
#87行 host all all 0.0.0.0/0 md5

重启 PostgreSQL 服务:
sudo systemctl restart postgresql-15 # CentOS/RHEL sudo systemctl restart postgresql # Ubuntu/Debian
创建一个测试用户


总结
本文介绍了 PostgreSQL 在 Linux 系统下的安装方法以及最常用的操作,包括:
-
数据库和用户管理
-
表和数据操作
-
数据导入导出
-
远程访问配置
掌握这些基础操作后,你就可以在 Linux 下快速部署和管理 PostgreSQL 数据库了。


附录:PostgreSQL 常用命令速查表
连接数据库
| 命令 | 说明 |
|---|---|
sudo -i -u postgres | 切换到系统用户 postgres |
psql | 进入默认 postgres 数据库 |
psql -U 用户名 -d 数据库 -h 主机 -p 端口 | 指定用户/数据库/主机/端口连接 |
psql -U postgres -d postgres -c "SQL语句" | 执行单条 SQL 并退出 |
内置快捷命令(\ 开头)
| 命令 | 说明 |
|---|---|
\l | 查看数据库列表 |
\c dbname | 切换数据库 |
\du | 查看用户/角色 |
\d tablename | 查看表结构 |
\dt | 查看所有表 |
\dv | 查看视图 |
\df | 查看函数 |
\dn | 查看模式(schema) |
\q | 退出 psql |
\x | 切换扩展显示模式 |
\? | 查看所有 \ 命令 |
\h | 查看 SQL 命令帮助 |
数据库操作
| SQL | 说明 |
|---|---|
CREATE DATABASE dbname; | 创建数据库 |
DROP DATABASE dbname; | 删除数据库 |
SELECT current_database(); | 查看当前数据库 |
用户/角色操作
| SQL | 说明 |
|---|---|
CREATE USER username WITH PASSWORD 'pass'; | 创建用户 |
CREATE USER admin WITH SUPERUSER PASSWORD 'pass'; | 创建超级用户 |
ALTER USER username WITH PASSWORD 'newpass'; | 修改密码 |
DROP USER username; | 删除用户 |
GRANT ALL PRIVILEGES ON DATABASE db TO username; | 授权数据库 |
REVOKE ALL PRIVILEGES ON DATABASE db FROM username; | 撤销权限 |
表操作
| SQL | 说明 |
|---|---|
CREATE TABLE tname (...); | 创建表 |
\d tname | 查看表结构 |
INSERT INTO tname ...; | 插入数据 |
SELECT * FROM tname; | 查询数据 |
UPDATE tname ...; | 更新数据 |
DELETE FROM tname ...; | 删除数据 |
TRUNCATE TABLE tname; | 清空表 |
DROP TABLE tname; | 删除表 |
数据导入导出
| 命令 | 说明 |
|---|---|
pg_dump -U postgres -d db -f db.sql | 导出数据库 |
psql -U postgres -d db -f db.sql | 导入数据库 |
pg_dump db | gzip > db.sql.gz | |
gunzip -c db.sql.gz | psql -U postgres -d db |
高级查询/管理
| SQL | 说明 |
|---|---|
SELECT pg_size_pretty(pg_database_size('db')); | 查看数据库大小 |
SELECT pg_size_pretty(pg_total_relation_size('tname')); | 查看表大小 |
SELECT * FROM pg_stat_activity; | 查看当前连接 |
\d+ tname | 查看表及索引信息 |
PostgreSQL 常用数据类型表
数值类型
| 数据类型 | 说明 | 示例 |
|---|---|---|
SMALLINT | 2 字节整数 | 0 ~ 32767 |
INTEGER / INT | 4 字节整数 | -2147483648 ~ 2147483647 |
BIGINT | 8 字节整数 | -9223372036854775808 ~ 9223372036854775807 |
SERIAL | 自动增长整数(整数+序列) | id SERIAL PRIMARY KEY |
BIGSERIAL | 大整数自动增长 | id BIGSERIAL PRIMARY KEY |
NUMERIC(p,s) / DECIMAL(p,s) | 精确小数,可指定精度和小数位 | NUMERIC(10,2) |
REAL | 4 字节浮点数 | 3.14 |
DOUBLE PRECISION | 8 字节浮点数 | 3.1415926 |
字符串类型
| 数据类型 | 说明 | 示例 |
|---|---|---|
CHAR(n) / CHARACTER(n) | 固定长度字符串,不足用空格填充 | CHAR(10) |
VARCHAR(n) / CHARACTER VARYING(n) | 可变长度字符串,长度限制 | VARCHAR(50) |
TEXT | 不限长度的字符串 | TEXT |
日期和时间类型
| 数据类型 | 说明 | 示例 |
|---|---|---|
DATE | 日期,年-月-日 | 2025-09-21 |
TIME [ WITHOUT TIME ZONE ] | 时间(不带时区) | 14:30:00 |
TIMESTAMP [ WITHOUT TIME ZONE ] | 日期+时间 | 2025-09-21 14:30:00 |
TIMESTAMPTZ | 日期+时间+时区 | 2025-09-21 14:30:00+08 |
INTERVAL | 时间间隔 | INTERVAL '1 day 2 hours' |
布尔类型
| 数据类型 | 说明 | 示例 |
|---|---|---|
BOOLEAN / BOOL | 布尔值 | TRUE / FALSE |
枚举与 JSON 类型
| 数据类型 | 说明 | 示例 |
|---|---|---|
ENUM | 枚举类型,预定义固定值 | CREATE TYPE mood AS ENUM ('happy','sad'); |
JSON | JSON 数据 | '{"name": "Alice", "age": 18}' |
JSONB | 二进制存储 JSON,更快查询 | '{"name": "Alice", "age": 18}'::jsonb |
二进制类型
| 数据类型 | 说明 | 示例 |
|---|---|---|
BYTEA | 二进制数据 | 文件、图片等 |
PostgreSQL 用户权限表(角色属性与权限)
| 权限/属性 | 作用范围 | 说明 | 示例/备注 |
|---|---|---|---|
| SUPERUSER | 全局 | 拥有数据库内所有权限,相当于 root | 创建超级用户:CREATE USER adminuser WITH SUPERUSER; |
| CREATEDB | 全局 | 允许创建新数据库 | CREATE USER testuser WITH CREATEDB; |
| CREATEROLE | 全局 | 允许创建和管理角色(用户) | 可以创建新用户并授予权限 |
| LOGIN | 全局 | 允许角色登录数据库 | 没有 LOGIN 的角色只能作为权限集合使用(角色组) |
| INHERIT | 全局 | 是否继承被授予角色的权限 | 默认继承,方便权限组合 |
| REPLICATION | 全局 | 允许参与流复制(Streaming Replication) | 用于主从复制用户 |
| BYPASSRLS | 全局 | 绕过行级安全策略(Row Level Security) | 高级安全策略控制 |
对象级权限
| 权限 | 作用对象 | 说明 | 示例 |
|---|---|---|---|
| CONNECT | 数据库 | 允许用户连接数据库 | GRANT CONNECT ON DATABASE testdb TO testuser; |
| CREATE | 数据库 / schema | 允许在数据库或模式中创建对象 | GRANT CREATE ON SCHEMA public TO testuser; |
| TEMPORARY / TEMP | 数据库 | 允许创建临时表 | GRANT TEMP ON DATABASE testdb TO testuser; |
| USAGE | schema | 允许访问模式内对象 | GRANT USAGE ON SCHEMA public TO testuser; |
| SELECT | 表 / 视图 | 查询表数据 | GRANT SELECT ON TABLE users TO readonlyuser; |
| INSERT | 表 | 插入数据 | GRANT INSERT ON TABLE users TO testuser; |
| UPDATE | 表 | 修改数据 | GRANT UPDATE ON TABLE users TO testuser; |
| DELETE | 表 | 删除数据 | GRANT DELETE ON TABLE users TO testuser; |
| TRUNCATE | 表 | 清空表数据 | GRANT TRUNCATE ON TABLE users TO testuser; |
| REFERENCES | 表 | 外键引用权限 | GRANT REFERENCES ON TABLE users TO testuser; |
| TRIGGER | 表 | 创建触发器权限 | GRANT TRIGGER ON TABLE users TO testuser; |
| ALL PRIVILEGES | 表 / 数据库 | 所有可用权限 | GRANT ALL PRIVILEGES ON TABLE users TO testuser; |
视图和函数权限
| 权限 | 作用对象 | 说明 | 示例 |
|---|---|---|---|
| EXECUTE | 函数 / 存储过程 | 允许调用函数 | GRANT EXECUTE ON FUNCTION func_name() TO testuser; |
| USAGE | 序列 | 允许使用序列 | GRANT USAGE ON SEQUENCE users_id_seq TO testuser; |
| SELECT / UPDATE | 序列 | 查询/修改序列值 | GRANT SELECT, UPDATE ON SEQUENCE users_id_seq TO testuser; |
PostgreSQL 核心文件路径
1. 安装目录(二进制文件与核心程序)
| 系统系列 | 默认安装路径 |
|---|---|
| CentOS/RHEL | /usr/pgsql-15/ |
| Ubuntu/Debian | /usr/lib/postgresql/15/ |
包含
bin、lib、share等子目录,如psql、pg_dump、postgres等可执行文件位于bin/下。
2. 数据目录(数据库文件、日志、配置)
| 系统系列 | 默认数据目录路径 |
|---|---|
| CentOS/RHEL | /var/lib/pgsql/15/data/ |
| Ubuntu/Debian | /var/lib/postgresql/15/main/ |
包含:
postgresql.conf:主配置文件
pg_hba.conf:客户端认证配置文件
pg_wal/:WAL 日志目录
base/:实际数据库文件存储位置
3. 配置文件路径
| 配置文件 | CentOS/RHEL | Ubuntu/Debian |
|---|---|---|
postgresql.conf | /var/lib/pgsql/15/data/postgresql.conf | /etc/postgresql/15/main/postgresql.conf |
pg_hba.conf | /var/lib/pgsql/15/data/pg_hba.conf | /etc/postgresql/15/main/pg_hba.conf |
4. 日志文件路径
| 系统系列 | 日志文件路径(默认) |
|---|---|
| CentOS/RHEL | /var/lib/pgsql/15/data/log/ 或系统日志 |
| Ubuntu/Debian | /var/log/postgresql/ |
日志文件通常命名为
postgresql-15-main.log或类似。
5. 服务管理脚本/单元文件
| 系统系列 | 服务单元文件路径 |
|---|---|
| CentOS/RHEL | /usr/lib/systemd/system/postgresql-15.service |
| Ubuntu/Debian | /lib/systemd/system/postgresql.service(或 /etc/systemd/system/) |
如何查看实际路径?
你可以在 PostgreSQL 中使用以下 SQL 查询关键路径:
sql
-- 查看数据目录 SELECT setting FROM pg_settings WHERE name = 'data_directory'; -- 查看配置文件路径 SELECT setting FROM pg_settings WHERE name = 'config_file'; -- 查看 HBA 文件路径 SELECT setting FROM pg_settings WHERE name = 'hba_file';
总结
| 类型 | CentOS/RHEL 系列 | Ubuntu/Debian 系列 |
|---|---|---|
| 安装目录 | /usr/pgsql-15/ | /usr/lib/postgresql/15/ |
| 数据目录 | /var/lib/pgsql/15/data/ | /var/lib/postgresql/15/main/ |
| 配置文件 | /var/lib/pgsql/15/data/postgresql.conf | /etc/postgresql/15/main/ |
| 日志文件 | /var/lib/pgsql/15/data/log/ | /var/log/postgresql/ |
这些路径是 PostgreSQL 安装后的典型路径,具体版本号(如 15)可根据实际安装版本调整。
2143

被折叠的 条评论
为什么被折叠?



