Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

FAQ_QNX4

Blame
  • FAQ_QNX4 6.31 KiB
    PostgresSQL on QNX 4
    --------------------
    
    This port is an important step because PostgreSQL is now the only free
    relational database with full SQL and ODBC support available for QNX 4.
    The only commercial databases available are Empress RDBMS and Velocis
    Database Server (not supported for Digital Unix).
    
    The most effort required the emulation of System V semaphore sets,
    shared memory and IPC and of some IEEE floating-point functionality. For
    the Watcom compiler spinlocks have been implemented using POSIX semaphores.
    
    It is recomended to use the GNU C compiler instead of the Watcom compiler
    because the Watcom compiler doesn't support a int8 datatype (long or
    long long int) and it does not have a C++ frontend.
    It could be managed to build postgres using the Watcom compiler but it crashes
    quite early. These problems probably could be solved. The only advantage would
    be support of Tk and pgaccess. For the Watcom compiler some more modifications
    have to be made which are not described here.
    
    QNX 4 does not offer native support of shared libraries. Therefore the related
    functionality cannot be used. Shared library support could probably be
    implemented in future.
    
    QNX 4 does not support UNIX domain sockets. Connections can only be made
    with TCP/IP sockets. Therefore postmaster must always be started with the
    -i option. Furthermore it would be useful to set the PGHOST variable.
    
    Prerequisites:
    --------------
    
    The following prerequisites have been used:
    
    QNX 4.25
    Watcom C 10.6
    GNU make
    flex-2.5.4a.tar.gz (flex)
    egcs111-qnx4-r20.tar[.gz] (GNU C)
    perl 5.004_04
    tcl8.0.3.tar.Z (Tcl)
    
    flex can be built without any problems using the Watcom or GNU C compilers.
    
    GNU C can be installed by
    /etc/install -u egcs111-qnx4-r20.tar[.gz]
    
    Although Tcl can be built after some slight code changes using the Watcom
    compiler, the GNU C compiler should be used instead. Otherwise it would be
    impossible to link postgres built with GNU C together with libtcl8.0.a built
    with the Watcom compiler.
    To make unix/tclUnixTest.c compilable uncomment
    #include <sys/resource.h>
    in it or
    touch /usr/include/sys/resource.h
    In unix/Makefile.in replace
    	( echo cd $(TOP_DIR)/tests\; source all ) | ./tcltest
    by
    	( echo cd ../tests\; source all ) | ./tcltest
    After that Tcl can be built and tested as stated in README.
    
    Tk cannot be built with GNU C due to the lack of a stack version of the
    X11 library. With the Watcom compiler Tk could be built but this is not useful
    because of the link problems mentioned above.
    
    Therefore the Tk interface and the pgaccess tool cannot be supported for a GNU C
    version of PostgreSQL on QNX 4.
    
    PostgreSQL:
    -----------
    
    On QNX 4 some headers are not in the directories expected. To avoid
    modifications of the code the following links should be made:
    
    ln -s /usr/local/bin/perl /usr/local/bin/perl5
    ln -s /usr/include/errno.h /usr/include/sys/errno.h
    ln -s /usr/include/ioctl.h /usr/include/sys/ioctl.h
    ln -s /usr/src/pgsql/src/backend/port/qnx4/ipc.h /usr/include/sys/ipc.h
    ln -s /usr/src/pgsql/src/backend/port/qnx4/sem.h /usr/include/sys/sem.h
    ln -s /usr/src/pgsql/src/backend/port/qnx4/shm.h /usr/include/sys/shm.h
    
    For ecgs-2.91.60 the file
    /usr/local/lib/gcc-lib/i386-pc-qnx4/egcs-2.91.60/include/g++/stl_alloc.h
    had to be patched (extern "C++" { ... } // extern "C++").
    See attached patch.
    
    If you use another ecpg version the include/g++ path in Makefile.qnx4
    (CXXFLAGS) has to be adopted.
    
    If all prerequisites are available postgres can be built and installed by
    cd pgsql/src
    ./configure --with-tcl --with-perl --with-x
    gmake all > make.log 2>&1
    gmake install > make.install.log 2>&1
    su
    cd interfaces/perl5
    gmake install
    exit
    
    All other steps can be carried out as stated in the INSTALL file.
    
    Make problems:
    --------------
    
    Sometimes the Watcom library manager wlib crashes with SIGSEGV on some
    object files. This is a general problem and not PostgreSQL related.
    Currently bootstrap.o causes such a crash. The workaround is not to include
    the object file into the SUBSYS.o but link it directly. For further information
    see backend/Makefile and backend/bootstrap/Makefile.
    libpgsql.a currently cannot be generated because of the same problem. But this
    doesn't matter since shared libraries are not supported.
    
    Currently yacc fails on backend/parser/gram.y and 
    interfaces/ecpg/preproc/preproc.y due to exceeded maximum table size. You can
    generate the gram.h, parse.h, preproc.h and preproc.c files on another platform
    and use them. This is only a problem when you use the current source tree since
    parse.h, gram.c, preproc.h and preporc.c are included in official
    distributions.
    
    Regression tests:
    -----------------
    
    The majority of regression tests succeeded. The following tests failed:
    
    geometry:
    Some slight deviation in the last digit and "0" instead of "-0".
    Can be ignored.
    
    timestamp, tinterval, abstime, horology:
    Differences for years outside the normal Unix range, e.g. 1968
    instead of 2105
    Can be ignored.
    
    rules:
    "ERROR:  Bad money external representation ..."
    if a value of type money is inserted in string representation e.g. as in
    "insert into rtest_emp values ('wiech', '5000.00');"
    Subject of further investigation.
    
    create_function_2, triggers, misc, plpgsql:
    Error messages due to the lack of shared library support.
    
    numeric, numeric_big, sanity_check:
    "ERROR:  Cannot create unique index. Table contains non-unique values"
    This error occurs for indices of tables num_exp_add, num_exp_sub,
    num_exp_div and num_exp_mul only.
    Subject of further investigation. Probably because of the missing indices
    these numeric tests take a long time.
    The diffence in sanity_check.out is a consequence of this problem only.
    
    The reached state of this port should be sufficient for lot of applications.
    
    Have fun!
    
    Andreas Kardos
    kardos@repas-aeg.de
    2000-04-04
    
    
    ---------------------------------------------------------------------------
    
    *** ./stl_alloc.h.orig	Sat Feb 28 05:17:28 1998
    --- ./stl_alloc.h	Tue Nov 23 04:14:09 1999
    ***************
    *** 120,125 ****
    --- 120,126 ----
      #pragma set woff 1174
      #endif
      
    + extern "C++" {
      // Malloc-based allocator.  Typically slower than default alloc below.
      // Typically thread-safe and more storage efficient.
      #ifdef __STL_STATIC_TEMPLATE_MEMBER_BUG
    ***************
    *** 682,687 ****
    --- 683,689 ----
      # endif
      
      #endif /* ! __USE_MALLOC */
    + } // extern "C++"
      
      #if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
      #pragma reset woff 1174