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 の略
コメント