在 ArchLinux 上安装使用 PostgreSQL

本文最后更新于 2024年6月2日 12:59

我之前一直使用 MySQL,最近才接触 PostgreSQL。如果你也是 PostgreSQL 的新手,想必也会和我一样在安装使用的时候遇到一些问题(如安装完没有初始化数据库 想启动服务却启动失败等),所以我在这里记录一下我遇到的问题和解决方法。

本文主要介绍如何在 ArchLinux 上安装和使用 PostgreSQL

0. btrfs 文件系统禁用 COW

此小节为 btrfs 文件系统禁用 COW,如果你的系统分区为 ext4,可以跳过这一小节。

Btrfs(B-tree 文件系统),一种支持写入时复制(COW)的文件系统。
COW 简单说就是 写入 不会就地覆盖数据;相反,数据块在被复制和修改后会 写入到新的位置,元数据也会更新以指向新的位置。

如果你的 PostgreSQL 数据库运行在 btrfs 系统分区之上,你应当在创建数据库之前禁用 Copy-on-Write 特性[1],否则可能会导致数据库性能问题。
不应创建数据库之后再禁用,因为这一更改只会影响新创建的文件,而不会影响现有文件。


我们创建一个空目录 /var/lib/postgres/data

1
sudo mkdir /var/lib/postgres/data

这个目录就是 PostgreSQL 数据库的数据目录。

展示目录属性:

1
sudo lsattr -d /var/lib/postgres/data

输出如下:

1
---------------------- /var/lib/postgres/data

表示 目录没有设置任何属性


现在设置禁用目录 Copy-on-Write 特性:

1
sudo chattr +C /var/lib/postgres/data/

展示目录属性:

1
sudo lsattr -d /var/lib/postgres/data

输出如下:

1
---------------C------ /var/lib/postgres/data

C 表示 关闭 Copy-on-Write 特性。
至此,我们已经在 /var/lib/postgres/data 目录下禁用了 Copy-on-Write 特性。

1. 安装 PostgreSQL

1
sudo pacman -S postgresql

检查 Postgresql 版本

1
psql -V

2. 初始化数据库

PostgreSQLMySQL 不同,它需要初始化数据库。


输入以下命令,来进入 postgres 用户的 shell [postgres]$

1
sudo -iu postgres

执行下面的命令来初始化数据库

1
initdb -D /var/lib/postgres/data

如果没有报错,可以退出 postgres shell。

1
exit

3. 启动 PostgreSQL 服务

输入以下命令来启动 PostgreSQL 服务

1
sudo systemctl start postgresql

确认服务是否启动成功

1
sudo systemctl status postgresql

如果输出中显示 Active: active (running) 就表示服务启动成功了。

4. 创建用户和数据库

PostgreSQL 还需要添加一个新的数据库用户。进入 postgres shell

1
sudo -iu postgres

输入以下命令

1
createuser --interactive

输入要增加的角色名称,新的角色是否是超级用户。

提示:如果创建一个与 Linux 用户名相同的 PostgreSQL 角色/用户,就可以访问 PostgreSQL 数据库 shell,而无需指定用户登录(非常方便)。

5. 创建数据库

使用 createdb 命令,创建一个上述用户可以读写的新数据库。

1
createdb myDatabaseName

6. 登录数据库

postgres shell 中,输入以下命令来登录数据库

1
psql

postgres shell 中,一些常用的命令:

  • \help:列出所有命令
  • \l:列出所有数据库
  • \c database:连接到指定数据库
  • \du:列出所有用户
  • \dt:列出当前数据库的所有表
  • \q:退出数据库

参考文章:


在 ArchLinux 上安装使用 PostgreSQL
https://blog.ovvv.top/posts/d2adab3b/
作者
mobeicanyue
发布于
2024年2月29日 09:44
更新于
2024年6月2日 12:59
许可协议