¿Cómo configurar postgresql por primera vez?

197

Acabo de instalar postgresql y especifiqué la contraseña x durante la instalación. Cuando trato de hacer createdby especificar cualquier contraseña me sale el mensaje:

createdb: no se pudo conectar a la base de datos postgres: FATAL: la autenticación de contraseña falló para el usuario

Lo mismo para createuser.

¿Cómo debo comenzar? ¿Puedo agregarme como usuario a la base de datos?

Rohit Banga
fuente
44
Esto es muy parecido a esta pregunta que se hizo un año después. Pero, creo que esta tiene una respuesta primaria peligrosa . Usted debe no a configurar el postgresusuario. Es el SUde PostgreSQL, y te abre para ataques de inicio de sesión contra él. Cree otro superusuario y reserve el bloqueado postgrespara administradores de UNIX con root.
Evan Carroll

Respuestas:

329

Las otras respuestas no fueron completamente satisfactorias para mí. Esto es lo que funcionó para postgresql-9.1 en Xubuntu 12.04.1 LTS.

  1. Conéctese a la base de datos predeterminada con el usuario postgres:

    sudo -u postgres psql template1

  2. Establezca la contraseña para el usuario postgres, luego salga de psql (Ctrl-D):

    ALTERAR USUARIO postgres con contraseña cifrada 'xxxxxxx';

  3. Edite el pg_hba.confarchivo:

    sudo vim /etc/postgresql/9.1/main/pg_hba.conf

    y cambie "peer" a "md5" en la línea relativa a postgres:

    local todos los      pares de postgres      md5

    Para saber qué versión de postgresql está ejecutando, busque la carpeta de versión en /etc/postgresql. Además, puede usar Nano u otro editor en lugar de VIM.

  4. Reinicie la base de datos:

    sudo /etc/init.d/postgresql restart

    (Aquí puedes comprobar si funcionó psql -U postgres).

  5. Cree un usuario que tenga el mismo nombre que usted (para encontrarlo, puede escribir whoami):

    sudo createuser -U postgres -d -e -E -l -P -r -s <my_name>

    Las opciones le indican a postgresql que cree un usuario que pueda iniciar sesión, crear bases de datos, crear nuevas funciones, que sea un superusuario y que tenga una contraseña cifrada. Los realmente importantes son -P -E, para que se le pida que escriba la contraseña que se cifrará, y -d para que pueda hacer uncreatedb .

    Cuidado con las contraseñas : primero le pedirá dos veces la nueva contraseña (para el nuevo usuario), repetida, y luego una vez la contraseña de postgres (la especificada en el paso 2).

  6. Nuevamente, edite el pg_hba.confarchivo (vea el paso 3 arriba) y cambie "par" a "md5" en la línea que concierne a "todos" otros usuarios:

    local todos      todos      pares md5

  7. Reinicie (como en el paso 4) y verifique que puede iniciar sesión sin -U postgres:

    psql template1

    Tenga en cuenta que si hace un mero psqlerror, ya que intentará conectarlo a una base de datos predeterminada que tenga el mismo nombre que usted (es decir whoami). template1 es la base de datos de administración que está aquí desde el principio.

  8. Ahora createdb <dbname>debería funcionar.

Manur
fuente
Este procedimiento funcionó muy bien en Ubuntu 13.10 también. Solo recuerde sudo en el paso 5 cuando cree un usuario.
David den Haring
2
También funcionó muy bien en Ubuntu 14.04 LTS
ilhnctn
2
solo como una nota, la línea pg_hba.confdebe ser la primera línea, de lo contrario podría ignorarse debido a otras reglas (pgsql 9.3.5 en F21). Me tomó algo de tiempo darme cuenta de esto, que las líneas de comentarios ya comentadas para usuarios de postgresql no lo harán simplemente.
guiones el
Creo que esto ha cambiado en PG 9.4, ya que solo tengo local all all peeren el punto 3 al que ahora cambié md5. ¿De acuerdo?
Léo Léopold Hertz 준영
1
¡Actualiza la respuesta a 2017! PostgreSQL 9.6 y UBUNTU 16 LTS ... ¿No hay forma simple ?
Peter Krauss
55

En Linux, PostgresQL generalmente se configura para permitir que el usuario root inicie sesión como superusuario de postgres postgresdesde el shell (consola o ssh).

$ psql -U postgres

Entonces simplemente crearía una nueva base de datos como de costumbre:

CREATE ROLE myuser LOGIN password 'secret';
CREATE DATABASE mydatabase ENCODING 'UTF8' OWNER myuser;

Esto debería funcionar sin tocar pg_hba.conf. Si desea poder hacer esto usando alguna herramienta GUI a través de la red, entonces necesitaría meterse con él pg_hba.conf.

Oliver Weichhold
fuente
Estoy trabajando en Windows, ejecuté initdb para mi directorio y tengo los archivos de configuración presentes. ahora createdb funciona pero cuando hago la prueba psql recibo el mensaje ADVERTENCIA: la página de códigos de la consola (437) difiere de la página de códigos de Windows (1252) Los caracteres de 8 bits pueden no funcionar correctamente. Consulte la página de referencia de psql "Notas para usuarios de Windows" para más detalles. y ninguno de los comandos funciona.
Rohit Banga
77
psql: FATAL: Peer authentication failed for user "postgres"incluso con sudo.
Peter Krauss
Respuesta perfecta, no quería tocar los archivos de configuración y esto funcionó perfectamente en PostgreSQL 10.10 sobre Ubuntu. Debería poder conectarse a partir de entonces con psql -d mydatatabase -U myuser.
Ranu
21

Esta es mi solución:

su root
su postgres
psql
Admdebian
fuente
44
Esto funcionará en muchos casos porque muchos sitios tendrán pg_hba.conf para autenticar al usuario de postgres db en la cuenta del sistema de postgres (método de pares). Sin embargo, un inicio de sesión exitoso dependerá en última instancia del contenido de pg_hba.conf para cualquier sitio en particular.
Reed Sandberg
1
Trabajó para mi. Reemplacé la primera línea con sudo bash.
eje211
No entiendo cómo ayuda esto ... desde mi punto de vista, inicia sesión en root y postgres, y ejecuta psql. ¿Qué está pasando exactamente? ¡Gracias!
olleh
20

Hay dos métodos que puedes usar. Ambos requieren crear un usuario y una base de datos.

  1. Usando createuser y createdb ,

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. Usar los comandos de administración de SQL y conectarse con una contraseña a través de TCP

    $ sudo -u postgres psql postgres

    Y luego en el shell psql

    CREATE ROLE myuser LOGIN PASSWORD 'mypass';
    CREATE DATABASE mydatabase WITH OWNER = myuser;

    Entonces puedes iniciar sesión,

    $ psql -h localhost -d mydatabase -U myuser -p <port>

    Si no conoce el puerto, siempre puede obtenerlo ejecutando lo siguiente, como postgresusuario,

    SHOW port;

    O,

    $ grep "port =" /etc/postgresql/*/main/postgresql.conf

Nota al margen: el postgresusuario

Sugiero NO modificar al postgresusuario.

  1. Normalmente está bloqueado desde el sistema operativo. Se supone que nadie debe "iniciar sesión" en el sistema operativo como postgres. Se supone que tienes root para autenticarte como postgres.
  2. Normalmente no está protegido por contraseña y delega al sistema operativo host. Esta es una cosa buena . Esto normalmente significa para iniciar sesión, postgresque es el equivalente de PostgreSQL de SQL ServerSA , debe tener acceso de escritura a los archivos de datos subyacentes. Y eso significa que normalmente podrías causar estragos de todos modos.
  3. Al mantener esto desactivado, elimina el riesgo de un ataque de fuerza bruta a través de un superusuario designado. Ocultar y ocultar el nombre del superusuario tiene ventajas.
Evan Carroll
fuente
Con el primer método, el usuario termina sin privilegios. Terminé usando esto en lugar del primer comando:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert
@FabienSnauwaert -shace que el usuario sea un superusuario.
Evan Carroll
16

EDITAR: Advertencia: Por favor, lea la respuesta publicada por Evan Carroll . Parece que esta solución no es segura y no se recomienda.

Esto funcionó para mí en la instalación estándar de Ubuntu 14.04 de 64 bits .

Seguí las instrucciones, con pequeñas modificaciones, que encontré en http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

  1. Instale postgreSQL (si aún no está en su máquina):

sudo apt-get install postgresql

  1. Ejecute psql usando el usuario postgres

sudo –u postgres psql postgres

  1. Establezca una nueva contraseña para el usuario de postgres:

\password postgres

  1. Salga de psql

\q

  1. Edite /etc/postgresql/9.3/main/pg_hba.conf y cambie:

#Database administrative login by Unix domain socket local all postgres peer

A:

#Database administrative login by Unix domain socket local all postgres md5

  1. Reinicie postgreSQL:

sudo service postgresql restart

  1. Crea una nueva base de datos

sudo –u postgres createdb mytestdb

  1. Ejecute psql con el usuario de postgres nuevamente:

psql –U postgres –W

  1. Enumere las bases de datos existentes (su nueva base de datos debería estar allí ahora):

\l

Robert
fuente
1
Voté en contra porque creo que activar al postgresusuario es una mala idea. stackoverflow.com/a/41604969/124486
Evan Carroll
4
Note: textdb is the database which you are going to explore with 'alex' user 

root@kalilinux:~# sudo su - postgres 
postgres=#  psql   
postgres=#  create database testdb;
postgres=#  create user alex with password 'alex';
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO alex;`enter code here`
Suman Astani
fuente
3

Probablemente necesite actualizar su pg_hba.confarchivo. Este archivo controla qué usuarios pueden iniciar sesión desde qué direcciones IP. Creo que el usuario de postgres está bastante bloqueado por defecto.

Neall
fuente
2
Para RHEL6.4 y postgres 8.4, el archivo estaba ubicado en /var/lib/pgsql/data/pg_hba.conf. Cambie identa trustfor host(y localsi está usando ssh).
DavidG
3

Si está ejecutando macOS como yo, es posible que no tenga el usuario de postgres.

Cuando trato de correr sudo -u postgres psql recibía el errorsudo: unknown user: postgres

Afortunadamente, hay ejecutables que proporciona postgres.

createuser -D /var/postgres/var-10-local --superuser --username=nick
createdb --owner=nick

Luego pude acceder psqlsin problemas.

psql
psql (10.2)
Type "help" for help.

nick=#

Si está creando una nueva instancia de Postgres desde cero, estos son los pasos que tomé. Utilicé un puerto no predeterminado para poder ejecutar dos instancias.

mkdir /var/postgres/var-10-local
pg_ctl init -D /var/postgres/var-10-local

Luego edité /var/postgres/var-10-local/postgresql.confcon mi puerto preferido, 5433.

/Applications/Postgres.app/Contents/Versions/10/bin/postgres -D /Users/nick/Library/Application\ Support/Postgres/var-10-local -p 5433

createuser -D /var/postgres/var-10-local --superuser --username=nick --port=5433
createdb --owner=nick --port=5433

¡Hecho!

Nick Woodhams
fuente
2

En MacOS, seguí los pasos a continuación para que funcione.

Por primera vez, después de la instalación, obtenga el nombre de usuario del sistema.

$ cd ~
$ pwd
/Users/someuser
$ psql -d postgres -U someuser

Ahora que ha iniciado sesión en el sistema y puede crear la base de datos.

postgres=# create database mydb;
CREATE DATABASE
postgres=# create user myuser with encrypted password 'pass123';
CREATE ROLE
postgres=# grant all privileges on database mydb to myuser;
GRANT
SuperNova
fuente
0

Simplemente busque el directorio de su instalación y ejecute este archivo "pg_env.bat", así que luego vaya a la carpeta bin y ejecute pgAdmin.exe. ¡Esto debe funcionar sin duda!

Wellington Ribeiro
fuente