macos - name - rails postgresql fatal role does not exist
psql: FATAL: el rol "postgres" no existe (14)
Soy un novato de postgres.
Instalé el postgres.app para mac. Estaba jugando con los comandos psql y accidentalmente eliminé la base de datos de Postgres. No sé lo que había en él.
Actualmente estoy trabajando en un tutorial: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/
Y estoy atascado 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 tomar? ¿Borrar todo lo relacionado con psql y reinstalar todo?
¡Gracias por la ayuda chicos!
Dejar caer la postgres
datos postgres
realmente no importa. Esta base de datos está inicialmente vacía y su propósito es simplemente que el usuario de postgres
tenga una especie de "hogar" para conectarse, en caso de que la necesite.
Aún así, puedes recrearlo con el comando SQL CREATE DATABASE postgres;
Tenga en cuenta que el tutorial mencionado en la pregunta no está escrito teniendo en cuenta postgres.app
. Al contrario de PostgreSQL para Unix en general, postgres.app
trata de parecer una aplicación normal en lugar de un servicio que sería ejecutado por un usuario de postgres
dedicado con diferentes privilegios que su usuario normal. postgres.app
es ejecutado y administrado por su propia cuenta.
Entonces, en lugar de este comando: sudo -u postgres psql -U postgres
, sería más en el espíritu de postgres.app simplemente emitir: psql
, que se conecta automáticamente a una base de datos que coincide con el nombre de sus usuarios, y con una cuenta de db del mismo nombre que pasa a ser superusuario, por lo que puede hacer cualquier cosa con respecto a los permisos.
Ejecutar esto en la línea de comandos debería arreglarlo
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
El comando /du
devuelve:
Role name =
postgres@implicit_files
Y ese comando postgres=# /password postgres
devuelve error:
ERROR: el rol "postgres" no existe.
Pero ese postgres=# /password postgres@implicit_files
funciona bien.
También después de sudo -u postgres createuser -s postgres
también funciona la primera variante.
Este es el único que me lo arregló:
createuser -s -U $USER
La clave es "Instalé postgres.app para mac". Esta aplicación configura la instalación local de PostgreSQL con un superusuario de base de datos cuyo nombre de función es el mismo que su nombre de inicio de sesión (breve).
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 ninguna. El usuario predeterminado es $ USUARIO, sin contraseña.
Algunos scripts (por ejemplo, una copia de seguridad de la base de datos creada con pgdump
en un sistema Linux) y los tutoriales asumirán que el superusuario tiene el nombre de rol tradicional de postgres
.
Puede hacer que su instalación local se vea un poco más tradicional y evitar estos problemas haciendo una sola vez:
/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres
lo que hará que FATAL: rol "postgres" no exista .
Me quedé atascado en este problema después de haber ejecutado los brew services stop postgresql
el día anterior.
El día siguiente: brew services start postgresql
no funcionaría. Esto se debe a que se muestra cuando instala con homebrew. postgresql usa un launchd ... que se carga cuando la computadora está encendida.
resolución:
brew services start postgresql
Reinicia tu computadora.
Necesitaba $PGUSER
:
$ unset PGUSER
$ createuser -s postgres
No creo que se necesite sudo aquí porque psql -l devuelve una lista de bases de datos. Esto me dice que initdb se ejecutó bajo el usuario actual del usuario, no bajo el usuario postgres.
Tu puedes sólo:
psql
Y continúa el tutorial.
Sugeriría los puntos generales de AH para 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 normal, y para admitir la autenticación entre pares (preguntando al sistema operativo que intenta conectarse) crea un usuario y db con el usuario que ejecuta el proceso de inicialización. En este caso fue tu usuario normal.
Para Mac:
- Instalar homebrew
-
brew install postgres
-
initdb /usr/local/var/postgres
-
/usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres
o/usr/local/opt/postgres/bin/createuser -s postgres
que solo usará la última versión. - iniciar el servidor de
pg_ctl -D /usr/local/var/postgres start
manualmente:pg_ctl -D /usr/local/var/postgres start
Para iniciar el servidor en el 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 con psql -U postgres -h localhost
o use PgAdmin para GUI.
Por defecto, el usuario postgres
no tendrá ninguna contraseña de inicio de sesión.
Visite este sitio para ver más artículos como este: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7
Para mí, este código funcionó:
/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres
vino de aquí: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
Por lo que vale la pena, tengo ubuntu y muchos paquetes instalados y entraron en conflicto con él.
Para mi la respuesta correcta fue:
sudo -i -u postgres-xc
psql
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 faltante: ¿Cuál es el resultado dentro de psql
del 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, puedes usarlo para iniciar sesión. Y mirando la salida de su comando /l
: Los permisos para el user
en las bases de datos template0
y template1
son los mismos que en mi sistema Ubuntu para los postgres
superusuario. Así que creo que su configuración sencilla utiliza al user
como superusuario. Así que puedes probar este comando para iniciar sesión:
sudo -u user psql user
Si el user
es realmente 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 la configuración de postgres.app no parece hacer esto, tampoco debería hacerlo. Simplemente adapta el tutorial.
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 here .
createuser postgres --interactive
o hacer un superusuario postgresl solo con
createuser postgres -s