前言
1. 确认系统环境
2. 安装 PostgreSQL
2.1 CentOS / RHEL / RockyLinux
2.2 Ubuntu / Debian
3. 初次使用 PostgreSQL
常用内置命令(\\ 开头)
4. 数据库与用户管理
数据库操作
用户与权限操作
5. 表操作与数据管理
6. 数据导入与导出
7. 高级查询与管理
8. 远程访问配置
总结
附录:PostgreSQL 常用命令速查表
连接数据库
内置快捷命令(\\ 开头)
数据库操作
用户/角色操作
表操作
数据导入导出
高级查询/管理
PostgreSQL 常用数据类型表
数值类型
字符串类型
日期和时间类型
布尔类型
枚举与 JSON 类型
二进制类型
PostgreSQL 用户权限表(角色属性与权限)
对象级权限
视图和函数权限
PostgreSQL 核心文件路径
1. 安装目录(二进制文件与核心程序)
2. 数据目录(数据库文件、日志、配置)
3. 配置文件路径
4. 日志文件路径
5. 服务管理脚本/单元文件
如何查看实际路径?
总结
前言
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 命令帮助 |
数据库操作
| CREATE DATABASE dbname; | 创建数据库 |
| DROP DATABASE dbname; | 删除数据库 |
| SELECT current_database(); | 查看当前数据库 |
用户/角色操作
| 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; | 撤销权限 |
表操作
| 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 |
高级查询/管理
| 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. 配置文件路径
| 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';
总结
| 安装目录 | /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)可根据实际安装版本调整。


