@suzu6

主にWEBと解析の技術について書きます。

広く浅くも続ければ深くなるはず。

Amazon Linux2にPostgreSQL10をインストールして初期設定する

Amazon Linux2にPostgreSQL10をインストールして初期設定するまでの手順です。 yumリポジトリはamzn2extra-postgresql10を使いました。

導入までかなり迷ったため載せていない手順が影響を与えている可能性があり、 手順通りいかないかもしれません。予めご容赦ください。

環境

  • Amazon Linux2
  • postgresql 10.4
  • postgresql-server 10.4

インストールと立ち上げ手順

info

まずはインストールするパッケージの確認をする。 yum infoの情報を載せた(一部省略)。

$ sudo yum info postgresql-server postgresql

Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Packages
Name        : postgresql
Arch        : x86_64
Version     : 10.4
Release     : 5.amzn2.0.2
Size        : 5.2 M
Repo        : installed
From repo   : amzn2extra-postgresql10
Summary     : PostgreSQL client programs


Available Packages
Name        : postgresql-server
Arch        : x86_64
Version     : 10.4
Release     : 5.amzn2.0.2
Size        : 4.9 M
Repo        : amzn2extra-postgresql10/2/x86_64
Summary     : The programs needed to create and run a PostgreSQL server

yumリポジトリにPostgreSQLのRepository Packagesを導入が必要かと思ったが、amzn2extra-postgresql10に入っているようです。

install

インストールとバージョンの確認は以下のコマンドでOK。

$ sudo yum install -y postgresql-server postgresql
$ psql -V
psql (PostgreSQL) 10.4

起動と自動起動

現時点ではpostgresqlが立ち上がっていないため、操作しようとすると下記のようなエラーが出る。

$ psql -l
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

postgresqlを立ち上げ、自動起動させます。

# 自動起動
$ sudo systemctl enable postgresql

# 起動
$ sudo systemctl start postgresql

# ステータス確認
$ sudo systemctl status postgresql
● postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-05-14 14:41:05 JST; 1s ago
  Process: 13572 ExecStartPre=/usr/libexec/postgresql-check-db-dir %N (code=exited, status=0/SUCCESS)
 Main PID: 13574 (postmaster)
   CGroup: /system.slice/postgresql.service
           ├─13574 /usr/bin/postmaster -D /var/lib/pgsql/data
           ├─13577 postgres: logger process
           ├─13579 postgres: checkpointer process
           ├─13580 postgres: writer process
           ├─13581 postgres: wal writer process
           ├─13582 postgres: autovacuum launcher process
           ├─13583 postgres: stats collector process
           └─13584 postgres: bgworker: logical replication launcher

停止する際は、sudo systemctl stop postgresqlでOKです。

初期設定

psqlで操作しようとした場合下記のようなエラー出ます。

$ psql -l
psql: FATAL:  role "ec2-user" does not exist

これはpg_hba.confの初期設定がpeerになっているためです。

一応、実行ユーザーのpostgresで行うと回避できます。

[ec2-user@hostname ~]$ sudo -u postgres psql -l

postgresql.conf

/var/lib/pgsql/data/に設定ファイルが入っています。

$ sudo cp /var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/postgresql.conf.org
$ sudo vi /var/lib/pgsql/data/postgresql.conf
-- #listen_addresses = 'localhost'          # what IP address(es) to listen on;
++ listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
#port = 5432                            # (change requires restart)
max_connections = 100                   # (change requires restart)

pg_hba.conf

$ sudo cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.org
$ sudo vi /var/lib/pgsql/data/pg_hba.conf

ローカルからは認証をなくし、外部からはパスワードが必要になるよう変更します。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
-- local   all             all                                     peer
++ local   all             all                                     trust
# IPv4 local connections:
-- host    all             all             127.0.0.1/32            ident
++ host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
-- host    all             all             ::1/128                 ident
++ #host    all             all             ::1/128                 ident

設定が済んだら再起動します。

# 再起動
$ sudo systemctl restart postgresql