Ubuntu 22.04安装PostgreSQL教程

方法一:使用 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    # 维护操作使用的内存
相关推荐
清水白石0082 小时前
函数签名内省实战:打造通用参数验证装饰器的完整指南
java·linux·数据库
bepeater12342 小时前
Linux安装Redis以及Redis三种启动方式
linux·redis·bootstrap
njtong2 小时前
Ubuntu系统apache2网站的Let‘s Encrypt证书问题
linux·运维·ubuntu
aHais_2 小时前
PWM子系统杂项笔记
linux
独自归家的兔2 小时前
Harbor 备份与迁移的方法
运维·harbor
量化分析2 小时前
腾讯云迁移上云功能
linux·云计算·腾讯云
aHais_3 小时前
REGMAP使用方法杂项
linux·单片机
何中应3 小时前
Jenkins如何导入/导出插件
运维·ci/cd·jenkins
XP62263 小时前
Linux安装RabbitMQ
linux·运维·rabbitmq