psql: FATAL: el rol "postgres" no existe


406

Soy un novato postgres.

Instalé el postgres.app para mac. Estaba jugando con los comandos psql y accidentalmente solté la base de datos de postgres. No sé lo que había dentro.

Actualmente estoy trabajando en un tutorial: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

Y estoy atrapado en sudo -u postgres psql postgres

MENSAJE DE ERROR: psql: FATAL: role "postgres" does not exist

$ que psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

Esto es lo que se imprime de psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

¿Cuáles son los pasos que debo seguir? ¿Eliminar todo lo relacionado con psql y reinstalar todo?

¡Gracias por la ayuda chicos!


1
Reinicio de la computadora. Asegura que Launchd from brew services start postresqlse ejecute.
Michael Dimmitt

Respuestas:


411

NOTA: Si instaló postgres usando homebrew, vea el comentario de @ user3402754 a continuación.

Tenga en cuenta que el mensaje de error NO habla de una base de datos faltante, sino de un rol faltante. Más adelante en el proceso de inicio de sesión, también podría tropezar con la base de datos que falta.

Pero el primer paso es verificar el rol que falta: ¿Cuál es el resultado dentro psqldel comando \du? En mi sistema Ubuntu, la línea relevante se ve así:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

Si no hay al menos un rol con superuser, entonces tiene un problema :-)

Si hay uno, puede usarlo para iniciar sesión. Y mirando el resultado de su \lcomando: los permisos para userlas bases de datos template0y template1son los mismos que en mi sistema Ubuntu para el superusuario postgres. Así que creo que su configuración de usos simplesuser como superusuario. Entonces puede probar este comando para iniciar sesión:

sudo -u user psql user

Si user realmente es el superusuario de DB, puede crear otro superusuario de DB y una base de datos privada y vacía para él:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

Pero como su configuración de postgres.app no ​​parece hacer esto, tampoco debería hacerlo. Simple adaptar el tutorial.


10
Para mí, el usuario no se estaba creando; esto funcionó, en cambio, CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; estoy usando postgres v10.
arcseldon el

232
Si instaló Postgres desde homebrewentonces, debe ejecutarlo /usr/local/opt/postgres/bin/createuser -s postgresen su terminal
usuario3402754

8
Tuve que correr/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782

1
@ user1807782 Me salvaste el día; Creo que deberías anunciar esto como respuesta.
Tolga

1
Si está utilizando una versión específica de postgres, entonces debe incluir la versión en la ruta -/usr/local/opt/postgresql@11/bin/createuser -s postgres
Digitrance

264

La clave es "instalé el postgres.app para mac". Esta aplicación configura la instalación local de PostgreSQL con un superusuario de base de datos cuyo nombre de rol es el mismo que su nombre de usuario (corto).

Cuando Postgres.app se inicia por primera vez, crea la base de datos $ USER, que es la base de datos predeterminada para psql cuando no se especifica ninguno. El usuario predeterminado es $ USER, sin contraseña.

Algunas secuencias de comandos (por ejemplo, una copia de seguridad de la base de datos creada con pgdumpun sistema Linux) y los tutoriales supondrán que el superusuario tiene el nombre de rol tradicional postgres.

Puede hacer que su instalación local se vea un poco más tradicional y evitar estos problemas haciendo una vez:

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

lo que hará que esos FATAL: el rol "postgres" no exista desaparezca.


119
Si está utilizando postgres de Homebrew, entonces quiere /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(para la versión 9.2.4, obviamente).
Roger Lipscombe

1
Para postgres.app 9.3, parecen haber reorganizado los directorios. Intenté: /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres, pero esto generó el mismo mensaje de error: "createuser: no se pudo conectar a la base de datos postgres: FATAL: el rol" postgres "no existe "
Michael Coxon

77
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgresfuncionó correctamente para mí
cjspurgeon

99
@RogerLipscombe si ejecuta brew link postgresqldespués de la instalación, no hay necesidad de agregar todo el camino createuser, un simple createuser -s postgresfuncionará muy bien
AlessioX

2
createuser -s postgrestrabajó para mi. Instalé postgres con Homebrew
biniam

228

Para Mac:

  1. Instalar Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgreso /usr/local/opt/postgres/bin/createuser -s postgresque solo usará la última versión.
  5. iniciar el servidor postgres manualmente: pg_ctl -D /usr/local/var/postgres start

Para iniciar el servidor al inicio

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Ahora está configurado, inicie sesión usando psql -U postgres -h localhosto use PgAdmin para GUI.

Por defecto, el usuario postgresno tendrá ninguna contraseña de inicio de sesión.

Consulte este sitio para obtener más artículos como este: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7


3
Con la instalación más reciente de cerveza, puede hacer brew services start postgresqlpara iniciar postgres
Automatico

<3 <3 <3 <3 <3 <3
Adeel Ahmad

esta es la mejor respuesta
Alejandro Pablo Tkachuk

39
createuser postgres --interactive

o hacer un superusuario postgresl solo con

createuser postgres -s


Encontré esta respuesta útil cuando mi pgadmin siguió preguntando por el usuario de postgres y, para empezar, no tengo el rol de postgres, este comando lo creó, ¡agregué el pw autogenerado en mi pgadmin y resolví el problema!
habitual el

Esto funciona para mí ... pero de esta manera: "crear postgres de usuario"
Roberto Rodriguez

31

Esto sucede cuando se ejecuta initdbcon un usuario cuyo ID no es postgres, sin especificar el postgresnombre de usuario con --username=postgreso -U postgres.

El clúster de la base de datos se crea con la cuenta de usuario del sistema que utilizó para ejecutar initdb, y se le otorgan permisos de superusuario.

Para solucionarlo, simplemente cree un nuevo usuario nombrado postgrescon la opción --superuserusando la createuserutilidad que viene con Postgres. La utilidad se puede encontrar en el bindirectorio de Postgres . p.ej

createuser --superuser postgres

Si tiene un nombre de host o puerto personalizado, asegúrese de configurar las opciones apropiadas .

No olvide eliminar la otra cuenta de usuario que initdb creó para usted.


2
Esta es la respuesta más informativa.
MyWrathAcademia


16

Necesitaba desarmar $PGUSER:

$ unset PGUSER
$ createuser -s postgres

1
oh hombre, finalmente entendí cuál era el problema. Resulta que estás intentando crear postgres de usuario como postgres de usuario
Taras Matsyk

14

Primero necesitas crear un usuario:

sudo -u postgres createuser --superuser $USER

Después de crear una base de datos:

sudo -u postgres createdb $USER

Cambie $USER a su nombre de usuario del sistema.

Puedes ver la solución completa aquí .


8

Ejecutar esto en la línea de comando debería solucionarlo

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>


1
Esto es lo único que funcionó para mí. ¡Gracias!
Herb Meehan

4

Dejar caer la postgresbase de datos realmente no importa. Esta base de datos está inicialmente vacía y su propósito es simplemente que el postgresusuario tenga una especie de "hogar" para conectarse, en caso de necesitarla.

Aún así, puede recrearlo con el comando SQL CREATE DATABASE postgres;

Tenga en cuenta que el tutorial mencionado en la pregunta no está escrito teniendo postgres.appen cuenta. Contrariamente a PostgreSQL para Unix en general, postgres.appintenta parecer una aplicación normal en lugar de un servicio que sería ejecutado por un postgresusuario dedicado que tiene privilegios diferentes a los de su usuario normal. postgres.appes administrado y administrado por su propia cuenta.

Entonces, en lugar de este comando:, sudo -u postgres psql -U postgressería más en el espíritu de postgres.app simplemente emitir:, psqlque se conecta automáticamente a una base de datos que coincide con el nombre de sus usuarios, y con una cuenta db del mismo nombre que resulta ser superusuario, por lo que Puede hacer cualquier cosa con respecto a los permisos.


Bueno. Pero, ¿por qué recibo un error ERROR: cannot drop the currently open databasecuando intento eliminar el usuario db? Entonces, ¿no es una buena práctica usar este postgres.app?
user805981

No puede soltar un db mientras está conectado a él. ¿por qué quieres eliminarlo, de todos modos? Está aquí para su conveniencia.
Daniel Vérité

Solo quería ver si podía. Entonces, ¿es como una base de datos predeterminada correcta cuando inicio mi psql y postgres.app? ¿Qué pasa con los privilegios de acceso? ¿Ya no puedo configurarlos? Veo que template0 y template1 tienen privilegios de acceso
usuario805981

@ user805981 Postgres.appes para fines de prueba y desarrollo; es un paquete PostgreSQL de Heroku diseñado para facilitar a los usuarios de Mac que desarrollan con Ruby on Rails probar con PostgreSQL en lugar del SQLite predeterminado. Los usos de Rails tienden a probar con SQLite y a implementarse en PostgreSQL, lo que causó todo tipo de problemas, por lo que Heroku también intentó facilitar la prueba en PostgreSQL. Postgres.appestá bien para las pruebas, pero no consideraría usarlo para producción o datos reales, eso no es para lo que sirve.
Craig Ringer

4

Por lo que vale, tengo ubuntu y muchos paquetes instalados y entró en conflicto con él.

Para mí la respuesta correcta fue:

sudo -i -u postgres-xc
psql

2

Este es el único que me lo arregló:

createuser -s -U $USER

2
Esto convierte al usuario actual en un superusuario del sistema en lugar de solo un superusuario de postgres. Yo diría que esto sería generalmente una mala idea, ya que elude las políticas de seguridad habituales. Debe usar el usuario sudopara obtener privilegios temporales de superusuario.
Sean Dawson

1

En el sistema Ubuntu, purgué el PostgreSQL y lo reinstalé. Se restauran todas las bases de datos. Esto resolvió mi problema.

Consejo: tome la copia de seguridad de las bases de datos para estar más seguro.


0

No creo que se necesite sudo aquí porque psql -l devuelve una lista de bases de datos. Esto me dice que initdb se ejecutó con el usuario actual del usuario, no con el usuario de postgres.

Tu puedes sólo:

psql

Y continúa el tutorial.

Sugeriría los puntos generales de AH de crear el usuario de postgres y db porque muchas aplicaciones pueden esperar que esto exista.

Una breve explicación:

PostgreSQL no se ejecutará con acceso administrativo al sistema operativo. En su lugar, se ejecuta con un usuario común y, para admitir la autenticación entre pares (preguntando al sistema operativo quién está intentando conectarse), crea un usuario y una base de datos con el usuario que ejecuta el proceso de inicialización. En este caso era tu usuario normal.


aclara pocas distinciones importantes en postgres. Gracias.
imsrgadich

0

Me quedé atrapado en este problema después de haberlo ejecutado brew services stop postgresqlel día anterior.
Al día siguiente: brew services start postgresqlno funcionaría. Esto se debe a que, como se muestra cuando instala con homebrew. postgresql usa un launchd ... que se carga cuando su computadora está encendida.

resolución:
brew services start postgresql
reinicie su computadora.


0

El \ducomando return:

Nombre de rol = postgres@implicit_files

Y ese comando postgres=# \password postgresdevuelve error:

ERROR: el rol "postgres" no existe.

Pero eso postgres=# \password postgres@implicit_filesfunciona bien.

También después de sudo -u postgres createuser -s postgresla primera variante también funciona.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.