LoginSignup
123
135

More than 5 years have passed since last update.

CentOSにPostgreSQL9.5をインストールおよびテスト

Last updated at Posted at 2016-01-09

利用するアプリケーションの都合でPostgreSQLが必要だったのでインストールしました.
バージョンが違うだけで,ほとんど以下の記事と同じです.
CentOS 7にPostgreSQL最新版をインストール

CentOSのバージョン

$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

PostgreSQLのインストール

PostgreSQLのインストール

PostgreSQLのRPMパッケージをダウンロード

$ wget yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm

ここからは管理者で実行,RPMパッケージをインストール

$ su
# rpm -ivh pgdg-centos95-9.5-2.noarch.rpm

yumでパッケージをインストール

# yum -y install postgresql95-server postgresql95-devel postgresql95-contrib

PostgreSQL初期化

# systemctl start postgresql-9.5
Job for postgresql-9.5.service failed because the control process exited with error code. See "systemctl status postgresql-9.5.service" and "journalctl -xe" for details.

エラーを吐くので指定通りに確認を行う.
すると,PostgreSQLのデータベースクラスタの作成を求められます.
initdbについてはこちらのページに書かれています.
initdb

# systemctl status postgresql-9.5.service
● postgresql-9.5.service - PostgreSQL 9.5 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-9.5.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 土 2016-01-09 15:42:19 JST; 24s ago
  Process: 14696 ExecStartPre=/usr/pgsql-9.5/bin/postgresql95-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)

 1月 09 15:42:19 local systemd[1]: Starting PostgreSQL 9.5 database server...
 1月 09 15:42:19 local systemd[1]: postgresql-9.5.service: control process exited, code=exited status=1
 1月 09 15:42:19 local systemd[1]: Failed to start PostgreSQL 9.5 database server.
 1月 09 15:42:19 local systemd[1]: Unit postgresql-9.5.service entered failed state.
 1月 09 15:42:19 local systemd[1]: postgresql-9.5.service failed.
# /usr/pgsql-9.5/bin/postgresql95-setup initdb
Initializing database ... OK

再度起動し,自動起動設定

# systemctl start postgresql-9.5
# systemctl enable postgresql-9.5

systemctlコマンドについては,こちらの記事に書かれています.
(最後まで読むにはログインが必要)
Red Hat Enterprise Linux 7がやってきた

接続確認

# su - postgres
最終ログイン: 2016/01/09 (土) 17:11:00 JST日時 pts/0
-bash-4.2$ psql
psql (9.5.0)
"help" でヘルプを表示します.

postgres-# \q
-bash-4.2$ exit
ログアウト

初期設定

PostgresSQLの設定ファイルを変更

postgresql.conf

# vi /var/lib/pgsql/9.5/data/postgresql.conf
/var/lib/pgsql/9.5/data/postgresql.conf
# 59行目
# listen_addresses = 'localhost' 

# 419行目
log_line_prefix = '<%m>'

以下のように変更
(viならetcを押した後に :59/listen_addresses で飛びたい行に移れる)

# 他のホストからのアクセスを受け取る
listen_addresses = '*'

# ログの受け取り形式
# 420行目以降にログの出力形式の一覧がコメントアウトされて載っている
# 今回は '日時 ユーザ データベース' の形式
log_line_prefix = '<%t %u %d>'

pg_hba.conf

# vi /var/lib/pgsql/9.5/data/pg_hba.conf
/var/lib/pgsql/9.5/data/pg_hba.conf
# 80行目
# "local" is for Unix domain socket connections only
local   all             all                                     peer

以下のように変更

# DB名とユーザ名が一致しなくても認証できるようにする
# "local" is for Unix domain socket connections only
local   all             all                                     md5

システムを再起動

# systemctl restart postgresql-9.5

ユーザ設定

スーパーユーザにパスワードを設定
(2017/01/11:この方法でパスワードが設定できなかった場合の対処を追記)

# su - postgres
最終ログイン: 2016/01/09 (土) 18:07:04 JST日時 pts/0
-bash-4.2$ psql
psql (9.5.0)
"help" でヘルプを表示します.

postgres=# \du
                                               ロール一覧
 ロール名 |                                       属性                                       | メンバー
----------+----------------------------------------------------------------------------------+----------
 postgres | スーパーユーザ, ロールを作成できる, DBを作成できる, レプリケーション, Bypass RLS | {}

postgres=# \password postgres
新しいパスワード:
もう一度入力してください:
postgres=# \q

postgresユーザのパスワード設定ができなかった場合

対処1

以下のコマンドでパスワードを設定

# passwd postgres
ユーザー postgres のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:

ログインできるか確認

# psql -U postgres
ユーザ postgres のパスワード:

対処2

上記の方法でパスワードが変更できなかった場合は、一度パスワード認証をしなくても PostgreSQL が使える状態にしてから、SQLでパスワードを設定します。

# vi /var/lib/pgsql/9.5/data/pg_hba.conf
/var/lib/pgsql/9.5/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     ident

システムを再起動

# systemctl restart postgresql-9.5

SQL でパスワードを変更

# su - postgres
最終ログイン: 2017/01/11 (水) 13:41:15 JST日時 pts/0
-bash-4.2$ psql
psql (9.5.5)
Type "help" for help.

postgres=# ALTER USER postgres PASSWORD 'new_password';
ALTER ROLE
postgres=# \q
-bash-4.2$ exit
logout

pg_hba.conf の設定をもとに戻す

# vi /var/lib/pgsql/9.5/data/pg_hba.conf
/var/lib/pgsql/9.5/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     md5

システムを再起動

# systemctl restart postgresql-9.5

ログインできるか確認

# psql -U postgres
ユーザ postgres のパスワード:

テーブル作成とアクセス権限付与のテスト

テスト用のユーザを作成

piyoというユーザを作成

-bash-4.2$ createuser -P piyo
新しいロールのためのパスワード:
もう一度入力してください:
-bash-4.2$ psql
psql (9.5.0)
"help" でヘルプを表示します.

postgres=# \du
                                               ロール一覧
 ロール名 |                                       属性                                       | メンバー
----------+----------------------------------------------------------------------------------+----------
 postgres | スーパーユーザ, ロールを作成できる, DBを作成できる, レプリケーション, Bypass RLS | {}
 piyo     |                                                                                  | {}

postgres=#\q

DBとテーブルの作成

DBの作成

DBの一覧を確認

-bash-4.2$ psql
psql (9.5.0)
"help" でヘルプを表示します.

postgres=# \dp
                            アクセス権
 スキーマ | 名前 | 型 | アクセス権 | Column privileges | Policies
----------+------+----+------------+-------------------+----------
(0 行)

バージョンを確認

postgres=# select version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 9.5.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4), 64-bit
(1 行)

hogeというDBを作成

postgres=# create database hoge;
CREATE DATABASE
postgres=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 hoge      | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(4 行)

テーブルの作成

先ほど作ったDBのhogeに接続し,fugaというテーブルを作成

postgres=# \connect hoge
データベース "fuga" にユーザ"postgres"として接続しました。
hoge=# CREATE TABLE fuga
hoge-# (id int, nick_name character varying(5), full_name text);
CREATE TABLE
hoge=# \dt
          リレーションの一覧
 スキーマ |  名前 |    型    |  所有者
----------+------+----------+----------
 public   | fuga | テーブル | postgres
(1 行)

hoge=# \d fuga
 テーブル "public.fuga"
     列     |         型           | 修飾語
------------+----------------------+--------
 id         | integer              |
 nick_name  | character varying(5) |
 full_name  | text                 |

hoge=#\q

アクセス権限の付与

hoge=# GRANT SELECT, INSERT, UPDATE, DELETE ON fuga TO piyo;
GRANT                                                                               | {}

qgis=# \dp
                                                アクセス権
 スキーマ | 名前 |    型    |        アクセス権         | Column privileges | Policies
----------+-------------------------+----------+---------------------------+-------------------+----------
 public   | fuga | テーブル | postgres=arwdDxt/postgres+|                   |
          |      |          | piyo=arwd/postgres        |                   |
(1 行)

作成したユーザからアクセスしてSQLを実行

DBへアクセス

$ psql postgres piyo
ユーザ piyo のパスワード:
psql (9.5.0)
"help" でヘルプを表示します.

postgres=> \connect hoge
データベース "hoge" にユーザ"piyo"として接続しました。

SELECT命令

hoge=> select * from fuga;
 id | nick_name | full_name
----+-----------+-----------
(0 行)

INSERT命令

hoge=> INSERT INTO  fuga (id, nick_name, full_name) VALUES (1, 'NOBU', 'ODA NOBUNAGA');
INSERT 0 1
hoge=> select * from fuga;
 id | nick_name | full_name
----+-----------+--------------
  1 |      NOBU | ODA NOBUNAGA
(1 行)

UPDATE命令

hoge=> UPDATE fuga SET nick_name='NAGA';
UPDATE 1
hoge=> select * from fuga;
 id | nick_name | full_name
----+-----------+--------------
  1 |      NAGA | ODA NOBUNAGA
(1 行)

DELETE命令

hoge=> DELETE FROM fuga WHERE id=1;
DELETE 1
hoge=> select * from fuga;
 id | nick_name | full_name
----+-----------+-----------
(0 行)

参考

CentOS 7にPostgreSQL最新版をインストール
CentOS7.0(Vagrant)にPostgreSQL 9.4インストール
Red Hat Enterprise Linux 7がやってきた
PostgreSQLのユーザ管理
pg_hba.confファイル
initdb
ubuntu - Postgresql: password authentication failed for user "postgres" - Stack Overflow

123
135
1

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
123
135