Instalación rápida de PostgreSQL para Windows

Los siguientes son los pasos seguidos para instalar PostgreSQL bajo Windows en una unidad US

1. Descargar y descomprimir el archivo postgresql-8.3.1-1-binaries-no-installer.zip.

2. Mover el directorio pgsql a la unidad USB, g: para este ejemplo.

3. Crear el directorio g:pgsqldata.

4. Crear el repositorio de datos inicial.

dos> g:pgsqlbininitdb -D g:pgsqldata

5. Editar el archivo de configuración de acceso para permitir las conexiones externas.

dos> notepad g:pgsqldatapg_hba.conf

# Allow any user on the local system to connect to any database under
# any database user name using Unix-domain sockets (the default for local
# connections).
#
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
local   all         all                               trust

# The same using local loopback TCP/IP connections.
#
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
host    all         all         127.0.0.1/32          trust

host    all         all         0.0.0.0/0             md5

6. Editar el archivo de configuración de la base de datos para permitir conexiones a través de TCP/IP y SSL.

dos> notepad g:pgsqldatapostgresql.conf

listen_addresses = '*'
authentication_timeout = 1min		# 1s-600s
ssl = on				# (change requires restart)
ssl_ciphers = 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH'	# allowed SSL ciphers

7. Crear la llave primaria del servidor (server.key) y el certificado SSL (server.crt). Para esto es necesario contar con la distribución de OpenSSL y su directorio g:OpenSSLbin (o donde haya sido instalado) incluído en la variable de ambiente PATH. Tengase en cuenta que este paso es opcional y sólo deberá ejecutarse si se desea establecer el soporte para conexiones SSL con el motor de base de datos (ver parámetro ssl en el paso #6).

dos> cd g:pgsqldata
dos> openssl req -new -text -out server.req
PEM pass phrase: ***CLAVESECRETA***
Country Name (2 letter code) [AU]: CO
State or Province Name (full name) [Some-State]: Caldas
Locality Name (eg, city) []: Manizales
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Personal Development
Organizational Unit Name (eg, section) []: Sistemas
Common Name (eg, YOUR name) []: jorgeivan
Email Address []: jimezam@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Ténganse en cuenta las siguientes consideraciones para especificar los datos mencionados anteriormente.

  1. La frase PEM (***CLAVESECRETA***) es una contraseña de seguridad del certificado, elíjala de acuerdo a sus criterios de seguridad.
  2. Los valores de los campos Country Name, State Name, Locality Name, Organization Name, Organizational Unit Name e Email Address son informativos y deben personalizarse según su propio contexto.
  3. El campo Common Name debe corresponder con el hostname de la máquina que tendrá el certificado (importante).
  4. El Challenge Password y el Optional Company Name pueden obviarse (dejarse en blanco).

La llave generada se encuentra protegida con contraseña, para removerla y permitir el inicio automático del motor de base de datos junto con el sistema operativo se debe realizar la acción siguiente.

dos> openssl rsa -in privkey.pem -out server.key

PEM pass phrase: ***CLAVESECRETA***

dos> del privkey.pem

Para firmar (self-signed) el certificado recién creado ejecutar la acción siguiente.

openssl req -x509 -in server.req -text -key server.key -out server.crt

8. Iniciar el motor de base de datos.

dos> postgres -i -D g:pgsqldata

Si se desea redireccionar los mensajes de la base de datos a un archivo de log se deben agregar las siguientes modificaciones.

dos> postgres -i -D g:pgsqldata >logfile 2>&1

Si se desea enviar el proceso del motor de base de datos a background se debe anteponer el comando start de Windows.

dos> start postgres -i -D g:pgsqldata >logfile 2>&1

9. Modificar la contraseña de acceso del usuario de administración del motor de base de datos.

dos> psql -h 127.0.0.1 -c "ALTER USER USUARIO WITH PASSWORD 'CONTRASEÑA'" -d template1

Téngase en cuenta que debe reemplazarse a USUARIO con el nombre de usuario bajo el cual se ejecuta la base de datos, el mismo con el que se ejecutó initdb y postgres, así como CONTRASEÑA con la contraseña escogida para ese usuario.

10. Crear una base de datos.

dos> createdb.exe base_de_datos

11. Prueba de conexión a la base de datos.

dos> psql -W -U USUARIO base_de_datos

Enlaces de interés:

9 thoughts on “Instalación rápida de PostgreSQL para Windows”

  1. Buenas tardes,

    quería hacerte una consulta a ver si eres capaz de ayudarme.
    Resulta que estoy ejecutando el siguiente comando (psql -U xxxxxxx template1 -f D:xxxxxxxxPLATFORMPostgreSQLdataackupxxxxxxxx_v_1-0-0-7.backup ) desde una consola y siempre me pide el pass del usuario para poder ejecutarlo.
    He mirado por la ayuda y supuestamente el parámetro necesario para pasar el pass es -W, pero si le paso dicho parámetro, a la hora de ejecutar el comando, me devuelve la siguiente advertencia: psql: warning: extra command-line argument template1 ignored.
    La versión de postgreSQL que estoy utilizando, es la 8.1 para Windows.

    Gracias de antemano por tu ayuda.
    Saludos.

  2. Saludos @Javi. El parámetro -W de la línea de comando no te sirve, este sólo le indica a pgsql que te lo pida para escribirlo manualmente lo cual se hace por defecto.

    Esto de todas maneras es una mala idea ya que si lo pones en la linea de comando y utilizas un servidor compartido o al cual otros usuarios tengan acceso, podrán ver la contraseña con un simple ‘ps’.

    Te sugiero que utilices mejor el archivo de almacenamiento de contraseñas .pgpass, allí listas los usuarios y contraseñas de las bases de datos que quieras acceder obviando la autenticación y es una solución mucho mas segura.

    http://www.postgresql.org/docs/8.1/interactive/libpq-pgpass.html

  3. Buenas Jorge,

    Antetodo muchas gracias por la rapida respuesta.
    La solución que me comentas es para la instalacion de postgre sobre Linux, y yo estoy trabajando en Windows.
    Te cuento lo que quiero hacer, ya que lo de la seguridad no es un punto critico en este caso.
    Estoy preparando un instalador automatico de nuestro producto, y lo que intento es que no pida datos de la instalacion en ningun momento. Quiero que sea totalmente automatizado, así que no sé si tú sabrías indicarme como lo puedo hacer…

    Muchas gracias por tu ayuda.
    Saludos.

  4. Javi, nunca lo he probado en Windows ya que siempre utilizó Linux o Solaris, pero la teoría sugiere que en dicha plataforma debes crear el archivo en “%APPDATA%postgresqlpgpass.conf” siendo APPDATA el directorio de los datos del usuario: “c:Documents and SettingsUSUARIODatos de programa” según un Windows XP en el que acabo de verificar: echo %APPDATA%.

    El contenido del archivo será el mismo del documento independiente de la plataforma.

  5. “Estoy preparando un instalador automatico de nuestro producto, y lo que intento es que no pida datos de la instalacion en ningun momento.”

    Otra opción que se me ocurre es que configures el acceso a pgsql de manera que confíe en el acceso local (desde el mismo localhost) y no te pida contraseña. Esto lo puedes hacer en el archivo pg_hba.conf diciéndole que la ubicación es TRUST.

    Ambas aproximaciones te funcionarán, todo depende de que otros requerimientos tengas. Si después con el instalador quieres remover este acceso, probablemente sea mas sencillo editar el pgaccess.conf y remover la cadena; si quieres que el acceso local continúe sin pedirte autenticación, esta segunda opción puede ser mas sencilla de implementar.

    http://www.postgresql.org/docs/8.1/interactive/client-authentication.html

  6. Buenas Jorge,

    Muchas gracias por tu ayuda. Ya está solucionado el tema. Al final he optado por modificar el archivo pg_hba.conf durante el mismo proceso de instalacion y una vez ejecutados los scripts, vuelvo a dejar el archivo con la configuracion original.

    De nuevo te agradezco tu ayuda.
    Saludos.

Leave a Reply

Your email address will not be published. Required fields are marked *