Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

EC2仮想サーバーにpostgresqlをインストールする手順

updated on 2019-06-11

postgresqlのサーバはyumでインストールする

どうやら amazon-linux-extras コマンドでは psql コマンドがインストールされるだけのようです。

なので、yumで入れましょう


前提: EC2仮想サーバーにsshできる状態、ec2内にユーザーを作成済み(筆者の場合tatsuya)

 

手順1. インストール

と言うことで、postgresのサーバは普通に yum install でインストールしましょう。

[tatsuya@ip-10-0-0-238 ~]$sudo yum install -y postgresql postgresql-server postgresql-devel postgresql-contrib postgresql-docs

結果(一部)

Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                                                                                                           

〜〜中略〜〜

Complete!

確認

$ psql --version

psql (PostgreSQL) 9.2.4

 

手順2. 初期設定

次に初期設定を行います。以下のコマンドでできます。

## 初期化(PostgreSQLインストール後には必ず実施)

[tatsuya@ip-10-0-0-238 ~]$ sudo /sbin/service postgresql initdb


サービスの起動・停止・再起動

## 起動・停止・再起動
[tatsuya@ip-10-0-0-238 ~]$ sudo /sbin/service postgresql start
Starting postgresql service:                               [  OK  ]
[tatsuya@ip-10-0-0-238 ~]$sudo /sbin/service postgresql stop
Stopping postgresql service:                               [  OK  ]

[tatsuya@ip-10-0-0-238 ~]$sudo /sbin/service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service: 

 

サービスの自動起動化設定

必要に応じて以下の自動起動設定を行なってください。

sudo /sbin/chkconfig --list | grep postgresql 
postgresql      0:off 1:off 2:off 3:off 4:off 5:off 6:off
sudo /sbin/chkconfig postgresql on
sudo /sbin/chkconfig --list | grep postgresql postgresql
0:off 1:off 2:on  3:on  4:on  5:on  6:off

 

手順4. 接続(ユーザー:postgres)

ec2-userにてPostgreSQL用ユーザーpostgresのパスワードを変更します。

[tatsuya@ip-10-0-0-238 ~]$ sudo passwd postgres
ユーザー postgres のパスワードを変更。
新しいパスワード:(**************)
新しいパスワードを再入力してください:(**************)
passwd: 全ての認証トークンが正しく更新できました。


ユーザが変更出来ることを確認してみます。

[tatsuya@ip-10-0-0-238 ~]$ su - postgres
パスワード:
-bash-4.1$ exit
-bash-4.1

次にpsqlコマンドで接続します。

psql -U postgres -h localhost

以下のような結果が得られればOKです。

psql (9.6.8)
Type "help" for help.

postgres=#


PG設定ファイルの編集

設定ファイルpostgresql.confを編集。listen_addressは行先頭のコメントを除去し内容を『*』に変更

su - postgres

vi /var/lib/pgsql/data/postgresql.conf

-----

...

#------------------------------------------------------------------------------

# CONNECTIONS AND AUTHENTICATION

#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'                  # what IP address(es) to listen on;

                                        # comma-separated list of addresses;

                                        # defaults to 'localhost'; use '*' for all

port = 5432                             # (change requires restart)

次いでpg_hba.confの編集。ここは以下の様に最低限の設定でひとまず進めます。

vi /var/lib/pgsql/data/pg_hba.conf

# local   all             all                                    peer
# 以下に変更(peer認証を取り除く)
local   all             all                                    md5

# host    all             all             127.0.0.1/32            ident
# 以下に変更(localhostからの時passwordを求めない)
host    all             all             127.0.0.1/32            trust

trust でローカル環境なら psql -U postgres -h localhost でパスワードなしでもアクセスできるようになる

  • Ident : DB の所有者がシェルを実行している OS のユーザ名と一致するかで認証
  • MD5 : PW 認証 (MD5-hashed)
  • Trust : 認証せず、DB への接続許可 (PW スルー)

DB接続用ユーザーの作成

postgresユーザとは別に、今回の動作確認用のDB接続ユーザーを作成します。まずは、実行ユーザをpostgresにチェンジ。

su - postgres
パスワード: (***********)
-bash-4.1$
ユーザー名
tatsuya
パスワード
cmtestpass
データベース(テスト環境)
db_test
データベース(開発環境)
db_development
データベース(本番環境)
db_production

ユーザー名はec2-user以外の登録したユーザを作成する。理由はEC2のユーザー名と、これから作成するpostgresqlサーバー内のユーザー名を合わせることで、勝手にユーザーを識別してくれる

[tatsuya@ip-10-0-0-238 ~]$ psql -l -U tatsuya

-Uを指定しなくてもpsql -lだけでユーザー名tatsuyaとして認識してくれてちょっと楽

-Uオプション指定の手間なんて気にしないという人はcmtestuserなり好きなユーザー名を作成してください


DB, role作成(やり方2通り書くがどちらでも良い)

方法1. CLIで作成

今回作業用の接続ユーザー及びパスワードの設定は上記内容とします。まずはDB接続ユーザー作成/パスワード設定

-bash-4.1$ createuser -AdPE tatsuya
Enter password for
new role: (作成ユーザー名に対応するパスワードを設定)
Enter it again: (上記内容を再入力)
-bash-4.1$

ユーザーが利用するDBの作成(パスワードは上記作成ユーザのパスワードを入力)

$ createdb -U tatsuya -W db_test
$ createdb -U tatsuya -W db_production
$ createdb -U tatsuya -W db_development
Password: (**********)
-bash-4.1$ /usr/bin/pg_ctl restart -D /var/lib/pgsql/data -o "-p 5432" -w -t 300 # または
[tatsuya@ip-10-0-0-238 ~]$ sudo /sbin/service postgresql restart

以上でDBに関する接続ユーザー情報の設定は完了。


方法2. SQLで作成

$ su - postgres
パスワード: (***********)
-bash-4.1$ psql
psql (9.2.24)
Type "help" for help.


postgres=# CREATE ROLE ユーザ名 LOGIN CREATEDB PASSWORD 'ここにパスワード'; # ユーザ名をtatsuya,パスワードにはpgサーバーにユーザー名でログインするときのパスワードを指定
postgres=# CREATE DATABASE データベース名 OWNER ユーザ名; # db_test, db_development, db_productionを作成

ちなみにユーザー(ROLE)のパスワードを変更したい、忘れたので上書きしたい時とか以下でできる

postgres=# ALTER ROLE postgres with password 'postgres';

上記サンプルでは「postgres」という文字列のパスワードを設定しています


接続確認(Local:CUI)

su - tatsuya
パスワード:
[tatsuya@ip-10-0-0-238 ~]$ psql -l
パスワード: 
                                                データベース一覧
          名前           |  所有者  | エンコーディング |  照合順序   | Ctype(変演算子) |      アクセス権       
-------------------------+----------+------------------+-------------+----------
---------+-----------------------
 db_test | tatsuya  | UTF8             | en_US.UTF-8 | en_US.UTF-8       | 
 db_production  | tatsuya  | UTF8             | en_US.UTF-8 | en_US.UTF-8       | 
 db_development        | tatsuya  | UTF8             | en_US.UTF-8 | en_US.UTF-8       | 
 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
(6 行)





参考記事 https://dev.classmethod.jp/cloud/aws/install-postgresql-on-aws-ec2/

https://www.setouchino.cloud/blogs/95

http://cocodrips.hateblo.jp/entry/2017/09/04/213323





アンインストール

sudo yum -y remove postgresql*

sudo rm -rf /var/lib/pgsql*

sudo rm -rf /var/lib/postgresql*