2011-06-05 40 views
10

Quiero instalar postgresql para utilizarlo como servidor de una aplicación de Windows.Son instancias independientes de Postgresql posible

Esto parece no ser un problema si postgresql no está ya instalado en el sistema.

Si postgresql ya está instalado, a menos que los parámetros de la línea de comando contengan la supercontraseña, etc. de la instalación existente, entonces la instalación falla. Como es probable que nunca sepa la supercontraseña u otros detalles de la cuenta de las instancias de postgresql preexistentes y los propietarios de la máquina tampoco pueden parecer que esto frustrará cualquier intento de instalar postgresql en tal situación.

Creo que es posible instalar instancias de servidor sql completamente independientes, pero ¿es posible para postgresql?

Por cierto: Si la línea de comandos contiene la superpassword correcta, entonces la instalación apenas se parece a sobrescribir la instalación existente e ignora los parámetros como --prefix etc. Utilicé init db para crear un nuevo clúster de base de datos antes de hacer una segunda instalación, pero este nuevo clúster fue ignorado.

+0

Si cree que hay un error en el EnterpriseDB de un solo clic de instalación (que es el instalador que está utilizando, ¿verdad?), Entonces es mejor preguntar en su [ayuda foro] (http://forums.enterprisedb.com/forums/show/9.page). –

+0

@Milen No tengo ninguna razón para pensar que hay un error. Solo creo que tal vez las instancias independientes de postgresql no sean posibles, pero espero estar equivocado, pero buscaré en su foro, gracias por la información – jjb

+0

Según su descripción (actualmente estoy tratando de reproducir el comportamiento) suena como un error: el instalador no debe ignorar su argumento "--prefix". –

Respuesta

3

Algo como esto debería funcionar (si no es probable que sea error):

postgresql-9.0.4-1-windows_x64.exe^
    --mode unattended^
    --prefix c:\postgres\9.0-second^
    --servicename postgresql-x64-9.0-second^
    --serviceaccount postgres2^
    --servicepassword <password>^
    --serverport 5433^
    --superaccount postgres^
    --superpassword <password> 

EDITAR: después de un par de pruebas Creo que no es posible crear diferentes Postgres instancias de la misma versión que utiliza el Uno -click instalador. Lo siento.

OTOH siempre puede jugar con initdb y pg_ctl y utilizar la instalación existente para crear una nueva instancia. No sería tan fácil como comenzar el instalador, pero es factible.

+0

Hola Milen, funciona ya que no da un error en la instalación pero no se crea ninguna carpeta como se especifica en el --prefijo y no se ejecuta ningún servicio de ese nombre de acuerdo con la pestaña de servicios en el administrador de tareas de Windows. Entonces, aunque ocurre una instalación como lo demuestran las barras de progreso, nada ha cambiado – jjb

+2

Lamentablemente, sí, observé lo mismo: si hay una instalación existente de la misma versión, el instalador ignorará cualquier opción. –

+2

Estoy preparado para aprender a usar initdb, etc. pero el problema principal para mí es que creo que el conocimiento de una supercontraseña preexistente parece ser necesario. Esto no estará disponible para mí y puede que los clientes no lo conozcan. Esperaba que fuera posible crear una instalación independiente con su propia supercontraseña puramente para nuestra aplicación. Creo que tal vez SQL-server express puede ser una mejor apuesta debido a esto. Creo que permite la instalación de instancias completamente independientes – jjb

11

En general, puede tener múltiples instancias independientes de de PostgreSQL. En sentido estricto es cúmulo base de datos con separada:

  • directorio de datos de configuración
  • (por ejemplo postgresql.conf, pg_hba.conf)
  • de escucha TCP/UDP (por defecto 5432+)
  • propietario de usuario y superusuario papel
  • configuración regional y codificación predeterminada
  • archivo de registro
  • proceso del servidor postmaster (en Windows postgres.exe)

perfecto ejemplo bien hecho es Debian con fácil de usar postgresql-common infraestructura (pg_ctlcluster, pg_lsclusters, pg_createcluster, pg_dropcluster, incluido SSL, rotación y así sucesivamente log).

EDIT:

he encontrado que es bastante fácil de instalar segundo, tercero, etc.instancia del mismo PostgreSQL versionado bajo Windows con EnterpriseDB's installer, hay necesidad utilizar initdb y pg_ctl (suponiendo que la instalación de 64 bits, probablemente, es necesario utilizar Program Files (x86) para la instalación de 32 bits):

  1. abierto cmd con privilegios de administrador (Ejecutar como administrador)
  2. ejecutar: cd "C:\Program Files\PostgreSQL\9.0\installer\server"
  3. Crear nuevo grupo de base de datos (pulse Intro en cada paso): initcluster.vbs postgres postgres 12345 "C:\Program Files\PostgreSQL\9.0" "C:\Program Files\PostgreSQL\9.0\data2" 5433 DEFAULT
  4. Registro como Windows Servicio: startupcfg.vbs 9.0 postgres 12345 "C:\Program Files\PostgreSQL\9.0" "C:\Program Files\PostgreSQL\9.0\data2" postgresql-x64-9.0-2
  5. Ejecutar servicio recién creado usando postgresql-x64-9.0-2services.msc y tienes segundo servidor

Cambio 12345 a su contraseña especificada durante la instalación de PostgreSQL. No tiene que usar el directorio data2, use lo que quiera (pero, por supuesto, no existe el directorio data).

+4

perfect add true al final de la secuencia de comandos en el paso 3. Esa es la verificación de ACL agregada en la versión más reciente de postgres. –

+2

Después del paso 4 no aparece en la lista de servicios –

+0

@ValentinKuzub: Tuve que usar '" NT Authority \ NetworkService "' como nombre de usuario (con contraseña vacía) en el paso 4, luego apareció la nueva instancia en la lista de servicios. – Martijn

4

En Windows 7 tuve éxito siguiendo estos pasos. Necesitará la utilidad PsExec.exe disponible en el Sysinternals Suite. Supongo aquí que la ruta a la Suite Sysinternals y la ruta a la carpeta bin de su instalación PostgreSQL existente están en su variable de entorno PATH.

  1. Abra una ventana cmd.exe e ingrese el siguiente comando para abrir un aviso como la cuenta del servicio de red.

    psexec -i -u "nt authority\network service" cmd.exe

  2. La cuenta de servicio de red no tendrá acceso a su PATH, por lo cd 'C:\PostgreSQL\9.3\bin' y luego introduzca el siguiente comando para inicializar un directorio de datos para la nueva instancia. He llamado al mío "data2". No tiene que estar en el directorio postgres, pero ahí es donde va el directorio de datos predeterminado, por lo que es una opción razonable.

    initdb "C:\PostgreSQL\9.3\data2"

  3. Editar C: \ PostgreSQL \ 9.3 \ data2 \ postgresql.conf para que port = 5433 (la instancia predeterminada utiliza 5432, y no deben tener dos instancias en el mismo puerto)

  4. Deje el indicador de cmd del Servicio de red y en su solicitud estándar ingrese el siguiente comando para registrar el nuevo servicio. Aquí he llamado mi nueva instancia "pg_test"

    pg_ctl register -N pg_test -U "nt authority\network service" -D "C:\PostgreSQL\9.3\data2"

  5. Ejecutar el siguiente comando para iniciar el servicio.

    net start pg_test

  6. El papel propietario de la base habrá 'YOURMACHINENAME $'. Si desea cambiar esto al 'postgres' estándar, primero debe crear un nuevo rol de superusuario que pueda cambiar el nombre del propietario. Desde el símbolo del sistema, ingrese lo siguiente para crear este superusuario.

    createuser -s -r -l -i -P -h localhost -p 5433 -U YOURMACHINENAME$ mysuperuser

  7. Por último, conecte al servidor con psql (psql -U mysuperuser -h localhost -p 5433 postgres) y escriba los siguientes comandos para cambiar el nombre del propietario de la base y añadir una contraseña.

    ALTER USER "YOURMACHINENAME$" RENAME TO postgres;

    ALTER USER postgres WITH PASSWORD 'yourpassword';

Cuestiones relacionadas