在RHEL8环境中安装并进行简单的PostgreSQL12操作验证

安装RPM包并在RHEL8环境下部署PostgreSQL12,并进行了简单的操作验证。

记录内容

    1. 以下是用中文重新表达的内容:

事前准备(下载PostgreSQL使用的RPM文件)
安装PostgreSQL12(解压RPM文件)
进行PostgreSQL的初始设置
创建新角色并进行数据库连接设置
创建模式/表
执行表的数据操作(插入/查询/更新/删除)

前提环境 tí

宿主操作系统:macOS Catalina 10.15.1
虚拟化软件:VirtualBox 版本 6.1.0 r135406
客户操作系统:Red Hat Enterprise Linux 版本 8.0 (Ootpa)
客户操作系统内核:4.18.0-80.el8.x86_64
PostgreSQL 版本:12.1

事前准备

    RPMのダウンロード&RHEL8環境への転送

从PostgreSQL社区网站的仓库中下载RPM文件
https://yum.postgresql.org/12/redhat/rhel-8-x86_64/
仅下载以下最低限度的RPM文件
postgresql12-server-12.1-2PGDG.rhel8.x86_64.rpm
postgresql12-12.1-2PGDG.rhel8.x86_64.rpm
postgresql12-libs-12.1-2PGDG.rhel8.x86_64.rpm

    PostgreSQL構築先のRHEL8環境への転送
[root@rhel8 postgresql]# cd /work/postgresql/
[root@rhel8 postgresql]# 
[root@rhel8 postgresql]# ls -ltr 
合計 19948
-rw-r--r--. 1 login00 login00 16308316  1月 31 23:33 postgresql12-server-12.1-2PGDG.rhel8.x86_64.rpm
-rw-r--r--. 1 login00 login00  3238556  1月 31 23:34 postgresql12-12.1-2PGDG.rhel8.x86_64.rpm
-rw-r--r--. 1 login00 login00   874940  1月 31 23:35 postgresql12-libs-12.1-2PGDG.rhel8.x86_64.rpm
[root@rhel8 postgresql]# 

2. 安装PostgreSQL12(解压RPM文件)

    非インターネット接続環境を想定しRPMインストール
[root@rhel8 postgresql]# rpm -ivh /work/postgresql/*
警告: ./postgresql12-12.1-2PGDG.rhel8.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 442df0f8: NOKEY
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:postgresql12-libs-12.1-2PGDG.rhel################################# [ 33%]
   2:postgresql12-12.1-2PGDG.rhel8    ################################# [ 67%]
   3:postgresql12-server-12.1-2PGDG.rh################################# [100%]
[/usr/lib/tmpfiles.d/libstoragemgmt.conf:1] Line references path below legacy directory /var/run/, updating /var/run/lsm → /run/lsm; please update the tmpfiles.d/ drop-in file accordingly.
[/usr/lib/tmpfiles.d/libstoragemgmt.conf:2] Line references path below legacy directory /var/run/, updating /var/run/lsm/ipc → /run/lsm/ipc; please update the tmpfiles.d/ drop-in file accordingly.
[/usr/lib/tmpfiles.d/mdadm.conf:1] Line references path below legacy directory /var/run/, updating /var/run/mdadm → /run/mdadm; please update the tmpfiles.d/ drop-in file accordingly.
[/usr/lib/tmpfiles.d/radvd.conf:1] Line references path below legacy directory /var/run/, updating /var/run/radvd → /run/radvd; please update the tmpfiles.d/ drop-in file accordingly.
[/usr/lib/tmpfiles.d/spice-vdagentd.conf:2] Line references path below legacy directory /var/run/, updating /var/run/spice-vdagentd → /run/spice-vdagentd; please update the tmpfiles.d/ drop-in file accordingly.
[/usr/lib/tmpfiles.d/subscription-manager.conf:1] Line references path below legacy directory /var/run/, updating /var/run/rhsm → /run/rhsm; please update the tmpfiles.d/ drop-in file accordingly.
[root@rhel8 postgresql]# 
[root@rhel8 postgresql]# echo $?
0
[root@rhel8 postgresql]# 

3. PostgreSQL的最初设置

    データベースクラスタの作成
[root@rhel8 postgresql]# /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK

[root@rhel8 postgresql]# 
    PostgreSQLの起動
[root@rhel8 data]# systemctl start postgresql-12.service 
[root@rhel8 data]# 
[root@rhel8 data]# systemctl status postgresql-12.service 
● postgresql-12.service - PostgreSQL 12 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-12.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-02-01 00:17:32 EST; 51s ago
     Docs: https://www.postgresql.org/docs/12/static/
  Process: 3513 ExecStartPre=/usr/pgsql-12/bin/postgresql-12-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 3518 (postmaster)
    Tasks: 8 (limit: 5064)
   Memory: 17.3M
   CGroup: /system.slice/postgresql-12.service
           ├─3518 /usr/pgsql-12/bin/postmaster -D /var/lib/pgsql/12/data/
           ├─3520 postgres: logger   
           ├─3522 postgres: checkpointer   
           ├─3523 postgres: background writer   
           ├─3524 postgres: walwriter   
           ├─3525 postgres: autovacuum launcher   
           ├─3526 postgres: stats collector   
           └─3527 postgres: logical replication launcher   

 2月 01 00:17:32 rhel8 systemd[1]: Starting PostgreSQL 12 database server...
 2月 01 00:17:32 rhel8 postmaster[3518]: 2020-02-01 00:17:32.527 EST [3518] LOG:  PostgreSQL 12.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.3.1 20190507 (Red Hat 8.3.1-4), 64-bit を起動しています
 2月 01 00:17:32 rhel8 postmaster[3518]: 2020-02-01 00:17:32.530 EST [3518] LOG:  IPv6アドレス"::1"、ポート5432で待ち受けています
 2月 01 00:17:32 rhel8 postmaster[3518]: 2020-02-01 00:17:32.530 EST [3518] LOG:  IPv4アドレス"127.0.0.1"、ポート5432で待ち受けています
 2月 01 00:17:32 rhel8 postmaster[3518]: 2020-02-01 00:17:32.536 EST [3518] LOG:  Unixソケット"/var/run/postgresql/.s.PGSQL.5432"で待ち受けています
 2月 01 00:17:32 rhel8 postmaster[3518]: 2020-02-01 00:17:32.541 EST [3518] LOG:  Unixソケット"/tmp/.s.PGSQL.5432"で待ち受けています
 2月 01 00:17:32 rhel8 postmaster[3518]: 2020-02-01 00:17:32.559 EST [3518] LOG:  ログ出力をログ収集プロセスにリダイレクトしています
 2月 01 00:17:32 rhel8 postmaster[3518]: 2020-02-01 00:17:32.559 EST [3518] ヒント:  ここからのログ出力はディレクトリ"log"に現れます。
 2月 01 00:17:32 rhel8 systemd[1]: Started PostgreSQL 12 database server.

[root@rhel8 data]#
    スーパーユーザでのPostgreSQLへの接続
[root@rhel8 data]# su - postgres 
[postgres@rhel8 ~]$  
[postgres@rhel8 ~]$ psql
psql (12.1)
"help"でヘルプを表示します。

postgres=# SELECT now();
              now              
-------------------------------
 2020-02-01 00:22:40.184864-05
(1 行)

postgres=#
    initdbによりデフォルトで作成されたデータベースの確認
postgres=# SELECT oid, datname FROM pg_database;
  oid  |  datname  
-------+-----------
 13451 | postgres
     1 | template1
 13450 | template0
(3 行)

postgres=#
    新規データベース(mydb)の作成
postgres=# CREATE DATABASE mydb;
CREATE DATABASE
postgres=# 
postgres=# SELECT oid, datname FROM pg_database;
  oid  |  datname  
-------+-----------
 13451 | postgres
 16384 | mydb
     1 | template1
 13450 | template0
(4 行)
    外部からも接続できるようにする為の設定変更
[postgres@rhel8 data]$ vim /var/lib/pgsql/12/data/postgresql.conf
#listen_addresses = 'localhost'
listen_addresses = '*'
    pg_hba.confのローカル接続の設定がデフォルトのまま(ident)の場合、localhostを指定すると接続できない
[postgres@rhel8 data]$ psql -h localhost -p 5432 -U postgres -d mydb
psql: エラー: サーバに接続できませんでした: FATAL:  ユーザ"postgres"のIdent認証に失敗しました
[postgres@rhel8 data]$
    localhostを指定しないと接続できる
[postgres@rhel8 data]$ psql -p 5432 -d mydb
psql (12.1)
"help"でヘルプを表示します。

mydb=# 
mydb=# \conninfo
データベース"mydb"にユーザ"postgres"として、"/var/run/postgresql"のソケットを介してポート"5432"で接続しています。
mydb=# 

4. 创建新角色并设置数据库连接

    OSユーザ(pgadm01)の作成&プロファイル設定
[root@rhel8 data]# useradd pgadm01
[root@rhel8 data]# 
[root@rhel8 data]# vim /home/pgadm01/.bash_profile
PGDATA=/var/lib/pgsql/12/data
export PGDATA
    新規role(pgadm01)の作成
[root@rhel8 data]# su - postgres
[postgres@rhel8 ~]$ 
[postgres@rhel8 ~]$ psql 
psql (12.1)
"help"でヘルプを表示します。

postgres=# 
postgres=# CREATE ROLE pgadm01;
CREATE ROLE
postgres=# 
postgres=# \du
                                             ロール一覧
 ロール名 |                                   属性                                   | 所属グループ 
----------+--------------------------------------------------------------------------+--------------
 pgadm01  | ログインできません                                                       | {}
 postgres | スーパユーザ, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}

postgres=# 
postgres=# ALTER ROLE pgadm01 LOGIN;
ALTER ROLE
postgres=# 
postgres=# \du
                                             ロール一覧
 ロール名 |                                   属性                                   | 所属グループ 
----------+--------------------------------------------------------------------------+--------------
 pgadm01  |                                                                          | {}
 postgres | スーパユーザ, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}

postgres=# 

如果使用createuser创建用户,将默认授予登录权限;但如果使用create role创建角色,则默认不会授予登录权限。

    データベース「mydb」の所有者をposgresからpgadm01に変更
postgres=# ALTER DATABASE mydb OWNER TO pgadm01;
ALTER DATABASE
postgres=# 
postgres=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限      
-----------+----------+------------------+-------------+-------------------+-----------------------
 mydb      | pgadm01  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(4 行)

postgres=#
    pgadm01ユーザでmydbに接続
postgres=# \q
[postgres@rhel8 ~]$ 
[postgres@rhel8 ~]$ exit
ログアウト
[root@rhel8 data]# 
[root@rhel8 data]# su - pgadm01
[pgadm01@rhel8 ~]$ 
[pgadm01@rhel8 ~]$ psql -p 5432 -d mydb
psql (12.1)
"help"でヘルプを表示します。

mydb=> 

创建模式/表

    スキーマ(pgadm01)の作成
mydb=> CREATE SCHEMA pgadm01;
CREATE SCHEMA
mydb=>
    テーブル(test)の作成
mydb=> CREATE TABLE test (
mydb(> name          varchar(50),
mydb(> subject       varchar(50),
mydb(> score         integer
mydb(> );
CREATE TABLE
mydb=> 
mydb=> \dt;
           リレーション一覧
 スキーマ | 名前 |    型    | 所有者  
----------+------+----------+---------
 pgadm01  | test | テーブル | pgadm01
(1 行)

mydb=>

执行表格数据操作(插入/选择/更新/删除)

    データの挿入(INSERT)
mydb=> INSERT INTO test (name, subject, score) VALUES ('student1', 'math', 80);
INSERT 0 1
mydb=> 
mydb=> SELECT * FROM test;
   name   | subject | score 
----------+---------+-------
 student1 | math    |    80
(1 行)

mydb=> 
    データの選択(SELECT)
mydb=> SELECT name, subject, score FROM test WHERE name = 'student1';
   name   | subject | score 
----------+---------+-------
 student1 | math    |    80
(1 行)

mydb=>
    データの更新(UPDATE)
mydb=> UPDATE test SET score = 95 WHERE name = 'student1';
UPDATE 1
mydb=> 
mydb=> SELECT * FROM test;
   name   | subject | score 
----------+---------+-------
 student1 | math    |    95
(1 行)

mydb=> 
    データの削除(DELETE)
mydb=> DELETE FROM test WHERE name = 'student1';
DELETE 1
mydb=> 
mydb=> SELECT * FROM test;
 name | subject | score 
------+---------+-------
(0 行)

mydb=>
广告
将在 10 秒后关闭
bannerAds