diff options
Diffstat (limited to 'doc/src/sgml/odbc.sgml')
| -rw-r--r-- | doc/src/sgml/odbc.sgml | 2088 |
1 files changed, 1048 insertions, 1040 deletions
diff --git a/doc/src/sgml/odbc.sgml b/doc/src/sgml/odbc.sgml index 82b6bc79e2..7edc130dc5 100644 --- a/doc/src/sgml/odbc.sgml +++ b/doc/src/sgml/odbc.sgml @@ -1,592 +1,597 @@ -<Chapter Id="odbc"> -<DocInfo> -<AuthorGroup> -<Author> -<FirstName>Tim</FirstName> -<Surname>Goeke</Surname> -</Author> -<Author> -<FirstName>Thomas</FirstName> -<Surname>Lockhart</Surname> -</Author> -</AuthorGroup> -<Date>1998-10-21</Date> -</DocInfo> - -<Title>ODBC Interface</Title> - -<Note> -<Para> -Background information originally by - <ULink url="mailto:tgoeke@xpressway.com">Tim Goeke</ULink> -</Para> -</Note> - -<Para> -<acronym>ODBC</acronym> (Open Database Connectivity) is an abstract -<acronym>API</acronym> -which allows you to write applications which can interoperate -with various <acronym>RDBMS</acronym> servers. -<acronym>ODBC</acronym> provides a product-neutral interface -between frontend applications and database servers, -allowing a user or developer to write applications which are -transportable between servers from different manufacturers.. -</Para> - -<Sect1> -<Title>Background</Title> - -<Para> -The <acronym>ODBC</acronym> <acronym>API</acronym> matches up -on the backend to an <acronym>ODBC</acronym>-compatible data source. -This could be anything from a text file to an Oracle or -<productname>Postgres</productname> <acronym>RDBMS</acronym>. -</Para> - -<Para> -The backend access come from <acronym>ODBC</acronym> drivers, -or vendor specifc drivers that -allow data access. <productname>psqlODBC</productname> is such a driver, - along with others that are -available, such as the OpenLink <acronym>ODBC</acronym> drivers. -</Para> - -<Para> -Once you write an <acronym>ODBC</acronym> application, -you <emphasis>should</emphasis> be able to connect to <emphasis>any</emphasis> -back end database, regardless of the vendor, as long as the database schema -is the same. -</Para> - -<Para> -For example. you could have <productname>MS SQL Server</productname> - and <productname>Postgres</productname> servers which have -exactly the same data. Using <acronym>ODBC</acronym>, -your Windows application would make exactly the -same calls and the back end data source would look the same (to the Windows -app). -</Para> - -<para> -<ulink url="http://www.insightdist.com/">Insight Distributors</ulink> -provides active and ongoing -support for the core <productname>psqlODBC</productname> distribution. -They provide a -<ulink url="http://www.insightdist.com/psqlodbc/"><acronym>FAQ</acronym></ulink>, - ongoing development on the code base, and actively participate on the -<ulink url="mailto:interfaces@postgresql.org">interfaces mailing list</ulink>. -</Para> -</sect1> - -<sect1> -<title><productname>Windows</productname> Applications</title> - -<Para> -In the real world, differences in drivers and the level of -<acronym>ODBC</acronym> support -lessens the potential of <acronym>ODBC</acronym>: - -<ItemizedList Mark="bullet" Spacing="compact"> -<ListItem> -<Para> -Access, Delphi, and Visual Basic all support <acronym>ODBC</acronym> directly. -</Para> -</listitem> -<ListItem> -<Para> -Under C++, such as Visual C++, -you can use the C++ <acronym>ODBC</acronym> <acronym>API</acronym>. -</Para> -</listitem> - -<ListItem> -<Para> -In Visual C++, you can use the CRecordSet class, which wraps the -<acronym>ODBC</acronym> <acronym>API</acronym> -set within an MFC 4.2 class. This is the easiest route if you are doing -Windows C++ development under Windows NT. -</Para> -</listitem> -</ItemizedList> -</Para> - -<sect2> -<title>Writing Applications</title> - -<Para> -<quote> -If I write an application for <productname>Postgres</productname> -can I write it using <acronym>ODBC</acronym> calls -to the <productname>Postgres</productname> server, -or is that only when another database program -like MS SQL Server or Access needs to access the data?</quote> -</para> -<Para> -The <acronym>ODBC</acronym> <acronym>API</acronym> -is the way to go. -For <productname>Visual C++</productname> coding you can find out more at -Microsoft's web site or in your <productname>VC++</productname> docs. -</Para> - -<Para> -Visual Basic and the other RAD tools have Recordset objects -that use <acronym>ODBC</acronym> -directly to access data. Using the data-aware controls, you can quickly -link to the <acronym>ODBC</acronym> back end database -(<Emphasis>very</Emphasis> quickly). -</Para> - -<Para> -Playing around with MS Access will help you sort this out. Try using -<literal>File->Get External Data</literal>. -</Para> - -<Tip> -<Para> -You'll have to set up a DSN first. -</Para> -</Tip> + <chapter id="odbc"> + <docinfo> + <authorgroup> + <author> + <firstname>Tim</firstname> + <surname>Goeke</surname> + </author> + <author> + <firstname>Thomas</firstname> + <surname>Lockhart</surname> + </author> + </authorgroup> + <date>1998-10-21</date> + </docinfo> + + <title>ODBC Interface</title> + + <note> + <para> + Background information originally by + <ulink url="mailto:tgoeke@xpressway.com">Tim Goeke</ulink> + </para> + </note> + + <para> + <acronym>ODBC</acronym> (Open Database Connectivity) is an abstract + <acronym>API</acronym> + which allows you to write applications which can interoperate + with various <acronym>RDBMS</acronym> servers. + <acronym>ODBC</acronym> provides a product-neutral interface + between frontend applications and database servers, + allowing a user or developer to write applications which are + transportable between servers from different manufacturers.. + </para> + + <sect1> + <title>Background</title> + + <para> + The <acronym>ODBC</acronym> <acronym>API</acronym> matches up + on the backend to an <acronym>ODBC</acronym>-compatible data source. + This could be anything from a text file to an Oracle or + <productname>Postgres</productname> <acronym>RDBMS</acronym>. + </para> + + <para> + The backend access come from <acronym>ODBC</acronym> drivers, + or vendor specifc drivers that + allow data access. <productname>psqlODBC</productname> is such a driver, + along with others that are + available, such as the OpenLink <acronym>ODBC</acronym> drivers. + </para> + + <para> + Once you write an <acronym>ODBC</acronym> application, + you <emphasis>should</emphasis> be able to connect to <emphasis>any</emphasis> + back end database, regardless of the vendor, as long as the database schema + is the same. + </para> + + <para> + For example. you could have <productname>MS SQL Server</productname> + and <productname>Postgres</productname> servers which have + exactly the same data. Using <acronym>ODBC</acronym>, + your Windows application would make exactly the + same calls and the back end data source would look the same (to the Windows + app). + </para> <!-- -<Para> -<Tip> -<Para> -The <productname>Postgres</productname> datetime type will break MS Access. -</Para> -</Tip> + <para> + <ulink url="http://www.insightdist.com/">Insight Distributors</ulink> + provides active and ongoing + support for the core <productname>psqlODBC</productname> distribution. + They provide a + <ulink url="http://www.insightdist.com/psqlodbc/"><acronym>FAQ</acronym></ulink>, + ongoing development on the code base, and actively participate on the + <ulink url="mailto:interfaces@postgresql.org">interfaces mailing list</ulink>. + </para> --> -</sect2> -</sect1> - -<sect1> -<title>Unix Installation</title> - -<para> -<productname>ApplixWare</productname> has an -<acronym>ODBC</acronym> database interface -supported on at least some platforms. -<productname>ApplixWare</productname> v4.4.1 has been -demonstrated under Linux with <productname>Postgres</productname> v6.4 -using the <productname>psqlODBC</productname> -driver contained in the <productname>Postgres</productname> distribution. -</Para> - -<sect2> -<title>Building the Driver</title> - -<para> -The first thing -to note about the <productname>psqlODBC</productname> driver - (or any <acronym>ODBC</acronym> driver) is that there must -exist a driver manager on the system where - the <acronym>ODBC</acronym> driver is to be -used. There exists a freeware <acronym>ODBC</acronym> driver for Unix - called <productname>iodbc</productname> which -can be obtained from various locations on the Net, including at -<ulink url="http://www.as220.org/FreeODBC/iodbc-2.12.shar.Z">AS200</ulink>. -Instructions for installing <productname>iodbc</productname> - are beyond the scope of this -document, but there is a <filename>README</filename> - that can be found inside the <productname>iodbc</productname> compressed -.shar file that should explain how to get it up and running. -</Para> - -<para> -Having said that, any driver manager that you can find for your platform -should support the <productname>psqlODBC</productname> driver - or any <acronym>ODBC</acronym> driver. -</Para> - -<para> -The Unix configuration files for <productname>psqlODBC</productname> - have recently been extensively -reworked to allow for easy building on supported platforms as -well as to allow for support of other Unix platforms in the future. -The new configuration and build files for the driver should make it -a simple process to build the driver on the supported platforms. Currently -these include Linux and FreeBSD but we are hoping other users will -contribute the necessary information to quickly expand the number of -platforms for which the driver can be built. -</Para> - -<para> -There are actually two separate methods to build the driver depending on -how you received it and these differences come down to only where and how to -run <application>configure</application> and <application>make</application>. -The driver can be built in a standalone, client-only installation, or can be -built as a part of the main <productname>Postgres</productname> distribution. -The standalone installation is convenient if you have <acronym>ODBC</acronym> -client applications on multiple, heterogeneous platforms. The integrated -installation is convenient when the target client is the same as the -server, or when the client and server have similar runtime configurations. -</Para> - -<para> -Specifically if you have received the <productname>psqlODBC</productname> - driver as part of the <productname>Postgres</productname> distribution - (from now on referred to as an "integrated" build) then you will -configure and make the <acronym>ODBC</acronym> driver - from the top level source directory -of the <productname>Postgres</productname> distribution - along with the rest of its libraries. -If you received the driver as a standalone package than you will run -configure and make from the directory in which you unpacked the -driver source. -</Para> - -<procedure> -<title>Integrated Installation</title> - -<para> -This installation procedure is appropriate for an integrated installation. -</Para> - -<step performance="required"> -<para> -Specify the <option>--with-odbc</option> -command-line argument for <application>src/configure</application>: - -<programlisting> -% ./configure --with-odbc -% make -</programlisting> -</Para> -</step> -<step performance="required"> -<para> -Rebuild the <productname>Postgres</productname> distribution: - -<programlisting> -% make install -</programlisting> -</Para> -</step> -</procedure> - -<para> -Once configured, the <acronym>ODBC</acronym> driver will be built and installed -into the areas defined for the other components of the -<productname>Postgres</productname> system. The installation-wide -<acronym>ODBC</acronym> configuration file will be placed into -the top directory of the Postgres target tree (<envar>POSTGRESDIR</envar>). -This can be overridden from the <application>make</application> command-line -as -<programlisting> -% make ODBCINST=<replaceable>filename</replaceable> install -</programlisting> -</Para> - -<procedure> -<title>Pre-v6.4 Integrated Installation</title> - -<para> -If you have a <productname>Postgres</productname> installation older than -v6.4, you have the original source tree available, -and you want to use the newest version of the <acronym>ODBC</acronym> -driver, then you may want to try this form of installation. -</Para> - -<step performance="required"> -<para> -Copy the output tar file to your target system and unpack it into a -clean directory. -</Para> -</step> -<step performance="required"> -<para> -From the directory containing the -sources, type: - -<programlisting> -% ./configure -% make -% make POSTGRESDIR=<replaceable class="parameter">PostgresTopDir</replaceable> install -</programlisting> -</Para> -</step> - -<step performance="optional"> -<para> -If you would like to install components into different trees, -then you can specify various destinations explicitly: - -<programlisting> -% make BINDIR=bindir LIBDIR=libdir HEADERDIR=headerdir ODBCINST=instfile install -</programlisting> -</Para> -</step> -</procedure> - -<procedure> -<title>Standalone Installation</title> - -<para> -A standalone installation is not integrated with or built on the normal -<productname>Postgres</productname> distribution. It should be best suited -for building the <acronym>ODBC</acronym> driver for multiple, heterogeneous -clients who do not have a locally-installed <productname>Postgres</productname> -source tree. -</Para> - -<para> -The default location for libraries and headers -for the standalone installation is <filename>/usr/local/lib</filename> - and <filename>/usr/local/include/iodbc</filename>, respectively. -There is another system wide configuration file that gets installed -as <filename>/share/odbcinst.ini</filename> (if <filename>/share</filename> - exists) or as <filename>/etc/odbcinst.ini</filename> - (if <filename>/share</filename> does not exist). -</Para> - -<note> -<para> -Installation of files into <filename>/share</filename> - or <filename>/etc</filename> requires system root privileges. -Most installation steps for <productname>Postgres</productname> do not -have this requirement, and you can choose another destination which -is writable by your non-root <productname>Postgres</productname> superuser -account instead. -</Para> -</note> - -<step performance="required"> -<para> -The standalone installation distribution can be built from the -<productname>Postgres</productname> distribution or may be obtained from -<ulink url="http://www.insightdist.com/psqlodbc">Insight Distributors</ulink>, -the current maintainers of the non-Unix sources. -</Para> - -<para> -Copy the zip -or gzipped tarfile to an empty directory. If using the zip package -unzip it with the command -<programlisting> -% unzip -a <replaceable>packagename</replaceable> -</programlisting> - -The <option>-a</option> option -is necessary to get rid of <acronym>DOS</acronym> -CR/LF pairs in the source files. -</Para> - -<para> -If you have the gzipped tar package than simply run - -<programlisting> -tar -xzf <replaceable>packagename</replaceable> -</programlisting> -</Para> - -<substeps> - -<step performance="optional"> -<para> -To create a tar file for a complete standalone installation -from the main <productname>Postgres</productname> source tree: -</Para> -</step> -</substeps> -</step> -<step performance="required"> -<para> -Configure the main <productname>Postgres</productname> distribution. -</Para> -</step> -<step performance="required"> -<para> -Create the tar file: - -<programlisting> -% cd interfaces/odbc -% make standalone -</programlisting> -</Para> -</step> - -<step performance="required"> -<para> -Copy the output tar file to your target system. Be sure to transfer as -a binary file if using <application>ftp</application>. -</Para> -</step> - -<step performance="required"> -<para> -Unpack the tar file into a clean -directory. -</Para> -</step> - -<step performance="required"> -<para> -Configure the standalone installation: - -<programlisting> -% ./configure -</programlisting> -</Para> - -<para> -The configuration can be done with options: - -<programlisting> -% ./configure --prefix=<replaceable>rootdir</replaceable> --with-odbc=<replaceable>inidir</replaceable> -</programlisting> - -where <option>--prefix</option> installs the libraries and headers in -the directories <filename><replaceable>rootdir</replaceable>/lib</filename> and -<filename><replaceable>rootdir</replaceable>/include/iodbc</filename>, and -<option>--with-odbc</option> installs <filename>odbcinst.ini</filename> in the -specified directory. -</Para> - -<para> -Note that both of these options can also be used from the integrated build -but be aware that <emphasis>when used in the integrated build</emphasis> -<option>--prefix</option> will also apply to the rest of -your <productname>Postgres</productname> installation. -<option>--with-odbc</option> applies only to the configuration file - <filename>odbcinst.ini</filename>. -</Para> -</step> - -<step performance="required"> -<para> -Compile and link the source code: - -<programlisting> -% make ODBCINST=<replaceable>instdir</replaceable> -</programlisting> -</Para> - -<para> -You can also override the default location for installation on the -'make' command line. This only applies to the installation of the -library and header files. Since the driver needs to know the location -of the odbcinst.ini file attempting to override the enviroment variable -that specifies its installation directory will probably cause you -headaches. It is safest simply to allow the driver to install the -odbcinst.ini file in the default directory or the directory you specified -on the './configure' command line with --with-odbc. -</Para> -</step> - -<!-- -This doesn't currently work - thomas 1998-10-19 -<tip> -<para> -<envar>ODBCINST</envar> can be specified during configuration or during -the compilation. It is not necessary to do so in both steps. -</tip> ---> - -<step performance="required"> -<para> -Install the source code: - -<programlisting> -% make POSTGRESDIR=<replaceable>targettree</replaceable> install -</programlisting> -</Para> - -<para> -To override the library and header installation directories separately -you need to pass the correct installation variables on the -<literal>make install</literal> command line. These variables are -<envar>LIBDIR</envar>, <envar>HEADERDIR</envar> - and <envar>ODBCINST</envar>. -Overriding <envar>POSTGRESDIR</envar> on the make command line will cause - <envar>LIBDIR</envar> and <envar>HEADERDIR</envar> - to be rooted at the new directory you specify. -<envar>ODBCINST</envar> is independent of <envar>POSTGRESDIR</envar>. -</Para> - -<para> -Here is how you would specify the various destinations explicitly: - -<programlisting> -% make BINDIR=<replaceable>bindir</replaceable> LIBDIR=<replaceable>libdir</replaceable> HEADERDIR=<replaceable>headerdir</replaceable> install -</programlisting> -</Para> - -<para> -For example, typing - -<programlisting> -% make POSTGRESDIR=/opt/psqlodbc install -</programlisting> - -(after you've used - <application>./configure</application> and <application>make</application>) -will cause the libraries and headers to be installed in the directories -<filename>/opt/psqlodbc/lib</filename> - and <filename>/opt/psqlodbc/include/iodbc</filename> respectively. -</Para> - -<para> -The command - -<programlisting> -% make POSTGRESDIR=/opt/psqlodbc HEADERDIR=/usr/local install -</programlisting> - -should cause the libraries to be installed in /opt/psqlodbc/lib and -the headers in /usr/local/include/iodbc. If this doesn't work as -expected please contact one of the maintainers. -</Para> -</step> -</procedure> -</sect2> -</sect1> - -<sect1> -<title>Configuration Files</title> - -<para> -<filename>~/.odbc.ini</filename> contains user-specified access information -for the <productname>psqlODBC</productname> driver. -The file uses conventions typical for <productname>Windows</productname> -Registry files, but despite this restriction can be made to work. -</Para> - -<para> -The <filename>.odbc.ini</filename> file has three required sections. -The first is <literal>[ODBC Data Sources]</literal> -which is a list of arbitrary names and descriptions for each database -you wish to access. The second required section is the -Data Source Specification and there will be one of these sections -for each database. -Each section must be labeled with the name given in -<literal>[ODBC Data Sources]</literal> and must contain the following entries: - -<programlisting> -Driver = <replaceable>POSTGRESDIR</replaceable>/lib/libpsqlodbc.so -Database=<replaceable>DatabaseName</replaceable> -Servername=localhost -Port=5432 -</programlisting> - -<tip> -<para> -Remember that the <productname>Postgres</productname> database name is -usually a single word, without path names of any sort. -The <productname>Postgres</productname> server manages the actual access -to the database, and you need only specify the name from the client. -</Para> -</tip> - -Other entries may be inserted to control the format of the display. -The third required section is <literal>[ODBC]</literal> -which must contain the <literal>InstallDir</literal> keyword -and which may contain other options. -</Para> - -<para> -Here is an example <filename>.odbc.ini</filename> file, -showing access information for three databases: - -<programlisting> + </sect1> + + <sect1> + <title><productname>Windows</productname> Applications</title> + + <para> + In the real world, differences in drivers and the level of + <acronym>ODBC</acronym> support + lessens the potential of <acronym>ODBC</acronym>: + + <itemizedlist spacing="compact" mark="bullet"> + <listitem> + <para> + Access, Delphi, and Visual Basic all support <acronym>ODBC</acronym> directly. + </para> + </listitem> + <listitem> + <para> + Under C++, such as Visual C++, + you can use the C++ <acronym>ODBC</acronym> <acronym>API</acronym>. + </para> + </listitem> + + <listitem> + <para> + In Visual C++, you can use the CRecordSet class, which wraps the + <acronym>ODBC</acronym> <acronym>API</acronym> + set within an MFC 4.2 class. This is the easiest route if you are doing + Windows C++ development under Windows NT. + </para> + </listitem> + </itemizedlist> + </para> + + <sect2> + <title>Writing Applications</title> + + <para> + <quote> + If I write an application for <productname>Postgres</productname> + can I write it using <acronym>ODBC</acronym> calls + to the <productname>Postgres</productname> server, + or is that only when another database program + like MS SQL Server or Access needs to access the data?</quote> + </para> + <para> + The <acronym>ODBC</acronym> <acronym>API</acronym> + is the way to go. + For <productname>Visual C++</productname> coding you can find out more at + Microsoft's web site or in your <productname>VC++</productname> docs. + </para> + + <para> + Visual Basic and the other RAD tools have Recordset objects + that use <acronym>ODBC</acronym> + directly to access data. Using the data-aware controls, you can quickly + link to the <acronym>ODBC</acronym> back end database + (<emphasis>very</emphasis> quickly). + </para> + + <para> + Playing around with MS Access will help you sort this out. Try using + <literal>File->Get External Data</literal>. + </para> + + <tip> + <para> + You'll have to set up a DSN first. + </para> + </tip> + + <!-- + <Para> + <Tip> + <Para> + The <productname>Postgres</productname> datetime type will break MS Access. + </Para> + </Tip> + --> + </sect2> + </sect1> + + <sect1> + <title>Unix Installation</title> + + <para> + <productname>ApplixWare</productname> has an + <acronym>ODBC</acronym> database interface + supported on at least some platforms. + <productname>ApplixWare</productname> v4.4.1 has been + demonstrated under Linux with <productname>Postgres</productname> v6.4 + using the <productname>psqlODBC</productname> + driver contained in the <productname>Postgres</productname> distribution. + </para> + + <sect2> + <title>Building the Driver</title> + + <para> + The first thing + to note about the <productname>psqlODBC</productname> driver + (or any <acronym>ODBC</acronym> driver) is that there must + exist a driver manager on the system where + the <acronym>ODBC</acronym> driver is to be + used. There exists a freeware <acronym>ODBC</acronym> driver for Unix + called <productname>iodbc</productname> which + can be obtained from various locations on the Net, including at + <ulink url="http://www.as220.org/FreeODBC/iodbc-2.12.shar.Z">AS200</ulink>. + Instructions for installing <productname>iodbc</productname> + are beyond the scope of this + document, but there is a <filename>README</filename> + that can be found inside the <productname>iodbc</productname> compressed + .shar file that should explain how to get it up and running. + </para> + + <para> + Having said that, any driver manager that you can find for your platform + should support the <productname>psqlODBC</productname> driver + or any <acronym>ODBC</acronym> driver. + </para> + + <para> + The Unix configuration files for <productname>psqlODBC</productname> + have recently been extensively + reworked to allow for easy building on supported platforms as + well as to allow for support of other Unix platforms in the future. + The new configuration and build files for the driver should make it + a simple process to build the driver on the supported platforms. Currently + these include Linux and FreeBSD but we are hoping other users will + contribute the necessary information to quickly expand the number of + platforms for which the driver can be built. + </para> + + <para> + There are actually two separate methods to build the driver depending on + how you received it and these differences come down to only where and how to + run <application>configure</application> and <application>make</application>. + The driver can be built in a standalone, client-only installation, or can be + built as a part of the main <productname>Postgres</productname> distribution. + The standalone installation is convenient if you have <acronym>ODBC</acronym> + client applications on multiple, heterogeneous platforms. The integrated + installation is convenient when the target client is the same as the + server, or when the client and server have similar runtime configurations. + </para> + + <para> + Specifically if you have received the <productname>psqlODBC</productname> + driver as part of the <productname>Postgres</productname> distribution + (from now on referred to as an "integrated" build) then you will + configure and make the <acronym>ODBC</acronym> driver + from the top level source directory + of the <productname>Postgres</productname> distribution + along with the rest of its libraries. + If you received the driver as a standalone package than you will run + configure and make from the directory in which you unpacked the + driver source. + </para> + + <procedure> + <title>Integrated Installation</title> + + <para> + This installation procedure is appropriate for an integrated installation. + </para> + + <step performance="required"> + <para> + Specify the <option>--with-odbc</option> + command-line argument for <application>src/configure</application>: + + <programlisting> + % ./configure --with-odbc + % make + </programlisting> + </para> + </step> + <step performance="required"> + <para> + Rebuild the <productname>Postgres</productname> distribution: + + <programlisting> + % make install + </programlisting> + </para> + </step> + </procedure> + + <para> + Once configured, the <acronym>ODBC</acronym> driver will be built and installed + into the areas defined for the other components of the + <productname>Postgres</productname> system. The installation-wide + <acronym>ODBC</acronym> configuration file will be placed into + the top directory of the Postgres target tree (<envar>POSTGRESDIR</envar>). + This can be overridden from the <application>make</application> command-line + as + <programlisting> + % make ODBCINST=<replaceable>filename</replaceable> install + </programlisting> + </para> + + <procedure> + <title>Pre-v6.4 Integrated Installation</title> + + <para> + If you have a <productname>Postgres</productname> installation older than + v6.4, you have the original source tree available, + and you want to use the newest version of the <acronym>ODBC</acronym> + driver, then you may want to try this form of installation. + </para> + + <step performance="required"> + <para> + Copy the output tar file to your target system and unpack it into a + clean directory. + </para> + </step> + <step performance="required"> + <para> + From the directory containing the + sources, type: + + <programlisting> + % ./configure + % make + % make POSTGRESDIR=<replaceable class="parameter">PostgresTopDir</replaceable> install + </programlisting> + </para> + </step> + + <step performance="optional"> + <para> + If you would like to install components into different trees, + then you can specify various destinations explicitly: + + <programlisting> + % make BINDIR=bindir LIBDIR=libdir HEADERDIR=headerdir ODBCINST=instfile install + </programlisting> + </para> + </step> + </procedure> + + <procedure> + <title>Standalone Installation</title> + + <para> + A standalone installation is not integrated with or built on the normal + <productname>Postgres</productname> distribution. It should be best suited + for building the <acronym>ODBC</acronym> driver for multiple, heterogeneous + clients who do not have a locally-installed <productname>Postgres</productname> + source tree. + </para> + + <para> + The default location for libraries and headers + for the standalone installation is <filename>/usr/local/lib</filename> + and <filename>/usr/local/include/iodbc</filename>, respectively. + There is another system wide configuration file that gets installed + as <filename>/share/odbcinst.ini</filename> (if <filename>/share</filename> + exists) or as <filename>/etc/odbcinst.ini</filename> + (if <filename>/share</filename> does not exist). + </para> + + <note> + <para> + Installation of files into <filename>/share</filename> + or <filename>/etc</filename> requires system root privileges. + Most installation steps for <productname>Postgres</productname> do not + have this requirement, and you can choose another destination which + is writable by your non-root <productname>Postgres</productname> superuser + account instead. + </para> + </note> + + <step performance="required"> + <para> + The standalone installation distribution can be built from the + <productname>Postgres</productname> distribution or may be obtained from + <ulink url="http://www.insightdist.com/psqlodbc">Insight Distributors</ulink>, + the current maintainers of the non-Unix sources. + </para> + + <para> + Copy the zip + or gzipped tarfile to an empty directory. If using the zip package + unzip it with the command + <programlisting> + % unzip -a <replaceable>packagename</replaceable> + </programlisting> + + The <option>-a</option> option + is necessary to get rid of <acronym>DOS</acronym> + CR/LF pairs in the source files. + </para> + + <para> + If you have the gzipped tar package than simply run + + <programlisting> + tar -xzf <replaceable>packagename</replaceable> + </programlisting> + </para> + + <substeps> + + <step performance="optional"> + <para> + To create a tar file for a complete standalone installation + from the main <productname>Postgres</productname> source tree: + </para> + </step> + </substeps> + </step> + <step performance="required"> + <para> + Configure the main <productname>Postgres</productname> distribution. + </para> + </step> + <step performance="required"> + <para> + Create the tar file: + + <programlisting> + % cd interfaces/odbc + % make standalone + </programlisting> + </para> + </step> + + <step performance="required"> + <para> + Copy the output tar file to your target system. Be sure to transfer as + a binary file if using <application>ftp</application>. + </para> + </step> + + <step performance="required"> + <para> + Unpack the tar file into a clean + directory. + </para> + </step> + + <step performance="required"> + <para> + Configure the standalone installation: + + <programlisting> + % ./configure + </programlisting> + </para> + + <para> + The configuration can be done with options: + + <programlisting> + % ./configure --prefix=<replaceable>rootdir</replaceable> + --with-odbc=<replaceable>inidir</replaceable> + </programlisting> + + where <option>--prefix</option> installs the libraries and headers in + the directories <filename><replaceable>rootdir</replaceable>/lib</filename> and + <filename><replaceable>rootdir</replaceable>/include/iodbc</filename>, and + <option>--with-odbc</option> installs <filename>odbcinst.ini</filename> in the + specified directory. + </para> + + <para> + Note that both of these options can also be used from the integrated build + but be aware that <emphasis>when used in the integrated build</emphasis> + <option>--prefix</option> will also apply to the rest of + your <productname>Postgres</productname> installation. + <option>--with-odbc</option> applies only to the configuration file + <filename>odbcinst.ini</filename>. + </para> + </step> + + <step performance="required"> + <para> + Compile and link the source code: + + <programlisting> + % make ODBCINST=<replaceable>instdir</replaceable> + </programlisting> + </para> + + <para> + You can also override the default location for installation on the + 'make' command line. This only applies to the installation of the + library and header files. Since the driver needs to know the location + of the odbcinst.ini file attempting to override the enviroment variable + that specifies its installation directory will probably cause you + headaches. It is safest simply to allow the driver to install the + odbcinst.ini file in the default directory or the directory you specified + on the './configure' command line with --with-odbc. + </para> + </step> + + <!-- + This doesn't currently work - thomas 1998-10-19 + <tip> + <para> + <envar>ODBCINST</envar> can be specified during configuration or during + the compilation. It is not necessary to do so in both steps. + </tip> + --> + + <step performance="required"> + <para> + Install the source code: + + <programlisting> + % make POSTGRESDIR=<replaceable>targettree</replaceable> install + </programlisting> + </para> + + <para> + To override the library and header installation directories separately + you need to pass the correct installation variables on the + <literal>make install</literal> command line. These variables are + <envar>LIBDIR</envar>, <envar>HEADERDIR</envar> + and <envar>ODBCINST</envar>. + Overriding <envar>POSTGRESDIR</envar> on the make command line will cause + <envar>LIBDIR</envar> and <envar>HEADERDIR</envar> + to be rooted at the new directory you specify. + <envar>ODBCINST</envar> is independent of <envar>POSTGRESDIR</envar>. + </para> + + <para> + Here is how you would specify the various destinations explicitly: + + <programlisting> + % make BINDIR=<replaceable>bindir</replaceable> + LIBDIR<replaceable>>libdi</replaceable>> + HEADERDIR=<replaceable>headerdir</replaceable> install + </programlisting> + </para> + + <para> + For example, typing + + <programlisting> + % make POSTGRESDIR=/opt/psqlodbc install + </programlisting> + + (after you've used + <application>./configure</application> and <application>make</application>) + will cause the libraries and headers to be installed in the directories + <filename>/opt/psqlodbc/lib</filename> + and <filename>/opt/psqlodbc/include/iodbc</filename> respectively. + </para> + + <para> + The command + + <programlisting> + % make POSTGRESDIR=/opt/psqlodbc HEADERDIR=/usr/local install + </programlisting> + + should cause the libraries to be installed in /opt/psqlodbc/lib and + the headers in /usr/local/include/iodbc. If this doesn't work as + expected please contact one of the maintainers. + </para> + </step> + </procedure> + </sect2> + </sect1> + + <sect1> + <title>Configuration Files</title> + + <para> + <filename>~/.odbc.ini</filename> contains user-specified access information + for the <productname>psqlODBC</productname> driver. + The file uses conventions typical for <productname>Windows</productname> + Registry files, but despite this restriction can be made to work. + </para> + + <para> + The <filename>.odbc.ini</filename> file has three required sections. + The first is <literal>[ODBC Data Sources]</literal> + which is a list of arbitrary names and descriptions for each database + you wish to access. The second required section is the + Data Source Specification and there will be one of these sections + for each database. + Each section must be labeled with the name given in + <literal>[ODBC Data Sources]</literal> and must contain the following entries: + + <programlisting> + Driver = <replaceable>POSTGRESDIR</replaceable>/lib/libpsqlodbc.so + Database=<replaceable>DatabaseName</replaceable> + Servername=localhost + Port=5432 + </programlisting> + + <tip> + <para> + Remember that the <productname>Postgres</productname> database name is + usually a single word, without path names of any sort. + The <productname>Postgres</productname> server manages the actual access + to the database, and you need only specify the name from the client. + </para> + </tip> + + Other entries may be inserted to control the format of the display. + The third required section is <literal>[ODBC]</literal> + which must contain the <literal>InstallDir</literal> keyword + and which may contain other options. + </para> + + <para> + Here is an example <filename>.odbc.ini</filename> file, + showing access information for three databases: + + <programlisting> [ODBC Data Sources] DataEntry = Read/Write Database QueryOnly = Read-only Database @@ -620,465 +625,468 @@ Driver = /opt/postgres/current/lib/libpsqlodbc.so [ODBC] InstallDir = /opt/applix/axdata/axshlib -</programlisting> -</Para> -</sect1> -<sect1> -<title>ApplixWare</title> - -<sect2> -<title>Configuration</title> - -<para> -<productname>ApplixWare</productname> must be configured correctly - in order for it to -be able to access the <productname>Postgres</productname> - <acronym>ODBC</acronym> software drivers. -</Para> - -<procedure> -<title>Enabling ApplixWare Database Access</title> - -<para> -These instructions are for the 4.4.1 release of - <productname>ApplixWare</productname> on <productname>Linux</productname>. -Refer to the <citetitle>Linux Sys Admin</citetitle> on-line book - for more detailed information. -</Para> - -<step performance="required"> -<para> -You must modify <filename>axnet.cnf</filename> so that - <filename>elfodbc</filename> can -find <filename>libodbc.so</filename> - (the <acronym>ODBC</acronym> driver manager) shared library. -This library is included with the ApplixWare distribution, -but <filename>axnet.cnf</filename> needs to be modified to point to the -correct location. -</Para> - -<para> -As root, edit the file -<filename><replaceable>applixroot</replaceable>/applix/axdata/axnet.cnf</filename>. -</Para> - -<substeps> - -<step performance="required"> -<para> -At the bottom of <filename>axnet.cnf</filename>, -find the line that starts with - -<programlisting> -#libFor elfodbc /ax/<replaceable>...</replaceable> -</programlisting> -</Para> -</step> -<step performance="required"> -<para> -Change line to read - -<programlisting> -libFor elfodbc <replaceable>applixroot</replaceable>/applix/axdata/axshlib/lib -</programlisting> - -which will tell elfodbc to look in this directory -for the <acronym>ODBC</acronym> support library. -If you have installed applix somewhere else, -change the path accordingly. -</Para> -</step> -</substeps> -</step> - -<step performance="required"> -<para> -Create <filename>.odbc.ini</filename> as -described above. You may also want to add the flag - -<programlisting> -TextAsLongVarchar=0 -</programlisting> - -to the database-specific portion of <filename>.odbc.ini</filename> -so that text fields will not be shown as <literal>**BLOB**</literal>. -</Para> -</step> -</procedure> - -<procedure> -<title>Testing ApplixWare ODBC Connections</title> - -<step performance="required"> -<para> - Bring up <application>Applix Data</application> -</Para> -</step> - -<step performance="required"> -<para> -Select the <productname>Postgres</productname> database of interest. -</Para> - -<substeps> - -<step performance="required"> -<para> -Select <command>Query->Choose Server</command>. -</Para> -</step> -<step performance="required"> -<para> - Select <acronym>ODBC</acronym>, and click <command>Browse</command>. -The database you configured in <filename>.odbc.ini</filename> - should be shown. Make sure that the <option>Host: field</option> - is empty (if it is not, axnet will try to contact axnet on another machine - to look for the database). -</Para> -</step> -<step performance="required"> -<para> -Select the database in the box that was launched by <command>Browse</command>, - then click <command>OK</command>. -</Para> -</step> -<step performance="required"> -<para> -Enter username and password in the login identification dialog, - and click <command>OK</command>. -</Para> -</step> -</substeps> - -<para> - You should see <quote>Starting elfodbc server</quote> - in the lower left corner of the - data window. If you get an error dialog box, see the debugging section - below. -</Para> -</step> -<step performance="required"> -<para> - The 'Ready' message will appear in the lower left corner of the data - window. This indicates that you can now enter queries. -</Para> -</step> -<step performance="required"> -<para> - Select a table from Query->Choose tables, and then select Query->Query - to access the database. The first 50 or so rows from the table should - appear. -</Para> -</step> -</procedure> -</sect2> - -<sect2> -<title>Common Problems</title> - -<para> -The following messages can appear while trying to make an -<acronym>ODBC</acronym> connection through -<productname>Applix Data</productname>: - -<variablelist> -<varlistentry> -<term> -Cannot launch gateway on server -</term> -<listitem> -<para> -<literal>elfodbc</literal> can't find <filename>libodbc.so</filename>. -Check your <filename>axnet.cnf</filename>. -</Para> -</listitem> -</varlistentry> - -<varlistentry> -<term> -Error from ODBC Gateway: -IM003::[iODBC][Driver Manager]Specified driver could not be loaded -</term> -<listitem> -<para> -<filename>libodbc.so</filename> cannot find the driver listed in -<filename>.odbc.ini</filename>. Verify the settings. -</Para> -</listitem> -</varlistentry> - -<varlistentry> -<term> -Server: Broken Pipe -</term> - -<listitem> -<para> + </programlisting> + </para> + </sect1> + <sect1> + <title>ApplixWare</title> + + <sect2> + <title>Configuration</title> + + <para> + <productname>ApplixWare</productname> must be configured correctly + in order for it to + be able to access the <productname>Postgres</productname> + <acronym>ODBC</acronym> software drivers. + </para> + + <procedure> + <title>Enabling ApplixWare Database Access</title> + + <para> + These instructions are for the <literal>4.4.2</literal> release of + <productname>ApplixWare</productname> on <productname>Linux</productname>. + Refer to the <citetitle>Linux Sys Admin</citetitle> on-line book + for more detailed information. + </para> + + <step performance="required"> + <para> + You must modify <filename>axnet.cnf</filename> so that + <filename>elfodbc</filename> can + find <filename>libodbc.so</filename> + (the <acronym>ODBC</acronym> driver manager) shared library. + This library is included with the ApplixWare distribution, + but <filename>axnet.cnf</filename> needs to be modified to point to the + correct location. + </para> + + <para> + As root, edit the file + <filename><replaceable>applixroot</replaceable>/applix/axdata/axnet.cnf</filename>. + </para> + + <substeps> + + <step performance="required"> + <para> + At the bottom of <filename>axnet.cnf</filename>, + find the line that starts with + + <programlisting> + #libFor elfodbc /ax/<replaceable>...</replaceable> + </programlisting> + </para> + </step> + <step performance="required"> + <para> + Change line to read + + <programlisting> + libFor elfodbc <replaceable>applixroot</replaceable>/applix/axdata/axshlib/lib + </programlisting> + + which will tell elfodbc to look in this directory + for the <acronym>ODBC</acronym> support library. + Typically <productname>Applix</productname> is installed in + <filename>/opt</filename> so the full path would be + <filename>/opt/applix/axdata/axshlib/lib</filename>, + but if you have installed applix somewhere else then + change the path accordingly. + </para> + </step> + </substeps> + </step> + + <step performance="required"> + <para> + Create <filename>.odbc.ini</filename> as + described above. You may also want to add the flag + + <programlisting> + TextAsLongVarchar=0 + </programlisting> + + to the database-specific portion of <filename>.odbc.ini</filename> + so that text fields will not be shown as <literal>**BLOB**</literal>. + </para> + </step> + </procedure> + + <procedure> + <title>Testing ApplixWare ODBC Connections</title> + + <step performance="required"> + <para> + Bring up <application>Applix Data</application> + </para> + </step> + + <step performance="required"> + <para> + Select the <productname>Postgres</productname> database of interest. + </para> + + <substeps> + + <step performance="required"> + <para> + Select <command>Query->Choose Server</command>. + </para> + </step> + <step performance="required"> + <para> + Select <acronym>ODBC</acronym>, and click <command>Browse</command>. + The database you configured in <filename>.odbc.ini</filename> + should be shown. Make sure that the <option>Host: field</option> + is empty (if it is not, axnet will try to contact axnet on another machine + to look for the database). + </para> + </step> + <step performance="required"> + <para> + Select the database in the box that was launched by <command>Browse</command>, + then click <command>OK</command>. + </para> + </step> + <step performance="required"> + <para> + Enter username and password in the login identification dialog, + and click <command>OK</command>. + </para> + </step> + </substeps> + + <para> + You should see <quote>Starting elfodbc server</quote> + in the lower left corner of the + data window. If you get an error dialog box, see the debugging section + below. + </para> + </step> + <step performance="required"> + <para> + The 'Ready' message will appear in the lower left corner of the data + window. This indicates that you can now enter queries. + </para> + </step> + <step performance="required"> + <para> + Select a table from Query->Choose tables, and then select Query->Query + to access the database. The first 50 or so rows from the table should + appear. + </para> + </step> + </procedure> + </sect2> + + <sect2> + <title>Common Problems</title> + + <para> + The following messages can appear while trying to make an + <acronym>ODBC</acronym> connection through + <productname>Applix Data</productname>: + + <variablelist> + <varlistentry> + <term> + Cannot launch gateway on server + </term> + <listitem> + <para> + <literal>elfodbc</literal> can't find <filename>libodbc.so</filename>. + Check your <filename>axnet.cnf</filename>. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + Error from ODBC Gateway: + IM003::[iODBC][Driver Manager]Specified driver could not be loaded + </term> + <listitem> + <para> + <filename>libodbc.so</filename> cannot find the driver listed in + <filename>.odbc.ini</filename>. Verify the settings. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + Server: Broken Pipe + </term> + + <listitem> + <para> The driver process has terminated due to some other problem. You might not have an up-to-date version of the <productname>Postgres</productname> -<acronym>ODBC</acronym> package. -</Para> -</listitem> -</varlistentry> - -<varlistentry> -<term> -setuid to 256: failed to launch gateway -</term> - -<listitem> -<para> -The September release of ApplixWare v4.4.1 (the first release with official -<acronym>ODBC</acronym> support under Linux) shows problems when usernames -exceed eight (8) characters in length. -Problem description ontributed by -<ulink url="mailto:scampbell@lear.com">Steve Campbell</ulink>. -</Para> -</listitem> -</varlistentry> - -</variablelist> -</para> - -<para> -<note> -<title>Author</title> - -<para> -Contributed by -<ulink url="mailto:scampbell@lear.com">Steve Campbell</ulink> on -1998-10-20. -</para> -</note> - -The <application>axnet</application> program's security system - seems a little suspect. <application>axnet</application> does things - on behalf of the user and on a true - multiple user system it really should be run with root security -(so it can read/write in each user's directory). -I would hesitate to recommend this, however, since we have no idea what -security holes this creates. -</para> -</sect2> - -<sect2> -<title>Debugging ApplixWare ODBC Connections</title> - -<para> -One good tool for debugging connection problems uses the Unix system -utility <application>strace</application>. -</para> -<procedure> -<title>Debugging with strace</title> - -<step performance="required"> -<para> -Start applixware. -</para> -</step> -<step performance="required"> -<para> -Start an <application>strace</application> on -the axnet process. For example, if - -<programlisting> -ps -aucx | grep ax -</programlisting> - -shows - -<programlisting> -cary 10432 0.0 2.6 1740 392 ? S Oct 9 0:00 axnet -cary 27883 0.9 31.0 12692 4596 ? S 10:24 0:04 axmain -</programlisting> -</para> - -<para> -Then run - -<programlisting> - strace -f -s 1024 -p 10432 -</programlisting> -</para> -</step> - -<step performance="required"> -<para> -Check the strace output. -</para> -<note> -<title>Note from Cary</title> - -<para> -Many of the error messages from <productname>ApplixWare</productname> -go to <filename>stderr</filename>, -but I'm not sure where <filename>stderr</filename> -is sent, so <application>strace</application> is the way to find out. -</para> -</note> -</step> -</procedure> - -<para> - For example, after getting -a <quote>Cannot launch gateway on server</quote>, -I ran strace on axnet and got - -<programlisting> -[pid 27947] open("/usr/lib/libodbc.so", O_RDONLY) = -1 ENOENT - (No such file or directory) -[pid 27947] open("/lib/libodbc.so", O_RDONLY) = -1 ENOENT - (No such file or directory) -[pid 27947] write(2, "/usr2/applix/axdata/elfodbc: - can't load library 'libodbc.so'\n", 61) = -1 EIO (I/O error) -</programlisting> -So what is happening is that applix elfodbc is searching for libodbc.so, but it -can't find it. That is why axnet.cnf needed to be changed. -</para> -</sect2> - -<sect2> -<title>Running the ApplixWare Demo</title> - -<para> -In order to go through the -<citetitle>ApplixWare Data Tutorial</citetitle>, you need to create -the sample tables that the Tutorial refers to. The ELF Macro used to -create the tables tries to use a NULL condition -on many of the database columns, -and <productname>Postgres</productname> does not currently allow this option. -</para> -<para> -To get around this problem, you can do the following: -</para> - -<procedure> -<title>Modifying the ApplixWare Demo</title> - -<step performance="required"> -<para> -Copy <filename>/opt/applix/axdata/eng/Demos/sqldemo.am</filename> - to a local directory. -</para> -</step> - -<step performance="required"> -<para> -Edit this local copy of <filename>sqldemo.am</filename>: -</para> - -<substeps> - -<step performance="required"> -<para> -Search for 'null_clause = "NULL" -</para> -</step> - -<step performance="required"> -<para> -Change this to null_clause = "" -</para> -</step> - -</substeps> -</step> -<step performance="required"> -<para> -Start <application>Applix Macro Editor</application>. -</para> -</step> - -<step performance="required"> -<para> -Open the sqldemo.am file from the <application>Macro Editor</application>. -</para> -</step> - -<step performance="required"> -<para> -Select <command>File->Compile and Save</command>. -</para> -</step> - -<step performance="required"> -<para> -Exit <application>Macro Editor</application>. -</para> -</step> - -<step performance="required"> -<para> -Start <application>Applix Data</application>. -</para> -</step> - -<step performance="required"> -<para> -Select <command>*->Run Macro</command> -</para> -</step> - -<step performance="required"> -<para> -Enter the value <quote>sqldemo</quote>, then click <command>OK</command>. -</para> - -<para> -You should see the progress in the status line of the data window - (in the lower left corner). -</para> -</step> - -<step performance="required"> -<para> -You should now be able to access the demo tables. -</para> -</step> -</procedure> -</sect2> -<sect2> -<title>Useful Macros</title> - -<para> -You can add information about your -database login and password to the standard Applix startup -macro file. This is an example -<filename>~/axhome/macros/login.am</filename> file: - -<programlisting> -macro login - set_set_system_var@("sql_username@","tgl") - set_system_var@("sql_passwd@","no$way") -endmacro -</programlisting> - -<caution> -<para> -You should be careful about the file protections on any file containing -username and password information. -</para> -</caution> -</para> -</sect2> -<sect2> -<title>Supported Platforms</title> - -<para> -<productname>psqlODBC</productname> has been built and tested -on <productname>Linux</productname>. There have been reports of success -with FreeBSD and with Solaris. There are no known restrictions -on the basic code for other platforms which already support -<productname>Postgres</productname>. -</para> -</sect2> -</sect1> -</Chapter> + <acronym>ODBC</acronym> package. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + setuid to 256: failed to launch gateway + </term> + + <listitem> + <para> + The September release of ApplixWare v4.4.1 (the first release with official + <acronym>ODBC</acronym> support under Linux) shows problems when usernames + exceed eight (8) characters in length. + Problem description ontributed by + <ulink url="mailto:scampbell@lear.com">Steve Campbell</ulink>. + </para> + </listitem> + </varlistentry> + + </variablelist> + </para> + + <para> + <note> + <title>Author</title> + + <para> + Contributed by + <ulink url="mailto:scampbell@lear.com">Steve Campbell</ulink> on + 1998-10-20. + </para> + </note> + + The <application>axnet</application> program's security system + seems a little suspect. <application>axnet</application> does things + on behalf of the user and on a true + multiple user system it really should be run with root security + (so it can read/write in each user's directory). + I would hesitate to recommend this, however, since we have no idea what + security holes this creates. + </para> + </sect2> + + <sect2> + <title>Debugging ApplixWare ODBC Connections</title> + + <para> + One good tool for debugging connection problems uses the Unix system + utility <application>strace</application>. + </para> + <procedure> + <title>Debugging with strace</title> + + <step performance="required"> + <para> + Start applixware. + </para> + </step> + <step performance="required"> + <para> + Start an <application>strace</application> on + the axnet process. For example, if + + <programlisting> + ps -aucx | grep ax + </programlisting> + + shows + + <programlisting> + cary 10432 0.0 2.6 1740 392 ? S Oct 9 0:00 axnet + cary 27883 0.9 31.0 12692 4596 ? S 10:24 0:04 axmain + </programlisting> + </para> + + <para> + Then run + + <programlisting> + strace -f -s 1024 -p 10432 + </programlisting> + </para> + </step> + + <step performance="required"> + <para> + Check the strace output. + </para> + <note> + <title>Note from Cary</title> + + <para> + Many of the error messages from <productname>ApplixWare</productname> + go to <filename>stderr</filename>, + but I'm not sure where <filename>stderr</filename> + is sent, so <application>strace</application> is the way to find out. + </para> + </note> + </step> + </procedure> + + <para> + For example, after getting + a <quote>Cannot launch gateway on server</quote>, + I ran strace on axnet and got + + <programlisting> + [pid 27947] open("/usr/lib/libodbc.so", O_RDONLY) = -1 ENOENT + (No such file or directory) + [pid 27947] open("/lib/libodbc.so", O_RDONLY) = -1 ENOENT + (No such file or directory) + [pid 27947] write(2, "/usr2/applix/axdata/elfodbc: + can't load library 'libodbc.so'\n", 61) = -1 EIO (I/O error) + </programlisting> + So what is happening is that applix elfodbc is searching for libodbc.so, but it + can't find it. That is why axnet.cnf needed to be changed. + </para> + </sect2> + + <sect2> + <title>Running the ApplixWare Demo</title> + + <para> + In order to go through the + <citetitle>ApplixWare Data Tutorial</citetitle>, you need to create + the sample tables that the Tutorial refers to. The ELF Macro used to + create the tables tries to use a NULL condition + on many of the database columns, + and <productname>Postgres</productname> does not currently allow this option. + </para> + <para> + To get around this problem, you can do the following: + </para> + + <procedure> + <title>Modifying the ApplixWare Demo</title> + + <step performance="required"> + <para> + Copy <filename>/opt/applix/axdata/eng/Demos/sqldemo.am</filename> + to a local directory. + </para> + </step> + + <step performance="required"> + <para> + Edit this local copy of <filename>sqldemo.am</filename>: + </para> + + <substeps> + + <step performance="required"> + <para> + Search for 'null_clause = "NULL" + </para> + </step> + + <step performance="required"> + <para> + Change this to null_clause = "" + </para> + </step> + + </substeps> + </step> + <step performance="required"> + <para> + Start <application>Applix Macro Editor</application>. + </para> + </step> + + <step performance="required"> + <para> + Open the sqldemo.am file from the <application>Macro Editor</application>. + </para> + </step> + + <step performance="required"> + <para> + Select <command>File->Compile and Save</command>. + </para> + </step> + + <step performance="required"> + <para> + Exit <application>Macro Editor</application>. + </para> + </step> + + <step performance="required"> + <para> + Start <application>Applix Data</application>. + </para> + </step> + + <step performance="required"> + <para> + Select <command>*->Run Macro</command> + </para> + </step> + + <step performance="required"> + <para> + Enter the value <quote>sqldemo</quote>, then click <command>OK</command>. + </para> + + <para> + You should see the progress in the status line of the data window + (in the lower left corner). + </para> + </step> + + <step performance="required"> + <para> + You should now be able to access the demo tables. + </para> + </step> + </procedure> + </sect2> + <sect2> + <title>Useful Macros</title> + + <para> + You can add information about your + database login and password to the standard Applix startup + macro file. This is an example + <filename>~/axhome/macros/login.am</filename> file: + + <programlisting> + macro login + set_set_system_var@("sql_username@","tgl") + set_system_var@("sql_passwd@","no$way") + endmacro + </programlisting> + + <caution> + <para> + You should be careful about the file protections on any file containing + username and password information. + </para> + </caution> + </para> + </sect2> + <sect2> + <title>Supported Platforms</title> + + <para> + <productname>psqlODBC</productname> has been built and tested + on <productname>Linux</productname>. There have been reports of success + with FreeBSD and with Solaris. There are no known restrictions + on the basic code for other platforms which already support + <productname>Postgres</productname>. + </para> + </sect2> + </sect1> + </chapter> <!-- Keep this comment at the end of the file Local variables: -mode: sgml +mode:sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil @@ -1088,7 +1096,7 @@ sgml-indent-data:t sgml-parent-document:nil sgml-default-dtd-file:"./reference.ced" sgml-exposed-tags:nil -sgml-local-catalogs:"/usr/lib/sgml/CATALOG" +sgml-local-catalogs:("/usr/lib/sgml/CATALOG") sgml-local-ecat-files:nil End: --> |
