PostgreSQL
Database

Ubuntu16.04にPostgreSQLをインストール

More than 1 year has passed since last update.

普段はメインのデータストアとしてMySQLを使用していますが、

9.0以降で実装された新たな機能(ストリーミグレプリケーション、JSONサポート)を体験したく、あらためてPostgresに触れてみようかと思っています。

新機能の所感はのちに触れるとして、今回はインストールからDB接続までを書いてみます。


バージョン


  • MacOSX El Capitan(10.11.6)

  • VirtualBox(5.1.8)

  • Vagrant(1.8.7)

  • Ubuntu(16.04 Xenial Xerus)

  • Postgres(9.6)


1. 仮想環境構築

こちらを参考に環境を作っておいてください。


2. パッケージのダウンロード一覧にPostgresを追記

$ sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"


3. 公開鍵を信頼キーリストに追加

$ wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -

念のため apt-key list で追加されたか確認しておきます。

$ apt-key list

/etc/apt/trusted.gpg
--------------------
pub 1024D/437D05B5 2004-09-12
uid Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>
sub 2048g/79164387 2004-09-12

pub 4096R/C0B21F32 2012-05-11
uid Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>

pub 4096R/EFE21092 2012-05-11
uid Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>

pub 1024D/FBB75451 2004-12-30
uid Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>

pub 4096R/ACCC4CF8 2011-10-13
uid PostgreSQL Debian Repository

一番下に問題なく追加されています。


4. パッケージを更新

$ sudo apt-get update


5. インストール実行

$ sudo apt-get install postgresql


6. 確認


psqlコマンド

$ which psql

/usr/bin/psql


postgresプロセス

apt-get からパッケージインストールした場合は自動起動されています。

ps aux | grep postgres | grep -v grep

postgres 22637 0.0 2.4 305236 24732 ? S 18:17 0:00 /usr/lib/postgresql/9.6/bin/postgres -D /var/lib/postgresql/9.6/main -c config_file=/etc/postgresql/9.6/main/postgresql.conf
postgres 22639 0.0 0.4 305236 4108 ? Ss 18:17 0:00 postgres: 9.6/main: checkpointer process
postgres 22640 0.0 0.4 305236 4108 ? Ss 18:17 0:00 postgres: 9.6/main: writer process
postgres 22641 0.0 0.4 305236 4108 ? Ss 18:17 0:00 postgres: 9.6/main: wal writer process
postgres 22642 0.0 0.6 305640 6780 ? Ss 18:17 0:00 postgres: 9.6/main: autovacuum launcher process
postgres 22643 0.0 0.3 160236 3340 ? Ss 18:17 0:00 postgres: 9.6/main: stats collector process


設定ファイル

アクセス権

/etc/postgresql/9.6/main/pg_hba.conf

設定ファイル本体

/etc/postgresql/9.6/main/postgresql.conf


7. DBユーザーの登録

Postgresにはpostgresという管理ユーザーがいますが、

すべての権限が利用できてしまうので、ロールを限定したユーザーを別途作っておいた方がいいです。


postgresユーザーにスイッチ

$ sudo -u postgres -i


psqlコマンドでDBにアクセス

postgres@machine1:~$ psql

psql (9.6.2)
Type "help" for help.

postgres=#


ユーザーの確認

postgres=# \du

List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

一旦抜ける

postgres=# \q


ユーザーの追加

今回はcreateuserコマンドでユーザー追加をしてみます。

もちろんSQLで追加することもできます。

postgres@machine1:~$ createuser --createdb --username=postgres --pwprompt [ユーザー名]

オプションの説明


  • --createdb : 新しいユーザーはデータベースの作成が許可される

  • --username : PostgreSQLに接続するユーザー名
    (postgresを指定しているのでスーパーユーザーで接続)

  • --pwprompt : 新しいユーザーのパスワードを設定するためにプロンプトを表示

詳しくは createuser --help で確認してください。

今回は anonymous というユーザーを作ります。

postgres@machine1:~$ createuser -d -U postgres -P anonymous

Enter password for new role: 任意のパスフレーズを入力
Enter it again: 再度同じパスフレーズを入力


追加したユーザーの確認

postgres@machine1:~$ psql

postgres=# \du

List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
anonymous | Create DB | {}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

DB作成の権限を与えられた anonymous ユーザーが登録されたことがわかります。


8. DBの作成

ここでもSQLではなく createdb コマンドを使ってDBを作成してみます。

postgresユーザーにスイッチしてください。

postgres@machine1:~$ createdb [DB名] --encoding=[エンコード] --lc-collate=[ロケール] --lc-ctype=[ロケール] --owner=[オーナー名] --template=template0

オプションの説明


  • --encoding : DBの文字コードを指定する(UTF-8, EUC-JP, LATIN1 etc...)

  • --lc-collate : 文字列の並び順を指定する(C, ja_JP.UTF-8, en_US,UTF-8 etc...)


    • 文字列ソートに影響



  • --lc-ctype : 文字の種類を指定する


    • 文字置換に影響(半角・全角)



  • --owner : オーナーを指定する

  • --template : ベースとなるDBを指定する


    • template0はまっさらなDBを作成し、template1の場合は複製される



詳しくは createdb --help で確認してください。

今回は sample_db というデータベースを作り、オーナーはさっき登録した anonymous を指定します。

postgres@machine1:~$ createdb sample_db --encoding=UTF-8 --lc-collate=C --lc-ctype=C --owner=anonymous --template=template0


作成したDBの確認

postgres@machine1:~$ psql

postgres=# \l

List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
sample_db | anonymous | UTF8 | C | C |
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
(4 rows)

sample_db という名前のデータベースが作成されていることがわかります。


9. 接続確認

追加したユーザーで作成したDBに接続してみます。

$ psql -U anonymous -h localhost -d sample_db

パスフレーズを聞かれるので入力すると無事に接続できます。

Password for user anonymous:

psql (9.6.2)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

sample_db=>

以上でインストールから動作確認まで完了です。

次回はもう少し踏み込んで設定周りの調整と、新機能を試してみたいと思います。