要在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-llvmjit
JIT コンパイル対応postgresql14-plperl
PL/Perl (Perl 手続き言語)postgresql14-plpython3
PL/Python (Python 3 手続き言語)postgresql14-pltcl
PL/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的安装已经完成。但是,如果要从除本地主机外的其他地方进行连接,需要进行进一步的配置。请参考这篇文章了解更多详情。