# 如何在 Ubuntu / Raspbian 上安装 PostgreSQL

**URL:** <https://www.isharkfly.com/t/ubuntu-raspbian-postgresql/15341>\
**Category:** 数据库\
**Tags:** raspberry-pi, postgresql\
**Created:** [January 17, 2024, 11:17pm UTC](https://www.isharkfly.com/t/ubuntu-raspbian-postgresql/15341 "2024-01-17T23:17:30Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [January 17, 2024, 11:17pm UTC](https://www.isharkfly.com/t/ubuntu-raspbian-postgresql/15341/1 "2024-01-17T23:17:30Z")

</div>

由于 Raspbian 和 Ubuntu 的同源关系，在这 2 个操作系统上安装 PostgreSQL 的方法是可以通用的。

## 安装包

直接运行下面的安装命令来进行安装。

```auto
sudo apt install postgresql postgresql-contrib

```

PostgreSQL contrib 软件包，它可以提供 PostgreSQL 数据库系统的一些额外特性。

当安装完成后，数据库会自动启动。

 ![2024-01-17_18-06-30](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/f/f6d83d1b34d7b5dbffa51c556575a557806d0aaa.png)

安装的包不是很大，通常很快就能完成安装和启动服务了。

## 查看安装的版本

当安装完成后，我们通常会查看安装的版本。

直接在控制台上运行下面的命令：`sudo -u postgres psql -c "SELECT version();"` 来查看当前我们安装的 PostgreSQL 版本。

需要注意的是，上面的命令其实做了 2 件事情。

`sudo -u postgres psql` 这个命令就是在本地计算机上连上 PostgreSQL 数据库。

`SELECT version();` 这个就是在连上数据库后执行的 SQL 或者命令。

 ![2024-01-17_18-13-42](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/4/47e05351253190aecd6b1cb8a7af724231a6dcc0.png)

从上面的输出，我们可以看到我们当前运行的 PostgreSQL 数据库版本为 15.5。

## 远程连接

默认情况下 PostgreSQL 是不接受远程连接的。 服务器仅仅监听本地网络接口：`127.0.0.1`。

为了允许远程访问你的 PostgreSQL 服务器，打开配置文件`postgresql.conf`并且在`CONNECTIONS AND AUTHENTICATION`一节添加`listen_addresses = '*'`。

文件路径在：

```auto
sudo nano /etc/postgresql/15/main/postgresql.conf

```

上面的文件路径显示的是 15，现在你就知道为什么我们在安装完成后需要看下当前安装的数据库的版本了吗？

文件修改前的情况是这样的。

 ![Snag_94720b7](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/b/b2e076733ff84dd536a38766d7ba7fb3b0ac5945.png)

我们可以看到的是监听的端口是被注释掉的，所以默认就是为 localhost。

我们需要修改为：

`listen_addresses = '*'`

 ![2024-01-17_18-22-13](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/e/e230f847817d77c4dd7837fca60197ba20badc5b.png)

保存退出后重启数据库服务器。

重启数据库服务器的命令为：

```auto
root@raspberrypi:~# systemctl restart postgresql
root@raspberrypi:~# 

```

## 修改 HBA 文件接受远程连接

虽然经过上面的配置，我们的数据库已经可以接受远程连接了，但是数据还没有办法让你的用户进行登录。

使用客户端工具，会看到下面的错误信息：

 ![2024-01-17_18-29-43](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/3/3b6daf8a2a9f672923d169efef43631c57561e2c.png)

这是因为我们的 hba 文件还没有配置。

### HBA 文件在哪里

使用命令行登录 pgsql 后，运行命令：show hba\_file;

服务器上将会显示下面的输出：

```auto
root@raspberrypi:/etc/postgresql/15# sudo -u postgres psql
psql (15.5 (Debian 15.5-0+deb12u1))
Type "help" for help.

postgres=# show hba_file;
              hba_file               
-------------------------------------
 /etc/postgresql/15/main/pg_hba.conf
(1 row)

postgres=# 

```

上面就已经告诉你了 HBA 所在的路径在哪里。

然后运行下面的命令对 HBA 文件进行编辑。

`sudo nano /etc/postgresql/15/main/pg_hba.conf`

添加下面 2 行到这个文件的末尾。

```auto
host all all 0.0.0.0/0 scram-sha-256
host all all ::/0 scram-sha-256

```

 ![2024-01-17_18-33-53](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/c/cf51732732258262ccadb27602a7016245dbd1af.png)

保存退出后重启服务器。

## 提示用户名密码错误

在服务器上登录 PostgreSQL 的时候是不会对用户名和密码进行校验的。

但是在远程的时候，我们可能会得到下面的用户名和密码校验错误信息。

 ![2024-01-17_18-41-56](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/e/e0cb7ec5473093d7769fe9739bc28e5a00812791.png)

这是因为我们在安装完成 PostgreSQL 数据库的时候没有为我们的账号 `postgres` 设置密码。

可以做的是，从新登录服务器，并且进入数据库。

然后运行 `ALTER USER postgres PASSWORD ' ******';` 上面的星号是你为 postgres 账号设置的密码。

当密码设置完成后，再尝试通过客户端工具进行连接，你的客户端工具应该是不会拒绝你的连接请求。

成功后可以看到下面的信息。

 ![2024-01-17_18-47-37](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/6/6bf90aeeb29b4abff8a7be220299c9f00565fe70.png)

如能看到上面的界面，就说明配置已经完成。
