Search Postgresql Archives

Solution: On Windows with Mingw, how to Install PostgreSQL with zlib, pltcl, plperl, and plpython

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Thanks for all of the help.
Here, is the summary that I had promised.

In addition to the documentation here

https://www.postgresql.org/docs/manuals/
and
https://wiki.postgresql.org/wiki/Main_Page

I will explain how I install PostgreSQL using 
on Windows using Mingw with zlib, pltcl, plperl, and plpython.

This information presented here is only meant to explain 
solutions to things that are a little 'more difficult' on Windows.

Begin acquiring the software.

Get already compiled zlib here
ftp://ftp.zlatkovic.com/libxml/64bit/

Specifically, get exactly zlib from here.
ftp://ftp.zlatkovic.com/libxml/64bit/zlib-1.2.8-win32-x86_64.7z

(Note, the zlib home is actually here: http://www.zlib.net/)

Extract, those folders and files to a folder on disk.

For example.
C:\Users\TargetUser\Documents\zlib-1.2.8-win32-x86_64

Identify the header(include) and lib directories.

C:\Users\TargetUser\Documents\zlib-1.2.8-win32-x86_64\include 
C:\Users\TargetUser\Documents\zlib-1.2.8-win32-x86_64\lib 

Note those locations, and save that information for later

Information about the languages follow.

Get to know what the needed library versions from here.

(1) TCL with TK; 8.5
(2) Perl; 5.20
(3) Python; 3.3
http://get.enterprisedb.com/docs/README-languagepack-950.txt

(1) TCL with TK; 8.5
(2) Perl; 5.20
(3) Python; 3.3
http://get.enterprisedb.com/docs/README-edb-languagepack-9.6.txt

Get Python and Perl from the Graphical installer from here.
http://www.enterprisedb.com/products-services-training/pgdownload#windows

Download the graphical installer and 
install (1) Python and (2) PERL

Make a note of where the perl.exe and python.exe files are located.

C:\EnterpriseDB\LanguagePack\9.5\x64\Perl-5.20\bin\perl.exe
C:\EnterpriseDB\LanguagePack\9.5\x64\Python-3.3\python.exe

Do not install TCL from EnterpriseDB.

If one were TOO install the TCL from EnterpriseDB and
if one were to inspect the tclConfig.sh file that is found in the 'lib' directory,
a surprise may be seen.

The EnterpriseDB TCL tclConfig.sh file has a hard coded TCL_LIB_SPEC

  TCL_LIB_SPEC='C:\EnterpriseDB\LanguagePack\9.5\x64\Tcl-8.5\lib\tcl85.lib' 

But the TCL_LIB_SPEC actually needs to be something like

  TCL_LIB_SPEC='-LC:/Path/To/folder/lib -ltcl85'

So EnterpriseDB TCL can not be used in the compiling 
of the TCL language into PostgreSQL.
I found that to be surprising. 

Download TCL from here.
https://www.tcl.tk/software/tcltk/

Specifically here
https://www.tcl.tk/software/tcltk/8.5.html

Install those files to a convenient place.

C:\Tcl.8.5.18.0

Inspect the tclConfig.sh file that is found in the 'lib' directory
This line

  TCL_LIB_SPEC='-LC:/Tcl.8.5.18.0/lib -ltcl85'

is the form

  TCL_LIB_SPEC='-LC:/Path/To/folder/lib -ltcl85'

So, this TCL is useful

Make a note of where the tclsh.exe executable is located

C:\Tcl.8.5.18.0\bin\tclsh.exe

The pexports.exe file is needed.  This is NOT included in the
standard Mingw distribution ( but the dlltool.exe is in Mingw ).

This pexports.exe file is called a Mingw Extension.

For each language:Tcl, Perl, and Python, 
pexports ( driven and done in 'make' later ) will run the following.

pexports LANGUAGE.dll > LANGUAGE.def
dlltool --dllname LANGUAGE.dll --def LANGUAGE.def --output-lib LANGUAGE.a

Specifically,

pexports /c/Tcl.8.5.18.0/bin//tcl85.dll > tcl85.def
dlltool --dllname tcl85.dll --def tcl85.def --output-lib libtcl85.a

pexports /c/EnterpriseDB/LanguagePack/9.5/x64/Perl-5.20/bin/perl520.dll > perl520.def
dlltool --dllname perl520.dll --def perl520.def --output-lib libperl520.a

pexports C:/Windows/system32/python33.dll > python33.def
dlltool --dllname python33.dll --def python33.def --output-lib libpython33.a

Notice, that the Python33.dll comes from the C:\Windows\system32 folder
and NOT the 'same directory as the executable' that Perl and TCL use.
I found that to be surprising. 

Get pexports.exe from one of two places.  

In one place, a compiled pexports.exe can found with 
the Strawberry Perl distribution.

Specifically it is in here.

C:\Strawberry\c\bin

The other place is the source.
A person would have to manually compile and make the pexports.exe file.
The source is here.
https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/

Copy the pexports.exe to the same place where
the Mingw dlltool.exe is located ( this is already in the Mingw PATH ).

That is specifically here.

C:\x86_64-6.2.0-release-posix-seh-rt_v5-rev0\mingw64\bin

That was the end of acquiring the software.

This is the beginning of compiling.

Prepare to start an msys shell.

Edit the msys.bat file: C:\MinGW\msys\1.0\msys.bat

Near the top of the  msys.bat file add the simple line that 
removes anything not important to the compiling process from the PATH.

set  PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\

In the MSYS shell at the command prompt($), 
place the LANGUAGE .exes in the path.

export PATH=/c/Tcl.8.5.18.0/bin:$PATH
export PATH=/c/EnterpriseDB/LanguagePack/9.5/x64/Perl-5.20/bin:$PATH
export PATH=/c/EnterpriseDB/LanguagePack/9.5/x64/Python-3.3:$PATH

Configure.
Below are the options I use and why.

Start configuration.

./configure 

Languages: their .exe files are in the path.

The ./lib and ./include locations
seems to be picked up from the location of the .exe in the PATH.
So no other ./include nor ./lib information are needed.
I found that to be slightly surprising. 

-with-tcl --with-python --with-perl 

zlib
 
--with-includes=/c/Users/TargetUser/Documents/zlib-1.2.8-win32-x86_64/include --with-libraries=/c/Users/TargetUser/Documents/zlib-1.2.8-win32-x86_64/lib 

Compile target

--host=x86_64-w64-mingw32 

Install location ( files are copied here as a result of 'make install' )

--prefix=/usr/local/pgsql_0ab9c56_debug 

Make PostgreSQL relocatable, so I can move the binaries 
to a different folder later and PostgreSQL will still start up.

--disable-rpath 

For development, if a change  is done such that something is re-compiled,
then dependent objects also get re-compiled.

--enable-depend 

Debugging help

--enable-cassert --enable-debug 

So, I can track exactly which github mirror version I have.
Also, I can track how much debugging information I have.

--with-extra-version=_CFLAGS_O_0ab9c56 

For development, turn off optimizations,
so I can see the values of 'more' variables to aid in debugging.

CFLAGS="-O -fno-omit-frame-pointer" 

So the configure line would approximately look like this.
However running it would still require it all to be on one very very long line.

./configure -with-tcl --with-python --with-perl 
--with-includes=/c/Users/AnonymousUser/Documents/zlib-1.2.8-win32-x86_64/include --with-libraries=/c/Users/AnonymousUser/Documents/zlib-1.2.8-win32-x86_64/lib 
--host=x86_64-w64-mingw32 --prefix=/usr/local/pgsql_0ab9c56_debug 
--disable-rpath --enable-depend --enable-cassert --enable-debug 
--with-extra-version=_CFLAGS_O_0ab9c56 CFLAGS="-O -fno-omit-frame-pointer" 

After configuring, do the following.

Clean up with

  make clean

Make with 

  make

Check with 

  make check 

(Above) 'make check' actually makes a mini PostgreSQL,
so I make sure that I do not have another PostgreSQL up and 
listening on the same ( default ) port of 5432.

Install with 

  make install

That was the end of compiling.

This is the beginning of extension creation.

Plan to startup PostgreSQL.

Get Portable PostgreSQL from here.
https://sourceforge.net/projects/postgresqlportable/

Extract the 'startup batch' file.

Customize the startup batch as necessary.
In the 'startup batch', 
put the tclsh.exe, perl.exe,and python.exe 'paths' in the PATH.
Also, set the PYTHONHOME environment variable.

It is all explained in here.
http://get.enterprisedb.com/docs/README-languagepack-950.txt
http://get.enterprisedb.com/docs/README-edb-languagepack-9.6.txt

Place the 'startup batch' file in the parent folder, 
of the ./bin directory of PostgreSQL.

Modify the 'startup batch' environment variables including PG* postgreSQL
environment variables. 

Execute the batch to start PostgreSQL.

Run the following SQL 

create extension pltcl;
create extension plperl;
create extension plpython3u; ( or sometimes ... plythonu; )

Follow the rest of the instructions here.

https://www.postgresql.org/docs/current/static/pltcl-functions.html
https://www.postgresql.org/docs/current/static/plperl-funcs.html
https://www.postgresql.org/docs/current/static/plpython-funcs.html

This is the end of extension creation.

Consider more powerful Language distributions 
( other than the ones that were mentioned earlier )

Activestate TCL
ACTIVETCL COMMUNITY EDITION DOWNLOAD
http://www.activestate.com/activetcl/downloads

Strawberry Perl
http://strawberryperl.com/

WinPython
https://winpython.github.io/



Andre Mikulec
Andre_Mikulec@xxxxxxxxxxx



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux