方法一:使用 Ubuntu 官方仓库安装(推荐,简单稳定)
1 更新软件包列表
bash
root@blctrl-s3:/home/blctrl# apt update
root@blctrl-s3:/home/blctrl# apt update
Hit:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease
...
Fetched 6,472 kB in 5s (1,177 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
15 packages can be upgraded. Run 'apt list --upgradable' to see them.
2 安装PostgreSQL
- postgresql-contrib包含一些额外的功能和扩展
bash
root@blctrl-s3:/home/blctrl# sudo apt install postgresql postgresql-contrib
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...
Setting up postgresql-contrib (14+238) ...
Setting up postgresql (14+238) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.13) ...
3 检查安装状态
bash
# 检查服务状态
(base) blctrl@blctrl-s3:~$ sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2026-02-09 11:11:24 CST; 22min ago
Process: 71150 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 71150 (code=exited, status=0/SUCCESS)
CPU: 3ms
2月 09 11:11:24 blctrl-s3 systemd[1]: Starting PostgreSQL RDBMS...
2月 09 11:11:24 blctrl-s3 systemd[1]: Finished PostgreSQL RDBMS.
# 检查PostgreSQL版本
(base) blctrl@blctrl-s3:~$ sudo -u postgres psql -c "SELECT version();"
4 基本管理命令
bash
# 启动服务
(base) blctrl@blctrl-s3:~$ sudo systemctl start postgresql
# 停止服务
(base) blctrl@blctrl-s3:~$ sudo systemctl stop postgresql
# 重启服务
(base) blctrl@blctrl-s3:~$ sudo systemctl restart postgresql
# 设置开机自启动
(base) blctrl@blctrl-s3:~$ sudo systemctl enable postgresql
Synchronizing state of postgresql.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable postgresql
方法二:安装指定版本(如 PostgreSQL 14, 15, 16)
1 添加PostgreSQL官方仓库
安装依赖
bash
(base) plc@plc-s1:~$ sudo apt install wget ca-certificates
[sudo] password for plc:
Sorry, try again.
[sudo] password for plc:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ca-certificates is already the newest version (20240203~22.04.1).
wget is already the newest version (1.21.2-2ubuntu1.1).
wget set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 21 not upgraded.
添加GPG密钥
bash
(base) plc@plc-s1:~$ sudo mkdir -p /etc/apt/keyrings
(base) plc@plc-s1:~$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/keyrings/postgresql.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBE6XR8IBEACVdDKT2HEH1IyHzXkb4nIWAY7echjRxo7MTcj4vbXAyBKOfjja
...
Gtz3cydIohvNO9d90+29h0eGEDYti7j7maHkBKUAwlcPvMg5m3Y=
=DA1T
添加仓库
bash
(base) plc@plc-s1:~$ echo "deb [signed-by=/etc/apt/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
deb [signed-by=/etc/apt/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main
更新包列表
bash
(base) plc@plc-s1:~$ sudo apt update
2 安装指定版本
查看可用版本
bash
(base) plc@plc-s1:~$ sudo apt search postgresql | grep ^postgresql
安装指定版本
bash
# 安装 PostgreSQL 16
sudo apt install postgresql-16 postgresql-client-16
# 安装 PostgreSQL 15
sudo apt install postgresql-15 postgresql-client-15
# 安装 PostgreSQL 14
sudo apt install postgresql-14 postgresql-client-14
bash
(base) plc@plc-s1:~$ sudo apt install postgresql-16 postgresql-client-16
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.13) ...
初始配置和使用
1. 访问PostgreSQL
切换到postgres用户
bash
(base) blctrl@blctrl-s3:~$ sudo -i -u postgres
[sudo] password for blctrl:
postgres@blctrl-s3:~$
直接进入PostgreSQL命令行
bash
postgres@blctrl-s3:~$ psql
psql (14.20 (Ubuntu 14.20-0ubuntu0.22.04.1))
Type "help" for help.
postgres=#
直接执行
bash
(base) blctrl@blctrl-s3:~$ sudo -u postgres psql
could not change directory to "/home/blctrl": Permission denied
psql (14.20 (Ubuntu 14.20-0ubuntu0.22.04.1))
Type "help" for help.
postgres=#
2. 创建新用户和数据库
创建新用户
sql
postgres=#
postgres=# CREATE USER myuser WITH PASSWORD 'mypassword';
CREATE ROLE
创建数据库
sql
postgres=# CREATE DATABASE mydatabase;
CREATE DATABASE
查看数据库
bash
mydatabase=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+----------+----------+-------------+-------------+-----------------------
mydatabase | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | myuser=CTc/postgres
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
mydatabase=>
切换数据库
bash
postgres-# \c mydatabase
You are now connected to database "mydatabase" as user "postgres".
删除数据库
bash
postgres=# DROP DATABASE mydb;
DROP DATABASE
授予权限
sql
postgres=# GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
GRANT
退出psql
sql
postgres=# \q
(base) blctrl@blctrl-s3:~$
3. 运行远程访问
bash
(base) blctrl@blctrl-s3:~$ sudo vim /etc/postgresql/14/main/postgresql.conf
找到listen_address, 修改为listen_address = '*'
编辑客户端认证配置:
bash
(base) blctrl@blctrl-s3:~$ sudo vim /etc/postgresql/14/main/pg_hba.conf
添加:
bash
...
# IPv4 连接
host all all 0.0.0.0/0 md5
...
4. 重启服务使得配置生效
bash
(base) blctrl@blctrl-s3:~$ sudo systemctl restart postgresql
常用工具安装
安装pgAdmin(图形管理工具)
bash
(base) blctrl@blctrl-s3:~$ curl -fsSL https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg
(base) blctrl@blctrl-s3:~$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list'
(base) blctrl@blctrl-s3:~$ apt update
(base) blctrl@blctrl-s3:~$ sudo apt install pgadmin4
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
...
Processing triggers for man-db (2.10.2-1) ...
安装命令行工具
bash
(base) blctrl@blctrl-s3:~$ sudo apt install postgresql-client
远程连接数据库
bash
psql -h 服务器 -U 用户名 -d 数据库 -p 端口
bash
(base) blctrl@blctrl-s3:~$ psql -h 192.168.50.211 -U myuser -d mydatabase
Password for user myuser:
psql (14.20 (Ubuntu 14.20-0ubuntu0.22.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
mydatabase=>
卸载PostgreSQL
bash
# 停止服务
sudo systemctl stop postgresql
# 完全卸载
sudo apt purge postgresql*
sudo apt autoremove
# 删除数据目录(谨慎操作!)
sudo rm -rf /var/lib/postgresql/
常见问题解决
1. 忘记PostgreSQL密码
bash
# 修改 postgres 用户密码
(base) blctrl@blctrl-s3:~$ sudo -u postgres psql
could not change directory to "/home/blctrl": Permission denied
psql (14.20 (Ubuntu 14.20-0ubuntu0.22.04.1))
Type "help" for help.
postgres=# \password postgres
Enter new password for user "postgres":
Enter it again:
postgres=#
2. 无法连接数据库
检查服务状态
bash
(base) blctrl@blctrl-s3:~$ systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2026-02-09 13:57:18 CST; 24min ago
Main PID: 73309 (code=exited, status=0/SUCCESS)
CPU: 3ms
2月 09 13:57:18 blctrl-s3 systemd[1]: Starting PostgreSQL RDBMS...
2月 09 13:57:18 blctrl-s3 systemd[1]: Finished PostgreSQL RDBMS.
检查端口监听
bash
(base) blctrl@blctrl-s3:~$ sudo netstat -tlpn | grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 73291/postgres
tcp6 0 0 :::5432 :::* LISTEN 73291/postgres
检查日志
bash
(base) blctrl@blctrl-s3:~$ tail -f /var/log/postgresql/postgresql-14-main.log
2026-02-09 13:57:16.260 CST [73292] LOG: database system was shut down at 2026-02-09 13:57:16 CST
...
2026-02-09 14:19:24.447 CST [75507] postgres@password FATAL: database "password" does not exist
3 .性能优化
bash
(base) blctrl@blctrl-s3:~$ sudo vim /etc/postgresql/14/main/postgresql.conf
建议初始配置:
bash
shared_buffers = 256MB # 根据内存调整,通常为总内存的25%
work_mem = 64MB # 每个查询使用的内存
maintenance_work_mem = 128MB # 维护操作使用的内存