Mac OS X에서 PostgreSQL 서버를 시작하는 방법은 무엇입니까?


989

최종 업데이트 :

나는 initdb명령 을 실행하는 것을 잊었다 .

</ 최종 업데이트>

이 명령을 실행하여

ps auxwww | grep postgres

postgres가 실행되고 있지 않습니다.

> ps auxwww | grep postgres
remcat          1789   0.0  0.0  2434892    480 s000  R+   11:28PM   0:00.00 grep postgres

이것은 postgresql 서버를 어떻게 시작합니까?

최신 정보:

>pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
sh: /usr/local/var/postgres/server.log: No such file or directory

업데이트 2 :

터치가 성공적이지 않아서 대신이 작업을 수행했습니다.

> mkdir /usr/local/var/postgres
> vi /usr/local/var/postgres/server.log
> ls /usr/local/var/postgres/          
server.log

그러나 레일 서버를 시작하려고 할 때 여전히 다음과 같은 내용이 표시됩니다.

Is the server running on host "localhost" and accepting
TCP/IP connections on port 5432?

업데이트 3 :

> pg_ctl -D /usr/local/var/postgres status
pg_ctl: no server running

업데이트 4 :

나는 pg_hba.conf (pg_hba.conf.sample 만)가 없으므로 샘플을 수정하고 이름을 바꿨습니다 (.sample을 제거하기 위해). 내용은 다음과 같습니다.

 # IPv4 local connections:
 host    all             all             127.0.0.1/32           trust
 # IPv6 local connections:
 host    all             all             ::1/128                trust

그러나 나는 이것을 이해하지 못한다 :

> pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start     
server starting
> pg_ctl -D /usr/local/var/postgres status                                     
pg_ctl: no server running

또한:

sudo find / -name postgresql.conf
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory

업데이트 5 :

sudo pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Password:
pg_ctl: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will own the server process.

업데이트 6 :

이것은 이상하게 보인다 :

> egrep 'listen|port' /usr/local/var/postgres/postgresql.conf
egrep: /usr/local/var/postgres/postgresql.conf: No such file or directory

그러나 나는 이것을했다 :

>sudo find / -name "*postgresql.conf*"
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample
/usr/share/postgresql/postgresql.conf.sample

그래서 나는 이것을했다 :

egrep 'listen|port' /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample 
#listen_addresses = 'localhost'     # what IP address(es) to listen on;
#port = 5432                # (change requires restart)
                # supported by the operating system:
                #   %r = remote host and port

그래서 나는 이것을 시도했다 :

> cp /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf        
> cp /usr/share/postgresql/postgresql.conf.sample /usr/share/postgresql/postgresql.conf 

여전히 같은 "서버가 실행 중입니까?" 메시지.


Postgres를 어떻게 설치 했습니까? 패키지 관리자 또는 수동 설치를 사용 했습니까?
James Allman

1
정확히 기억할 수는 없지만 이미 설치되었거나 "brew install postgres"를 실행했습니다. 나는 후자를 향해 기울었지만 다시 100 % 확신하지는 못한다.
Ramy

사용sudosudo pg_ctl...
보헤미안

54
FINAL UPDATE가 나를 매우 힘들게 만들었 기 때문에 이것을 투표했습니다. : D
pkoch

14
공감해야했는데 예기치 않은 종료 후 psql을 다시 시작하기 위해 첫 번째 pg_ctl 명령을 복사하기 위해 일주일에 3 번 이상 왔습니다.
lucygenik 2018 년

답변:


1848

브루 패키지 관리자가 자동으로 시작 launchctl 속성 목록이 포함되어 있습니다. 자세한 정보는brew info postgres .

수동으로 시작하십시오.

pg_ctl -D /usr/local/var/postgres start

수동으로 중지하십시오.

pg_ctl -D /usr/local/var/postgres stop

자동 시작 :

"postgresql을 시작하고 로그인시 다시 시작하려면 :"

brew services start postgresql


결과는 pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start무엇입니까?

결과는 pg_ctl -D /usr/local/var/postgres status무엇입니까?

server.log에 오류 메시지가 있습니까?

pg_hba.conf에서 tcp localhost 연결이 활성화되어 있는지 확인하십시오 :

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust

postgresql.conf에서 listen_addresses와 포트를 확인하십시오 :

egrep 'listen|port' /usr/local/var/postgres/postgresql.conf

#listen_addresses = 'localhost'     # what IP address(es) to listen on;
#port = 5432                # (change requires restart)

청소

Postgres는 Homebrew , Fink , MacPorts 또는 EnterpriseDB 설치 프로그램을 통해 설치되었을 가능성이 높습니다 .

다음 명령의 출력을 확인하여 설치된 패키지 관리자를 판별하십시오.

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres

1
@Ramy 터치가 성공 했습니까? / usr / local / var / postgresserver.log 의 존재 및 권한을 확인하십시오 . 사용자 ID는 rw 여야합니다.
James Allman

1
@Ramy : /usr/local/var/postgres/server.log에 정보를 포함 할 수 있습니까? 설치가 손상되었을 수 있으며 Homebrew와 같은 알려진 소스를 사용하여 정리하고 다시 설치하는 것이 더 빠를 수 있습니다.
James Allman

10
이 모든 것이 왜 필요한가? 노드를 시작하는 방식으로 postgres를 시작할 수없는 이유는 무엇입니까?
Kinnard Hockenhull

32
프로그램을 시작하고 중지하기 위해 엄청나게 복잡한 명령
ahnbizcad

3
이것은 여전히 ​​작동하지만 약간 오래된 것입니다. 아래의 답변 brew services start postgresql은 최신 정보이며 간단한 답변입니다.
mthorley

372

postgresql (homebrew를 통해 설치)을 수동으로 시작하고 중지하려면 가장 쉬운 방법은 다음과 같습니다.

brew services start postgresql

brew services stop postgresql

특정 버전이있는 경우 버전 접미어를 확인하십시오 (예 :

brew services start postgresql@10

7
나는 brew services더 빨리 알기를 바란다 . 이것이 나를 위해 일하는 유일한 해결책이다. <3 감사합니다!
seanlinsley 2016 년

5
brew tap gapple/services양조 서비스 명령을 다시 작동시킬 것입니다
Fabian Leutgeb

4
외모가 좋아 brew tap homebrew/services여전히 작동 github.com/Homebrew/homebrew-services을
kangkyu

4
이것은 성공적으로 실행 된 후에 작동 initdb합니다. 그렇지 않으면 자동으로 실패하지만 서비스가 시작된 것으로 표시되어 작동하는 것 같습니다 brew services list.
Dmitri

1
나는 실행하는 데 필요한 brew services restart postgresqlpg_ctl와 DB를 시작하기 때문에, 또는 brew services start걸려 "다른 서버가 실행 될 수있다"와와 pg_ctl로 DB를을 stoping 말했다.
tomf

181

나는 거의 똑같은 문제가 있었고 initdb 명령을 수정했다고 인용했다. 이것은 또한 나를위한 해결책이지만, 그것을 찾는 사람들을 위해 누군가가 여기에 게시 한 것을 보지 못했습니다.

initdb /usr/local/var/postgres -E utf8

16
이것은 나에게도 효과가 있었다. initdb는 이미 설정이 완료되었다고 말했다. 그래서 전체 디렉토리를 삭제했다. "rm -rf / usr / local / var / postgres"명령이 다시 실행되고 내 서버가 실행되고, 많은 감사합니다!
Jorge Sampayo

5
그렇습니다 나는 달려야했다 rm -rf /usr/local/var/postgres그리고 이것은 나를 위해 일했다
Lee McAlilly

2
이것이 나를 위해 일한 것입니다. initdb를 시작하기 전에 postgres dir ( chown _your username on your comp_ usr/local/var/postgres)과 initdb를 씹어야했습니다. 그 후 서버를 다시 시작할 때 (Homebrew의 지침을 따른 경우) 또는 수동으로 서버가 자동으로 시작됩니다 pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start.
septerr December

2
initdb(필요한 경우 이전 디렉토리 제거 포함) brew services start postgresql작동
Dmitri

rm -rf현재 데이터베이스에있는 모든 항목을 사용하려는 생각이 조금이라도 겁이 든다면 완전히 삭제하는 대신 mv /usr/local/var/postgres /usr/local/var/postgres.backup새 백업 디렉토리로 이동 한 다음 명령을 실행하여 데이터베이스를 다시 시작할 수 있습니다.
Hartley Brody

102

컴퓨터가 갑자기 다시 시작된 경우

먼저 파일을 삭제해야합니다. /usr/local/var/postgres/postmaster.pid그러면 설치에 따라 언급 된 다른 많은 방법 중 하나를 사용하여 서비스를 다시 시작할 수 있습니다.

Postgres 로그를 확인하여 진행중인 작업을 확인하여이를 확인할 수 있습니다. tail -f /usr/local/var/postgres/server.log


2
tail -f /usr/local/var/postgres/server.log해당 파일을 삭제해야하는지 확인할 수 있습니다 . 참조 coderwall.com/p/zf-fww/…
user1448319 1

내 /
users

homebrew 설치 경로는~/homebrew/var/postgres/postmaster.pid
blnc

2
와우 ... 이것 만이 나를 위해 일했습니다! postmaster.pid컴퓨터가 갑자기 다시 시작된 경우 삭제해야하는 이유에 대해 더 자세히 설명해 주 시겠습니까?
adkl

1
이것은 정말 유용했습니다
NinComPoop

81

또 다른 접근법은 점심 보석 (launchctl의 래퍼)을 사용하는 것입니다.

brew install postgresql
initdb /usr/local/var/postgres -E utf8
gem install lunchy

postgres를 시작하려면 :

lunchy start postgres

postgres를 중지하려면

lunchy stop postgres

자세한 정보를 원하시면 참조 : " Mac에서 브루와 Lunchy에 PostgreSQL을 설치하는 방법 "


postgres 설정 방법에 따라 postgres 대신 postgresql을 사용해야 할 수도 있습니다
Devon Kiss

72

여기 내 2 센트 : postgres pg_ctl의 별칭을 만들고 .bash_profile (내 postgresql 버전은 9.2.4이고 데이터베이스 경로는 /Library/PostgreSQL/9.2/data)에 넣었습니다.

alias postgres.server="sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data"

새 터미널을 시작하십시오.

그리고? 다음과 같이 postgresql 서버를 시작 / 중지 할 수 있습니다.

postgres.server start
postgres.server stop

-D로 데이터 디렉토리를 지정하는 것이 핵심입니다
olore

3
"서버 프로세스를 소유 한 (권한이없는) 사용자로 로그인하십시오 (예 :"su "). 그냥 sudo를 실행할 때. +1
pyb

감사. su를 사용하려는 postgres 툴의 제안은 비참하게 실패합니다. sudo -u는 훌륭하게 작동합니다. (El Capitan에서)
uchuugaka

33

가장 깨끗한 방법 훨씬은 당신이 그것을 통해 설치 한 경우 중지 / 재시작 포스트 그레스 / 시작 brew단순히 언로드 및 / 또는 설치와 함께 제공되는 launchd에 구성 파일을로드 :

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

첫 번째 줄은 postgres를 멈추고 두 번째 줄은 그것을 시작합니다. 모든 것이 해당 파일에 있으므로 데이터 디렉토리 등을 지정할 필요가 없습니다.


Brew를 통해 OS X에 설치된 PostgreSQL 9.5.3에 적합합니다! 감사!
jpswain

이것은 postgres 서버가 제대로 종료되지 않고 들어오는 연결을 받아들이지 않을 때 매력처럼 작동합니다.
Augusto Samamé Barrientos

5
Homebrew 자체에는 이러한 명령에 대한 간단한 래퍼가 있습니다 brew services start postgres( 예 : (및 중지)). -v마지막에를 던지면 그것이 무엇을하고 있는지 볼 수 있습니다.
Mark Edington

28

postgresql 서버를 시작하려면 :

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

postgresql 서버를 종료하려면 :

pg_ctl -D /usr/local/var/postgres stop -s -m fast

CLI를 통해 별명을 작성하여 더 쉽게 만들 수도 있습니다.

alias pg-start='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
alias pg-stop='pg_ctl -D /usr/local/var/postgres stop -s -m fast'

이것으로 "pg-start"를 입력하여 Postgres를 시작하고 "pg-stop"을 입력하여 종료 할 수 있습니다.


3
pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directory이 문제를 해결하는 방법에 오류가 있습니까?
Rohman Masyhar


9

homebrew를 사용하여 postgresql을 설치할 때 :

brew install postgres

출력이 끝나면 다음과 같은 방법으로 서버를 시작할 수 있습니다.

To have launchd start postgresql at login:
    ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
Then to load postgresql now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
    postgres -D /usr/local/var/postgres

이것이 최선의 방법이라고 생각합니다.

편의를 위해 .profile에 별명을 추가 할 수 있습니다.


7

빠른 일회용 테스트 데이터베이스를 위해 포 그라운드에서 서버를 실행할 수 있습니다.

새 디렉토리에서 새 postgres 데이터베이스를 초기화하십시오.

mkdir db
initdb db -E utf8
createdb public

포 그라운드에서 서버를 시작하십시오 (서버를 중지하려면 Ctrl-C).

postgres -d db

다른 쉘 세션에서 서버에 연결

psql -d public

이것은 훌륭해 보이지만 나에게는 효과가 없습니다. createdb 단계를 수행하기 위해 서버가 이미 실행 중이 아니 었습니다. 서브를 시작하려고 할 때 아직 존재하지 않는 PGDATA 또는 구성 파일이 필요하다고 말합니다. 내가 무엇을 놓치고 있습니까?
szeitlin

7

동일한 문제가 있으며 첫 번째 게시물의 모든 업데이트를 수행합니다. 그러나 확인 로그 파일 후 :

/usr/local/var/postgres/server.log

나는 진정한 원인을 본다 :

FATAL:  data directory "/usr/local/var/postgres" has group or world access
DETAIL:  Permissions should be u=rwx (0700).

이 디렉토리에 대한 변경 권한 후

chmod 0700 /usr/local/var/postgres

postgres 서버가 시작되었습니다.

매번 확인 로그 파일.


5

PostgreSQL은 Server.app에 통합되었습니다 Mountain Lion의 App Store를 통해 제공 있습니다. 즉, 이미 구성되어 있으므로 시작한 다음 사용자와 데이터베이스를 작성하기 만하면됩니다.

: $ PGDATA를 정의하는 것으로 시작하지 말고 파일 위치를 그대로 사용하십시오.

이 파일은 다음과 같습니다. /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

시작한다:

sudo serveradmin start postgres

인수로 시작된 프로세스 :

/Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D / Library / Server / PostgreSQL / Data -c listen_addresses = 127.0.0.1, :: 1 -c log_connections = on -c log_directory = / Library / Logs / PostgreSQL -c log_filename = PostgreSQL.log -c log_line_prefix = % t -c log_lock_waits = on -c log_statement = ddl -c logging_collector = on -c unix_socket_directory = / private / var / pgsql_socket -c unix_socket_group = _postgres -c unix_socket_permission_permissions

당신은 sudo 할 수 있습니다 :

sudo -u _postgres psql template1

또는 연결하십시오 :

psql -h localhost -U _postgres postgres

당신은 데이터 디렉토리, 버전, 실행 상태 등을 찾을 수 있습니다

sudo serveradmin fullstatus postgres  

내장 Postgres를 사용하는 방법을 보여주는 다른 많은 것을 찾을 수 없습니다. serveradmin 명령을 찾도록 도와줍니다. 감사합니다
Jason S

보안 문제가 발생하자마자 전체 컴퓨터가 손상되면 루트 사용자 (sudo)로 서비스를 실행하는 것은 좋은 생각이 아닙니다.
Carlos Barcelona

postgresql은 루트가 아니라 _postgres로 실행 중입니다.
bbaassssiiee

5

이 답변의 변형 : https://stackoverflow.com/a/13103603/2394728

initdb `brew --prefix`/var/postgres/data -E utf8`` &&  pg_ctl -D /usr/local/var/postgres/data -l logfile start

언급 한 답변에 대한 링크를 추가해야합니다.
Jeffrey Bosboom 1

이것은 내 pg가 잘 작동하고 갑자기 작동이 멈추고 / var / postgres 폴더를 찾을 수 없으므로 도움이되었습니다.
shinesecret

왜 이것이 연결된 답변보다 우수한 지에 대해 의견을 말해주십시오. 내가 마지막으로 비슷한 문제를 겪었을 때 이미 상향 투표 한 것을 보았을 때 여기에 아무런 이유가 없기 때문에 그것을 사용할 것입니다.
MCB

4

개발을 위해 가장 간단한 방법 중 하나는 공식 사이트 에서 Postgres.app를 설치하는 것입니다 . 응용 프로그램 폴더에서 또는 터미널에서 다음 명령을 사용하여 시작 / 중지 할 수 있습니다.

# start
open -a Postgres

# stop
killall Postgres
killall postgres

18
killall아마도 데이터베이스를 중지하는 가장 좋은 방법은 아닙니다.
Risadinha

4
   # remove old database files (If there was any)
   $rm -rf /usr/local/var/postgres    # install the binary

    $ brew install postgresql

    # init it
    $ initdb /usr/local/var/postgres

    # start the postgres server
    $ postgres -D /usr/local/var/postgres

    # create your database
    $ createdb mydb


    # Access db.
    $ psql mydb
    psql (9.0.1)
    Type "help" for help.

4

brew를 사용하여 설치 한 경우 아래 명령으로 충분합니다.

brew services restart postgresql

그리고 때로는 작동하지 않을 수 있습니다.이 경우 아래 두 명령이 확실히 작동해야합니다.

rm /usr/local/var/postgres/postmaster.pid

pg_ctl -D /usr/local/var/postgres start

1

위의 답변 중 동일한 오류 메시지가 표시 되어도 문제가 해결되지 않았습니다. 잠긴 연결을 허용하지 않는 기존 postmaster.pid 파일을 삭제하여 인스턴스를 백업하고 실행할 수있었습니다.


1

macports의 경우 load / unload 명령과 실행중인 서버의 포트 이름을 사용하십시오.

sudo port load postgresql96-server
- or -
sudo port unload postgresql96-server

/Library/LaunchDaemons/org.macports.postgresql96.plist파일의 위치 를 기억할 필요가 없습니다.



1

EnterpriseDB 설치 프로그램을 사용하여 Postgres를 설치 한 경우 @Kenial이 제안한 방법이 있습니다.

sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data start
sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data stop

1

나를 위해 일한 (macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

또는 먼저 cd /Library/PostgreSQL/9.6/bin/


1

$ brew upgrade postgres

나를 위해 고쳤다.

물론 postgres 버전을 업그레이드하고 종속성을 업데이트 / 설치합니다.

경고 : postgresql 버전이 변경 될 수 있음을 알고 있어야합니다. 나를 위해, 그것은 큰 문제가 아니었다.


0

Mac / OSX의 경우 개발에 사용했던이 백그라운드 서비스 및 기타 백그라운드 서비스에 대해 LaunchRocket을 정말 좋아합니다.

https://github.com/jimbojsb/launchrocket

이 사이트에는 설치에 대한 유용한 지침이 있습니다. http://macappstore.org/launchrocket/

이렇게하면 시스템 환경 설정에 로그인 할 때 시작, 재부팅, 루트, 실행을 시작할 수있는 멋진 화면이 나타납니다.


0

Craig Ringer에서 영감을 얻은 매번 저에게 효과적이었습니다.

brew install proctools
sudo pkill -u postgres

proctools에는 pkill이 포함되어 있습니다. Brew가없는 경우 : https://brew.sh/



0

누군가에게 도움이 될만한 몇 가지 경우가 있습니다.

postgres.pid를 PID로 채우는 옵션이 있습니다. 그러나 컴퓨터를 다시 시작하고 후행이 다시 발생하기 전에 다른 프로세스가 해당 PID를 사용합니다. 이러한 상황이 발생하면 pg_ctl 상태와 BREW 서비스 모두 postgres 상태에 대해 묻는 메시지가 UP 상태임을 알려줍니다. 그냥 ps aux | grep하고 진짜 postgress인지 확인


0

Homebrew가 방법입니다!

서비스를 시작하려면

brew services start postgresql   

그것을 나열하려면 :

brew services list |grep postgres

서비스를 중지합니다. :

brew services stop postgresql 

0

brew와 함께 설치하지 않고 mac 패키지에서 직접 설치하지 않은 경우 모든 기본 위치, 변수 등을 사용할 때 PostgreSQL 12에서 효과적이었습니다.

$ sudo su postgres
bash-3.2$ /Library/PostgreSQL/12/bin/pg_ctl -D /Library/PostgreSQL/12/data/ stop

0

나는 같은 문제에 직면했다. 이 솔루션을 모두 시도했지만 아무것도 작동하지 않았습니다.

마지막으로 Django 설정의 postgres HOST를에서로 변경하여 작동 localhost하도록했습니다 127.0.0.1.

도움이된다면 건배.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.