Createuser: no se pudo conectar a la base de datos postgres: FATAL: el rol "tom" no existe

92

Estoy tratando de configurar Postgres por primera vez y necesito crear un usuario con permisos para leer y crear bases de datos. Sin embargo, cuando uso:

createuser username

en mi terminal recibo el siguiente mensaje:

createuser: no se pudo conectar a la base de datos postgres: FATAL: el rol "tom" no existe

Tom es mi cuenta de usuario de Ubuntu en la que he iniciado sesión en este momento. Estoy tratando de crear un nombre de usuario de "postgres" y luego hacerlo psql -U psql template1para poder crear una base de datos y asignarle un propietario para mi aplicación Rails.

Tom Maxwell
fuente
¿Realmente estás intentando crear un usuario 'postgres'? ¿O simplemente un usuario de su aplicación Rails? Normalmente, el usuario 'postgres' ya existe y el problema es simplemente conectarse a él para hacer lo que necesita.
ostergaard

Respuestas:

132

Mencionaste Ubuntu, así que supongo que instalaste los paquetes PostgreSQL desde Ubuntu a través de apt.

Si es así, la postgrescuenta de usuario de PostgreSQL ya existe y está configurada para ser accesible mediante peerautenticación para sockets Unix en pg_hba.conf. Se llega ejecutando comandos como postgresusuario de Unix, por ejemplo:

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

Todo esto está en la documentación de Ubuntu PostgreSQL que es el primer éxito de Google para "Ubuntu PostgreSQL" y está cubierto en numerosas preguntas de Stack Overflow.

(Ha hecho que esta pregunta sea mucho más difícil de responder al omitir detalles como el sistema operativo y la versión en la que se encuentra, cómo instaló PostgreSQL, etc.)

Craig Ringer
fuente
bien después de crear owning_user, ¿cómo se conecta con este usuario? Me refiero a conectar el usuario predeterminado que uso, sudo -u postgres psql postgres. de la misma manera cómo conectar owning_user?
Jony
2
Tres opciones. (a) Establezca una contraseña para ese usuario y edítela pg_hba.confpara usar la md5autenticación para ese usuario (consulte el manual); (b) Crear un usuario de SO con el mismo nombre y seguir usando peerauth; o (c) más avanzado, cree una pg_ident.confasignación para permitir que el usuario de su sistema operativo inicie sesión como el nuevo usuario.
Craig Ringer
66

Vea git gist con instrucciones aquí

Ejecuta esto:

 sudo -u postgres psql

O

psql -U postgres

en tu terminal para entrar en postgres

NB: Si está en una Mac y ambos comandos anteriores fallaron, vaya a la sección sobre Mac a continuación

postgres=#

correr

CREATE USER new_username;

Nota: Reemplace new_username con el usuario que desea crear, en su caso, será tom.

postgres=# CREATE USER new_username;
CREATE ROLE

Dado que desea que ese usuario pueda crear una base de datos, debe modificar el rol a superusuario

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

Para confirmar, todo fue exitoso,

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=# 

Actualización / Modificación (para Mac):

Recientemente encontré un error similar en mi Mac:

psql: FATAL: role "postgres" does not exist

Esto se debió a que mi instalación se configuró con un superusuario de base de datos cuyo nombre de función es el mismo que su nombre de inicio de sesión (corto).

Pero algunos scripts de Linux asumen que el superusuario tiene el nombre de rol tradicional de postgres

¿Cómo resolví esto?

Si instaló con homebrewejecutar:

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

Si está utilizando una versión específica de postgres, diga y 10.5luego ejecute:

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

O:

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

O:

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

Si instaló con postgres.apppara Mac, ejecute:

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

PD: reemplace 10.5 con su versión de PostgreSQL

user3402754
fuente
Esto funcionó para entrar en postgres:psql -U postgres
leontalbot
29
sudo -u postgres createuser -s tom 

esto debería ayudarlo, ya que esto sucederá si el administrador no ha creado una cuenta de usuario de PostgreSQL para usted. También podría ser que se le haya asignado un nombre de usuario de PostgreSQL que sea diferente al nombre de usuario de su sistema operativo, en ese caso necesita usar el modificador -U.

Tanmay
fuente
7

1- Inicie sesión como usuario de PostgreSQL predeterminado (postgres)

sudo -u postgres -i

2- Como usuario de postgres. Agregue un nuevo usuario de base de datos usando el createusercomando

[postgres]$ createuser --interactive

3 salidas

[postgres]$ exit
Saman Mohamadi
fuente
5

Su error está publicado en la documentación oficial. Puedes leer este artículo .

He copiado el motivo por usted (e hipervínculo las URL) de ese artículo:

Esto sucederá si el administrador no ha creado una cuenta de usuario de PostgreSQL para usted. (Las cuentas de usuario de PostgreSQL son distintas de las cuentas de usuario del sistema operativo). Si usted es el administrador, consulte el Capítulo 20 para obtener ayuda sobre cómo crear cuentas. Deberá convertirse en el usuario del sistema operativo con el que se instaló PostgreSQL (generalmente postgres) para crear la primera cuenta de usuario. También podría ser que se le haya asignado un nombre de usuario de PostgreSQL que sea diferente al nombre de usuario de su sistema operativo; en ese caso, debe usar el conmutador -U o configurar la variable de entorno PGUSER para especificar su nombre de usuario de PostgreSQL

Para sus propósitos, puede hacer:

1) Cree una cuenta de usuario de PostgreSQL:

sudo -u postgres createuser tom -d -P

(la -Popción para establecer una contraseña; la -dopción para permitir la creación de una base de datos para su nombre de usuario 'tom'. Tenga en cuenta que 'tom' es el nombre de usuario de su sistema operativo. De esa manera, puede ejecutar comandos de PostgreSQL sin sudoing.)

2) Ahora debería poder ejecutar createdby otros comandos de PostgreSQL.

Rocky Inde
fuente
1

Tuve el mismo problema, solo hago esto

sudo su - postgres

createuser odoo -U postgres -dRSP #P para contraseña ( odoo o nombre de usuario que desee o otorgue acceso a postgres)

Sagar T
fuente
0

Si no desea cambiar el método de autenticación (ident) y meterse con pg_hba.conf, use esto:

Primero inicie sesión como usuario predeterminado

 sudo su - posgres

luego acceda a psql y cree un usuario con el mismo nombre que el que está ingresando

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

puede verificar su usuario con los roles correspondientes con

postgres=#  \du

Después de esto, puede crear su base de datos y verificarla con

psql -d dbName
\l
\q
Eduardo Hernández
fuente
-4

Primero debe ejecutar initdb. Creará el clúster de la base de datos y la configuración inicial

Consulte ¿Cómo configurar postgresql por primera vez? y http://www.postgresql.org/docs/8.4/static/app-initdb.html

Jean-Marie
fuente
5
Esto es completamente incorrecto. Si el usuario no initdbse hubiera ejecutado , no tendría un servidor de base de datos ejecutándose y aceptando conexiones para producir el mensaje de error informado. Elimine esta respuesta engañosa. (Por cierto, en el futuro, enlace a / docs / current / static / para evitar la acumulación de enlaces obsoletos)
Craig Ringer