Compilando PostgreSQL en Windows

Visual C++ 2005

Esto es una guía para compilar PostgreSQL y generar el instalador en español (bajo windows).

Ver  documentación oficial para más información.

Requisitos:

  • Instalar VC++ 2005 Express Edition
  • Instalar Active Perl
  • Instalar Microsoft Platform SDK
  • Instalar Wix
  • Instalar el resto de las dependencias que correspondan:
    • OpenSSL (para conexiones SSL)
    • Kerberos (para autenticación)
    • Gettext y iconv (para NLS)
    • Python 2.5 (para pl/python)
    • TCL (para pl/tcl)
    • XML2, XSLT, etc. (para xml)
    • ZLib (para compresión de dumps)
    • etc.
  • Bajar y compilar los añadidos en el instalador de windows:
    • PgAdmin3
    • StackBuilder
    • PlJava
    • pldebugger

Nota: Para probar sólo el instalador, y no tener que compilar PostgreSQL y todas sus dependencias y añadidos, se puede descomprimir el archivo de instalación MSI y recrear el directorio de staging

Pasos para generar PostgreSQL y PgInstaller

  • Crear un directorio c:\pgBuild
  • Crear un directorio c:\pgBuild\BuildTrees
  • Bajar las fuentes de postgresql (del tar.bz2) y descomprimirlas en c:\pgBuild\BuildTrees\pgsql
  • Bajar las fuentes del instalador (desde cvs) en c:\pgBuild\BuildTrees\pginst-8.3
  • Buscar el archivo vcredist_x86.exe del ZIP del Instalador y copiarlo a la carpeta c:\pgBuild\vcredist_x86

Pasos para compilar PostgreSQL usando VC

  • Editar el archivo c:\pgBuild\BuildTrees\pgsql\src\tools\msvc\config.pl y habilitar/deshabilitar las características a compilar (para el instlador, deberían compilarse todas las características).
  • Iniciar el 'Símbolo del Sistema Visual Studio 2005':
    cd c:\pgBuild\BuildTrees\pgsql\src\tools\msvc\
    build
    install c:\pgBuild\pginst-8.3\pgsql
    
  • Compilar la ayuda (en un unix), procesarlo con Html Help Workshop (en windows) y copiarlo a pgsql\doc\htmlhelp.chm

Pasos para generar PgInstaller

  • Copiar paths.projinc.in a paths.projinc dentro de pginst-8.3 y cambiar las siguientes líneas:
      <WixDir>C:\Archivos de Programa\Windows Installer XML v3\bin</WixDir>
      <PKGDIR>$(PGBUILD)\pginst-8.3</PKGDIR>
      <MSVCMSMS>C:\Archivos de Programa\Archivos Comunes\Merge Modules</MSVCMSMS>
      <MSVCREDIST>C:\pgbuild\vcredist_x86</MSVCREDIST>
    
  • Agregar el lenguaje español ({{es.xml}}} y es_welcome.rtf, y editar el archivo C:\pgbuild\BuildTrees\pginst-8.3\lang\languages.projinc:
      <Language Include="Item"><code>es</code><map>0407</map></Language>
    
  • Compilar e instalar PostgreSQL o crear los directorios de staging (si no se ha compilado PostgreSQL)
  • Actualizar los paquetes añadidos (pgAdmin, plDebugger, plJava, StackBuilder)
  • Iniciar el 'Símbolo del Sistema Visual Studio 2005':
    cd c:\pgBuild\BuildTrees\pginst-8.3
    msbuild /t:clean
    msbuild
    

Solución de problemas con VC:

  • No puede cargar VCProjEngine.DLL: Copiar las dll localizadas (copy vcpackages\3082\*.dll vcpackages para español, en la carpeta de visual studio) ( ver más)
  • No se puede encontrar vjslib.dll: Instalar Visual J# Redistributable ( ver más)
  • 'windows.h': no such file or directory: Instalar el Microsoft Platform SDK y actualizar los paths en vsvars32.bat (en la carpeta common\bin del visual studio):
    @set PATH=...;%PATH%;C:\Archivos de programa\Microsoft SDKs\Windows\v6.1\Bin
    @set INCLUDE=...;%INCLUDE%;C:\Archivos de programa\Microsoft SDKs\Windows\v6.1\Include
    @set LIB=...;%LIB%;C:\Archivos de programa\Microsoft SDKs\Windows\v6.1\Lib
    

MingW

Compilar el Servidor con Mingw

Si por algún motivo no se desea usar el paquete de instalación precompilado para windows (construido con Visual C++ 2005, ver arriba), se puede compilar más facilmente con MINGW:

  1. Instalar Mingw, MSYS y MSYS-DTK (y opcionalmente, zlib)
  2. Descomprimir las fuentes, por ej. en C:\postgresql-9.0beta4 y situarse en este directorio
  3. Establecer las rutas PATH=%path%;C:\MinGW\bin;C:\MSYS\1.0\bin
  4. Ejecutar bash configure
  5. Ejecutar make

Más información en la documentación oficial:  http://www.postgresql.org/docs/9.0/static/installation-platform-notes.html

Una guía más detallada (en inglés) puede encontrarse en el proyecto PostGIS:  http://trac.osgeo.org/postgis/wiki/UsersWikiWinCompile

Para compilar todas las características, seguramente necesite instalar OpenSSL, ZLib, GetText?, etc. (ver abajo).

Compilar extenciones con Mingw

Estas son las órdenes que se ejecutan para generar una biblioteca compartida usando Mingw:

  1. Crear un directorio en contrib, por ej. foo
  2. Crear el archivo de la extención, contrib/foo.c (ver adjunto)
  3. Compilar la extención foo.c con C:\mingw\bin\gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -I. -I. -I../../src/include -I./src/include/port/win32 -DEXEC_BACKEND "-I../../src/include/port/win32" -c -o foo.o foo.c
  4. Compilar generar la biblioteca foo.dll con C:\mingw\bin\gcc -shared -o foo.dll foo.o
  5. Copiar foo.dll al directorio lib (usualmente "C:\Archivos de Programa\PostgreSQL\9.0alpha4\lib")
  6. Crear la función con CREATE FUNCTON add_one (INTEGER) RETURNS INTEGER AS '$libdir/foo.dll' LANGUAGE C STRICT IMMUTABLE;
  7. Ejecutar la función SELECT add_one(1); (debería devolver 2)

Nota: Cambiar el path ../../src a "C:\Archivos de Programa\PostgreSQL\9.0alpha4\include\server" si no se han compilado las fuentes (instalador precompilado para windows). En la compilación, la mayoría de los parámetros son opcionales (fueron extraidos de una compilación estándar), los más necesarios son los include (-I) y en especial el del port win32, sino falla bastante misteriosamente... Ejemplo:

C:\mingw\bin\gcc.exe -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement  -Wendif-labels -fno-strict-aliasing -fwrapv  -I. -I. -I"C:/Archivos de Programa/PostgreSQL/8.4/include/server" -DEXEC_BACKEND  -I"C:/Archivos de Programa/PostgreSQL/8.4/include/server/port/win32"  -c -o foo.o foo.c
C:\mingw\bin\gcc.exe -shared -o foo.dll foo.o

Si se está usando un instalador precompilado, además se deberá instalar los siguientes paquetes de GNUWin32 (en el directorio C:\MinGW para no tener que agregar otro include):

Más información en la documentación oficial:  http://www.postgresql.org/docs/9.0/static/xfunc-c.html

Attachments