はじめてのPostgreSQL(バージョン9.3)on Mac OS X

環境セットアップ〜起動まで

$ uname -a
Darwin mac-3.local 14.0.0 Darwin Kernel Version 14.0.0: Fri Sep 19 00:26:44 PDT 2014; root:xnu-2782.1.97~2/RELEASE_X86_64 x86_64

インストール

brew からインストールした。 インストールされたPostgreSQLのバージョンは9.3.5。

$ brew install postgres

インストール時にコンソール出力されたメッセージに従い、 下記コマンドを実行する。(postgres gemを使う場合のみ必要)

$ env ARCHFLAGS="-arch x86_64"

環境設定(~/.bash_profile)

環境変数を定義する。 PGDATAだけ入れておけば良さそうだけど諸々設定してみた。

export POSTGRES_HOME=/usr/local/opt/postgresql/
export PGLIB=${POSTGRES_HOME}/lib
export PGDATA=/usr/local/var/postgres
export PATH=${POSTGRES_HOME}/bin:${PATH}

環境設定(client設定: Autocommit)

デフォルトでは、autocommitがonになってしまうようなので変更する。 なお、サーバー側では指定できないため、クライアント側のpsqlrcファイルに定義する。

  • psqlrcの有効範囲
    • ~/.psqlrc 各ユーザに対して有効
    • ${POSTGRE_HOME}/etc/psqlrc システム全体にたいして有効 Redhat系だと「/etc/sysconfig/pgsql/psqlrc」あたり? rpm からインストールした場合は、/home/posgresql/.psqlrc に定義するでも良いかも。

なお、PSQLRC環境変数を指定すれば、対象ファイルは個別に指定できる。

参考: マニュアル

環境設定(~/.psqlrc)

今回は自分ひとりしか使わないので"~/.psqlrc"に設定する。 "psqlrc"でググっているとプロンプトとか色々設定したくなり、 ほぼYakst - PostgreSQLのコマンドラインの動きを改善してみるから拝借し、"~/.psqlrc"を作成した...

$ vi ~/.psqlrc


\set PROMPT1 '%[%033[1m%]%M %n@%/%R%[%033[0m%]%# '
\set PROMPT2 '[more] %R > '
\set AUTOCOMMIT off
\encoding utf8
\x auto
\set VERBOSITY verbose
-- デフォルトでは、NULLはスペースとして表示される
-- 空白なのかnullなのか?これで違いが見えるようになる
\pset null '[NULL]'
-- データベースごとにヒストリファイルを作る
\set HISTFILE ~/.psql_history- :DBNAME
-- 1行で複数回コマンドが実行されたら、1回だけヒストリに保存
\set HISTCONTROL ignoredups
-- キーワード(SELECTなど)を、小文字で入力し始めたとしても
-- 大文字に自動変換
\set COMP_KEYWORD_CASE upper
-- バージョン表示
\set version 'SELECT version();'
  • 動作確認
[local] user@db_hoge=# \set
AUTOCOMMIT = 'off'
HISTCONTROL = 'ignoredups'
PROMPT1 = '%[%033[1m%]%M %n@%/%R%[%033[0m%]%# '
PROMPT2 = '[more] %R > '
PROMPT3 = '>> '
VERBOSITY = 'verbose'
VERSION = 'PostgreSQL 9.3.5 on x86_64-apple-darwin14.0.0, compiled by Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn), 64-bit'
DBNAME = 'db_hoge'
USER = 'user'
PORT = '5432'
ENCODING = 'UTF8'
HISTFILE = '~/.psql_history-db_hoge'
COMP_KEYWORD_CASE = 'upper'
version = 'SELECT version();'

操作編(起動)

https://www.postgresql.jp/document/9.3/html/server-start.html

自動起動設定は行わず手動起動する。 起動方法はいくつかあるようだが、以下を実行すればOK。

$ pg_ctl start -l /tmp/pg.log   # 停止は、"pg_ctl stop"

環境変数(PGDATA)がセットされてい場合は下記エラーとなるので、 "-D"オプションでパス指定、もしくは環境変数を設定する。

$ pg_ctl start -l /tmp/pg.log
pg_ctl: no database directory specified and environment variable PGDATA unset
$ pg_ctl start -D /usr/local/var/postgres -l /tmp/pg.log
  • メモ 以下でも同様の動きになる。 フォアグランドで実行されるので、バックグランドで動作するように"&"指定する。
$ postgres -D /usr/local/var/postgres >/tmp/pg.log 2>&1 &

参考URL