1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

CentOSにPosgreSQLの環境構築

PostgreSQL

■ インストール

やはり便利なのでyumを使ってインストールします。

yumのベースリポジトリにあるpostgreSQLはバージョンが古かったです。

ターミナル(仮想マシン)
$ yum list | grep postgresql-server
postgresql-server.x86_64                 9.2.24-1.el7_5                  base

なので最新のバージョンのリポジトリを追加してインストールします。

ターミナル(仮想マシン)
# pgdg96リポジトリを追加する
$ sudo yum install -y https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-redhat96-9.6-3.noarch.rpm

# PostgreSQLサーバーをインストールする
$ sudo yum install -y postgresql96-server postgresql96-contrib

# バージョンの確認
$ psql -V
psql (PostgreSQL) 9.6.12

参考:CentOS7.3にPostgreSQL9.6.3をインストールしてみた

■ データベース作成と起動

スーパーユーザの作成

データベースの管理をすることになるスーパーユーザの作成を行います。

ターミナル(仮想マシン)
# ユーザの追加
$ sudo useradd postgres
$ sudo passwd postgres

データベースクラスタの作成

データベースの格納領域であるデータベースクラスタを作成します。
/home/postgres/dataはデータベースクラスタを作成するディレクトリです。

方法①

ターミナル(仮想マシン)
# postageユーザに切り替え
$ su postage
# データベースクラスタの作成
$ initdb -D /home/postgres/data --encoding=UTF8 --no-locale

initdbを実行したユーザがデータベースクラスタの管理ユーザとして設定(ディレクトリの権限・所有者も変更されます)され、また同名のデータベースユーザが初期ユーザとして作成されます。

方法②

この作業は実は下記コマンドでも行うことができます。その方がディレクトリの準備とかしなくて良いしラクかもしれません。

ターミナル(仮想マシン)
# データベースの初期化処理を行う
$ sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb

※この場合、データベースクラスタのディレクトリはデフォルトで/var/lib/pgsql/9.6/dataになっているので注意してください。

※この方法でデータベースクラスタを作成した場合は、データベースの初期ユーザとしてpostgresが作成されています。

PATHを通す

  1. 環境変数PATH/usr/pgsql-9.6/binを追加します。
  2. 環境変数LD_LIBRARY_PATH/usr/pgsql-9.6/libを定義します。
  3. 環境変数PGDATA/home/postgres/dataを定義。※これをすることで、毎回-D /home/postgres/dataとデータベースクラスタのディレクトリを指定しなくても良くなります。

PostgreSQLサーバの起動

方法①

pg_ctlコマンドを使ってPostgreSQLを管理します。

ターミナル(仮想マシン)
# PostgreSQLサーバの起動
$ pg_ctl start -w

# PostgreSQLサーバの終了
$ pg_ctl stop

※自動起動設定をするには、スクリプトを書く必要があるようです。

参考:PostgreSQL 8.1.4 起動と自動起動設定

方法②

mysqlと同じようにsystemdを使ってPostgreSQLの起動・終了を行うことができます。
systemdを利用することにより自動起動設定も超ラクに出来るので、使わない手は無いと思います。

ターミナル(仮想マシン)
# 起動
$ systemctl start postgresql-9.6.service

# 自動起動設定
$ systemctl enable postgresql-9.6.service

# 終了
$ systemctl stop postgresql-9.6.service

mysqlと完全に一緒ですね。

■ データベース接続とデータの作成

データベースユーザの作成

データベース一覧を表示するpsql -lを実行したところ、roleが存在しないのでアクセスできませんでした。

ターミナル(仮想マシン)
# データベース一覧を表示
$ psql -l
psql: FATAL:  role "vagrant" does not exist

方法①

ターミナル(仮想マシン)
# postgresユーザに切り替え
$ su postgres

# ユーザの作成
$ createuser -d -U postgres -P {ユーザ名}

createuserは対話式でもユーザの作成が出来るらしいんですけど、上手く実行できませんでした…

方法②

postgresユーザでデータベースにログインしてユーザを作成する場合は下記で行う。

ターミナル(仮想マシン)
$ psql
psql (9.6.12)

postgres=# create role vagrant login createdb password 'vagrant';

データベースへのログイン

続く…

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?