📖
Shared Memoryについて
はじめに
MacでPostgreSQLを立ち上げようとすると、
FATAL: could not create shared memory segment: Cannot allocate memory
というエラーが。何だこれ??
Shared Memory
まず、Shared Memory
とは、日本語で「共有メモリ」のこと。
つまり、色々なプロセスでデータの受け渡しができる、共有できる領域のこと。
Shared Memoryを使うことでデータをコピーする際に生じるオーバーヘッドや、IPC(Inter-process communication)のコンテキストスイッチ(他のプロセスで実行するためにそのプロセスの状態を保存すること)がないので速い。
PostgreSQLが使う
つまり、設定されている共有メモリが少ないから起動できないということ。
PosgreSQLでは、DBのconnectionを管理したり、Transactionを管理したりと、database management system (DBMS)間で利用するためにある程度多くのshared memoryを確保してあげないといけないみたいです。
解決方法
設定されている共有メモリを多くしてあげれば治ります。
sudo sysctl -w kern.sysv.shmmax=1073741824
sudo sysctl -w kern.sysv.shmall=1073741824
無事、治りました。
P.S 初回起動時に行うこと
initdb /usr/local/var/postgres -E utf8
Discussion