📖

Shared Memoryについて

2024/04/08に公開

はじめに

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