Macにインストールしたpostgresqlのshared_bufferを変更する

MacにPostgreSQL8.4を入れたときの手順です。 PostgreSQLのインストール自体は homebrew を使うと簡単にインストールできます。

brew install postgresql8

shared_bufferなどを256MBなどに変更して起動すると

mkdir /usr/local/var/postgres
initdb /usr/local/var/postgres
vim /usr/local/var/postgres/postgresql.conf 
設定変更
FATAL:  could not create shared memory segment: Cannot allocate memory
DETAIL:  Failed system call was shmget(key=5432001, size=567640064, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space. To reduce the request size (currently 567640064 bytes), reduce PostgreSQL's shared_buffers parameter (currently 65536) and/or its max_connections parameter (currently 23).
    The PostgreSQL documentation contains more information about shared memory configuration.

といったエラーが発生します。

postgresqlは共有メモリを使用しているのですが、Macの場合これがデフォルトで4MBしかありません。 そのためPostgresqlで設定を変えるとこけます。

Macの共有メモリ周りを変更します。 4MB → 512MBにします。

sudo vim /etc/sysctl.conf
---
kern.sysv.shmmax=536870912
kern.sysv.shmmin=1
kern.sysv.shmmni=4096
kern.sysv.shmseg=1024
kern.sysv.shmall=131072
---

reboot

カーネルのパラメータなのでOSの再起動が必要です。

変更されているか確認します。

sysctl kern.sysv.shmmax

これでshared_bufferの値を変更しても起動するようになりますが、 ギリギリの設定、shared_buffer = 512MB にすると起動しません。 ある程度余裕が必要のようです。