Las otras respuestas no fueron del todo satisfactorias para mí. Esto es lo que funcionó para postgresql-9.1 en Xubuntu 12.04.1 LTS.
-
Conéctese a la base de datos predeterminada con el usuario postgres:
sudo -u postgres psql template1
-
Establezca la contraseña para el usuario postgres, luego salga de psql (Ctrl-D):
ALTER USER postgres con contraseña cifrada 'xxxxxxx';
-
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 postgres
compañeromd5Para saber qué versión de postgresql está ejecutando, busque la carpeta de la versión en
/etc/postgresql. Además, puede usar Nano u otro editor en lugar de VIM. -
Reinicie la base de datos:
sudo /etc/init.d/postgresql reiniciar
(Aquí puedes comprobar si funcionó con
psql -U postgres). -
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 dicen a postgresql que cree un usuario que pueda iniciar sesión, crear bases de datos, crear nuevos roles, es un superusuario y tendrá 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 un
createdb.Cuidado con las contraseñas :primero te 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).
-
Nuevamente, edite el
pg_hba.conf(consulte el paso 3 anterior) y cambie "peer" a "md5" en la línea relativa a "todos" los demás usuarios:local todos todos
compañeromd5 -
Reinicie (como en el paso 4) y compruebe que puede iniciar sesión sin -U postgres:
plantilla psql1
Tenga en cuenta que si hace un mero
psql, fallará 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. -
Ahora
createdb <dbname>debería funcionar.
En Linux, PostgresQL generalmente está configurado para permitir que el usuario raíz inicie sesión como el superusuario de Postgres postgres desde el shell (consola o ssh).
$ psql -U postgres
Luego 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 deberá meterse con pg_hba.conf .
Hay dos métodos que puede utilizar. Ambos requieren la creación de un usuario y una base de datos.
-
Uso de createuser y createdb ,
$ sudo -u postgres createuser --superuser $USER $ createdb mydatabase $ psql -d mydatabase -
Uso de los comandos de administración de SQL y conexión con una contraseña a través de TCP
$ sudo -u postgres psql postgresY, 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 el
postgresusuario,SHOW port;O,
$ grep "port =" /etc/postgresql/*/main/postgresql.conf
Nota al margen:el postgres usuario
Sugiero NO modificando el postgres usuario.
- 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 que ser root para poder autenticarte comopostgres. - Normalmente no está protegido por contraseña y se delega al sistema operativo host. Esto es algo bueno . Esto normalmente significa iniciar sesión como
postgresque es el equivalente de PostgreSQL delSAde SQL Server , debe tener acceso de escritura a los archivos de datos subyacentes. Y eso significa que normalmente podrías causar estragos de todos modos. - Al mantener esto deshabilitado, elimina el riesgo de un ataque de fuerza bruta a través de un superusuario designado. Ocultar y oscurecer el nombre del superusuario tiene ventajas.