LoginSignup
0
0

More than 3 years have passed since last update.

PostgreSQL11セットアップ

Last updated at Posted at 2021-02-27

目的

 Windows10+VMware(R) Workstation 15 Pro+CentOS7+PostgreSQL11で動作するPostgreSQL11検証環境作成
 業務での動作確認用だがOSS-DB Silver[ver2.0]での動作確認にも使う予定

 VMware(R) Workstation 15 Proを使用しているのは後で複数台のホストを立てて
 PostgreSQLのStreaming Replicationを確認するため

ハードウェア環境

仮想環境作成

CentOS7 ISO メディア取得

http://ftp.jaist.ac.jp/pub/Linux/CentOS/7.9.2009/isos/x86_64/
⇒CentOS-7-x86_64-Everything-2009.iso

VMware(R) Workstation 15 Pro 設定

  • 起動、仮想マシンの作成

  • 標準設定で作成

  • ダウンロードしたISOファイルを設定して「次へ」をクリック

  • 仮想マシン名を設定して「次へ」をクリック

  • ディスクのサイズを設定して「次へ」をクリック

  • 「ハードウェアをカスタマイズ」をクリック

  • 「ネットワークアダプタ」をクリック

  • ネットワークは隔離した場所を使いたいため「ホストオンリー」を選択し、「閉じる」をクリック

  • 「完了」をクリックするとCentOS7のインストールが開始される

CentOSインストール

  • GUIのインストーラ起動

  • 「日本語 Japanese」を選択して「続行」をクリック

  • !が表示されている「インストール先」をクリック

  • 「完了」をクリック

  • 「インストールの開始」をクリック

  • インストール中にrootユーザのパスワードを設定 「ROOTパスワード」をクリック

  • rootユーザのパスワードを入力して「完了」をクリック やむを得ず脆弱なパスワードを使用するときには「完了」を2回クリック

  • 「再起動」をクリック

  • 起動してきたら「インストールを完了しました」をクリック 黒画面内にマウスカーソルを移動して「Enter」キー押下でOSが起動する

ネットワーク設定(Windows10)

  • コントロールパネルを開き、「ネットワークとインターネット」⇒「ネットワークと共有センター」⇒「アダプターの設定の変更」をクリック(カテゴリ表示を想定)

  • ネットワーク接続のウィンドウが開いたら、「VMware Virtual Ethernet Adapter for VMnet1」を右クリックして「プロパティ」をクリック

  • 「インターネット プロトコル バージョン 4(TCP/IPv4)」を選択して「プロパティ」をクリック

  • IPアドレス、サブネットマスク、デフォルトゲートウェイに値を設定して「OK」をクリック 今回は192.168.100.*のネットワークとして作成

  • 「OK」をクリック

  • ネットワーク接続、ネットワークと共有センターのウィンドウを閉じる

ネットワーク設定(CentOS7)

※VMware(R) Workstation 15 Proで開いている以下のコンソール画面から入力
  Workstation 15 Proのメニューからテキスト貼り付けは可能

  • ログイン
  localhost login: root  
  Password: (rootのパスワード)  
  • バージョン確認
  # cat /etc/redhat-release
  CentOS Linux release 7.9.2009 (Core)
  • ネットワーク設定事前確認
  # ip addr show
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
         valid_lft forever preferred_lft forever
      inet6 ::1/128 scope host
         valid_lft forever preferred_lft forever
  2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 00:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
  • ネットワーク設定
  # nmcli connection modify ens33 ipv4.addresses 192.168.100.102/24 ipv4.method manual
  • OS起動時自動接続設定
  # nmcli connection modify ens33 connection.autoconnect yes
  • ネットワーク設定事後確認
  # ip addr show
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
         valid_lft forever preferred_lft forever
      inet6 ::1/128 scope host
         valid_lft forever preferred_lft forever
  2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 00:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
      inet 192.168.100.102/24 brd 192.168.100.255 scope global noprefixroute ens33
         valid_lft forever preferred_lft forever
      inet6 fe80::1846:a86c:868:a9e0/64 scope link noprefixroute
         valid_lft forever preferred_lft forever
  • OS再起動
  # shutdown -r now
  • OS再起動後ログイン
  localhost login: root  
  Password: rootのパスワード  
  • OS再起動後自動接続確認
  # ip addr show
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
         valid_lft forever preferred_lft forever
      inet6 ::1/128 scope host
         valid_lft forever preferred_lft forever
  2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 00:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
      inet 192.168.100.101/24 brd 192.168.100.255 scope global noprefixroute ens33
         valid_lft forever preferred_lft forever
      inet6 fe80::1846:a86c:868:a9e0/64 scope link noprefixroute
         valid_lft forever preferred_lft forever

※以下Teraterm等ターミナルソフトでログイン可能

PostgreSQLパッケージインストール

今回は隔離したネットワーク上にサーバを構築しているため、rpmのパッケージをダウンロードしてscp転送、インストールを実施

  • パッケージダウンロード場所
    https://yum.postgresql.org/11/redhat/rhel-7-x86_64/repoview/postgresqldbserver11.group.html

  • ダウンロード項目
    postgresql11 - PostgreSQL client programs and libraries
    postgresql11-contrib - Contributed source and binaries distributed with PostgreSQL
    postgresql11-libs - The shared libraries required for any PostgreSQL clients
    postgresql11-server - The programs needed to create and run a PostgreSQL server

  • ダウンロードファイル
    postgresql11-11.11-1PGDG.rhel7.x86_64.rpm
    postgresql11-contrib-11.11-1PGDG.rhel7.x86_64.rpm
    postgresql11-libs-11.11-1PGDG.rhel7.x86_64.rpm
    postgresql11-server-11.11-1PGDG.rhel7.x86_64.rpm

postgresql11-contribはメインのパッケージには取り込まれていないが使用用途によっては必要となる物が入ってるパッケージ⇒今回は入れない

ダウンロードしたパッケージはWin_SCPやTeratermのSSH SCP転送などで/tmp配下に転送する

  • Teratermにて192.168.100.102へrootユーザでログイン

  • パッケージ確認

  # ls -l /tmp/*.rpm
  -rw-r--r--. 1 root root 1764536  2月 27 20:03 /tmp/postgresql11-11.11-1PGDG.rhel7.x86_64.rpm
  -rw-r--r--. 1 root root  623984  2月 27 20:04 /tmp/postgresql11-contrib-11.11-1PGDG.rhel7.x86_64.rpm
  -rw-r--r--. 1 root root  371868  2月 27 20:04 /tmp/postgresql11-libs-11.11-1PGDG.rhel7.x86_64.rpm
  -rw-r--r--. 1 root root 4967804  2月 27 20:04 /tmp/postgresql11-server-11.11-1PGDG.rhel7.x86_64.rpm
  • パッケージインストールテスト
  # cd /tmp
  # rpm -i --test postgresql11-server-11.11-1PGDG.rhel7.x86_64.rpm postgresql11-libs-11.11-1PGDG.rhel7.x86_64.rpm postgresql11-11.11-1PGDG.rhel7.x86_64.rpm
  警告: postgresql11-server-11.11-1PGDG.rhel7.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 442df0f8: NOKEY
  エラー: 依存性の欠如:
          libicui18n.so.50()(64bit) は postgresql11-server-11.11-1PGDG.rhel7.x86_64 に必要とされています
          libicuuc.so.50()(64bit) は postgresql11-server-11.11-1PGDG.rhel7.x86_64 に必要とされています
          libicu は postgresql11-11.11-1PGDG.rhel7.x86_64 に必要とされています
  # ls -l /tmp/*.rpm
  -rw-r--r--. 1 root root 7202728  2月 27 20:15 /tmp/libicu-50.2-4.el7_7.x86_64.rpm
  -rw-r--r--. 1 root root 1764536  2月 27 20:03 /tmp/postgresql11-11.11-1PGDG.rhel7.x86_64.rpm
  -rw-r--r--. 1 root root  623984  2月 27 20:04 /tmp/postgresql11-contrib-11.11-1PGDG.rhel7.x86_64.rpm
  -rw-r--r--. 1 root root  371868  2月 27 20:04 /tmp/postgresql11-libs-11.11-1PGDG.rhel7.x86_64.rpm
  -rw-r--r--. 1 root root 4967804  2月 27 20:04 /tmp/postgresql11-server-11.11-1PGDG.rhel7.x86_64.rpm
  • パッケージインストールテスト
  # rpm -ihv --nosignature --test postgresql11-11.11-1PGDG.rhel7.x86_64.rpm postgresql11-libs-11.11-1PGDG.rhel7.x86_64.rpm postgresql11-server-11.11-1PGDG.rhel7.x86_64.rpm libicu-50.2-4.el7_7.x86_64.rpm
  準備しています...              ################################# [100%]
  • パッケージインストール
  # rpm -ihv --nosignature postgresql11-11.11-1PGDG.rhel7.x86_64.rpm postgresql11-libs-11.11-1PGDG.rhel7.x86_64.rpm postgresql11-server-11.11-1PGDG.rhel7.x86_64.rpm libicu-50.2-4.el7_7.x86_64.rpm
  準備しています...              ################################# [100%]
  更新中 / インストール中...
     1:libicu-50.2-4.el7_7              ################################# [ 25%]
     2:postgresql11-libs-11.11-1PGDG.rhe################################# [ 50%]
     3:postgresql11-11.11-1PGDG.rhel7   ################################# [ 75%]
     4:postgresql11-server-11.11-1PGDG.r################################# [100%]
  • インストール確認
  # rpm -qa | grep -e "postgresql11" -e "libicu"
  libicu-50.2-4.el7_7.x86_64
  postgresql11-11.11-1PGDG.rhel7.x86_64
  postgresql11-libs-11.11-1PGDG.rhel7.x86_64
  postgresql11-server-11.11-1PGDG.rhel7.x86_64

DBクラスタ作成

  • 実行ファイルインストール場所
  # find / -name postgres
  /usr/pgsql-11/bin/postgres
  • ファイル確認
  # ls -l /usr/pgsql-11/bin/
  合計 10048
  -rwxr-xr-x. 1 root root   58864  2月 11 09:42 clusterdb
  -rwxr-xr-x. 1 root root   58840  2月 11 09:42 createdb
  -rwxr-xr-x. 1 root root   59304  2月 11 09:42 createuser
  -rwxr-xr-x. 1 root root   54512  2月 11 09:42 dropdb
  -rwxr-xr-x. 1 root root   54488  2月 11 09:42 dropuser
  -rwxr-xr-x. 1 root root  121888  2月 11 09:42 initdb
  -rwxr-xr-x. 1 root root   28840  2月 11 09:42 pg_archivecleanup
  -rwxr-xr-x. 1 root root  109752  2月 11 09:42 pg_basebackup
  -rwxr-xr-x. 1 root root   28768  2月 11 09:42 pg_config
  -rwxr-xr-x. 1 root root   41264  2月 11 09:42 pg_controldata
  -rwxr-xr-x. 1 root root   54280  2月 11 09:42 pg_ctl
  -rwxr-xr-x. 1 root root  396672  2月 11 09:42 pg_dump
  -rwxr-xr-x. 1 root root   88632  2月 11 09:42 pg_dumpall
  -rwxr-xr-x. 1 root root   54440  2月 11 09:42 pg_isready
  -rwxr-xr-x. 1 root root   71824  2月 11 09:42 pg_receivewal
  -rwxr-xr-x. 1 root root   50040  2月 11 09:42 pg_resetwal
  -rwxr-xr-x. 1 root root  159528  2月 11 09:42 pg_restore
  -rwxr-xr-x. 1 root root   83920  2月 11 09:42 pg_rewind
  -rwxr-xr-x. 1 root root   29088  2月 11 09:42 pg_test_fsync
  -rwxr-xr-x. 1 root root   24784  2月 11 09:42 pg_test_timing
  -rwxr-xr-x. 1 root root  125824  2月 11 09:42 pg_upgrade
  -rwxr-xr-x. 1 root root   41400  2月 11 09:42 pg_verify_checksums
  -rwxr-xr-x. 1 root root   79696  2月 11 09:42 pg_waldump
  -rwxr-xr-x. 1 root root  142928  2月 11 09:42 pgbench
  -rwxr-xr-x. 1 root root 7457088  2月 11 09:42 postgres
  -rwxr-xr-x. 1 root root    2176  2月 11 09:41 postgresql-11-check-db-dir
  -rwxr-xr-x. 1 root root    9413  2月 11 09:41 postgresql-11-setup
  lrwxrwxrwx. 1 root root       8  2月 28 05:23 postmaster -> postgres
  -rwxr-xr-x. 1 root root  606680  2月 11 09:42 psql
  -rwxr-xr-x. 1 root root   58960  2月 11 09:42 reindexdb
  -rwxr-xr-x. 1 root root   63248  2月 11 09:42 vacuumdb
  • posrgresログ出力ディレクトリ作成
  # ls -ld /var/log/postgres
  ls: /var/log/postgres にアクセスできません: そのようなファイルやディレクトリはありません
  # mkdir -p /var/log/postgres
  # chown postgres:postgres /var/log/postgres
  # ls -ld /var/log/postgres
  drwxr-xr-x. 2 postgres postgres 6  2月 28 11:19 /var/log/postgres
  • postgresユーザ作成確認
  # grep postgres /etc/passwd
  postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
  # grep postgres /etc/group
  postgres:x:26:
  • ユーザ切り替え
  # su - postgres
  $ uname -n;id;date
  uid=26(postgres) gid=26(postgres) groups=26(postgres) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
  2021年  2月 28日 日曜日 11:25:05 JST
  • postgres状態確認
  $ /usr/pgsql-11/bin/pg_ctl status
  pg_ctl: ディレクトリ"/var/lib/pgsql/11/data"はデータベースクラスタディレクトリではありません
  • データベースクラスタ作成
  # /usr/pgsql-11/bin/initdb -D /var/lib/pgsql/11/data -E UTF8 --no-locale -U postgres
  データベースシステム内のファイルの所有者は"postgres"となります。
  このユーザがサーバプロセスも所有する必要があります。

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

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

  既存のディレクトリ/var/lib/pgsql/11/dataの権限を修正します ... 完了
  サブディレクトリを作成します ... 完了
  max_connectionsのデフォルト値を選択します ... 100
  shared_buffersのデフォルト値を選択します ... 128MB
  selecting default timezone ... Asia/Tokyo
  動的共有メモリの実装を選択します ... posix
  設定ファイルを作成します ... 完了
  ブートストラップスクリプトを実行します ... 完了
  ブートストラップ後の初期化を行っています ... 完了
  データをディスクに同期します...完了

  警告: ローカル接続で"trust"認証を有効にします。
  この設定はpg_hba.confを編集するか、次回のinitdbの実行の際であれば-Aオプ
  ション、または、--auth-localおよび--auth-hostを使用することで変更するこ
  とができます。

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

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

initdbオプション

https://www.postgresql.jp/document/11/html/app-initdb.html
https://www.postgresql.jp/document/11/html/locale.html

-D: データベースクラスタを格納すべきディレクトリを指定
-E: エンコードを指定
--no-locale: ロケールを使用しない
-U: データベースのスーパーユーザのユーザ名

PostgreSQL起動

  • PostgreSQL状態確認
  $ /usr/pgsql-11/bin/pg_ctl status
  pg_ctl: サーバが動作していません

DBクラスタができたので作成前とはメッセージが異なる

  • PostgreSQL起動
  $ /usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data -l /var/log/postgres/postgres.log start
  サーバの起動完了を待っています....完了
  サーバ起動完了
  • PostgreSQL起動後状態確認
  $ /usr/pgsql-11/bin/pg_ctl status
  pg_ctl: サーバが動作中です(PID: 2588)
  /usr/pgsql-11/bin/postgres "-D" "/var/lib/pgsql/11/data"```
  • postgresバージョン確認
  $ postgres -V
  postgres (PostgreSQL) 11.11
  • psqlバージョン確認
  $ psql -V
  psql (PostgreSQL) 11.11
  • psqlでpostgresへ接続
  $ psql
  psql (11.11)
  "help" でヘルプを表示します。

  postgres=#
  • 接続状態
  postgres=# \conninfo
データベース "postgres" にユーザ "postgres" として、ソケット "/var/run/postgresql" のポート "5432" を介して接続しています。
  • DB状態
  postgres=# \l
                                          データベース一覧
     名前    |  所有者  | エンコーディング | 照合順序 | 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 行)
  • DB変更確認
  postgres=# CREATE DATABASE test;
  CREATE DATABASE
  postgres=# \l
                                          データベース一覧
     名前    |  所有者  | エンコーディング | 照合順序 | 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
   test      | postgres | UTF8             | C        | C                 |
  (4 行)

  postgres=# \c test
  データベース "test" にユーザ "postgres" として接続しました。
  test=# create table sample (id integer, name varchar(10));
  CREATE TABLE
  test=# \dt
              リレーション一覧
   スキーマ |  名前  |    型    |  所有者
  ----------+--------+----------+----------
   public   | sample | テーブル | postgres
  (1 行)

  test=# SELECT * FROM sample;
   id | name
  ----+------
  (0 行)

  test=# INSERT INTO sample (id, name) VALUES (10010, 'SPEEDCORE');
  INSERT 0 1
  test=# INSERT INTO sample (id, name) VALUES (10011, 'GABBA');
  INSERT 0 1
  test=# SELECT * FROM SAMPLE;
    id   |   name
  -------+-----------
   10010 | SPEEDCORE
   10011 | GABBA
  (2 行)

  test=# DELETE FROM sample WHERE id = '10011';
  DELETE 1
  test=# SELECT * FROM SAMPLE;
    id   |   name
  -------+-----------
   10010 | SPEEDCORE
  (1 行)

  test=# TRUNCATE TABLE sample;
  TRUNCATE TABLE
  test=# SELECT * FROM SAMPLE;
   id | name
  ----+------
  (0 行)

  test=# DROP TABLE sample;
  DROP TABLE
  test=# SELECT * FROM SAMPLE;
  ERROR:  relation "sample" does not exist
  行 1: SELECT * FROM SAMPLE;
                      ^
  test=# \dt
  リレーションが見つかりませんでした。
  test=# DROP DATABASE TEST;
  ERROR:  cannot drop the currently open database
  test=# \c postgres
  データベース "postgres" にユーザ "postgres" として接続しました。
  postgres=# DROP DATABASE test;
  DROP DATABASE
  postgres=# \l
                                          データベース一覧
     名前    |  所有者  | エンコーディング | 照合順序 | 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 行)
  • psql終了
  postgres=# \q
  • ログ出力確認
  $ cat /var/log/postgres/postgres.log
  2021-02-28 11:39:47.358 JST [2588] LOG:  listening on IPv6 address "::1", port 5432
  2021-02-28 11:39:47.358 JST [2588] LOG:  listening on IPv4 address "127.0.0.1", port 5432
  2021-02-28 11:39:47.359 JST [2588] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
  2021-02-28 11:39:47.360 JST [2588] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
  2021-02-28 11:39:47.366 JST [2588] LOG:  redirecting log output to logging collector process
  2021-02-28 11:39:47.366 JST [2588] HINT:  Future log output will appear in directory "log".
  • 終了
  $ exit;exit
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0