O usuário Postgres não existe?

90

Acabei de instalar o Postgres e estou mexendo nele e em várias configurações por 1-2 horas.

Estou preso por não conseguir mudar para o postgres-user

$ su - postgres produz o seguinte erro: su: unknown login: postgres

$ sudo -u postgres psql produz o seguinte erro: sudo: unknown user: postgres

Essas tentativas são feitas como o usuário normal. Tentá-los como root tem exatamente os mesmos resultados. Eu instalei o postgres via Homebrew no OS X e li as instruções várias vezes.

krystah
fonte
Você está apenas tentando executar o psql?
danielM
Bem, sim, quero executar como o postgresusuário adequado .
krystah
Em alguns tipos de Mac OS X, com alguns métodos de instalação, acho que o usuário é criado como postgres_. Observe o sublinhado final. Além disso, tem certeza de que você (ou o instalador) realmente criou a instância do PostgreSQL e iniciou o banco de dados?
Craig Ringer de
1
Não consegui mudar para o postgresusuário. Resolvido o problema após instalar o postgresql-serverpacote.
sergio

Respostas:

90

psql: Faz o login com meu nome de usuário padrão

psql -U postgres: Faz o meu login como o usuário postgres

Sudo não parece ser necessário para mim.

Eu uso Postgres.app para meu banco de dados OS X postgres. Ele removeu a dor de cabeça de ter certeza de que a instalação estava funcionando e que o servidor de banco de dados foi iniciado corretamente. Confira aqui: http://postgresapp.com

Edit: Crédito para @Erwin Brandstetter por corrigir meu uso dos argumentos.

danielM
fonte
8
Eu instalei usando o Brew e ele não criou um usuário chamado postgres ou _postgres (até onde posso ver), então isso falhou para mim. A solução @kangkyu explica e orienta você através dos problemas - supondo que você não tenha um usuário postgres, então: psql postgrese psql -d postgres.
notapatch de
21

Por psql --help, quando você não definiu opções para o nome do banco de dados (sem -dopção), seria o seu nome de usuário, se você não fez-U , o nome de usuário do banco de dados seria o seu nome de usuário também, etc.

Mas por initdb(para criar o primeiro banco de dados) o comando não tem seu nome de usuário como qualquer nome de banco de dados. Ele tem um banco de dados chamado postgres. O primeiro banco de dados é sempre criado pelo comando initdb quando a área de armazenamento de dados é inicializada. Este banco de dados é denominado postgres.

Portanto, se você não tiver outro banco de dados chamado seu nome de usuário, será necessário fazer psql -d postgrespara que o comando psql funcione. E parece que dá -dopção por padrão, psql postgrestambém funciona.

Se você criou outro nome de banco de dados igual ao seu nome de usuário (deve ser feito com createdb), então você pode psqlapenas comandar . E parece que o primeiro nome de usuário do banco de dados é definido como seu nome de usuário da máquina pelo brew.

psql -d <first database name> -U <first database user name>

ou,

psql -d postgres -U <your machine username>
psql -d postgres

funcionaria por padrão.

kangkyu
fonte
18

OS X tende a prefixar os nomes das contas do sistema com "_"; você não diz qual versão do OS X está usando, mas pelo menos no 10.8 e 10.9 o usuário _postgres existe em uma instalação padrão. Observe que você não poderá acessar suesta conta (exceto como root), pois ela não possui uma senha. sudo -u _postgres, por outro lado, deve funcionar bem.

Gordon Davisson
fonte
Obrigado! Esta é a resposta que eu procurava. Há algo que eu possa fazer para renomear o usuário apenas para "postgres"? Conectar-se como esse usuário _postgres leva o psql a reclamar que o usuário "_postgres" não existe. Estou tentando restaurar uma instância limpa do postgres com um arquivo de backup de outro banco de dados
Chris Reyes - he-him
1
@ChrisReyes Alterar o nome das contas do sistema pode corromper os componentes do sistema que as utilizam, portanto, não recomendo fortemente. Você poderia criar outra conta de usuário com o nome "postgres" e usar isso, mas se eu entendi direito (o que talvez não seja), o que você está descobrindo é que a conta de usuário no banco de dados postgres não se chama _postgres. AIUI, os nomes das contas dentro do banco de dados são separados dos nomes das contas do sistema, portanto, não deve haver problemas ao executar uma instância do banco de dados na conta do sistema "_postgres" e ao abrir esse banco de dados com a conta do banco de dados "postgres".
Gordon Davisson
3
psql -U postgres

Funcionou bem para mim no caso do nome do banco de dados: postgres e nome de usuário: postgres. Portanto, você não precisa escrever sudo.

E no caso de outro banco de dados, você pode tentar

psql -U yourdb postgres

Como é fornecido na ajuda do Postgres:

psql [OPTION]... [DBNAME [USERNAME]]
amora silvestre
fonte
Meu caso: $ psql -U postgresgera saída psql: FATAL: role "postgres" does not exist, mas psql postgresfunciona.
Frozen Flame
3

Recebo exatamente os mesmos erros que kryshah com su - postgrese sudo -u postgres psql. A resposta de DanielM também fornece erros.

Saídas quando configurações erradas

No entanto, responda ao comentário de przbabu.

masi$ psql
psql: FATAL:  database "masi" does not exist
masi$ psql -U postgres
psql: FATAL:  role "postgres" does not exist
masi$ psql postgres
psql (9.4.1)
Type "help" for help.

Acho que parte desse problema pode estar nas configurações do proprietário no OSX

masi$ ls -al /Users/
total 0
drwxr-xr-x   7 root      admin  238 Jul  3 09:50 .
drwxr-xr-x  37 root      wheel 1326 Jul  2 19:02 ..
-rw-r--r--   1 root      wheel    0 Sep 10  2014 .localized
drwxrwxrwt   7 root      wheel  238 Apr  9 19:49 Shared
drwxr-xr-x   2 root      admin   68 Jul  3 09:50 postgres
drwxr-xr-x+ 71 masi      staff 2414 Jul  3 09:50 masi

mas fazer sudo chown -R postgres:staff /Users/postgreschown: invalid user: ‘postgres:staff’.

Em suma, esta não é a solução do problema. Use as ferramentas fornecidas pela instalação do postgres para criar um usuário e banco de dados.

Para obter as configurações e saídas corretas

Existem comandos específicos após a instalação do postgres para adicionar um novo usuário ao sistema de banco de dados. Após o initdb, execute o seguinte conforme descrito aqui

createuser --pwprompt postgres
createdb -Opostgres -Eutf8 masi_development
psql -U postgres -W masi_development

Para evitar a solicitação de senha o tempo todo, você tem três opções, conforme descrito aqui .

Léo Léopold Hertz 준영
fonte
1

Para mim, essa foi a solução no macOS Reinstale o psql

brew install postgres

Inicie o servidor PostgreSQL

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

Inicializar DB

initdb /usr/local/var/postgres

Se este comando gerar um erro, rm o arquivo de banco de dados antigo e execute novamente o comando acima

rm -r /usr/local/var/postgres

Crie um novo banco de dados

createdb postgres_test
psql -W postegres_test

Você estará logado neste banco de dados e pode criar um usuário aqui para fazer o login

Adnan Fayaz
fonte
0

A solução é simples:
faça login como root
e depois:

su - postgres

psql
el fuser
fonte