macでPostgreSQLをインストールする
October 21, 2014
postgres
postgreSQL
mac
rails
sqliteでは外部キー制約が使えるようになったが、gemのforeigner
では使えないらしい。なのでdevelopmentの確認用にpostgreSQLを使うことにした。
macでhomebrewを用いてpostgreSQLをインストールする。
クライアント専用として使う場合
自動起動はいらないのでインストールだけでOK。
$ brew install postgresql
サーバとして使う場合
インストールする
$ brew install postgresql
homebrewで作られた起動設定ファイルにシンボリックリンクを貼る
$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
ログイン時に自動起動させる。このコマンドを打った時点で起動する。
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
ちなみにログイン時に自動起動させなくする場合は以下のコマンド。このコマンドを打った時点で終了する。
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
去年位までは$ initdb /usr/local/var/postgres -E utf8
ってコマンドで初期文字コードを指定していたが、2014年10月21日現在、初期値がja_JP.utf-8
になっていたのでいらないっぽい。
設定ファイルを弄る
shellに設定を書き込む。
zshの場合
$ touch ~/.zprofile
$ echo 'export ARCHFLAGS="-arch x86_64"' >> ~/.zprofile
$ echo 'export PGDATA="/usr/local/var/postgres"' >> ~/.zprofile
$ source ~/.zprofile
bashの場合
$ touch ~/.bash_profile
$ echo 'export ARCHFLAGS="-arch x86_64"' >> ~/.bash_profile
$ echo 'export PGDATA="/usr/local/var/postgres"' >> ~/.bash_profile
$ source ~/.bash_profile
ARCHFLAGS
はgemで使う場合のみ追加。
PGDATA
は$ postgres -D /usr/local/var/postgres
で起動させるがそれを$ postgres
だけに省略できる。ただ自動起動の設定を使うとこのコマンドを使うことはない気がする。launchctl load -w
、launchctl unload -w
で起動、終了できるし。
ちなみに.zprofile, .bash_profileはログイン時に1度しか読み込まれない。このままではシェル(terminal)を閉じると反映されない。なので一度ログアウトして反映させる。
外部公開とかはしないので、新規にユーザーを作成したりはしない。
Passwordの設定
まずpostgresにログインする
$ psql postgres
パスワードを設定する
postgres=# \password
postgres=# \q
このままではログイン時にパスワードを聞かれないので設定を変更する。
変更前
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
trustをmd5にする。
変更後
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
設定を反映させるためにpostgresを再起動する
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
パスワードを聞かれないようにする
パスワードを設定したが、ログイン時に一々聞かれると面倒。 なのでパスワードを設定ファイルに書いておく。
$ touch ~/.pgpass
中にはホスト名:ポート番号:データベース名:ユーザー名:パスワード
のように書く。ワイルドカード*
でもOK。
例
localhost:5432:*:pyarbz:hogepass
ちなみにこれは、外部にPostgresqlがある場合でも使える。アクセスするものが複数あれば、複数行書く。
TimezoneをUTCに変更する
RailsではDBにUTCとして保存し、取り出して使うときにその地域に合わせて変更した方がいいらしい。
また、Heroku PostgreSQLやAmazon RDSなど海外サーバを用いることが多いので、UTCに変更しておく。
変更前
log_timezone = 'Japan'
timezone = 'Japan'
lc_messages = 'ja_JP.UTF-8'
lc_monetary = 'ja_JP.UTF-8'
lc_numeric = 'ja_JP.UTF-8'
lc_time = 'ja_JP.UTF-8'
変更後
log_timezone = 'UTC'
timezone = 'UTC'
lc_messages = 'ja_JP.UTF-8'
lc_monetary = 'ja_JP.UTF-8'
lc_numeric = 'ja_JP.UTF-8'
lc_time = 'en_US.UTF-8'
PostgreSQLコマンド集
データベース
種類 | postgres内のコマンド | shellのコマンド |
---|---|---|
一覧 | \l |
psql -l |
作成 | CREATE DATABASE データベース名; |
createdb データベース名 -U 使うユーザー名 |
選択 | \c データベース名 |
psql データベース名 |
削除 | DROP DATABASE データベース名; |
dropdb データベース名 |
テーブル
種類 | postgres内のコマンド | shellのコマンド |
---|---|---|
一覧 | \d |
- |
作成 | CREATE TABLE テーブル名(id int, name varchar(255).....); |
- |
削除 | DROP TABLE products; |
- |
ユーザー
種類 | postgres内のコマンド | shellのコマンド |
---|---|---|
一覧 | \du |
- |
作成 | createuser -P ユーザー名; |
|
作成(スーパー) | createuser -s -P ユーザー名; |
|
削除 | dropuser ユーザー名 |
|
パスワード設定時のアクセス | \password |
psql -U postgres template1 |
パスワード変更 | ALTER USER postgres encrypted password 'パスワード'; |
- |
その他
種類 | postgres内のコマンド | shellのコマンド |
---|---|---|
終了 | \q またはctrl+d |
- |
help | \? |
- |