PostgreSQLインストール 〜Debian,RedHat?系〜

経緯

  • データベースPostgreSQLのインストールログ。 MySQLはライセンスが変わったし、やっぱPostgreSQLが好きなので使ってる。

パッケージインストール

パッケージでインストールしたが、PHPのビルドにヘッダファイルが必要だったりして結局パッケージインストールは無意味だった。 PHPもPostgreSQLもパッケージインストールする時代が近づいているかもしれない。

yum -y install postgresql-server
apt-get install postgresql

インストールすると勝手に「postgres」というユーザができるので、パスワードをまず変更

# passwd postgres

ソースインストール

主にUIに必要なライブラリが必要

  • Debian
    apt-get install libreadline5-dev libncurses5-dev zlib1g-dev
  • RedHat?
    yum -y install readline-devel ncurses-devel zlib-devel
  • インストール済みかの確認(RPM)
    rpm -qa | grep postgres
  • ユーザの作成 PostgreSQLをrootではなく、postgresユーザで実行するため、そのユーザを作成 (adduserだと多くの環境で勝手に/home/以下にホームが作成される)
    /usr/sbin/groupadd postgres
    /usr/sbin/useradd -p -g postgres postgres
    ホームディレクトリを変更
    vi /etc/passwd
    で直接できるが、usermodでやった方がいいぽい
    /usr/sbin/usermod -d /usr/local/pgsql/ postgres
  • ソースの取得
    cd /usr/local/src/
    wget ftp://ftp.jp.postgresql.org/source/v8.2.4/postgresql-8.2.4.tar.gz
    tar -xzvf postgresql-8.2.4.tar.gz 
    chown postgres:postgres -R postgresql-8.2.4

インストール

まずはインストール先ディレクトリを作成し、postgresユーザを所有者に

mkdir /usr/local/postgresql-8.2.4
chown postgres:postgres -R /usr/local/postgresql-8.2.4/

あとはpostgresユーザになってコンパイル、インストールする

su - postgres
./configure --prefix=/usr/local/postgresql-8.2.4
make
make install
ln -nfs /usr/local/postgresql-8.2.4/ /usr/local/pgsql
exit

ライブラリの登録

vi /etc/ld.so.conf

/usr/local/pgsql/libを追記

/sbin/ldconfig
  • 環境変数の設定(bash) postgresユーザになってから
    vi ~/.bash_profile
    に追記
    export POSTGRES_HOME=/usr/local/pgsql
    export PGDATA=$POSTGRES_HOME/data
    export PATH=$PATH:$POSTGRES_HOME/bin
    export PGLIB=/usr/local/pgsql/lib 
    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":$PGLIB
source ~/.bashrc

DBの初期化 UNICODE(UTF-8)の場合(UNIXユーザpostgresになったうえで)

initdb -D /usr/local/pgsql/data -E UNICODE
  • no-localeはいらなくなったかな?

起動

  • pg_ctlを使う起動
    pg_ctl -D /usr/local/pgsql/data  start
    基本。データディレクトリ指定
    pg_ctl -D /usr/local/pgsql/data -w start
    実行中のオペレーションの完了を待つ
    pg_ctl -D /usr/local/pgsql/data -l logfile.log start
    ログファイル指定
    pg_ctl -D /usr/local/pgsql/data -m immediate restart
    接続しているユーザの切断を無視して再起動
    pg_ctl -D /usr/local/pgsql/data -o "-i" start
    postmasterにオプションを渡す。この例ではTCPを有効にしている

パッケージなら素直に

/etc/init.d/postgresql start

スクリプト起動・自動起動

  • Debian
    update-rc.d postgresql defaults 98 02
    停止は(98で作ったら)
    update-rc.d -f postgresql remove
  • RedHat?系 起動スクリプトをソースから取得
    install -o root -g root -m 755 /usr/local/src/postgresql-8.2.4/contrib/start-scripts/linux /etc/rc.d/init.d/postgres
    chkconfig --add postgresql
    chkconfig postgresql on
    chkconfig --list postgresql
  • デーモン起動
    • Debian
      /etc/init.d/postgresql start 
    • RedHat?
      /etc/rc.d/init.d/postgresql start

設定

(UNIXじゃなくてPostgresの)postgresユーザのパスワードを設定

psql -U postgres template1
psqlコマンドラインで
alter user postgres with password 'password';
\q;

Postgresユーザの一般ユーザ(role)を作成

createuser -DAP db_user

AutoVacuum?の設定

vi /usr/local/pgsql/data/postgresql.conf
autovacuum = on 
stats_row_level = on
stats_start_collector = on 

syslogにログをはく

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

log_destination = 'syslog'  
log_statement = 'all'

syslogの設定にも追加

vi /etc/syslog.conf

local0.*                                                /var/log/postgresql.log

syslog再起動

/etc/init.d/syslog restart

接続の設定

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

trustやident sameuserの項はコメントにするかmd5にした方がいい 外からつなぐことがなければTCP接続もしない

#local   all         postgres                          ident sameuser
local   all         all                               md5
#host    all         all         127.0.0.1/32          trust 

確認

DBを作る

createdb -E Unicode -U postgres testdb

psql testdb

適当にテーブル作って

CREATE TABLE test_user (
id SERIAL PRIMARY KEY,
name VARCHAR(30)
);

適当にレコード挿入して確認

INSERT INTO test_user VALUES ( 77 , 'sano' );
SELECT * FROM test_user;

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-11-28 (日) 21:47:42 (2519d)