ProgresSQLの起動

PostgreSQLは、make installまではrootユーザーで行えますが、実際のDBの管理はrootでは行えません。専用の管理者用のユーザーを作成してやる必要があります。
FreeBSDのportsからのインストールでは、pgsqlというユーザーがインストールの最中に自動的に作られ、インストールされたファイルの所有者はこのpgsqlになっています。



起動までの手順

1.インストール時に作られた、pgsqlというユーザーをそのままProgreSQLの管理ユーザーにします。pgsqlのパスワードが分からないので、pgsqlユーザーを登録し直します。(パスワード無しで作られているのかと思ったのですが、pgsqlでログインしようとすると、パスワードを聞かれてしまいました)

(多分、英語で書かれたインストールマニュアルのどこかにパスワードのことも書かれているかもしれませんが、私は日本人なので読めませんでした(^^;)

# vi /etc/master.passwd
↓master.passwdファイルから下の行を削除します。
pgsql:*:70:70::0:0:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh
削除したら、ユーザー情報のDBを作り直します。
# pwd_mkdb -d /etc/ /etc/master.passwd
# su pgsql
su: unknown login: pgsql
↑pgsqlというユーザーはいなくなっています。
↓adduserコマンドで、pgsqlというユーザーを登録します。
# adduser
↓必要なところだけ抜粋しています
Enter username [A-Za-z0-9_]: pgsql
Enter full name []: PostgreSQL pseudo-user
Enter shell csh date no sh [csh]:
Uid [1000]: 70
Login group pgsql [pgsql]:
Login group is ``pgsql''. Invite pgsql into other groups: guest no
[no]:
Enter password []:パスワードを入力
Enter password again []:もう一度パスワードを入力

Name:     pgsql
Password: ****
Fullname: PostgreSQL pseudo-user
Uid:      70
Gid:      70 (pgsql)
Groups:   pgsql
HOME:     /home/pgsql
Shell:    /bin/csh
OK? (y/n) [y]: y
Added user ``pgsql''
# cat /etc/master.passwd | grep pgsql
pgsql:$1$hd8x5Is8$yNk/OAJC90Pg.yWkxczmP0:70:70::0:0:PostgreSQL pseudo-user:/home
/pgsql:/bin/csh
すいません。私はなんだか強引な方法でパスワード変更をしていますが、FreeBSDにはもっとスマートなユーザー管理用のユーティリティが用意されていると思います。

2.pgsqlユーザーの環境設定を行います。
/usr/local/pgsql/lib/usr/local/pgsql/binにパスが通るようにしないといけません。具体的には.cshrcを下記のように直します。
# exit <−− rootから抜けます
% su pgsql
Password: <−− rootからsuすればpasswdは聞いてきません。
% cd
% pwd
/usr/home/pgsql
% vi .cshrc
↓下の2行を.cshrcファイルに追加します。

setenv  LD_LIBRARY_PATH /usr/local/pgsql/lib

set path = (/usr/local/pgsql/bin $HOME/bin /sbin /bin /usr/sbin /usr/bin /usr/ga
mes /usr/local/bin /usr/X11R6/bin)

% exit <−− 一旦exitし、もう一度pgsqlでログインし直してみましょう。
     .cshrcに追加した内容が有効になります。
% exit % su pgsql Password: % setenv TERM=vt100 PATH=/usr/local/pgsql/bin:/home/pgsql/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/gam es:/usr/local/bin:/usr/X11R6/bin SHELL=/bin/csh HOME=/home/pgsql LOGNAME=shinoda USER=pgsql PWD=/home/shinoda EDITOR=vi PAGER=more BLOCKSIZE=K MANPATH=/usr/share/man:/usr/X11R6/man:/usr/local/man LD_LIBRARY_PATH=/usr/local/pgsql/lib % set argv () cwd /home/shinoda filec history 100 home /home/pgsql mail /var/mail/pgsql path (/usr/local/pgsql/bin /home/pgsql/bin /sbin /bin /usr/sbin /usr/bin /usr /games /usr/local/bin /usr/X11R6/bin) prompt % prompt2 ? savehist 100 shell /bin/csh status 0 term vt100 user shinoda
3.PostgreSQLをインストールしたばかりの状態では、localhostからしかDBにアクセス出来ません。
LANにつながったWindows95マシンからもアクセス出来ないと面白くないので、アクセス制限のためのコンフィグファイル(pg_hba.conf)を修正します。
pg_hba.confは書き込み禁止になっているので、最初に書き込み出来るようにモード変更をします。

% ls -la /usr/local/pgsql/data/pg_hba.conf -r-------- 1 pgsql pgsql 3684 Jan 21 22:16 /usr/local/pgsql/data/pg_hba.conf % chmod u+w /usr/local/pgsql/data/pg_hba.conf % ls -la /usr/local/pgsql/data/pg_hba.conf -rw------- 1 pgsql pgsql 3684 Jan 21 22:16 /usr/local/pgsql/data/pg_hba.conf これで書き込み可になりました % vi /usr/local/pgsql/data/pg_hba.conf #host all 0.0.0.0 0.0.0.0 trust ↑コメントを取る(#を消す)

4.DBの初期化を行います。
% initdb -pgdata=/usr/local/pgsql/data -pglib=/usr/local/pgsql/lib
Unrecognized option '-pgdata=/usr/local/pgsql/data'.  Syntax is:
initdb [-t | --template] [-d | --debug] [-n | --noclean] [-u SUPERUSER | --usern
ame=SUPERUSER] [-r DATADIR | --pgdata=DATADIR] [-l LIBDIR | --pglib=LIBDIR]
書き方が悪いと怒られた(^^;
某ホームページでは↑上のように起動しろと書いてあったけど、嘘だったのね(^^;
↓optionは -- の後に書くのが本当。
% initdb --pgdata=/usr/local/pgsql/data --pglib=/usr/local/pgsql/lib
initdb: using /usr/local/pgsql/lib/local1_template1.bki.source as input to creat
e the template database.
initdb: using /usr/local/pgsql/lib/global1.bki.source as input to create the glo
bal classes.
initdb: using /usr/local/pgsql/lib/pg_hba.conf.sample as the host-based authenti
cation control file.

We are initializing the database system with username pgsql (uid=70).
This user will own all the files and must also own the server process.

initdb: error: File /usr/local/pgsql/data/PG_VERSION already exists.
This probably means initdb has already been run and the
database system already exists.
何やらエラーが出ていますが、気にしないことにしましょう(^^;
If you want to create a new database system, either remove
the /usr/local/pgsql/data directory or run initdb with a --pgdata option
other than /usr/local/pgsql/data.
5.PostgreSQLのデーモンを起動します。
% postmaster -D /usr/local/pgsql/data -S
FATAL: StreamServerPort: bind() failed: errno=48
        Is another postmaster already running on that port?
        If not, wait a few seconds and retry.
postmaster: cannot create stream port
ん?起動に失敗しました。なんか、portが使えないとか言っているようです。
% ps -ax | grep postmaster
  172  ??  Is     0:00.00 /usr/local/pgsql/bin/postmaster -S -o -F (postgres)
ん?既に起動していますね。initdbしたら自動で起動するんでしょうか?
% kill 172
よく分からないので一旦killして、再起動します。
% postmaster -D /usr/local/pgsql/data -S
% ps -ax | grep postmaster
 4162  ??  Ss     0:00.00 postmaster -D /usr/local/pgsql/data -S (postgres)
ちゃんと起動出来たようです:-)


前のページへ FreeBSDで遊ぶ Powered by FreeBSD by SHINODA Masanori