Custom Search

JITAKU_SVR_Wiki



postgresql

postgresqlインストール

インストール方法は以下のどちらか。
・パッケージ
・ソース

どちらも基本的には何も難しくないので適当に記述。

パッケージ

# yum install postgresql-server

ソース

# cd /postgresqlのソースパス/

# ./configure

# make

# make install

ソースからインストールする場合にはreadlineが必要になるかも?~
checking for library containing readline... no
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.

# yum -y install readline-devel

ちなみにzlib-develも必要となったパターンもある。
configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.

# yum y install zlib-devel

また、起動スクリプトはパッケージの場合は何も考えずに/etc/init.dの下に配置されるが、ソースの場合には自分で用意しなくてはいけない。

# cp -p /postgresqlのソースパス/postgresql-xxx/contrib/start-scripts/linux /etc/init.d/postgresql

# chmod +x /etc/init.d/postgresql
とすれば良い。

TIPS:
両方ともpostgresのクライアントも一緒にインストールされる。
パッケージの場合のみ注意するのは、postgresのサーバをインストールする場合は

# yum install postgresql-server
と、すること。

# yum install postgresql
だけだと、クライアントのみインストールされてしまう。



起動させる

postgresを起動させようとすると”まずは初期化しろ”、と怒られるので、

パッケージ

# /etc/init.d/postgresql start

/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.

起動スクリプトから起動すると怒るので、serviceコマンドを使えと怒る。

# service postgresql initdb
Initializing database: [ OK ]

その後起動させる。

# /etc/init.d/postgresql start
Starting postgresql service: [ OK ]

TIPS:
パッケージでインストールした場合、postgresのデフォルトディレクトリは
/var/lib/pgsql/data
data配下にpostgresを初期化するとファイル、ディレクトリ類が自動作成される。

ソース

ソースからインストール ソースからインストールした場合にはマニュアルが付属されているので、それを確認してみる。

# cat /postgresqlのソースパス/postgresql-xxx/INSTALL | less~
------ry-----
./configure
gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
------ry-----

インストールまでが完了したら、
①postgresユーザを作成する
②/usr/local/pgsql/dataディレクトリを作成する
③/usr/local/pgsql/dataのオーナをpostgresにする
④postgresユーザでDBの初期化を行う
※その後もいろいろ書いているが、test用のDBを作成しているだけなので無視。
⑤起動させる。

# /etc/init.d/postgresql start

文字コードを指定する

デフォルト(上記の①~④)で実行すると、デフォルトの文字コード(SQL_ASCII)になってしまう。
最初にDBを初期化するときに文字コードを決める必要がある。
以下はUTF8で初期化する方法。

# /usr/local/pgsql/bin/initdb -E UTF8 --lc-collate=ja_JP.UTF-8 \
              --lc-ctype=ja_JP.UTF-8 -D /usr/local/pgsql/data

外部連携

他にもいろいろと設定出来る箇所があるが、とにかくDBとして動作し、外部からの接続を受けるには以下の設定が必要。
(逆にいえばデフォルトでは外部からの連携が一切出来ない)

# cat /usr/local/pgsql/data/postgresql.conf | grep listen_addres
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
listen_addresses = '*'          # what IP address(es) to listen on;

listen_addressesがlocalhostのみになっているので、”*”に変更し、どこからの接続でも受ける様にする。
更に、pg_hba.confに以下のように、通信させたい相手(セグメント)を追記する。

-------ry------
# less /usr/local/pgsql/data/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.1.0/24            trust  ###<- 追加
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                trust
#host    replication     postgres        127.0.0.1/32            trust
#host    replication     postgres        ::1/128                 trust

TIPS:
結構重要なことかもしれないが、当然設定ファイル類を変更した場合にはデーモンの再読み込みが必要になる。ただし、変更するファイルによっては再起動、再読み込みを分けられる。

postgresql.conf ・・・ postgresqlの再起動が必要
pg_hba.conf ・・・ postgresqlの再読み込みで対応可能

覚えていたらちょっと幸せになれる。

timezone

デフォルトのタイムゾーンはUTCになっている。

$ /usr/local/pgsql/bin/psql -U postgres
psql (9.2.4)
Type "help" for help.

postgres=# select now();
              now
-------------------------------
 2013-04-10 03:42:27.978206+00
(1 row)

postgres=#

これを日本時間に設定するにはpostgresql.confを編集する。

# vim postgresql.con
483行目あたり
timezone = JST-9   #← JST-9 を設定

# /etc/init.d/postgresql restart

$ /usr/local/pgsql/bin/psql -U postgres
psql (9.2.4)
Type "help" for help.

postgres=# select now();
              now
-------------------------------
 2013-04-10 12:49:12.393366+09
(1 row)

postgres=#

時刻付きのログに変更する

デフォルトの設定だとログに時刻表示がされていないため、非常に読みにくい。
設定を変更することで見やすくなる。

# vim postgresql.conf

#log_line_prefix = ''
    ↓
log_line_prefix = '%t - %d [%p-%l]'

serverlogに記される時刻とエラー

2013-05-08 15:14:27 JST - postgres [28519-1]ERROR:  function noe() does not exist at character 8

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-17 (木) 16:36:55 (702d)