Software:
Sistema Operativo --> Windows Vista Ultimate SP1
Versión de BBDD --> PostgreSQL 8.4
Usuario Windows --> xdrtas
Planteamiento del problema:
Bueno, investigando en internet, me encontré con varias personas que han tenido el mismo problema con la instalación del nuevo postgreSQL. A la conclusión que he llegado es que el installer tiene algún tipo de fallo a la hora de crear el super usuario postgres en el servidor postgresql y en dar los permisos de carpeta en C:\Program Files\PostgreSQL necesarios para el usuario de windows que también se llama postgres. El instaler es "one click installer".
El problema es el siguiente: Cuando está finalizando la instalación aparece un mensaje de error diciendo --> Problem running post-install step. Installation may not complete correctly.
En mi caso en particular, esto significa varias cosas:
- El servicio postgresql-8.4 no se me crea, o sea, cuando uso la herramienta services.msc no me aparece listado el servicio en cuestión.
- La carpeta "data" está completamente vacía y no tiene asignado ningún permiso de usuario
- Cuando ejecuto "Start Server", (que es un icono de "play" en color verde) me aparece el siguiente mensaje: El nombre del servicio no es válido, (Evidente, el servicio en si, no existe, porque como dije antes, no se instaló), The start command returned an error (2)
- El super usuario postgres no se me crea en el servidor postgresql. Evidentemente, debido a que no hay datos en la carpeta "data" que es donde se almacena toda la información de las bases de datos.
Soluciones que probé:
- Desinstalar postgreSQL por completo, incluyendo el borrado de claves en el registro, el borrado de la carpeta PostgreSQL y el borrado del usuario postgres de windows. Una vez hecho esto, instalar la aplicación, pero me siguió dando el mismo error.
- Una vez instalado, agregar los permisos en la carpeta PostgreSQL para el usuario postgres, pero si no hay datos en la carpeta "datos", no me sirve de nada.
- Registrar manualmente el servicio mediante la herramienta pg_ctl. Pero no encontraba los datos en la carpeta "data" porque los archivos necesarios no se instalaron, ademas, cuando ejecuto el comando para registrar el servicio los "\" me los cambia por "/", con lo que la ruta de destino no se encontraba. Ejemplo: 1 Lo que se tipea: pg_ctl register -N -U -P -D "C:\Program Files\etc..." | La ruta en el servicio: "C:/Program Files/etc..."
Solución:
Aquí les dejo lo que hice:
IMPORTANTE: Durante el proceso se abrirán dos ventanas de línea de comandos, no cerrar ninguna hasta que se indique.
- Ir a la carpeta "data", (C:\Program Files\PostgreSQL\8.4\data), y comprobar si está vacío. Si lo está entonces abrir una ventana de línea de comandos y escribir lo siguiente:
initdb.exe -D "C:\Program Files\PostgreSQL\8.4\data"
La ruta donde se encuentra en comando initdb.exe es: C:\Program Files\PostgreSQL\8.4\bin - Añadir los permisos necesarios a la carpeta PostgreSQL y sus subcarpetas para los usuarios involucrados con el servidor PostgreSQL.
cacls "C:\Program Files\PostgreSQL" /E /T /G LAPTOP\postgres:F
cacls "C:\Program Files\PostgreSQL" /E /T /G LAPTOP\xdrtas:F
"LAPTOP\xdrtas" es en mi caso, que es el nombre de mi PC\mi usuario windows activo. Revisar cual es el nombre de la PC para el caso en particular. - Una vez ejecutado el paso anterior, desde la misma línea de comandos escribimos lo siguiente:
runas /user:postgres cmd
Nos pedirá la contraseña del usuario postgres, la escribimos y presionamos <<Enter>>. Esto abrirá otra ventana de línea de comandos, de momento no se va a cerrar ninguna de las ventanas de comandos abiertas, (debería haber dos ventanas). - En la segunda ventana abierta nos dirigimos a la siguiente ruta --> C:\Program Files\PostgreSQL\8.4\bin. desde ahí ejecutamos el siguiente comando:
pg_ctl start -D ..\data
Presionamos <<Enter>> y comienza a funcionar el servidor, lo dejamos corriendo sin cerrar esta ventana. - Volvemos a la primera ventana de línea de comandos y nos dirigimos a la siguiente ruta, (si es que no estamos ahí), C:\Program Files\PostgreSQL\8.4\bin y ejecutamos el siguiente comando:
psql -d postgres - Dentro de la herramienta psql ejecutar el comando \dg. Este comando mostrará una lista de roles que se crearon. Hay que fijarse en el nombre del rol y sus atributos, en mi caso se instaló lo siguiente:
Nombre de rol --> xdrtas
Atributos --> Superusuario | Crear rol | Crear BD
Miembro de --> {}
Como se puede observar la instalación de PostgreSQL no me creó el rol de postgres debido al fallo del instaler que no instala los archivos en la carpeta "data". Al ejecutar el comando initdb del paso 1 este comando creó el rol xdrtas que es el de mi usuario windows activo pero no me crea el del usuario postgres.
Es importante que recuerden cual es el usuario que devuelve el comando \dg para seguir con el siguiente paso. - Abrir la aplicación pgAdminIII. Registramos un nuevo servidor o si ya lo tenemos hacemos "click" con el botón derecho del mouse y vamos a propiedades, donde modificamos o agregamos las siguientes opciones:
Name: postgresql-8.4
Host: localhost
Port: 5432
Maintenance DB: postgres
username: xdrtas <-- Este es el usuario que me devolvió el comando \dg.
Connect now: Es una casilla de verificación, de momento desactivamos esta opción para forzar la entrada de la contraseña.
"click" en Ok o Aceptar. - Hacer "click" con el botón derecho del mouse sobre el servidor y hacemos "click" en connect, sale la ventana para pedir la contraseña, se introduce la contraseña y se espera unos segundos. Listo el servidor funciona.
- Desconectamos, salimos de pgAdminIII y cerramos la segunda ventana de línea de comandos, esta es la que ejecutamos el servidor postgresql, no donde ejecutamos el comando psql, esta ventana la vamos a seguir usando.
- Ahora vamos a instalar el servicio postgresql-8.4 para que aparezca en la herramienta services.msc. Desde la primera ventana de línea de comandos, donde se ejecutó el comando psql, insertar el comando \q para salir de la herramienta psql y volver a "c:\Program Files\PostgreSQL\8.4\bin". Desde esta ruta "c:\Program Files\PostgreSQL\8.4\bin>" ejecutamos el siguiente comando:
pg_ctl register -N postgresql-8.4 -U xdrtas -P contraseña -D "C:\Program Files\PostgreSQL\8.4\data" -w
"-U xdrtas" --> Recuerden que es muy importante fijarse en que usuario devuelve el comando \dg.
Le damos a <<Enter>> y se crea el servicio, ahora desde la herramienta services.msc se puede ver el servicio postgresql-8.4 - Abrimos la herramienta services.msc, buscamos el servicio postgresql-8.4 y hacemos "click" con el botón derecho del mouse y abrimos las propiedades del servicio. Como se podrá observar en la pestaña "General" donde dice "Ruta de acceso al ejecutable:" notaremos que la ruta está mal escrita, pondrá algo como lo que sigue, (es probable que no se les vea exactamente igual, pero si se fijan bien podrán notar que faltan comillas y que algunos "\" están cambiados por "/"):
C:\Program Files\PostgreSQL\8.4\bin/pg_ctl.exe runservice -N "postgresql-8.4" -D "C:/Program Files/PostgreSQL/8.4/data" -w
Ahora como debería quedar:
"C:\Program Files\PostgreSQL\8.4\bin\pg_ctl.exe" runservice -N "postgresql-8.4" -D "C:\Program Files\PostgreSQL\8.4\data" -w
Las comillas (") si van incluidas en las rutas. La primera línea marcada en rojo no tiene las comillas (") en la primera ruta mostrada.
Ahora vamos a cambiar la ruta de acceso al ejecutable para que funcione la aplicación como servicio de windows. - Abrir la herramienta regedit, ir a la siguiente ruta: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\postgresql-8.4], buscar la clave ImagePath y hacer doble "click". En la ventana de "Editar cadena" vamos a "Información del valor" y se corrige la cadena añadiendo las comillas que falten y cambiando "/" por "\", recuerden tiene que quedar como esto:
"C:\Program Files\PostgreSQL\8.4\bin\pg_ctl.exe" runservice -N "postgresql-8.4" -D "C:\Program Files\PostgreSQL\8.4\data" -w
Hacer "click" en aceptar y salir del registro de windows. - Abrir la herramienta service.msc, (si lo mantuvieron abierto, hacer "click" en el botón de refrescar), y ver las propiedades del servicio postgresql-8.4.
En la pestaña "General" donde dice "Ruta de acceso al ejecutable:" la cadena de texto ya debería estar corregido.
Se hace "click" en el botón de "Aceptar" y iniciamos el servicio postgresql-8.4.
Tengo los screenshots paso a paso para la solución del problema, si los necesitan, pueden enviarme un privado con la dirección de correo y se los envío.
Gracias y saludos.