Amazon LinuxにPostgreSQL 9.2.2をインストールする

PostgreSQL 9.2.2を使ってみたい

Amazon RDSには対応していないPostgreSQLではありますが、毎年のバージョンアップと高速化、さらには、GIS対応やレプリケーションなど、気になる機能がたくさんあります。そこで、今回はソースからビルドして使ってみたいと思います。

まずはダウンロードして解凍

$ wget http://ftp.postgresql.org/pub/source/v9.2.2/postgresql-9.2.2.tar.gz
$ tar zxvf postgresql-9.2.2.tar.gz 

関連ライブラリをインストール

$ sudo yum install make gcc -y   
$ sudo yum install flex bison -y
$ sudo yum install readline-devel ncurses-devel zlib-devel -y

ビルドしましょう。smallインスタンスで20分程度待ったかかもしれません。気長に待ちましょう。

$ cd postgresql-9.2.2
$ gmake
$ sudo gmake install

contribのインストール

関連ライブラリもインストールします。

$ cd postgresql-9.2.2
$ cd contrib
$ gmake
$ sudo gmake install

<h2 id="toc-">データベース初期設定</h2>
<p>教科書に載っているいつもの手順です。まずはユーザ作成から</p>


$ sudo adduser postgres
$ sudo passwd postgres
$ sudo mkdir /usr/local/pgsql/data
$ sudo chown postgres /usr/local/pgsql/data
$ sudo TH=$PATH:/usr/local/pgsql/bin

postgresユーザになって設定ファイルを編集します

$ su - postgres
> /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data --no-locale

バッファやメモリの設定などを行います。設定値はインスタンスタイプに合わせて調整しましょう。また、インターネットからアクセスするためにIP指定します。VPC内で使っているようでしたら、例えば、10.0.1.100等の指定をします。

> vi /usr/local/pgsql/data/postgresql.conf

shared_buffers = 512MB
work_mem = 4MB
wal_buffers = 64kB

listen_addresses = '10.0.1.100'

次にネットワークの設定です。インターネットからの接続を許可します。今回はサンプルなので緩いですが、実際は特定のサブネットからのアクセスが望ましいと思います。

> vi /usr/local/pgsql/data/pg_hba.conf

host    all         all        127.0.0.1/32         md5
host    all         all        0.0.0.0/32         md5

サービス起動の設定です。

$ sudo cp ~/postgresql-9.2.2/contrib/start-scripts/linux /etc/rc.d/init.d/postgresql 
$ sudo chmod 755 /etc/rc.d/init.d/postgresql
$ sudo chkconfig --add postgresql
$ sudo chkconfig --level 35 postgresql on
$ sudo chkconfig --list | grep postgresql

起動してみましょう

$ sudo service postgresql start
Restarting PostgreSQL: ok
$ sudo service postgresql status
pg_ctl: server is running (PID: 3669)
/usr/local/pgsql/bin/postgres "-D" "/usr/local/pgsql/data"

コンソールから接続確認

接続確認するためにはpsqlコマンドを用います。

$ su - postgres

> /usr/local/pgsql/bin/psql

テスト接続するためにユーザとデータベースを作成しています。

postgres=# create role test PASSWORD 'testpass' CREATEDB LOGIN;
postgres=# create database test owner test template=template0 encoding='utf-8';
postgres=# \l
                             List of databases
   Name    |  Owner   | Encoding  | Collate | Ctype |   Access privileges   
-----------+----------+-----------+---------+-------+-----------------------
 postgres  | postgres | SQL_ASCII | C       | C     | 
 template0 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
 template1 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
 test      | test     | UTF8      | C       | C     | 
(4 rows)

postgres-# \q

まとめ

手順を押さえておけば簡単ですね。次回は、GISやレプリケーションについて実験してみたいと思います。余談ですが、もはやこのブログ執筆は自分用のメモ書きとなっていて、1年後にググったら自分のブログが出てくるという状況ですがw、どんどん新しい情報を詰め込みたいと思います。全体を理解するためには「多ドク」と「多ログ」です。

参考情報

PostgreSQL 9.2.2 Documentation