akiyoko blog

akiyoko の IT技術系ブログです

PostgreSQL を Ansible Galaxy でさくっと3分でインストール

はじめに

PostgreSQL 初心者です。
最近ちらほらと PostgreSQL を使うようになったのですが、いちいち手でインストールするのは面倒なので、さっくりと自動化したいと考えていました。


そこで 前回 紹介した、Ansible Galaxy です。
ローカルに Ansible がインストールされていれば、わずか 3分で PostgreSQL をサーバにインストール することができます。


<過去記事>
akiyoko.hatenablog.jp



なお、今回利用した Role は、
https://galaxy.ansible.com/detail#/role/512
で、Ubuntuサーバに PostgreSQL をインストールするための Role です。
利用できる変数などの詳細については、こちら を参照してください。


f:id:akiyoko:20151212190455j:plain


環境

<クライアント>

  • Mac OS X 10.10.5
  • ansible 1.9.3


<サーバ>

  • Ubuntu 14.04 LTS (on Vagrant)
    • IPアドレス : 192.168.33.10

 

PostgreSQL インストール

以下のコマンドを、クライアント上(私の場合は Mac)で実行します。

$ mkdir -p ~/dev/ansible-postgresql && cd $_

### ANXS.postgresql を Ansible Galaxy からインストール
$ ansible-galaxy install ANXS.postgresql -p roles

### Inventoryファイル(hosts)を作成
$ cat << EOF > hosts
[db-servers]
192.168.33.10
EOF

### Playbookファイル(site.yml)を作成
$ cat << EOF > site.yml
- hosts: db-servers
  user: vagrant
  vars_files:
    - vars/database.yml
  roles:
    - { role: ANXS.postgresql }
EOF

### Variablesファイル(vars/database.yml)を作成
$ mkdir vars
$ cat << EOF > vars/database.yml
postgresql_databases:
  - name: myproject
postgresql_users:
  - name: myprojectuser
    pass: myprojectuserpass
postgresql_user_privileges:
  - name: myprojectuser
    db: myproject
    priv: "ALL"
EOF

### Playbookを実行
$ ansible-playbook -i hosts site.yml --sudo -k -vv


上記のサンプルでは、PostgreSQL をインストールするのに合わせて、以下のデータベースとユーザを作成しています。

項目 設定内容
データベース名 myproject
データベースユーザ myprojectuser
データベースユーザパスワード myprojectuserpass

 
なお、サーバのIPアドレスを変更したい場合は hosts、データベース名やデータベースユーザ名・パスワードを変更したい場合は vars/database.yml を適宜編集してから実行してください。




もしインストールの途中で失敗してしまう場合は、サーバから PostgreSQL を削除すれば、何度でも Playbook の実行をやり直すことができます。

$ sudo apt-get --purge -y autoremove postgresql*

<参考>
apt - Uninstall an specific version of PostgreSQL - Ask Ubuntu





上記のサンプルを、私の GitHub のリポジトリにアップしているので、それを使えば、たった数行のコマンドでインストールすることができます。要 git です。

$ mkdir -p ~/dev && cd $_
$ git clone https://github.com/akiyoko/ansible-postgresql.git
$ cd ansible-postgresql/
$ ansible-playbook -i hosts site.yml --sudo -k -vv

<参考>
github.com




 

おまけ

psql コマンドの使い方

$ psql -U postgres
or
$ sudo su postgres
$ psql
### データベース一覧(MySQL では show databases)
postgres=# \l
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |     Access privileges
-----------+----------+----------+-------------+-------------+----------------------------
 myproject | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres              +
           |          |          |             |             | postgres=CTc/postgres     +
           |          |          |             |             | myprojectuser=CTc/postgres
 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
(4 rows)


### ユーザ一覧(MySQLでは select * from mysql.user;)
postgres=# \du
                               List of roles
   Role name   |                   Attributes                   | Member of
---------------+------------------------------------------------+-----------
 myprojectuser |                                                | {}
 postgres      | Superuser, Create role, Create DB, Replication | {}

  or

postgres=# select * from pg_shadow;
    usename    | usesysid | usecreatedb | usesuper | usecatupd | userepl |      passwd       | valuntil | useconfig
---------------+----------+-------------+----------+-----------+---------+-------------------+----------+-----------
 postgres      |       10 | t           | t        | t         | t       |                   |          |
 myprojectuser |    16384 | f           | f        | f         | f       | myprojectuserpass |          |
(2 rows)


### データベース接続(MySQL では use myproject)
postgres=# \c myproject


### テーブル一覧(MySQL では show tables)
postgres=# \d


 

Mac で使える PostgreSQLクライアント

pgAdmin III

http://www.pgadmin.org/

brew cask install pgadmin3

動作が少しもっさりしてて、見た目もイケてないが、とりあえずこれで。
何かいいのがあれば乗り換えたい。。

Postico

https://eggerapps.at/postico/

brew cask install postico

フリーでも十分使えるが、操作感がちょっと独特かも。

PSequel

http://www.psequel.com/

brew cask install psequel

SSH Tunnel 利用時に、パスワード認証が使えなかった。。


他にもいろいろ。
https://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools