【PostgreSQL】【RedHat8】PostgreSQL のインストールと初期設定

RedHat8 での PostgreSQL のインストール手順と初期設定を解説します。

 

以下、他の環境での PostgreSQL のインストール手順と初期設定手順です。

 

【PostgreSQL】PostgreSQL のインストールと初期設定【Part.3】

 

 

【PostgreSQL】【CentOS7】yum コマンドで PostgreSQL インストール&初期設定(ユーザー作成、パスワード設定、データベース作成、権限割り当て)手順

 

 

 

インストール環境

以下の環境でインストールをしました。

 

■OS を確認する

[root@RedHat8 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.1 (Ootpa)
[root@RedHat8 ~]#

 

 

 

 

PostgreSQL インストール手順

以下の環境でインストールをしました。

 

■yum コマンドで PostgreSQL をインストールする

[root@RedHat8 ~]# yum install postgresql postgresql-server

 

 

 

■PostgreSQL のバージョン確認

PostgreSQL のバージョンは「10.6」です。

[root@RedHat8 ~]$ rpm -qa | grep postgres
postgresql-server-10.6-1.module+el8+2469+5ecd5aae.x86_64
postgresql-10.6-1.module+el8+2469+5ecd5aae.x86_64
[root@RedHat8 ~]$

 

 

 

■postgres アカウントのチェック

postgres アカウントが作成されていることを確認します。

[root@RedHat8 ~]# cat /etc/passwd | grep postgres
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
[root@RedHat8 ~]#

 

 

■postgres アカウントにスイッチする

[root@RedHat8 ~]# su – postgres

 

 

■DB をセットアップする

[postgres@RedHat8 ~]$ postgresql-setup initdb 
WARNING: using obsoleted argument syntax, try –help 
WARNING: arguments transformed to: postgresql-setup –initdb –unit postgresql 
 * Initializing database in ‘/var/lib/pgsql/data’ 
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log 
[postgres@RedHat8 ~]$

 

 

 

■ディレクトリを確認する

[postgres@RedHat8 ~]$ pwd 
/var/lib/pgsql 
[postgres@RedHat8 ~]$ ls -l 
total 8 
drwx——. 20 postgres postgres 4096 Apr 25 03:47 data 
-rw——-.  1 postgres postgres  859 Apr 25 03:47 initdb_postgresql.log 
[postgres@RedHat8 ~]$

 

 

 

■インストールログを確認する

[postgres@RedHat8 ~]$ cat initdb_postgresql.log 
The files belonging to this database system will be owned by user “postgres”. 
This user must also own the server process. 
 
The database cluster will be initialized with locale “en_US.UTF-8”. 
The default database encoding has accordingly been set to “UTF8”. 
The default text search configuration will be set to “english”. 
 
Data page checksums are disabled. 
 
fixing permissions on existing directory /var/lib/pgsql/data … ok 
creating subdirectories … ok 
selecting default max_connections … 100 
selecting default shared_buffers … 128MB 
selecting dynamic shared memory implementation … posix 
creating configuration files … ok 
running bootstrap script … ok 
performing post-bootstrap initialization … ok 
syncing data to disk … ok 
 
Success. You can now start the database server using: 
 
    /usr/bin/pg_ctl -D /var/lib/pgsql/data -l logfile start 
 
[postgres@RedHat8 ~]$

 

 

 

■data ディレクトリ配下のディレクトリとファイルの設定を確認する

[postgres@RedHat8 ~]$ cd data/ 
[postgres@RedHat8 data]$ ls -l 
total 48 
drwx——. 5 postgres postgres    41 Apr 25 03:47 base 
drwx——. 2 postgres postgres  4096 Apr 25 03:47 global 
drwx——. 2 postgres postgres     6 Apr 25 03:47 pg_commit_ts 
drwx——. 2 postgres postgres     6 Apr 25 03:47 pg_dynshmem 
-rw——-. 1 postgres postgres  4269 Apr 25 03:47 pg_hba.conf 
-rw——-. 1 postgres postgres  1636 Apr 25 03:47 pg_ident.conf 
drwx——. 2 postgres postgres     6 Apr 25 03:47 pg_log 
drwx——. 4 postgres postgres    68 Apr 25 03:47 pg_logical 
drwx——. 4 postgres postgres    36 Apr 25 03:47 pg_multixact 
drwx——. 2 postgres postgres    18 Apr 25 03:47 pg_notify 
drwx——. 2 postgres postgres     6 Apr 25 03:47 pg_replslot 
drwx——. 2 postgres postgres     6 Apr 25 03:47 pg_serial 
drwx——. 2 postgres postgres     6 Apr 25 03:47 pg_snapshots 
drwx——. 2 postgres postgres     6 Apr 25 03:47 pg_stat 
drwx——. 2 postgres postgres     6 Apr 25 03:47 pg_stat_tmp 
drwx——. 2 postgres postgres    18 Apr 25 03:47 pg_subtrans 
drwx——. 2 postgres postgres     6 Apr 25 03:47 pg_tblspc 
drwx——. 2 postgres postgres     6 Apr 25 03:47 pg_twophase 
-rw——-. 1 postgres postgres     3 Apr 25 03:47 PG_VERSION 
drwx——. 3 postgres postgres    60 Apr 25 03:47 pg_wal 
drwx——. 2 postgres postgres    18 Apr 25 03:47 pg_xact 
-rw——-. 1 postgres postgres    88 Apr 25 03:47 postgresql.auto.conf 
-rw——-. 1 postgres postgres 22764 Apr 25 03:47 postgresql.conf 
[postgres@RedHat8 data]$

 

 

 

 

PostgreSQL の起動及び自動起動の設定

PostgreSQL の起動及び自動起動の設定をします。

 

■PostgreSQL のプロセス確認

[root@RedHat8 ~]# ps -ef | grep postgres 
root      1648  1504  0 04:17 pts/0    00:00:00 grep –color=auto postgres 
[root@RedHat8 ~]#

 

 

■PostgreSQL のプロセス確認

[root@RedHat8 ~]# systemctl status postgresql -l –no-pager 
● postgresql.service – PostgreSQL database server 
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled) 
   Active: inactive (dead) 
[root@RedHat8 ~]#

 

 

■PostgreSQL のプロセス起動

[root@RedHat8 ~]# systemctl start postgresql

 

 

 

■PostgreSQL のプロセス確認

[root@RedHat8 ~]# systemctl status postgresql -l –no-pager 
● postgresql.service – PostgreSQL database server 
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled) 
   Active: active (running) since Sat 2020-04-25 04:49:41 UTC; 3s ago 
  Process: 1748 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=0/SUCCESS) 
 Main PID: 1750 (postmaster) 
    Tasks: 8 (limit: 4894) 
   Memory: 16.3M 
   CGroup: /system.slice/postgresql.service 
           tq1750 /usr/bin/postmaster -D /var/lib/pgsql/data 
           tq1752 postgres: logger process 
           tq1754 postgres: checkpointer process 
           tq1755 postgres: writer process 
           tq1756 postgres: wal writer process 
           tq1757 postgres: autovacuum launcher process 
           tq1758 postgres: stats collector process 
           mq1759 postgres: bgworker: logical replication launcher 
 
Apr 25 04:49:41 RedHat8 systemd[1]: Starting PostgreSQL database server… 
Apr 25 04:49:41 RedHat8 postmaster[1750]: 2020-04-25 04:49:41.147 UTC [1750] LOG:  listening on IPv6 address “::1”, port 5432 
Apr 25 04:49:41 RedHat8 postmaster[1750]: 2020-04-25 04:49:41.147 UTC [1750] LOG:  listening on IPv4 address “127.0.0.1”, port 5432 
Apr 25 04:49:41 RedHat8 postmaster[1750]: 2020-04-25 04:49:41.148 UTC [1750] LOG:  listening on Unix socket “/var/run/postgresql/.s.PGSQL.5432” 
Apr 25 04:49:41 RedHat8 postmaster[1750]: 2020-04-25 04:49:41.150 UTC [1750] LOG:  listening on Unix socket “/tmp/.s.PGSQL.5432” 
Apr 25 04:49:41 RedHat8 postmaster[1750]: 2020-04-25 04:49:41.160 UTC [1750] LOG:  redirecting log output to logging collector process 
Apr 25 04:49:41 RedHat8 postmaster[1750]: 2020-04-25 04:49:41.160 UTC [1750] HINT:  Future log output will appear in directory “log”. 
Apr 25 04:49:41 RedHat8 systemd[1]: Started PostgreSQL database server. 
[root@RedHat8 ~]#

 

 

 

 

■PostgreSQL のプロセス自動起動設定

[root@RedHat8 ~]# systemctl enable postgresql
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.
[root@RedHat8 ~]#

 

 

 

■PostgreSQL のプロセス自動起動設定確認

[root@RedHat8 ~]# systemctl list-unit-files | grep postgresql 
postgresql.service                          enabled 
postgresql@.service                         disabled 
[root@RedHat8 ~]#

 

 

 

 

PostgreSQL へログイン確認をする

サービスが起動したら PostgreSQL へログイン確認をします。

「su – postgres」コマンドで「postgres」アカウントにスイッチし、「psql」コマンドでログインします。

 

■postgres アカウントにスイッチする

[root@RedHat8 ~]# su – postgres

 

 

■postgres DB に接続する

[postgres@RedHat8 ~]$ psql 
psql (10.6) 
Type “help” for help. 
 
postgres=# 

 

 

■接続している DB を確認する

postgres=# select current_database(); 
 current_database 
—————— 
 postgres 
(1 row) 
 
postgres=#

 

 

 

 

 

各種 PostgreSQL の設定および設定確認

各種 PostgreSQL の設定および設定確認です。

 

■ページャーの無効化

postgres=# \pset pager off
Pager usage is off.
postgres=#

 

ページャーとは、Linux コマンドの「more」コマンドと同じで、一気に全コマンド結果を端末に表示せずに、「Enter キー」や「スペースキー」を押下すると次のページに進みます。

状況によっては邪魔になるのでページャーを off(無効化)にします。

 

 

■今使用しているユーザーを確認する

postgres=# select current_user; 
 current_user 
————– 
 postgres 
(1 row) 
 
postgres=#

 

 

 

■今使用しているロール名を確認する

postgres=# select current_role; 
 current_role 
————– 
 postgres 
(1 row) 
 
postgres=#

 

ロールもユーザーもどちらも「postgres」です。

ここで疑問が湧きましたが、それは「そもそもユーザーとロールは何が違うのか?」という疑問です。

 

■ロール(ROLE)とユーザー(USER)は何が違うのか?

  • CREATE ROLE ← ログインできる属性なし(ログインする場合は別途設定が必要)
  • CREATE USER ← ログインできる属性あり

 

 

■参考サイト

PostgreSQL のロールについて詳しく解説しています。

https://eng-entrance.com/postgresql-role

https://teratail.com/questions/155198

 

上記の説明をまとめますと、以下のようになります。

  • PostgreSQL 8.0 以前はユーザー(USER)とグループ(GROUP)があった
  • PostgreSQL 8.1 以降はロール(ROLE)にまとめられた
  • ロール(ROLE)はデフォルトで LOGIN 属性が与えられている
  • ユーザー(USER)はデフォルトで LOGIN 属性が与えられていない
  • ロール(ROLE)とユーザー(USER)は LOGIN 属性以外は一緒
  • PostgreSQL 8.1 以降はロールにまとめられたのでロールを作成する際は CREATE ROLE が正式な書式

 

 

 

 

■ユーザー一覧を確認する

postgres=# select usename from pg_user; 
 usename 
———- 
 postgres 
(1 row) 
 
postgres=#

 

 

 

 

■ロール一覧を確認する(psqlメタコマンド)

postgres=# \du 
                                   List of roles 
 Role name |                         Attributes                         | Member of 
———–+————————————————————+———– 
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {} 
 
postgres=# 

 

 

\(円マーク)から始まるコマンド(例:\duとか\qなど)は psql メタコマンドと言います。

 

■psql メタコマンド一覧表示

postgres=# \? 
General 
  \copyright             show PostgreSQL usage and distribution terms 
  \crosstabview [COLUMNS] execute query and display results in crosstab 
  \errverbose            show most recent error message at maximum verbosity 
  \g [FILE] or ;         execute query (and send results to file or |pipe) 
  \gexec                 execute query, then execute each value in its result 
  \gset [PREFIX]         execute query and store results in psql variables 
  \gx [FILE]             as \g, but forces expanded output mode 
  \q                     quit psql 
  \watch [SEC]           execute query every SEC seconds 
 
Help 
  \? [commands]          show help on backslash commands 
  \? options             show help on psql command-line options 
  \? variables           show help on special variables 
  \h [NAME]              help on syntax of SQL commands, * for all commands 
 
Query Buffer 
  \e [FILE] [LINE]       edit the query buffer (or file) with external editor 
  \ef [FUNCNAME [LINE]]  edit function definition with external editor 
  \ev [VIEWNAME [LINE]]  edit view definition with external editor 
  \p                     show the contents of the query buffer 
  \r                     reset (clear) the query buffer 
  \s [FILE]              display history or save it to file 
  \w FILE                write query buffer to file 
 
Input/Output 
  \copy …              perform SQL COPY with data stream to the client host 
  \echo [STRING]         write string to standard output 
  \i FILE                execute commands from file 
  \ir FILE               as \i, but relative to location of current script 
  \o [FILE]              send all query results to file or |pipe 
  \qecho [STRING]        write string to query output stream (see \o) 
 
Conditional 
  \if EXPR               begin conditional block 
  \elif EXPR             alternative within current conditional block 
  \else                  final alternative within current conditional block 
  \endif                 end conditional block 
 
Informational 
  (options: S = show system objects, + = additional detail) 
  \d[S+]                 list tables, views, and sequences 
  \d[S+]  NAME           describe table, view, sequence, or index 
  \da[S]  [PATTERN]      list aggregates 
  \dA[+]  [PATTERN]      list access methods 
  \db[+]  [PATTERN]      list tablespaces 
  \dc[S+] [PATTERN]      list conversions 
  \dC[+]  [PATTERN]      list casts 
  \dd[S]  [PATTERN]      show object descriptions not displayed elsewhere 
  \dD[S+] [PATTERN]      list domains 
  \ddp    [PATTERN]      list default privileges 
  \dE[S+] [PATTERN]      list foreign tables 
  \det[+] [PATTERN]      list foreign tables 
  \des[+] [PATTERN]      list foreign servers 
  \deu[+] [PATTERN]      list user mappings 
  \dew[+] [PATTERN]      list foreign-data wrappers 
  \df[antw][S+] [PATRN]  list [only agg/normal/trigger/window] functions 
  \dF[+]  [PATTERN]      list text search configurations 
  \dFd[+] [PATTERN]      list text search dictionaries 
  \dFp[+] [PATTERN]      list text search parsers 
  \dFt[+] [PATTERN]      list text search templates 
  \dg[S+] [PATTERN]      list roles 
  \di[S+] [PATTERN]      list indexes 
  \dl                    list large objects, same as \lo_list 
  \dL[S+] [PATTERN]      list procedural languages 
  \dm[S+] [PATTERN]      list materialized views 
  \dn[S+] [PATTERN]      list schemas 
  \do[S]  [PATTERN]      list operators 
  \dO[S+] [PATTERN]      list collations 
  \dp     [PATTERN]      list table, view, and sequence access privileges 
  \drds [PATRN1 [PATRN2]] list per-database role settings 
  \dRp[+] [PATTERN]      list replication publications 
  \dRs[+] [PATTERN]      list replication subscriptions 
  \ds[S+] [PATTERN]      list sequences 
  \dt[S+] [PATTERN]      list tables 
  \dT[S+] [PATTERN]      list data types 
  \du[S+] [PATTERN]      list roles 
  \dv[S+] [PATTERN]      list views 
  \dx[+]  [PATTERN]      list extensions 
  \dy     [PATTERN]      list event triggers 
  \l[+]   [PATTERN]      list databases 
  \sf[+]  FUNCNAME       show a function’s definition 
  \sv[+]  VIEWNAME       show a view’s definition 
  \z      [PATTERN]      same as \dp 
 
Formatting 
  \a                     toggle between unaligned and aligned output mode 
  \C [STRING]            set table title, or unset if none 
  \f [STRING]            show or set field separator for unaligned query output 
  \H                     toggle HTML output mode (currently off) 
  \pset [NAME [VALUE]]   set table output option 
                         (NAME := {border|columns|expanded|fieldsep|fieldsep_zero| 
                         footer|format|linestyle|null|numericlocale|pager| 
                         pager_min_lines|recordsep|recordsep_zero|tableattr|title| 
                         tuples_only|unicode_border_linestyle| 
                         unicode_column_linestyle|unicode_header_linestyle}) 
  \t [on|off]            show only rows (currently off) 
  \T [STRING]            set HTML <table> tag attributes, or unset if none 
  \x [on|off|auto]       toggle expanded output (currently off) 
 
Connection 
  \c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo} 
                         connect to new database (currently “postgres”) 
  \conninfo              display information about current connection 
  \encoding [ENCODING]   show or set client encoding 
  \password [USERNAME]   securely change the password for a user 
 
Operating System 
  \cd [DIR]              change the current working directory 
  \setenv NAME [VALUE]   set or unset environment variable 
  \timing [on|off]       toggle timing of commands (currently off) 
  \! [COMMAND]           execute command in shell or start interactive shell 
 
Variables 
  \prompt [TEXT] NAME    prompt user to set internal variable 
  \set [NAME [VALUE]]    set internal variable, or list all if no parameters 
  \unset NAME            unset (delete) internal variable 
 
Large Objects 
  \lo_export LOBOID FILE 
  \lo_import FILE [COMMENT] 
  \lo_list 
  \lo_unlink LOBOID      large object operations 
postgres=#

 

 

 

■ロール一覧を確認する(selectコマンド)

postgres=# select rolname, rolsuper, rolcanlogin from pg_roles; 
       rolname        | rolsuper | rolcanlogin 
———————-+———-+————- 
 postgres             | t        | t 
 pg_monitor           | f        | f 
 pg_read_all_settings | f        | f 
 pg_read_all_stats    | f        | f 
 pg_stat_scan_tables  | f        | f 
 pg_signal_backend    | f        | f 
(6 rows) 
 
postgres=#

 

上記コマンド結果を見ると、いくつかロールが存在しますが、LOGIN 属性を持っているのは「postgres」ロールだけであることが確認できます。

 

 

 

 

■データベース一覧を確認する(データベースへのアクセス権を確認する)

postgres=# \l 
                                  List of databases 
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges 
———–+———-+———-+————-+————-+———————– 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          + 
           |          |          |             |             | postgres=CTc/postgres 
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          + 
           |          |          |             |             | postgres=CTc/postgres 
(3 rows) 
 
postgres=#

 

  • =(イコール)の左側が空(カラ)の場合は、すべてのユーザー(PUBLIC)に対する権限
  • =c/postgres ← postgres によってすべてのユーザーに c(CONNECT)の権限が割り当てられている
  • postgres=CTc/postgres ← postgresによって、postgresユーザーにC(CREATE)、T(TEMPORARY)、c(CONNECT)の権限が割り当てられている
  • TEMPORARY の権限とは、データベースの使用中に一時テーブルを作る権限のこと
  • 一時テーブルとは接続したセッションの間でしか存在できないテーブルのことを言う

 

 

■データベース一覧を確認する(データベースへのアクセス権を確認する、サイズを確認するなど)

postgres=# \l+ 
                                                                    List of databases 
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description 
———–+———-+———-+————-+————-+———————–+———+————+——————————————– 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 7349 kB | pg_default | default administrative connection database 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 7217 kB | pg_default | unmodifiable empty database 
           |          |          |             |             | postgres=CTc/postgres |         |            | 
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 7217 kB | pg_default | default template for new databases 
           |          |          |             |             | postgres=CTc/postgres |         |            | 
(3 rows) 
 
postgres=#

 

  • +(プラス)を付けるとデータベースのサイズ、デフォルトのテーブル空間、説明が追加される
  • l は List の略

 

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください