Createuser: não foi possível conectar ao banco de dados postgres: FATAL: o papel “tom” não existe

90

Estou tentando configurar o Postgres pela primeira vez e preciso criar um usuário com permissões para ler e criar bancos de dados. No entanto, quando eu uso:

createuser username

no meu terminal, recebo a seguinte mensagem:

createuser: não foi possível conectar ao banco de dados postgres: FATAL: o papel "tom" não existe

Tom é a minha conta de usuário do Ubuntu na qual estou conectado agora. Estou tentando criar um nome de usuário "postgres" e fazer um psql -U psql template1para que eu possa criar um banco de dados e atribuir um proprietário a ele para meu aplicativo Rails.

Tom Maxwell
fonte
Você está realmente tentando criar um usuário 'postgres'? Ou apenas um usuário para seu aplicativo Rails? Normalmente o usuário 'postgres' já existe e o problema é apenas conectar-se a ele para fazer o que você precisa.
ostergaard

Respostas:

129

Você mencionou o Ubuntu, então suponho que você instalou os pacotes PostgreSQL do Ubuntu através do apt.

Nesse caso, a postgresconta do usuário PostgreSQL já existe e está configurada para ser acessível por meio de peerautenticação para sockets unix em pg_hba.conf. Você consegue isso executando comandos como o postgresusuário unix, por exemplo:

sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

Tudo isso está na documentação do Ubuntu PostgreSQL , que é o primeiro hit do Google para "Ubuntu PostgreSQL" e é abordada em várias perguntas sobre Stack Overflow.

(Você tornou esta pergunta muito mais difícil de responder, omitindo detalhes como o sistema operacional e a versão em que está, como instalou o PostgreSQL, etc.)

Craig Ringer
fonte
bem depois de criar owning_user, como você se conecta com este usuário? Quero dizer para conectar o usuário padrão que eu uso, sudo -u postgres psql postgres. mesma forma como conectar owning_user?
Jony,
2
Três opções. (a) Defina uma senha para esse usuário e edite pg_hba.confpara usar a md5autenticação desse usuário (consulte o manual); (b) Criar um usuário do sistema operacional com o mesmo nome e continuar usando peerauth; ou (c) mais avançado, crie um pg_ident.confmapeamento para permitir que o usuário do sistema operacional efetue login como o novo usuário.
Craig Ringer,
66

Veja git gist com instruções aqui

Rode isto:

 sudo -u postgres psql

OU

psql -U postgres

no seu terminal para entrar no postgres

NB: se você estiver em um Mac e ambos os comandos acima falharem, vá para a seção sobre Mac abaixo

postgres=#

Corre

CREATE USER new_username;

Nota: Substitua new_username pelo usuário que você deseja criar, no seu caso será tom.

postgres=# CREATE USER new_username;
CREATE ROLE

Já que você deseja que o usuário seja capaz de criar um banco de dados, você precisa alterar a função para superusuário

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

Para confirmar, tudo deu certo,

postgres=# \du
                         List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
new_username     | Superuser, Create DB                           | {}
postgres         | Superuser, Create role, Create DB, Replication | {}
root             | Superuser, Create role, Create DB              | {}

postgres=# 

Atualização / modificação (para Mac):

Recentemente, encontrei um erro semelhante no meu Mac:

psql: FATAL: role "postgres" does not exist

Isso ocorreu porque minha instalação foi configurada com um superusuário do banco de dados cujo nome de função é igual ao seu nome de login (abreviado).

Mas alguns scripts do Linux assumem que o superusuário tem o nome de função tradicional de postgres

Como resolvi isso?

Se você instalou com homebrewrun:

/usr/local/opt/postgres/bin/createuser -s postgres

Se você estiver usando uma versão específica do postgres, diga 10.5e execute:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

OU:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

OU:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

Se você instalou com postgres.apppara Mac, execute:

/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres

PS: substitua 10.5 pela sua versão PostgreSQL

user3402754
fonte
Isso funcionou para entrar no postgres:psql -U postgres
leontalbot
29
sudo -u postgres createuser -s tom 

isso deve ajudá-lo, pois isso acontecerá se o administrador não tiver criado uma conta de usuário do PostgreSQL para você. Também pode ser que você tenha atribuído um nome de usuário PostgreSQL diferente do nome de usuário do sistema operacional; nesse caso, você precisa usar a opção -U.

Tanmay
fonte
7

1- Faça login como usuário PostgreSQL padrão (postgres)

sudo -u postgres -i

2- Como usuário postgres. Adicione um novo usuário do banco de dados usando o createusercomando

[postgres]$ createuser --interactive

3 saídas

[postgres]$ exit
Saman Mohamadi
fonte
5

Seu erro está postado na documentação oficial. Você pode ler este artigo .

Copiei o motivo para você (e criei um hiperlink para os URLs) desse artigo:

Isso acontecerá se o administrador não tiver criado uma conta de usuário do PostgreSQL para você. (As contas de usuário do PostgreSQL são diferentes das contas de usuário do sistema operacional.) Se você for o administrador, consulte o Capítulo 20 para obter ajuda na criação de contas. Você precisará se tornar o usuário do sistema operacional no qual o PostgreSQL foi instalado (geralmente postgres) para criar a primeira conta de usuário. Também pode ser que você tenha recebido um nome de usuário do PostgreSQL diferente do nome de usuário do sistema operacional; nesse caso, você precisa usar a opção -U ou definir a variável de ambiente PGUSER para especificar seu nome de usuário PostgreSQL

Para seus propósitos, você pode fazer:

1) Crie uma conta de usuário PostgreSQL:

sudo -u postgres createuser tom -d -P

(a -Popção de definir uma senha; a -dopção de permitir a criação de um banco de dados para seu nome de usuário 'tom'. Observe que 'tom' é o nome de usuário do seu sistema operacional. Dessa forma, você pode executar comandos PostgreSQL sem precisar sudo.)

2) Agora você deve ser capaz de executar createdbe outros comandos PostgreSQL.

Rocky Inde
fonte
1

Eu tive o mesmo problema, acabei de fazer isso

sudo su - postgres

createuser odoo -U postgres -dRSP #P para senha ( odoo ou nome de usuário que você deseja dar acesso ao postgres)

Sagar T
fonte
-4

Você precisa primeiro executar o initdb. Ele criará o cluster de banco de dados e a configuração inicial

Veja Como configurar o postgresql pela primeira vez? e http://www.postgresql.org/docs/8.4/static/app-initdb.html

Jean-Marie
fonte
5
Isso é completamente incorreto. Se o usuário não tivesse executado initdb, não teria um servidor de banco de dados funcionando e aceitando conexões para produzir a mensagem de erro relatada. Remova esta resposta enganosa. (A propósito, no futuro, acesse / docs / current / static / para evitar o acúmulo de links obsoletos)
Craig Ringer