Como iniciar o servidor PostgreSQL no Mac OS X?

989

ATUALIZAÇÃO FINAL:

Eu tinha esquecido de executar o initdb comando.

</ ATUALIZAÇÃO FINAL>

executando este comando

ps auxwww | grep postgres

Vejo que o postgres não está sendo executado

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

isso levanta a questão: como inicio o servidor postgresql?

atualizar:

>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

atualização 2:

O toque não foi bem-sucedido, então fiz isso:

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

Mas quando tento iniciar o servidor rails, ainda vejo o seguinte:

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

atualização 3:

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

atualização 4:

Descobri que não havia pg_hba.conf (apenas pg_hba.conf.sample), então modifiquei a amostra e a renomeei (para remover a .sample). Aqui estão os conteúdos:

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

mas eu não entendo isso:

> 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

Além disso:

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

atualização 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.

atualização 6:

isso parece estranho:

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

no entanto, eu fiz isso:

>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

então eu fiz isso:

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

então eu tentei isso:

> 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 

ainda está recebendo o mesmo "O servidor está executando?" mensagem.

Ramy
fonte
Como você instalou o Postgres? Você usou um gerenciador de pacotes ou uma instalação manual?
James Allman
1
não me lembro exatamente, mas ele já estava instalado ou executei o "brew install postgres". Eu me inclinaria para o último, mas, novamente, não tenho 100% de certeza.
Ramy
Use sudo, iesudo pg_ctl...
Bohemian
54
Eu votei para cima apenas porque a ATUALIZAÇÃO FINAL me fez rir muito! : D
pkoch
14
Teve que votar, eu venho aqui pelo menos 3 vezes por semana para copiar o primeiro comando pg_ctl para reiniciar o psql após um encerramento inesperado .. heh, preciso aprender: D Obrigado cara!
lucygenik

Respostas:

1848

O gerenciador de pacotes Homebrew inclui listas do launchctl para iniciar automaticamente. Para mais informações, execute brew info postgres.

Comece manualmente:

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

Pare manualmente:

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

Iniciar automaticamente:

"Para que o launchd inicie o postgresql agora e reinicie no login:"

brew services start postgresql


Qual é o resultado de pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start?

Qual é o resultado de pg_ctl -D /usr/local/var/postgres status ?

Há alguma mensagem de erro no server.log?

Verifique se as conexões localhost tcp estão ativadas no pg_hba.conf:

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

Verifique os listen_addresses e port em postgresql.conf:

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

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

Limpando

O Postgres provavelmente foi instalado via Homebrew , Fink , MacPorts ou EnterpriseDB .

Verifique a saída dos seguintes comandos para determinar em qual gerenciador de pacotes foi instalado:

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres
James Allman
fonte
1
@Ramy O toque foi bem-sucedido? Verifique a existência e as permissões de / usr / local / var / postgres e server.log . Deve ser rw para o seu ID do usuário.
James Allman
1
@Ramy: Você pode incluir alguma informação em /usr/local/var/postgres/server.log? Sua instalação pode estar corrompida e pode ser mais rápido limpar e reinstalar usando uma fonte conhecida como Homebrew.
James Allman
10
Por que tudo isso é necessário? Por que você não pode simplesmente iniciar o postgres da maneira que inicia o nó?
Kinnard Hockenhull
32
o que um comando ridiculamente complicado apenas para iniciar e parar o programa
ahnbizcad
3
Isso ainda funciona, mas está um pouco desatualizado. A resposta abaixo brew services start postgresqlé uma resposta mais atualizada e direta.
mthorley
372

Se você deseja iniciar e parar manualmente o postgresql (instalado via homebrew), a maneira mais fácil é:

brew services start postgresql

e

brew services stop postgresql

Se você possui uma versão específica, certifique-se de colocar o sufixo da versão, por exemplo:

brew services start postgresql@10
malopezcruz
fonte
7
Eu gostaria de saber mais brew servicescedo ... esta é a única solução que está funcionando para mim. <3 obrigado!
seanlinsley
5
brew tap gapple/servicesvai fazer o trabalho de comando serviços BREW novamente
Fabian Leutgeb
4
Se parece brew tap homebrew/servicesainda trabalhando github.com/Homebrew/homebrew-services
kangkyu
4
Isso funciona depois de initdb ser executado com êxito. Caso contrário, ele silenciosamente falhar (mas parece ter trabalhado, com a exibição de serviço como começou no brew services list.
Dmitri
1
Eu precisava executar brew services restart postgresql, pois iniciei o db com pg_ctl ou brew services startdisse "outro servidor pode estar em execução" e parei o db com pg_ctl.
tomf
181

Eu tinha quase exatamente o mesmo problema, e você citou o comando initdb como sendo a correção. Essa também foi a solução para mim, mas não vi ninguém postar aqui, então para quem está procurando:

initdb /usr/local/var/postgres -E utf8
Yan
fonte
16
isso funcionou para mim também, o initdb me disse que eu já tinha feito a configuração, então excluí todo o diretório: "rm -rf / usr / local / var / postgres" executou novamente seu comando e meu servidor agora está em funcionamento, muito obrigado senhor!
Jorge Sampayo
5
sim eu tive que correr rm -rf /usr/local/var/postgrese, em seguida, isso funcionou para mim
Lee McAlilly
2
Isso é o que funcionou para mim também. Antes do initdb, eu também tinha que exibir o postgres dir ( chown _your username on your comp_ usr/local/var/postgres) e depois o initdb. Depois disso, o servidor inicia automaticamente quando você reinicia (se você seguiu as instruções do Homebrew para isso) ou manualmente pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start.
Septerr
2
Depois initdb(incluindo a remoção do diretório antigo, se necessário), brew services start postgresqltrabalha
Dmitri
Se a idéia de rm -rftudo o que está atualmente no seu banco de dados o assusta um pouco, em vez de excluí-lo completamente, você pode usar algo como mv /usr/local/var/postgres /usr/local/var/postgres.backupmovê-lo para um novo diretório de backup e executar o comando para iniciar o banco de dados novamente.
21417 Hartley Brody
102

Se o seu computador foi reiniciado abruptamente

Primeiro, você deve excluir o arquivo /usr/local/var/postgres/postmaster.pid Em seguida, você pode reiniciar o serviço usando um dos muitos outros métodos mencionados, dependendo da instalação.

Você pode verificar isso consultando os logs do Postgres para ver o que pode estar acontecendo: tail -f /usr/local/var/postgres/server.log

rafaelportela
fonte
2
Você pode verificar tail -f /usr/local/var/postgres/server.logse deve excluir esse arquivo. ref coderwall.com/p/zf-fww/...
user1448319
O meu estava em / Usuários / <usuário> / Biblioteca / Aplicativo \ Suporte / Postgres / var-9.6 / postmaster.pid
BatteryAcid
para homebrew instala o caminho é~/homebrew/var/postgres/postmaster.pid
blnc 10/17/17 /
2
Uau ... só isso funcionou para mim! Você pode dar uma explicação mais detalhada sobre por que devemos excluir postmaster.pidse o computador foi reiniciado abruptamente?
adkl
1
Este foi realmente útil
Nincompoop
81

Outra abordagem é usar o lunchy gem (um wrapper para o launchctl):

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

Para iniciar o postgres:

lunchy start postgres

Para parar o postgres:

lunchy stop postgres

Para mais informações, consulte: " Como instalar o PostgreSQL em um Mac com Homebrew e Lunchy "

pisaruk
fonte
Dependendo de como você configuração postgres pode ser necessário usar o PostgreSQL em vez de postgres
Devon beijo
72

Aqui estão meus 2 centavos: criei um pseudônimo para o postgres pg_ctl e o coloquei em .bash_profile (minha versão do postgresql é 9.2.4 e o caminho do banco de dados é /Library/PostgreSQL/9.2/data).

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

Lançar novo terminal.

E depois? Você pode iniciar / parar seu servidor postgresql com isso:

postgres.server start
postgres.server stop
Kenial
fonte
Especificar o diretório de dados com -D é a chave aqui
ouve 18/02/14
3
Eu continuava recebendo "Por favor efetue login (usando, por exemplo," su ") como o usuário (sem privilégios) que será o proprietário do processo do servidor." ao executar apenas sudo. +1
pyb
Obrigado. As sugestões das ferramentas do postgres para usar su falham miseravelmente. sudo -u funciona de maneira brilhante. (em El Capitan)
uchuugaka 08/02
33

A maneira mais limpa de longe para iniciar / parar / reiniciar postgres se você instalou-lo através de brewé simplesmente descarregar e / ou carregar o arquivo de configuração launchd que vem com a instalação:

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

A primeira linha irá parar o postgres e a segunda linha irá iniciá-lo. Não há necessidade de especificar nenhum diretório de dados etc., pois tudo está nesse arquivo.

Markus Amalthea Magnuson
fonte
funciona muito bem para o PostgreSQL 9.5.3 instalado no OS X via Brew !! obrigado!
Jspwain
isso funciona como um encanto quando o servidor postgres não é desligado corretamente e não está aceitando conexões de entrada
Augusto Samamé Barrientos
5
O Homebrew em si possui wrappers simples para esses comandos, por exemplo: brew services start postgres(e para). Jogue um -vno final e você pode ver o que está fazendo.
Mark Edington
28

Para iniciar o servidor postgresql:

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

para finalizar o servidor postgresql:

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

Você também pode criar um alias via CLI para facilitar:

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'

Com eles, você pode digitar "pg-start" para iniciar o Postgres e "pg-stop" para desligá-lo.

Todd
fonte
3
Eu tenho erro pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directorycomo corrigir isso?
Rohman Masyhar 5/05
22

Para fins de teste, acho que o PostgreSQL App é a melhor opção!

Execute um aplicativo e o servidor está em funcionamento. Feche o aplicativo e o servidor ficará inoperante.

http://postgresapp.com/

Crystian Leão
fonte
9

quando você instala o postgresql usando o homebrew:

brew install postgres

no final da saída, você verá estes métodos para iniciar o servidor:

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

Eu acho que esse é o melhor caminho.

Você pode adicionar um alias ao seu .profile por conveniência.

jkaluzka
fonte
7

Para um banco de dados de teste descartável rápido, você pode executar o servidor em primeiro plano.

Inicialize um novo banco de dados postgres em um novo diretório

mkdir db
initdb db -E utf8
createdb public

Inicie o servidor em primeiro plano (ctrl-C para parar o servidor)

postgres -d db

Em outra sessão do shell, conecte-se ao servidor

psql -d public
k107
fonte
Isso parece ótimo, mas não funciona para mim - não era o servidor que já estava sendo executado para executar a etapa createdb. Quando tento iniciar o serviço, ele diz que precisa do PGDATA ou do arquivo de configuração, que ainda não existe. o que estou perdendo?
szeitlin 8/09/16
7

Eu tenho o mesmo problema e execute todas as atualizações desde o primeiro post. Mas depois de verificar o arquivo de log:

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

Eu vejo a verdadeira causa:

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

Após alterar a permissão neste diretório

chmod 0700 /usr/local/var/postgres

O servidor postgres foi iniciado.

Sempre verifique o arquivo de log.

Roosh
fonte
5

O PostgreSQL está integrado no Server.app disponível na App Store no Mountain Lion. Isso significa que ele já está configurado e você só precisa iniciá-lo e criar usuários e bancos de dados.

Gorjeta : Não comece definindo $ PGDATA e assim por diante, considere os locais dos arquivos como estão.

Você teria este arquivo: /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

Para iniciar:

sudo serveradmin start postgres

Processo iniciado com argumentos:

/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 = em -c log_directory = / Library / Logs / PostgreSQL -c log_filename = PostgreSQL.log -c log_line_prefix =% t -c log_lock_waits = em -c log_statement = ddl -c logging_collector = em -c unix_socket_directory = / private / var / pgsql_socket -c unix_socket_group =

Você pode sudo:

sudo -u _postgres psql template1

Ou conecte-se:

psql -h localhost -U _postgres postgres

Você pode encontrar o diretório de dados, versão, status de execução e assim por diante com

sudo serveradmin fullstatus postgres  
datamid
fonte
Não foi possível encontrar muito mais que mostrasse como usar o Postgres incorporado. Também me ajudou a encontrar o comando serveradmin. Graças
Jason S
A execução de um serviço como usuário root (sudo) definitivamente não é uma boa ideia, assim que houver um problema de segurança, todo o computador estará comprometido.
Carlos Barcelona
O postgresql não está sendo executado como root, mas como _postgres.
Bbaassssiiee
5

Variação nesta resposta: 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
substancejoy
fonte
Você deve adicionar um link para a resposta a que se refere.
Jeffrey Bosboom 28/02
Isso foi útil, pois minha página estava funcionando bem e, de repente, parou de funcionar e não conseguiu encontrar a pasta / var / postgres.
Shinesecret 14/05
Alguém poderia comentar por que isso é superior à resposta vinculada? Como eu vi, já votei desde a última vez que tive um problema semelhante. Vou usá-lo, já que não há nenhuma razão aqui.
MCB
4

Para fins de desenvolvimento, uma das maneiras mais simples é instalar o Postgres.app no site oficial . Pode ser iniciado / parado na pasta Aplicativos ou usando os seguintes comandos no terminal:

# start
open -a Postgres

# stop
killall Postgres
killall postgres
Melnosta
fonte
18
killallprovavelmente não é a melhor maneira de parar um banco de dados.
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.
zee
fonte
4

Se você instalou usando o brew, o comando abaixo deve ser suficiente.

brew services restart postgresql

E isso às vezes pode não funcionar, nesse caso, abaixo de dois comandos definitivamente devem funcionar

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

pg_ctl -D /usr/local/var/postgres start
shanu khera
fonte
1

nenhuma das respostas acima resolveu o problema para mim, apesar de receber as mesmas mensagens de erro. Consegui colocar minha instância em funcionamento excluindo o arquivo postmaster.pid existente que estava bloqueado e não permitia conexões.

Swedendrift
fonte
1

Para macports, basta usar o comando load / unload e o nome da porta do servidor em execução:

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

para que você não precise se lembrar de onde o /Library/LaunchDaemons/org.macports.postgresql96.plistarquivo está localizado

Steve
fonte
1

Se você instalou o Postgres usando o instalador do EnterpriseDB, o que o @Kenial sugeriu é o caminho a percorrer.

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

que funcionou para mim (macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

ou primeiro cd /Library/PostgreSQL/9.6/bin/

Dmitry Evgrafoov
fonte
1

$ brew upgrade postgres

consertou para mim.

Isso, é claro, atualizará a versão do postgres e atualizará / instalará quaisquer dependências.

AVISO: Faça isso sabendo que sua versão do postgresql provavelmente mudará. Para mim, isso não foi grande coisa.

thedanotto
fonte
0

Isso funcionou para mim todas as vezes, inspirado por Craig Ringer:

brew install proctools
sudo pkill -u postgres

proctools inclui pkill. Se você não tiver o Brew: https://brew.sh/

Punnerud
fonte
0

Há alguns casos extremos que talvez sejam úteis para alguém:

Existe a opção de você ter o postgres.pid preenchido com algum PID. Mas se você reiniciar sua máquina e antes que o postgress volte novamente, algum outro processo executará esse PID. Se isso acontecer, o status pg_ctl e o serviço de distribuição perguntado sobre o status do postgres informarão que ele está ativo. Apenas ps aux | grep e verifique se é realmente postgress

Adam Piotrowski
fonte
0

Homebrew é o caminho !!

Para iniciar o serviço:

brew services start postgresql   

Para listar:

brew services list |grep postgres

para parar o serviço .:

brew services stop postgresql 
Muhammad Dyas Yaskur
fonte
0

Se você não o instalou com o brew e diretamente do pacote mac, isso funcionou para mim no PostgreSQL 12 ao usar todos os locais, variáveis ​​etc.

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

Eu estava enfrentando o mesmo problema. Tentei todas essas soluções, mas nenhuma funcionou.

Finalmente consegui fazê-lo funcionar alterando o HOST do postgres nas configurações do Django de localhostpara127.0.0.1 .

Saúde, se ajudar.

Tazeem
fonte