要在CentOS上安装PostgreSQL

以下是如何在CentOS上安装PostgreSQL的详细步骤说明。有关在Windows上安装的信息,请参考此文章。

本说明主要针对 PostgreSQL 14 和 CentOS 7,但会在必要时补充不同版本的特殊之处。

安装PostgreSQL

有几种安装PostgreSQL的方法。主要方法如下所示。

    • ソースコードからビルド

 

    • CentOS 標準の Yum リポジトリを使う

 

    PostgreSQL 開発元の Yum リポジトリを使う

从源代码构建的方法可以使用最新版本,但是您需要首先配置构建环境,并且每次升级时都需要进行构建,这会很费时间。

使用CentOS的标准Yum仓库的方法,安装方便快捷,不费力,但无法使用最新版本。

在这里,只需要添加 Yum 存储库,就可以轻松使用最新版本了。使用 PostgreSQL 开发者的 Yum 存储库进行安装。

添加 PostgreSQL 开发元 Yum 仓库

要使用PostgreSQL开发源的Yum仓库,需要安装仓库包并添加Yum仓库。仓库包可以从以下页面下载。

PostgreSQL RPM构建项目 – 仓库软件包
https://yum.postgresql.org/repopackages.php

在上述的页面上,根据操作系统下载相应的存储库软件包。

在这里,由于要安装在CentOS 7(x86_64)上,所以请复制“CentOS 7 – x86_64”的URL。

使用复制的URL作为参数进行指定,安装存储库软件包。

$ sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
(省略)
Installed:
  pgdg-redhat-repo.noarch 0:42.0-20

Complete!

通过这个步骤,您将能够安装PostgreSQL及其相关软件包。

安装PostgreSQL软件包

PostgreSQL的软件包包含以下子软件包如下。

パッケージ名説明postgresql14クライアントプログラムpostgresql14-libs共有ライブラリpostgresql14-serverサーバプログラムpostgresql14-docsマニュアルpostgresql14-contrib追加モジュールpostgresql14-devel開発用ヘッダファイルとライブラリpostgresql14-llvmjitJIT コンパイル対応postgresql14-plperlPL/Perl (Perl 手続き言語)postgresql14-plpython3PL/Python (Python 3 手続き言語)postgresql14-pltclPL/Tcl (Tcl 手続き言語)postgresql14-testテストツール

要将PostgreSQL用作服务器,需要安装postgresql14-server包。

$ sudo yum -y install postgresql14-server
(省略)
Installed:
  postgresql14-server.x86_64 0:14.0-1PGDG.rhel7

Dependency Installed:
  postgresql14.x86_64 0:14.0-1PGDG.rhel7
  postgresql14-libs.x86_64 0:14.0-1PGDG.rhel7

Complete!

在CentOS 8中,Yum已被继任版本DNF(Dandified Yum)取代,并且开始以模块的形式管理软件包。因此,当尝试安装postgresql14-server包时,操作系统默认的postgresql模块会被优先选择,导致找不到该软件包并出现错误。

$ sudo yum -y install postgresql14-server
(省略)
All matches were filtered out by modular filtering for argument: postgresql14-server
Error: Unable to find a match: postgresql14-server

在这种情况下,您需要禁用postgresql模块后再安装包。

$ sudo dnf -y module disable postgresql
(省略)
Complete!

安装postgresql14-server软件包时,会安装两个依赖包postgresql14和postgresql14-libs。

PostgreSQL 的安装路径根据不同的版本而有所不同。如果是版本 14,则安装在 /usr/pgsql-14。您也可以在同一环境中安装多个不同的版本。

# ls /usr/pgsql-14
bin  lib  share

另外,如果在安装postgresql14-server包时,如果没有PostgreSQL超级用户postgres,则会创建一个。

# id postgres
uid=26(postgres) gid=26(postgres) groups=26(postgres)

创建数据库集群

数据库集群是用来存储数据库的区域。启动数据库服务器需要数据库集群。

在中文中,可以这样表达:
创建数据库集群可以使用initdb命令。也可以使用操作系统附带的脚本postgresql-14-setup,但是由于认证方式无法自定义指定,因此几乎没有什么必要特意使用它。

数据库集群的创建位置可以通过环境变量PGDATA或-D选项来指定。默认位置是/var/lib/pgsql/14/data,并且在postgres用户的配置文件~/.bash_profile中指定了环境变量PGDATA。然而,由于稍后会提及的原因,不应直接编辑该文件,因此如果要更改数据库集群的位置,最好使用-D选项。

作为其他指定选项,这里我们可以使用-E UTF8选项来设置数据库创建时的默认编码为UTF8,–locale=C选项来设置默认的区域设置为C(无区域设置),-A scram-sha-256选项来设置认证方式为scram-sha-256(使用SCRAM-SHA-256加密进行密码认证),-W选项用于显示密码设置的输入提示。

地域设置(ロケール)是根据语言和国家来指定处理和排序字符的方式。在日语中,很少需要使用地域设置,因为使用地域设置会导致字符处理变慢,并且在创建索引时如果没有指定选项,则无法在LIKE语句中使用索引,因此我们会避免使用地域设置。

为了运行initdb命令,需要切换到postgres用户,并通过su命令执行。在执行过程中,会显示输入密码设置的提示,因此需要重复输入相同的密码两次。

$ sudo su - postgres -c '/usr/pgsql-14/bin/initdb -E UTF8 --locale=C -A scram-sha-256 -W'
データベースシステム内のファイルの所有者はユーザー"postgres"となります。
このユーザーをサーバープロセスの所有者とする必要があります。

データベースクラスタはロケール"C"で初期化されます。
デフォルトのテキスト検索構成は english に設定されます。

データベージのチェックサムは無効です。

新しいスーパーユーザーのパスワードを入力してください: (パスワードを入力)
もう一度入力してください: (パスワードを再入力)

ディレクトリ/var/lib/pgsql/14/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
動的共有メモリの実装を選択しています ... posix
デフォルトのmax_connectionsを選択しています ... 100
デフォルトのshared_buffersを選択しています ... 128MB
デフォルトの時間帯を選択しています ... Asia/Tokyo
設定ファイルを作成しています ... ok
ブートストラップスクリプトを実行しています ... ok
ブートストラップ後の初期化を実行しています ... ok
データをディスクに同期しています... ok

成功しました。以下のようにしてデータベースサーバーを起動することができます:

    /usr/pgsql-14/bin/pg_ctl -D /var/lib/pgsql/14/data -l ログファイル start

当数据库集群创建完成后,让我们来检查目录中的文件。

$ sudo ls /var/lib/pgsql/14/data
PG_VERSION    pg_hba.conf    pg_replslot   pg_subtrans  postgresql.auto.conf
base          pg_ident.conf  pg_serial     pg_tblspc    postgresql.conf
global        pg_logical     pg_snapshots  pg_twophase
pg_commit_ts  pg_multixact   pg_stat       pg_wal
pg_dynshmem   pg_notify      pg_stat_tmp   pg_xact

在数据库群集中,以.conf结尾的是配置文件。数据文件存储在base和global目录中,以pg_开头的目录存储控制文件。日志文件默认存储在log目录中。

数据库服务器的启动

如果要更改数据库集群的位置,需要编辑PostgreSQL服务的单元文件。

$ sudo systemctl edit postgresql-14.service

当编辑器启动时,您需要在Service部分的Environment选项中指定环境变量PGDATA来确定数据库集群的位置。

[Service]
Environment=PGDATA=/var/lib/pgsql/14/data

启动数据库服务器作为PostgreSQL服务。

$ sudo systemctl start postgresql-14.service

如果没有任何输出,那就说明已经成功启动了。

顺便在操作系统启动时启动PostgreSQL服务。

$ sudo systemctl enable postgresql-14.service
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-14.service to /usr/lib/systemd/system/postgresql-14.service.

设置 PostgreSQL 超级用户的环境变量

数据库服务器的管理由PostgreSQL的超级用户postgres负责。我们将进行环境变量的设置,以便使用postgres用户更加方便操作。

通常情况下,环境变量的设置是通过配置文件 ~/.bash_profile 进行的。但是,postgres 用户的 ~/.bash_profile 在安装软件包时会被覆盖。因此,现在配置文件使用 ~/.bash_profile 中的内容,然后通过读取配置文件 ~/.pgsql_profile 来进行环境变量的设置。

$ sudo su - postgres
Last login: 土 10月  2 20:42:24 JST 2021 on pts/0
$ vi ~/.pgsql_profile

在 ~/.pgsql_profile 文件中,进行环境变量 PATH、MANPATH、PGDATA 的配置。像 psql 等客户端程序已包含在默认的搜索路径中(通过符号链接),但像 pg_ctl 等服务器程序却未包含在其中,所以需要进行环境变量 PATH、MANPATH 的配置。环境变量 PGDATA 指定了数据库群集的位置。在服务器程序中,需要指定数据库群集的位置,但如果进行环境变量 PGDATA 的配置,则可以省略此设置。

PATH=/usr/pgsql-14/bin:$PATH
MANPATH=/usr/pgsql-14/share/man:$MANPATH
PGDATA=/var/lib/pgsql/14/data
export PATH MANPATH PGDATA

执行重新加载配置文件~/.bash_profile,以便反映配置更改。

$ . ~/.bash_profile

确认数据库连接

最后,将显示数据库的列表并检查是否能够连接到数据库。当出现密码输入提示时,请输入在创建数据库集群时设置的密码。

$ psql -l
ユーザ postgres のパスワード: (パスワードを入力)
                                        データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) |     アクセス権限
-----------+----------+------------------+----------+-------------------+-----------------------
 postgres  | postgres | UTF8             | C        | C                 |
 template0 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
(3 行)

创建数据库集群后,会立即存在三个数据库:postgres、template0和template1。

PostgreSQL的安装已经完成。但是,如果要从除本地主机外的其他地方进行连接,需要进行进一步的配置。请参考这篇文章了解更多详情。

bannerAds