Linux 下 PostgreSQL 安装与常用操作指南
前言
基本初始操作
1. 确认系统环境
2. 安装 PostgreSQL
2.1 CentOS / RHEL / RockyLinux
2.2 Ubuntu / Debian
3. 初次使用 PostgreSQL
常用内置命令(\ 开头)
4. 数据库与用户管理
数据库操作
用户与权限操作
5. 表操作与数据管理
6. 数据导入与导出
7. 高级查询与管理
8. 远程访问配置
附录
PostgreSQL 常用命令速查表
连接数据库
内置快捷命令(\ 开头)
数据库操作
用户/角色操作
表操作
数据导入导出
高级查询/管理
PostgreSQL 常用数据类型
1️⃣ 数值类型
2️⃣ 字符串类型
3️⃣ 日期和时间类型
4️⃣ 布尔类型
5️⃣ 枚举与 JSON 类型
6️⃣ 二进制类型
PostgreSQL 用户权限表
角色属性与权限
对象级权限
视图和函数权限
总结
前言
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
-
禁用系统自带模块(避免版本冲突):
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
:
listen_addresses = '*'
-
编辑
pg_hba.conf
,添加远程访问权限:
host all all 0.0.0.0/0 md5
-
重启 PostgreSQL 服务:
sudo systemctl restart postgresql-15 # CentOS/RHEL sudo systemctl restart postgresql # Ubuntu/Debian
附录
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 常用数据类型
1️⃣ 数值类型
数据类型 | 说明 | 示例 |
---|---|---|
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 |
2️⃣ 字符串类型
数据类型 | 说明 | 示例 |
---|---|---|
CHAR(n) / CHARACTER(n) | 固定长度字符串,不足用空格填充 | CHAR(10) |
VARCHAR(n) / CHARACTER VARYING(n) | 可变长度字符串,长度限制 | VARCHAR(50) |
TEXT | 不限长度的字符串 | TEXT |
3️⃣ 日期和时间类型
数据类型 | 说明 | 示例 |
---|---|---|
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' |
4️⃣ 布尔类型
数据类型 | 说明 | 示例 |
---|---|---|
BOOLEAN / BOOL | 布尔值 | TRUE / FALSE |
5️⃣ 枚举与 JSON 类型
数据类型 | 说明 | 示例 |
---|---|---|
ENUM | 枚举类型,预定义固定值 | CREATE TYPE mood AS ENUM ('happy','sad'); |
JSON | JSON 数据 | '{"name": "Alice", "age": 18}' |
JSONB | 二进制存储 JSON,更快查询 | '{"name": "Alice", "age": 18}'::jsonb |
6️⃣ 二进制类型
数据类型 | 说明 | 示例 |
---|---|---|
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 在 Linux 系统下的安装方法以及最常用的操作,包括:
-
数据库和用户管理
-
表和数据操作
-
数据导入导出
-
远程访问配置
掌握这些基础操作后,你就可以在 Linux 下快速部署和管理 PostgreSQL 数据库了。