Erro do PostgreSQL: fatal: a função "nome de usuário" não existe

733

Estou configurando meu PostgreSQL 9.1. Não posso fazer nada com o PostgreSQL: não createdbposso, não posso createuser; todas as operações retornam a mensagem de erro

Fatal: role h9uest does not exist

h9uesté o nome da minha conta e eu sudo apt-get installPostgreSQL 9.1 nesta conta.
Erro semelhante persiste para a rootconta.

h9uest
fonte
1
Depois você pode encontrar FATAL: role "user" is not permitted to log in, verifique dba.stackexchange.com/questions/57723/… para isso.
kqw
19
Eu respondi a esta pergunta aqui . Leia também este tutorial " Como instalar o Postgres para Ubuntu Linux ".
Ruzenhack
@Ruzenhack esse link do tutorial era exatamente o que eu precisava! Muito clara e simples
dwanderson
4
psql -h localhost -U postgres
Metin Atalay
Se você receber o erro role doesn't existeo erro can't create role, it already existsconfira esta resposta: stackoverflow.com/a/56658832/1689770
Jonathan

Respostas:

775

Use o usuário do sistema operacional postgres para criar seu banco de dados - desde que você não tenha configurado uma função de banco de dados com os privilégios necessários que correspondam ao usuário do sistema operacional com o mesmo nome ( h9uestno seu caso):

sudo -u postgres -i

Como recomendado aqui ou aqui .

Então tente novamente. Digite exitquando terminar de operar como usuário do sistema postgres.

Ou execute o comando único createusercomo postgresem sudo, como demonstrado por drees em outra resposta.

O objetivo é usar o usuário do sistema operacional que corresponda à função de banco de dados com o mesmo nome para obter acesso via identautenticação . postgresé o usuário padrão do sistema operacional que inicializou o cluster do banco de dados. O manual:

Para inicializar o sistema de banco de dados, um sistema recém-inicializado sempre contém uma função predefinida. Essa função é sempre um "superusuário" e, por padrão (a menos que seja alterada durante a execução initdb), terá o mesmo nome que o usuário do sistema operacional que inicializou o cluster do banco de dados. Normalmente, esse papel será nomeado postgres. Para criar mais funções, primeiro você precisa se conectar como essa função inicial.

Ouvi falar de configurações ímpares com nomes de usuário não padrão ou onde o usuário do sistema operacional não existe. Você precisaria adaptar sua estratégia lá.

Leia sobre funções de banco de dados e autenticação de cliente no manual.

Erwin Brandstetter
fonte
1
É impossível rodar sudo etccomo usuário postgres ... Como instalar um programa? Veja este problema de instalação do S2geometry .
22818 Peter Krauss
Dependendo da configuração, pode-se simplesmente precisar su postgres.
Fabien Snauwaert 30/07/19
1
sudo -u postgresnão funciona, enquanto sudo -u postgres -ifunciona! O que a -ibandeira faz?
Parsecer 15/11/19
1
@parsecer: Um shell interativo é iniciado, semelhante a su, mas com base nos privilégios do sudo. Veja man sudo.
Erwin Brandstetter
284

Depois de tentar as soluções de muitas outras pessoas, e sem sucesso, essa resposta finalmente me ajudou.

https://stackoverflow.com/a/16974197/2433309

Em suma, executando

sudo -u postgres createuser owning_user

cria uma função com o nome owning_user (neste caso, h9uest). Depois disso, você pode executar a rake db:createpartir do terminal com qualquer nome de conta configurado sem precisar entrar no ambiente do Postgres.

drees
fonte
29
Se você receber um erro "privilégios insuficientes" depois disso, poderá acrescentar o sinalizador -s ao comando acima. Isso criará seu novo usuário como superusuário. Esteja ciente das implicações de segurança disso, caso você decida fazer isso.
sarink
1
Estou recebendo "privilégios insuficientes", mas agora recebo o erro: roll "nome de usuário" já existe.
Wylliam Judd 17/08/19
4
@ConnorLeech Você pode substituir 'postgres' pelo nome do seu superusuário PG. No meu caso, era o meu nome.
myfashionhub
1
Eu também tive que usar -s, e não precisava usar sudo -u postgres( createuser new_userfuncionou bem) #
Meekohi
2
psql: FATAL: role "jonny" does not existok então sudo -u postgres -s createuser jonnyentão por que createuser: creation of new role failed: ERROR: role "jonny" already exists
Jonathan
134
sudo su - postgres

psql template1

criando função no pgsql com privilégio de "superusuário"

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

Então crie usuário

CREATE USER username; 
eg. CREATE USER demo;

Atribuir privilégio ao usuário

GRANT ROOT TO username;

E, em seguida, ative o login desse usuário, para que você possa executar, por exemplo psql template1:, do $terminal normal :

ALTER ROLE username WITH LOGIN;
Mohammed Saleem
fonte
4
Eu apenas fiz uma nova instalação do PostgreSQL 9.4.4 e foi capaz de usar o acompanhamento para criar um novo superusuário: CREATE ROLE username superuser createdb login; que combina todas as três etapas ...
iPad Guy
25
# CONCEDE A RAIZ PARA MIM; ERRO: o papel "root" não existe
shacker
6
versão mais simples: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela
2
@shacker#GRANT postgres TO username
7kemZmani
Estou usando o root para iniciar o servidor e, em seguida, `` `psql -U postgres -h 127.0.0.1 --command" CREATE USUÁRIO postgresondocker WITH SUPERUSER PASSWORD 'postgresondocker'; " && \ createdb -O postgresondocker postgresondocker`` posso usar o root para fazer isso se o adicionar ao pg_ident?
Shivangi Singh
85

A instalação do postgres usando apt-getnão cria uma função de usuário ou um banco de dados.

Para criar uma função de superusuário e um banco de dados para sua conta de usuário pessoal:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)

Miles Erickson
fonte
1
I necessário para executar a segunda parte como:sudo -u postgres createdb $(whoami)
Areia
2
@ SanD Se você criou sua própria conta de usuário como superusuário (através da -sbandeira no primeiro comando), você pode criar o banco de dados como você. Você não precisará executar createdbcomo postgres.
Miles Erickson
2
Ótima resposta! Me salvou horas de depuração !!
Aminu Kano
79

Isso funciona para mim:

psql -h localhost -U postgres
mateusz.szymborski
fonte
adicione a senha para o usuário acima.
Chaudhry Waqas 30/10
1
@Vincent Se a senha nunca foi alterada após a instalação do PostgreSQL, por padrão ela é postgres(testada no Linux e Windows).
21919 silvioprog
1
role postgres does not exist
Jacob Schneider
15

Método de trabalho,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer aqui alterar pares de confiança
  3. reiniciar, sudo service postgresql restart

  4. agora tente, psql -U postgres

Mohideen bin Mohammed
fonte
1
Deveria ser óbvio que o trustmétodo só é aconselhável em um ambiente completamente seguro. Embora o acesso a partir de conexões não confiáveis ​​seja possível, nunca exponha seu cluster de banco de dados dessa maneira.
Erwin Brandstetter
este é bom
horoyoi o 26/12/12
Verificação: se o serviço postgresql não for iniciado, é possível que ocorra algum erro no arquivopg_hba.conf
Walk
11

Para a versão Postgres 9.5, use o seguinte comando:

psql -h localhost -U postgres

Espero que isso ajude.

Kalyan Halder Raaz
fonte
11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;
Abel
fonte
4
psql postgresresultados:psql: FATAL: role "root" does not exist
TomSawyer
2
psql postgres -U postgres? Depende do usuário (-U) que você possui.
Meadowlark Bradsher 28/01
obrigado! Eu lutei como fazer backup do postgresql com o root, pois não sei a senha do postgres
Dika
7

No prompt do usuário local, não no prompt do usuário raiz, digite

sudo -u postgres createuser <local username>

Em seguida, digite a senha do usuário local.

Em seguida, insira o comando anterior que gerou "a função 'nome de usuário' não existe".

As etapas acima resolveram o problema para mim. Caso contrário, envie mensagens do terminal para as etapas acima.

Robert Cambil
fonte
3

A criação manual de um cluster de banco de dados resolveu-o no meu caso.

Por alguma razão, quando instalei o postgres, o "banco de dados inicial" não foi criado. A execução initdbfez o truque para mim.

Esta solução é fornecida no Wiki do PostgreSQL - Primeiros passos :

initdb

Normalmente, a instalação do postgres no seu sistema operacional cria um "banco de dados inicial" e inicia a execução do daemon do servidor postgres. Caso contrário, você precisará executar o initdb

Natacha
fonte
2

Para usuários do Windows :psql -U postgres

Você deve ver a interface da linha de comandos para o PostgreSQL: postgres=#

Andriy Tolstoy
fonte
0

Siga estas etapas e funcionará para você:

  1. corre msfconsole
  2. tipo db_console
  3. algumas informações serão mostradas para você escolher as informações que você deve fazer: db_connect user:pass@host:port.../databasedesculpe, eu não me lembro, mas é como essa, substitua o usuário e a senha, o host e o banco de dados pelas informações incluídas no database.ymllocal :/usr/share/metasploit-framework/config
  4. você verá. reconstruindo o cache do modelo em segundo plano.
  5. Digite apt-get update && apt-get upgrade após a atualização, reinicie o terminal e almoço msfconsole e funciona: você pode verificar se, digitando msfconsole: msf>db_status, verá que está conectado.
Loli Pronoms
fonte
0

despejar e restaurar com --no-owner --no-privilegessinalizadores

por exemplo

despejo - pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

restore - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

srghma
fonte