Linux 下 PostgreSQL 安装与常用操作指南

前言

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

  1. 安装官方仓库:

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm
  1. 禁用系统自带模块(避免版本冲突):

#如报错没有dnf命令可无视,继续向下执行
sudo dnf -qy module disable postgresql
  1. 安装 PostgreSQL(以 15 版本为例):

sudo yum install -y postgresql15 postgresql15-server
  1. 初始化数据库:

sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
  1. 设置开机自启并启动服务:

sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15

2.2 Ubuntu / Debian

  1. 添加官方仓库和 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 -
  1. 安装 PostgreSQL(以 15 版本为例):

sudo apt update
sudo apt install -y postgresql-15
  1. 启动并设置开机自启:

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 常用数据类型表

数值类型

数据类型说明示例
SMALLINT2 字节整数0 ~ 32767
INTEGER / INT4 字节整数-2147483648 ~ 2147483647
BIGINT8 字节整数-9223372036854775808 ~ 9223372036854775807
SERIAL自动增长整数(整数+序列)id SERIAL PRIMARY KEY
BIGSERIAL大整数自动增长id BIGSERIAL PRIMARY KEY
NUMERIC(p,s) / DECIMAL(p,s)精确小数,可指定精度和小数位NUMERIC(10,2)
REAL4 字节浮点数3.14
DOUBLE PRECISION8 字节浮点数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');
JSONJSON 数据'{"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;
USAGEschema允许访问模式内对象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/

包含 binlibshare 等子目录,如 psqlpg_dumppostgres 等可执行文件位于 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/RHELUbuntu/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)可根据实际安装版本调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值