PostgreSQL 01 - 安装

  PostgreSQL: The World's Most Advanced Open Source Relational Database.

安装

  Fedora 上安装 PG 很简单,且版本较新:

sudo dnf install postgresql-server postgresql-contrib

  这会安装 PG 服务端,客户端以及一些插件和工具。

  让 PG 可以开机启动:

sudo systemctl enable postgresql

  在第一次启动之前,需要生成一些必备的配置和数据文件:

sudo postgresql-setup --initdb --unit postgresql

  启动 PG:

sudo systemctl start postgresql

  官方文档:PostgreSQL

初始化

  下面的初始化流程总结自 PG 官方文档。

  1. 创建 PG 系统用户

  PG 建议在系统中创建一个单独的用户 (如postgres) 来运行 PG 服务器。实际上,使用包管理器 (dnf) 安装 PG 时,会自动创建 postgres 这个系统用户。

  1. 创建数据库集群

  在执行任何操作之前,必须在磁盘上初始化数据库存储区域 (数据库集群)。数据库集群是单个正在运行的数据库服务器实例管理的数据库集合。初始化后,数据库集群将包含一个名为postgres的数据库,数据库服务器本身不要求存在postgres数据库,但许多外部程序假定它存在。在初始化期间,每个集群中还会创建另外两个数据库,分别名为 template1template0。顾名思义,这些数据库将用作随后创建的数据库的模板 (不应将它们用于实际工作)。

  在文件系统术语中,数据库集群是一个存储所有数据的单个目录 (数据目录或数据区域)。这个目录的位置是用户自定义的,常见的两个位置是:/usr/local/pgsql/data/var/lib/pgsql/data。在启动数据库前,必须初始化数据目录。

  在登录到 PostgreSQL 系统账户后执行以下命令:

pg_ctl initdb -D /var/lib/pgsql/data

  或者:

initdb -D /var/lib/pgsql/data

  其中,-D选项指定要初始化的数据目录。

  PG 建议使用包管理器提供的脚本来初始化数据存储区域,即:

sudo postgresql-setup --initdb --unit postgresql
  1. 启动数据库服务器

  手动启动服务器的基本方法是直接调用postgres程序,使用-D选项指定数据目录的位置。在登录到 PostgreSQL 系统帐户后执行以下命令:

postgres -D /var/lib/pgsql/data

  这将使服务器在前台运行。如果没有-D,服务器将尝试使用环境变量PGDATA指定的数据目录。

  在后台启动服务器的方法很多:

postgres -D /var/lib/pgsql/data &

  或者:

pg_ctl start -D /var/lib/pgsql/data

  PG 推荐使用包管理器提供的启动任务:

sudo systemctl start postgresql
  1. 停止数据库

  停止数据库的命令如下:

pg_ctl stop -D /var/lib/pgsql/data [-m SHUTDOWN-MODE]

  可选项-m用于指定停止数据库的方法,有三种模式:smartfastimmediate

  • smart:等所有连接中止后,关闭数据库。如果客户端连接不终止,则无法关闭数据库。
  • fast:快速关闭数据库,断开客户端的连接,让已有的事务回滚,然后正常关闭数据库。
  • immediate:立即关闭数据库,相当于数据库进程立即停止,直接退出,下次启动数据库需要进行恢复。

其他工具

  管理 PostgreSQL 的工具有很多,下面列举几个常用的:

  1. psql

  PG 自带的命令行工具。

  1. pgcli

  psql 的替代,支持语法高亮,补全和纠错。

sudo dnf in pgcli python3-keyrings-alt
  1. pgAdmin

  PG 官方维护的功能强大的跨平台 GUI 程序。

  1. DBeaver

  免费的多功能数据库管理 GUI 程序,支持 PG。

flatpak install flathub io.dbeaver.DBeaverCommunity
  1. pgModeler

  免费的 PG 数据库建模工具,也支持管理 PG 数据库。