From 9761f1a07e5cd05e4f3a78ab99fd0b21dc7fc7e3 Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Mon, 21 Oct 2002 23:10:09 +0000 Subject: [PATCH] Move odbc.sgml to gborg ODBC project. --- doc/src/sgml/odbc.sgml | 805 ----------------------------------------- 1 file changed, 805 deletions(-) delete mode 100644 doc/src/sgml/odbc.sgml diff --git a/doc/src/sgml/odbc.sgml b/doc/src/sgml/odbc.sgml deleted file mode 100644 index cbc40624767..00000000000 --- a/doc/src/sgml/odbc.sgml +++ /dev/null @@ -1,805 +0,0 @@ -<!-- -$Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.30 2002/03/22 19:20:16 petere Exp $ ---> - - <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> - - <indexterm zone="odbc"> - <primary>ODBC</primary> - </indexterm> - - <sect1 id="odbc-intro"> - <title>Introduction</title> - - <note> - <para> - Background information originally by Tim Goeke - (<email>tgoeke@xpressway.com</email>) - </para> - </note> - - <para> - <acronym>ODBC</acronym> (Open Database Connectivity) is an abstract - <acronym>API</acronym> - that allows you to write applications that 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 that are - portable between servers from different manufacturers.. - </para> - - <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>PostgreSQL</productname> <acronym>RDBMS</acronym>. - </para> - - <para> - The backend access comes from <acronym>ODBC</acronym> drivers, - or vendor-specific drivers that - allow data access. <productname>psqlODBC</productname>, which is included in the <productname>PostgreSQL</> distribution, is such a driver, - along with others that are - available, such as the <productname>OpenLink</productname> <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>PostgreSQL</productname> servers that 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 - application). - </para> - </sect1> - - <sect1 id="odbc-install"> - <title>Installation</title> - - <para> - In order to make use of an <acronym>ODBC</> driver there must - exist a <firstterm>driver manager</> on the system where the - <acronym>ODBC</> driver is to be used. There are two free - <acronym>ODBC</> driver managers for Unix-like operating systems - known to us: <indexterm><primary>iODBC</primary></indexterm> - <ulink url="http://www.iodbc.org"><productname>iODBC</></ulink> - and <indexterm><primary>unixODBC</primary></indexterm> <ulink - url="http://www.unixodbc.org"><productname>unixODBC</></ulink>. - Instructions for installing these driver managers are to be found - in the respective distribution. Software that provides database - access through <acronym>ODBC</acronym> should provide its own - driver manager (which may well be one of these two). Having said - that, any driver manager that you can find for your platform - should support the <productname>PostgreSQL</> <acronym>ODBC</> - driver, or any other <acronym>ODBC</> driver for that matter. - </para> - - <note> - <para> - The <productname>unixODBC</> distribution ships with a - <productname>PostgreSQL</> <acronym>ODBC</> driver of its own, - which is similar to the one contained in the - <productname>PostgreSQL</> distribution. It is up to you which - one you want to use. We plan to coordinate the development of - both drivers better in the future. - </para> - </note> - - <para> - To install the <acronym>ODBC</> you simply need to supply the - <option>--enable-odbc</> option to the <filename>configure</> - script when you are building the entire <productname>PostgreSQL</> - distribution. The library will then automatically be built and - installed with the rest of the programs. If you forget that option - or want to build the ODBC driver later you can change into the - directory <filename>src/interfaces/odbc</> and do <literal>make</> - and <literal>make install</> there. - </para> - - <para> - It is also possible to build the driver to be specifically tuned - for use with <productname>iODBC</> or <productname>unixODBC</>. - This means in particular that the driver will use the driver - manager's routines to process the configuration files, which is - probably desirable since it creates a more consistent - <acronym>ODBC</> environment on your system. If you want to do - that, then supply the <filename>configure</> options - <option>--with-iodbc</> or <option>--with-unixodbc</> (but not - both). - </para> - - <para> - If you build a <quote>stand-alone</quote> driver (not tied to - <productname>iODBC</> or <productname>unixODBC</>), then you can - specify where the driver should look for the configuration file - <filename>odbcinst.ini</>. By default it will be the directory - <filename>/usr/local/pgsql/etc/</>, or equivalent, depending on - what <option>--prefix</> and/or <option>--sysconfdir</> options - you supplied to <filename>configure</>. To select a specific - location outside the <productname>PostgreSQL</> installation - layout, use the <option>--with-odbcinst</> option. To be most - useful, it should be arranged that the driver and the driver - manager read the same configuration file. - </para> - - <para> - <indexterm><primary>odbc.sql</></> - Additionally, you should install the ODBC catalog extensions. That will - provide a number of functions mandated by the ODBC standard that are not - supplied by <productname>PostgreSQL</> by default. The file - <filename>/usr/local/pgsql/share/odbc.sql</> (in the default installation layout) - contains the appropriate definitions, which you can install as follows: -<programlisting> -psql -d template1 -f <replaceable>LOCATION</>/odbc.sql -</programlisting> - where specifying <literal>template1</literal> as the target - database will ensure that all subsequent new databases will have - these same definitions. If for any reason you want to remove - these functions again, run the file - <filename>odbc-drop.sql</filename> through - <command>psql</command>. - </para> - </sect1> - - <sect1 id="odbc-config"> - <title>Configuration Files</title> - - <indexterm zone="odbc-config"><primary>.odbc.ini</></> - - <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. - </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>prefix</replaceable>/lib/libpsqlodbc.so -Database = <replaceable>DatabaseName</replaceable> -Servername = localhost -Port = 5432 -</programlisting> - - <tip> - <para> - Remember that the <productname>PostgreSQL</productname> database name is - usually a single word, without path names of any sort. - The <productname>PostgreSQL</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 -Test = Debugging Database -Default = Postgres Stripped - -[DataEntry] -ReadOnly = 0 -Servername = localhost -Database = Sales - -[QueryOnly] -ReadOnly = 1 -Servername = localhost -Database = Sales - -[Test] -Debug = 1 -CommLog = 1 -ReadOnly = 0 -Servername = localhost -Username = tgl -Password = "no$way" -Port = 5432 -Database = test - -[Default] -Servername = localhost -Database = tgl -Driver = /opt/postgres/current/lib/libpsqlodbc.so - -[ODBC] -InstallDir = /opt/applix/axdata/axshlib -</programlisting> - </para> - </sect1> - - <sect1 id="odbc-windows"> - <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 <classname>CRecordSet</classname> class, which wraps the - <acronym>ODBC</acronym> <acronym>API</acronym> - set within an <application>MFC</application> 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>PostgreSQL</productname> - can I write it using <acronym>ODBC</acronym> calls - to the <productname>PostgreSQL</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>Visual C++</productname> - documentation. - </para> - - <para> - Visual Basic and the other <acronym>RAD</acronym> tools have <classname>Recordset</classname> 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 <productname>MS Access</> will help you sort this out. Try using - <menuchoice><guimenu>File</><guimenuitem>Get External Data</></menuchoice>. - </para> - - <tip> - <para> - You'll have to set up a <acronym>DSN</acronym> first. - </para> - </tip> - - </sect2> - </sect1> - - <sect1 id="odbc-applixware"> - <title><application>ApplixWare</application></title> - - <indexterm zone="odbc-applixware"> - <primary>Applixware</primary> - </indexterm> - - <para> - <productname>Applixware</productname> has an - <acronym>ODBC</acronym> database interface - supported on at least some platforms. - <productname>Applixware</productname> 4.4.2 has been - demonstrated under Linux with <productname>PostgreSQL</productname> 7.0 - using the <productname>psqlODBC</productname> - driver contained in the <productname>PostgreSQL</productname> distribution. - </para> - - <sect2> - <title>Configuration</title> - - <para> - <productname>Applixware</productname> must be configured correctly - in order for it to - be able to access the <productname>PostgreSQL</productname> - <acronym>ODBC</acronym> software drivers. - </para> - - <procedure> - <title>Enabling <application>Applixware</application> Database Access</title> - - <para> - These instructions are for the 4.4.2 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 <application>Applixware</application> 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 <literal>elfodbc</literal> 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 <productname>Applix</productname> - somewhere else then change the path accordingly. - </para> - </step> - </substeps> - </step> - - <step performance="required"> - <para> - Create <filename>.odbc.ini</filename> as - described in <xref linkend="odbc-config">. 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 <application>Applixware</application> ODBC Connections</title> - - <step performance="required"> - <para> - Bring up <application>Applix Data</application> - </para> - </step> - - <step performance="required"> - <para> - Select the <productname>PostgreSQL</productname> database of interest. - </para> - - <substeps> - - <step performance="required"> - <para> - Select <menuchoice><guimenu>Query</guimenu><guimenuitem>Choose Server</guimenuitem></menuchoice>. - </para> - </step> - <step performance="required"> - <para> - Select <guimenuitem>ODBC</guimenuitem>, and click <guibutton>Browse</guibutton>. - The database you configured in <filename>.odbc.ini</filename> - should be shown. Make sure that the <guilabel>Host:</guilabel> field - is empty (if it is not, <literal>axnet</> will try to contact <literal>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 <guibutton>Browse</guibutton>, - then click <guibutton>OK</guibutton>. - </para> - </step> - <step performance="required"> - <para> - Enter user name and password in the login identification dialog, - and click <guibutton>OK</guibutton>. - </para> - </step> - </substeps> - - <para> - You should see <guilabel>Starting elfodbc server</guilabel> - 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 <quote>Ready</quote> 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 - <menuchoice><guimenu>Query</><guimenuitem>Choose - tables</></menuchoice>, and then select - <menuchoice><guimenu>Query</><guimenuitem>Query</></menuchoice> - 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> - <computeroutput>Cannot launch gateway on server</computeroutput> - </term> - <listitem> - <para> - <literal>elfodbc</literal> can't find <filename>libodbc.so</filename>. - Check your <filename>axnet.cnf</filename>. - </para> - </listitem> - </varlistentry> - - <varlistentry> - <term><computeroutput> - Error from ODBC Gateway: - IM003::[iODBC][Driver Manager]Specified driver could not be loaded</computeroutput> - </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> - <computeroutput>Server: Broken Pipe</computeroutput> - </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>PostgreSQL</productname> - <acronym>ODBC</acronym> package. - </para> - </listitem> - </varlistentry> - - <varlistentry> - <term> - <computeroutput>setuid to 256: failed to launch gateway</computeroutput> - </term> - - <listitem> - <para> - The September release of <application>Applixware</application> 4.4.1 (the first release with official - <acronym>ODBC</acronym> support under Linux) shows problems when user names - exceed eight (8) characters in length. - Problem description contributed by Steve Campbell - (<email>scampbell@lear.com</email>). - </para> - </listitem> - </varlistentry> - - </variablelist> - </para> - - <para> - <note> - <title>Author</title> - - <para> - Contributed by Steve Campbell (<email>scampbell@lear.com</email>), - 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 - multiuser 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 <application>Applixware</application> ODBC Connections</title> - - <para> - One good tool for debugging connection problems uses the Unix system - utility <application>strace</application>. - </para> - <procedure> - <title>Debugging with <command>strace</command></title> - - <step performance="required"> - <para> - Start <application>Applixware</application>. - </para> - </step> - <step performance="required"> - <para> - Start an <application>strace</application> on - the <literal>axnet</literal> process. For example, if - -<screen> -<prompt>$</prompt> <userinput>ps -aucx | grep ax</userinput> -</screen> - - shows - -<screen> -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 -</screen> - </para> - - <para> - Then run - -<screen> -<prompt>$</prompt> <userinput>strace -f -s 1024 -p 10432</userinput> -</screen> - </para> - </step> - - <step performance="required"> - <para> - Check the <command>strace</command> 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 <command>strace</command> is the way to find out. - </para> - </note> - </step> - </procedure> - - <para> - For example, after getting - a <errorname>Cannot launch gateway on server</errorname>, - I ran <command>strace</command> on <literal>axnet</literal> and got - -<screen> -[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) -</screen> - So what is happening is that <literal>applix elfodbc</literal> is searching for <filename>libodbc.so</filename>, but it - cannot find it. That is why <filename>axnet.cnf</filename> needed to be changed. - </para> - </sect2> - - <sect2> - <title>Running the <application>Applixware</application> Demo</title> - - <comment>I think the condition this refers to is gone. -- petere 2002-01-07</comment> - - <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>PostgreSQL</productname> does not currently allow this option. - </para> - - <para> - To get around this problem, you can do the following: - </para> - - <procedure> - <title>Modifying the <application>Applixware</application> 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 <literal>null_clause = "NULL"</literal>. - </para> - </step> - - <step performance="required"> - <para> - Change this to <literal>null_clause = ""</literal>. - </para> - </step> - - </substeps> - </step> - <step performance="required"> - <para> - Start <application>Applix Macro Editor</application>. - </para> - </step> - - <step performance="required"> - <para> - Open the <filename>sqldemo.am</filename> file from the <application>Macro Editor</application>. - </para> - </step> - - <step performance="required"> - <para> - Select <menuchoice><guimenu>File</><guimenuitem>Compile and Save</></menuchoice>. - </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 <menuchoice><guimenu>*</><guimenuitem>Run Macro</guimenuitem></menuchoice>. - </para> - </step> - - <step performance="required"> - <para> - Enter the value <literal>sqldemo</literal>, then click <guibutton>OK</guibutton>. - </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 <application>Applix</application> start-up - 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 - user name and password information. - </para> - </caution> - </para> - </sect2> - - </sect1> - </chapter> - -<!-- Keep this comment at the end of the file -Local variables: -mode:sgml -sgml-omittag:t -sgml-shorttag:t -sgml-minimize-attributes:nil -sgml-always-quote-attributes:t -sgml-indent-step:1 -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-ecat-files:nil -End: ---> -- GitLab