アプリケーション開発ポータルサイト
ServerNote.NET
Amazon.co.jpでPC関連商品タイムセール開催中!
カテゴリー【PostgreSQLDebianFreeBSD
【Debian】PostgreSQLを任意のデータディレクトリでinitdbし運用する方法【FreeBSD】
POSTED BY
2023-10-23

DebianやUbuntuでデータディレクトリを好きな場所にしてinitdbする方法があまり紹介されてないのでノート。

インストール

apt install postgresql # Debian

pkg install postgresql12-server # FreeBSD

**FreeBSDの場合**

データディレクトリを変更して、かつ自分所有で起動可能

/home/pgdata ユーザーhogeuserとすると

cd /home
mkdir pgdata
chmod go-rwx pgdata #所有者以外見れないようにしないとエラー
chown hogeuser:hogegroup pgdata #自分所有にする

とし、

/etc/rc.conf

postgresql_enable="YES"
postgresql_data="/home/pgdata"
postgresql_user="hogeuser"

として、初期化

/usr/local/etc/rc.d/postgresql initdb

**Debianの場合**

FreeBSDとは異なりすでにセットアップされた状態でインストールされるが、
カスタムディレクトリへinitdbし直すことはできる。
設定ファイルはそのまま/etc以下のものを使いたいので、オーナーはpostgresとする。

cd /home
mkdir pgdata
chmod go-rwx pgdata #所有者以外見れないようにしないとエラー
chown postgres:postgres pgdata #postgres所有にする
sudo -s -u postgres #ここからはpostgresになり作業
export LC_ALL="en_GB.UTF-8"
export LC_CTYPE="en_GB.UTF-8"
export LANG="en_GB.UTF-8"
/usr/lib/postgresql/9.6/bin/initdb --encoding=utf-8 --lc-collate=C -D /home/pgdata

これでデフォルトとは別にデータディレクトリを作成したので、

/etc/postgresql/9.6/main/postgresql.conf
の、
data_directory = '/var/lib/postgresql/9.6/main' # use data in another directory
を、

data_directory = '/home/pgdata'         # use data in another directory

と変更すればOK。initdbでカスタムデータディレクトリにもpostgresql.conf,pg_hba.confが作成されるが、これらは無視し引き続き/etc以下のもので設定すればOK。(変えるのはdata_directoryだけ)

設定ファイル編集

FreeBSDの場合データディレクトリ直下、
Debianの場合/etc/postgresql/9.6/main/以下。

cp -p postgresql.conf postgresql.conf.default
vi postgresql.conf

デフォルトからの変更箇所

listen_addresses = '*'                # what IP address(es) to listen on;
#log_destination = 'syslog'
logging_collector = on                # Enable capturing of stderr and csvlog
log_directory = 'pg_log'              # directory where log files are written,
log_filename = 'postgresql-%Y%m%d.log'        # log file name pattern,
log_truncate_on_rotation = on         # If on, an existing log file with the
log_rotation_age = 1d                 # Automatic rotation of logfiles will
log_line_prefix = '%t %r:%u:%d '                      # special values:
autovacuum = on                       # Enable autovacuum subprocess?  'on'

ログをデータdirのpg_logに日付ごとに格納していく Apache方式

システムに余裕があるならメモリ設定系を増やしてみるのも良い。
以下は既定の3倍

# - Memory -
shared_buffers = 512MB                  # min 128kB
temp_buffers = 24MB                     # min 800kB
work_mem = 12MB                         # min 64kB
max_stack_depth = 6MB                  # min 100kB

vi pg_hba.conf

#local   all             postgres                                peer
#local   all             all                                     peer
local   all             all                                     trust
#host    all             all             127.0.0.1/32            md5
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.1.0/24          md5
#host    all             all             ::1/128                 md5

localhostからの接続はパスワードが要らない設定
md5でなくtrustにすると、パスワードが不要になる
内部ネットワークからの接続はパスワードが必要

再起動

# Debian
/etc/init.d/postgresql stop
/etc/init.d/postgresql start

# FreeBSD
/usr/local/etc/rc.d/postgresql stop
/usr/local/etc/rc.d/postgresql start

pg_log/postgresql-YYYYMMDD.logが作成されているか確認。

次にpostgresユーザでpsqlし初期設定

psql -U postgres -l
psql -U postgres postgres
psql (9.6.10)
\du
alter role postgres with password 'XXXXXXXXX'; # パスワード変更
\q

新規スーパーユーザーを作成する場合

createuser -U postgres -P -s hogeuser
新しいロールのためのパスワード: XXXXXXXXXX

新規一般ユーザーを作成する場合

createuser -U postgres -P ippanuser
新しいロールのためのパスワード: XXXXXXXXXX
psql -U postgres postgres
alter role ippanuser createdb; # DB作成権限付与
\du

データベース作成例(initdbデフォルトではUTF-8ロケール)

createdb -T template0 -E UTF-8 testdb

他の文字コードの場合はlocaleをつける

createdb -T template0 -E EUC-JP --locale=C testdb
※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】