Move contrib/odbc/odbc.sql together with odbc driver, remove old files;
revise ODBC "installation instructions"; update some other outdated documentation; update contrib documentation
This commit is contained in:
parent
7cce011178
commit
2acdef186d
@ -1,82 +0,0 @@
|
|||||||
|
|
||||||
The PostgreSQL contrib:
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
tips/apache_logging -
|
|
||||||
Getting Apache to log to PostgreSQL
|
|
||||||
by Terry Mackintosh <terry@terrym.com>
|
|
||||||
|
|
||||||
array -
|
|
||||||
Array iterator functions
|
|
||||||
by Massimo Dal Zotto <dz@cs.unitn.it>
|
|
||||||
|
|
||||||
earthdistance -
|
|
||||||
Operator for computing earth distance for two points
|
|
||||||
by Hal Snyder <hal@vailsys.com>
|
|
||||||
|
|
||||||
findoidjoins -
|
|
||||||
Finds the joins used by oid columns by examining the actual
|
|
||||||
values in the oid columns and row oids.
|
|
||||||
by Bruce Momjian <root@candle.pha.pa.us>
|
|
||||||
|
|
||||||
fulltextindex -
|
|
||||||
Full text indexing using triggers
|
|
||||||
by Maarten Boekhold <maartenb@dutepp0.et.tudelft.nl>
|
|
||||||
|
|
||||||
isbn_issn -
|
|
||||||
PostgreSQL type extensions for ISBN (books) and ISSN (serials)
|
|
||||||
by Garrett A. Wollman <wollman@khavrinen.lcs.mit.edu>
|
|
||||||
|
|
||||||
linux -
|
|
||||||
Start postgres back end system
|
|
||||||
by Thomas Lockhart <lockhart@alumni.caltech.edu>
|
|
||||||
|
|
||||||
lo -
|
|
||||||
Large Object maintenance
|
|
||||||
by Peter Mount <peter@retep.org.uk>
|
|
||||||
|
|
||||||
miscutil -
|
|
||||||
Postgres assert checking and various utility functions
|
|
||||||
by Dal Zotto <dz@cs.unitn.it>
|
|
||||||
|
|
||||||
mSQL-interface -
|
|
||||||
mSQL API translation library
|
|
||||||
by Aldrin Leal <aldrin@americasnet.com>
|
|
||||||
|
|
||||||
noupdate -
|
|
||||||
trigger to prevent updates on single columns
|
|
||||||
|
|
||||||
|
|
||||||
pg_dumplo -
|
|
||||||
Dump large objects
|
|
||||||
by Karel Zak <zakkr@zf.jcu.cz>
|
|
||||||
|
|
||||||
soundex -
|
|
||||||
Prototype for soundex function
|
|
||||||
|
|
||||||
spi -
|
|
||||||
A general trigger function autoinc() and so on.
|
|
||||||
|
|
||||||
string -
|
|
||||||
C-like input/output conversion routines for strings
|
|
||||||
by Massimo Dal Zotto <dz@cs.unitn.it>
|
|
||||||
|
|
||||||
tools -
|
|
||||||
Assorted developer tools
|
|
||||||
by Massimo Dal Zotto <dz@cs.unitn.it>
|
|
||||||
|
|
||||||
unixdate -
|
|
||||||
Conversions from integer to datetime
|
|
||||||
by Thomas Lockhart <lockhart@alumni.caltech.edu>
|
|
||||||
|
|
||||||
userlock -
|
|
||||||
User locks
|
|
||||||
by Massimo Dal Zotto <dz@cs.unitn.it>
|
|
||||||
|
|
||||||
vacuumlo -
|
|
||||||
Remove orphaned large objects
|
|
||||||
by Peter T Mount <peter@retep.org.uk>
|
|
||||||
|
|
||||||
pgbench -
|
|
||||||
TPC-B like benchmarking tool
|
|
||||||
by Tatsuo Ishii <t-ishii@sra.co.jp>
|
|
@ -1,12 +1,8 @@
|
|||||||
#
|
# $Header: /cvsroot/pgsql/contrib/Makefile,v 1.8 2000/09/18 20:11:34 petere Exp $
|
||||||
# The PostgreSQL contrib tree Makefile
|
|
||||||
#
|
|
||||||
# $Header: /cvsroot/pgsql/contrib/Makefile,v 1.7 2000/07/16 14:50:29 petere Exp $
|
|
||||||
#
|
|
||||||
|
|
||||||
subdir = contrib
|
subdir = contrib
|
||||||
top_builddir = ..
|
top_builddir = ..
|
||||||
include ../src/Makefile.global
|
include $(top_builddir)/src/Makefile.global
|
||||||
|
|
||||||
WANTED_DIRS = array \
|
WANTED_DIRS = array \
|
||||||
earthdistance \
|
earthdistance \
|
||||||
@ -16,6 +12,7 @@ WANTED_DIRS = array \
|
|||||||
linux \
|
linux \
|
||||||
lo \
|
lo \
|
||||||
mSQL-interface \
|
mSQL-interface \
|
||||||
|
mac \
|
||||||
miscutil \
|
miscutil \
|
||||||
noupdate \
|
noupdate \
|
||||||
pg_dumplo \
|
pg_dumplo \
|
||||||
@ -27,19 +24,10 @@ WANTED_DIRS = array \
|
|||||||
unixdate \
|
unixdate \
|
||||||
userlock \
|
userlock \
|
||||||
vacuumlo
|
vacuumlo
|
||||||
# odbc
|
|
||||||
|
|
||||||
all install installdirs uninstall clean distclean maintainer-clean:
|
all install installdirs uninstall clean distclean maintainer-clean:
|
||||||
for dir in $(WANTED_DIRS); do \
|
for dir in $(WANTED_DIRS); do \
|
||||||
if [ -e $$dir/Makefile ]; then \
|
if [ -e $$dir/Makefile ]; then \
|
||||||
$(MAKE) -C $$dir $@ ; \
|
$(MAKE) -C $$dir $@; \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
install:
|
|
||||||
for dir in $(WANTED_DIRS); do \
|
|
||||||
if [ -e $$dir/Makefile ]; then \
|
|
||||||
$(MAKE) -C $$dir $@ ; \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
$(INSTALL_DATA) Contrib.index $(docdir)/contrib
|
|
||||||
|
160
contrib/README
160
contrib/README
@ -1,81 +1,109 @@
|
|||||||
|
The PostgreSQL contrib tree
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The PostgreSQL contrib tree
|
This subtree contains tools, modules, and examples that are not
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
maintained as part of the core PostgreSQL system, mainly because
|
||||||
|
they only address a limited audience or are too inelegant to be
|
||||||
|
sold as an official feature. That, however, does not preclude
|
||||||
|
their usefulness.
|
||||||
|
|
||||||
FIXME:
|
Each subdirectory contains a README file with information about the
|
||||||
odbc
|
module. Most items can be built with `gmake all' and installed
|
||||||
spi/preprocessor
|
with `gmake install' in the usual fashion, after you have run the
|
||||||
tools
|
`configure' script in the top-level directory. Some directories
|
||||||
|
supply new user-defined functions, operators, or types. After you
|
||||||
|
have installed the files you need to register the new entities in
|
||||||
|
the database system by running the commands in the supplied .sql
|
||||||
|
file. For example,
|
||||||
|
|
||||||
- the contrib contain is in the "Contrib.index"
|
$ psql -d dbname -f module.sql
|
||||||
|
|
||||||
- in each directory must be Makefile, possible Makefile template
|
See the PostgreSQL documentation for more information about this
|
||||||
is below this text,
|
procedure.
|
||||||
|
|
||||||
--------
|
|
||||||
#
|
|
||||||
# $Header: /cvsroot/pgsql/contrib/README,v 1.19 2000/06/19 13:52:59 momjian Exp $
|
|
||||||
#
|
|
||||||
|
|
||||||
TOPDIR=../..
|
|
||||||
|
|
||||||
include ../Makefile.global
|
|
||||||
|
|
||||||
NAME = some_name
|
|
||||||
|
|
||||||
PROGRAM =
|
|
||||||
OBJS = $(NAME).o
|
|
||||||
DOCS = $(NAME).doc
|
|
||||||
SQLS = $(NAME).sql
|
|
||||||
BINS =
|
|
||||||
EXAMPLES=
|
|
||||||
MODS = $(NAME)$(DLSUFFIX)
|
|
||||||
|
|
||||||
CFLAGS += -I. $(CFLAGS_SL)
|
|
||||||
|
|
||||||
OTHER_CLEAN = $(SQLS)
|
|
||||||
|
|
||||||
all: $(MODS) $(SQLS)
|
|
||||||
|
|
||||||
%.sql: %.sql.in
|
|
||||||
$(SED) "s|MODULE_PATHNAME|$(CONTRIB_MODDIR)/$@|" < $< > $@
|
|
||||||
|
|
||||||
|
|
||||||
install: install_doc install_sql install_mod install_bin install_example
|
Index:
|
||||||
|
------
|
||||||
|
|
||||||
install_doc:
|
array -
|
||||||
for inst_file in $(DOCS); do \
|
Array iterator functions
|
||||||
$(INSTALL) $(INSTL_LIB_OPTS) $$inst_file $(CONTRIB_DOCDIR); \
|
by Massimo Dal Zotto <dz@cs.unitn.it>
|
||||||
done
|
|
||||||
|
|
||||||
install_sql:
|
earthdistance -
|
||||||
for inst_file in $(SQLS); do \
|
Operator for computing earth distance for two points
|
||||||
$(INSTALL) $(INSTL_LIB_OPTS) $$inst_file $(CONTRIB_SQLDIR); \
|
by Hal Snyder <hal@vailsys.com>
|
||||||
done
|
|
||||||
|
|
||||||
install_mod:
|
findoidjoins -
|
||||||
for inst_file in $(MODS); do \
|
Finds the joins used by oid columns by examining the actual
|
||||||
$(INSTALL) $(INSTL_SHLIB_OPTS) $$inst_file $(CONTRIB_MODDIR); \
|
values in the oid columns and row oids.
|
||||||
done
|
by Bruce Momjian <pgman@candle.pha.pa.us>
|
||||||
|
|
||||||
install_bin:
|
fulltextindex -
|
||||||
for inst_file in $(BINS); do \
|
Full text indexing using triggers
|
||||||
$(INSTALL) $(INSTL_EXE_OPTS) $$inst_file $(CONTRIB_BINDIR); \
|
by Maarten Boekhold <maartenb@dutepp0.et.tudelft.nl>
|
||||||
done
|
|
||||||
|
|
||||||
install_example:
|
isbn_issn -
|
||||||
for inst_file in $(EXAMPLES); do \
|
PostgreSQL type extensions for ISBN (books) and ISSN (serials)
|
||||||
$(INSTALL) $(INSTL_LIB_OPTS) $$inst_file $(CONTRIB_EXAMPLESDIR); \
|
by Garrett A. Wollman <wollman@khavrinen.lcs.mit.edu>
|
||||||
done
|
|
||||||
|
|
||||||
depend dep:
|
linux -
|
||||||
$(CC) -MM -MG $(CFLAGS) *.c > depend
|
Scripts for starting and stopping the PostgreSQL server on
|
||||||
|
a Linux system
|
||||||
|
by Thomas Lockhart <lockhart@alumni.caltech.edu>
|
||||||
|
|
||||||
clean:
|
lo -
|
||||||
$(RM) *~ $(OBJS) $(MODS) $(PROGRAM) depend $(OTHER_CLEAN) core log
|
Large Object maintenance
|
||||||
|
by Peter Mount <peter@retep.org.uk>
|
||||||
|
|
||||||
ifeq (depend,$(wildcard depend))
|
mSQL-interface -
|
||||||
include depend
|
mSQL API translation library
|
||||||
endif
|
by Aldrin Leal <aldrin@americasnet.com>
|
||||||
-----------
|
|
||||||
|
|
||||||
|
mac -
|
||||||
|
Support functions for MAC address types
|
||||||
|
by Lawrence E. Rosenman <ler@lerctr.org>
|
||||||
|
|
||||||
|
miscutil -
|
||||||
|
PostgreSQL assert checking and various utility functions
|
||||||
|
by Massimo Dal Zotto <dz@cs.unitn.it>
|
||||||
|
|
||||||
|
noupdate -
|
||||||
|
trigger to prevent updates on single columns
|
||||||
|
|
||||||
|
pgbench -
|
||||||
|
TPC-B like benchmarking tool
|
||||||
|
by Tatsuo Ishii <t-ishii@sra.co.jp>
|
||||||
|
|
||||||
|
pg_dumplo -
|
||||||
|
Dump large objects
|
||||||
|
by Karel Zak <zakkr@zf.jcu.cz>
|
||||||
|
|
||||||
|
soundex -
|
||||||
|
Soundex function
|
||||||
|
|
||||||
|
spi -
|
||||||
|
Various trigger functions, examples for using SPI.
|
||||||
|
|
||||||
|
string -
|
||||||
|
C-like input/output conversion routines for strings
|
||||||
|
by Massimo Dal Zotto <dz@cs.unitn.it>
|
||||||
|
|
||||||
|
tips/apache_logging -
|
||||||
|
Getting Apache to log to PostgreSQL
|
||||||
|
by Terry Mackintosh <terry@terrym.com>
|
||||||
|
|
||||||
|
tools -
|
||||||
|
Assorted developer tools
|
||||||
|
by Massimo Dal Zotto <dz@cs.unitn.it>
|
||||||
|
|
||||||
|
unixdate -
|
||||||
|
Conversions from integer to datetime
|
||||||
|
by Thomas Lockhart <lockhart@alumni.caltech.edu>
|
||||||
|
|
||||||
|
userlock -
|
||||||
|
User locks
|
||||||
|
by Massimo Dal Zotto <dz@cs.unitn.it>
|
||||||
|
|
||||||
|
vacuumlo -
|
||||||
|
Remove orphaned large objects
|
||||||
|
by Peter T Mount <peter@retep.org.uk>
|
||||||
|
8
contrib/mac/README.mac
Normal file
8
contrib/mac/README.mac
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
This directory contains tools to create a mapping table from MAC
|
||||||
|
addresses (e.g., Ethernet hardware addresses) to human-readable
|
||||||
|
manufacturer strings. The `createoui' script builds the table
|
||||||
|
structure, `updateoui' obtains the current official mapping table
|
||||||
|
from the web site of the IEEE, converts it, and stores it in the
|
||||||
|
database, `dropoui' removes everything. Use the --help option to
|
||||||
|
get more usage information from the respective script. All three
|
||||||
|
use the psql program; any extra arguments will be passed to psql.
|
@ -1,48 +0,0 @@
|
|||||||
# ODBC extensions
|
|
||||||
# Thomas Lockhart 2000-04-03
|
|
||||||
|
|
||||||
subdir = contrib/odbc
|
|
||||||
top_builddir = ../..
|
|
||||||
include $(top_builddir)/src/Makefile.global
|
|
||||||
|
|
||||||
ifndef PGLIB
|
|
||||||
PGLIB= .
|
|
||||||
endif
|
|
||||||
|
|
||||||
CFLAGS+= $(CFLAGS_SL)
|
|
||||||
|
|
||||||
TARGETS_7= odbc.sql
|
|
||||||
TARGETS_PRE7= odbc$(DLSUFFIX) odbc-pre7.sql
|
|
||||||
|
|
||||||
TARGETS= $(TARGETS_7)
|
|
||||||
|
|
||||||
CLEANFILES+= $(TARGETS) $(TARGETS_PRE7)
|
|
||||||
|
|
||||||
all: $(TARGETS)
|
|
||||||
|
|
||||||
install: all
|
|
||||||
ifneq ($(filter odbc$(DLSUFFIX), $(TARGETS)),)
|
|
||||||
-test -d $(PGLIB) || $(INSTALL) -d $(PGLIB)
|
|
||||||
$(INSTALL) odbc$(DLSUFFIX) $(PGLIB)
|
|
||||||
endif
|
|
||||||
|
|
||||||
pre7:
|
|
||||||
$(MAKE) TARGETS="$(TARGETS) $(TARGETS_PRE7)"
|
|
||||||
|
|
||||||
install-pre7:
|
|
||||||
$(MAKE) TARGETS="$(TARGETS) $(TARGETS_PRE7)" install
|
|
||||||
|
|
||||||
odbc-pre7.sql: odbc-pre7.source odbc.sql
|
|
||||||
rm -f $@; \
|
|
||||||
cat $^ \
|
|
||||||
| sed -e "s:_OBJWD_:$(PGLIB):g" \
|
|
||||||
-e "s:_DLSUFFIX_:$(DLSUFFIX):g" \
|
|
||||||
-e "s:float(15):float8:g" > $@
|
|
||||||
|
|
||||||
%.sql: %.source
|
|
||||||
rm -f $@; \
|
|
||||||
sed -e "s:_OBJWD_:$(PGLIB):g" \
|
|
||||||
-e "s:_DLSUFFIX_:$(DLSUFFIX):g" < $< > $@
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f $(TARGETS) *.o
|
|
@ -1,38 +0,0 @@
|
|||||||
This directory contains support functions for the ODBC driver
|
|
||||||
supplied with PostgreSQL-7.0.
|
|
||||||
|
|
||||||
To enable additional ODBC functions with PostgreSQL-7.0, simply
|
|
||||||
execute the commands in odbc.sql:
|
|
||||||
|
|
||||||
psql
|
|
||||||
Welcome to psql, the PostgreSQL interactive terminal.
|
|
||||||
|
|
||||||
Type: \copyright for distribution terms
|
|
||||||
\h for help with SQL commands
|
|
||||||
\? for help on internal slash commands
|
|
||||||
\g or terminate with semicolon to execute query
|
|
||||||
\q to quit
|
|
||||||
|
|
||||||
postgres=# \i odbc.sql
|
|
||||||
CREATE
|
|
||||||
...
|
|
||||||
|
|
||||||
|
|
||||||
To enable additional ODBC functions with versions of PostgreSQL
|
|
||||||
prior to PostgreSQL-7.0 (e.g. PostgreSQL-6.5.3), build the shared
|
|
||||||
library and SQL commands as follows:
|
|
||||||
|
|
||||||
make pre7
|
|
||||||
psql
|
|
||||||
Welcome to psql, the PostgreSQL interactive terminal.
|
|
||||||
|
|
||||||
Type: \copyright for distribution terms
|
|
||||||
\h for help with SQL commands
|
|
||||||
\? for help on internal slash commands
|
|
||||||
\g or terminate with semicolon to execute query
|
|
||||||
\q to quit
|
|
||||||
|
|
||||||
postgres=# \i odbc-pre7.sql
|
|
||||||
CREATE
|
|
||||||
...
|
|
||||||
|
|
@ -1,162 +0,0 @@
|
|||||||
-- ODBC-pre7.sql
|
|
||||||
--
|
|
||||||
-- Use float8 rather than float(15) since pre-7.0 does not accept
|
|
||||||
-- SQL92 type names of this form in the CREATE FUNCTION command.
|
|
||||||
--
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Character string manipulation
|
|
||||||
--
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Compatibility functions for pre-v7.0.
|
|
||||||
-- These should be applied to pre-v7.0 databases
|
|
||||||
-- when using the v7.0 ODBC driver.
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE FUNCTION char_length(text)
|
|
||||||
RETURNS integer
|
|
||||||
AS 'SELECT length(CAST($1 AS text))'
|
|
||||||
LANGUAGE 'SQL';
|
|
||||||
|
|
||||||
CREATE FUNCTION pow(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS 'SELECT dpow($1)'
|
|
||||||
LANGUAGE 'SQL';
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Extensions for ODBC compliance in v7.0.
|
|
||||||
-- In the current driver, ODBC functions must map directly into a
|
|
||||||
-- Postgres function. So in some cases we must create a compatible
|
|
||||||
-- function.
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE FUNCTION ascii(text)
|
|
||||||
RETURNS integer
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'ascii'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION ichar(integer)
|
|
||||||
RETURNS char(1)
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'ichar'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION insert(text, integer, integer, text)
|
|
||||||
RETURNS text
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'insert'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
-- replace all occurences of $2 with $3
|
|
||||||
CREATE FUNCTION replace(text, text, text)
|
|
||||||
RETURNS text
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'replace'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
-- return the string repeated n times
|
|
||||||
CREATE FUNCTION repeat(text, integer)
|
|
||||||
RETURNS text
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'repeat'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Mathematical functions for pre-v7.0
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE FUNCTION dround(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'dround'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION round(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS 'SELECT dround($1)'
|
|
||||||
LANGUAGE 'SQL';
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Math functions present in backend, but not in catalog for v7.0
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE FUNCTION acos(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'dacos'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION asin(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'dasin'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION atan(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'datan'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION atan2(float8,float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'datan2'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION cos(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'dcos'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION cot(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'dcot'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION sin(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'dsin'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION dtan(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'dtan'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION degrees(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'degrees'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION pi()
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'dpi'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION radians(float8)
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'radians'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
-- random number generator currently requires RAND_MAX be available
|
|
||||||
CREATE FUNCTION random()
|
|
||||||
RETURNS float8
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_', 'drandom'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION truncate(numeric,integer)
|
|
||||||
RETURNS numeric
|
|
||||||
AS 'SELECT trunc($1, $2)'
|
|
||||||
LANGUAGE 'SQL';
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Date/time functions for v7.0
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE FUNCTION interval_mul(interval,float8)
|
|
||||||
RETURNS interval
|
|
||||||
AS '_OBJWD_/odbc_DLSUFFIX_'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE OPERATOR * (
|
|
||||||
LEFTARG = interval,
|
|
||||||
RIGHTARG = float8,
|
|
||||||
PROCEDURE = interval_mul
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,403 +0,0 @@
|
|||||||
#include "postgres.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <float.h> /* faked on sunos4 */
|
|
||||||
#include <math.h>
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
#include "fmgr.h"
|
|
||||||
#include "utils/timestamp.h"
|
|
||||||
#include "utils/builtins.h"
|
|
||||||
|
|
||||||
|
|
||||||
int4 ascii(text *string);
|
|
||||||
text *ichar(int4 cvalue);
|
|
||||||
text *repeat(text *string, int4 count);
|
|
||||||
Interval *interval_mul(Interval *span1, float8 *arg2);
|
|
||||||
float64 dasin(float64 arg1);
|
|
||||||
float64 datan(float64 arg1);
|
|
||||||
float64 datan2(float64 arg1, float64 arg2);
|
|
||||||
float64 dcos(float64 arg1);
|
|
||||||
float64 dcot(float64 arg1);
|
|
||||||
float64 dsin(float64 arg1);
|
|
||||||
float64 dtan(float64 arg1);
|
|
||||||
float64 degrees(float64 arg1);
|
|
||||||
float64 dpi(void);
|
|
||||||
float64 radians(float64 arg1);
|
|
||||||
float64 drandom(void);
|
|
||||||
void setseed(int32 seed);
|
|
||||||
|
|
||||||
|
|
||||||
int4
|
|
||||||
ascii(text *string)
|
|
||||||
{
|
|
||||||
if (!PointerIsValid(string))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (VARSIZE(string) <= VARHDRSZ)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return ((int) *(VARDATA(string)));
|
|
||||||
} /* ascii() */
|
|
||||||
|
|
||||||
|
|
||||||
text *
|
|
||||||
ichar(int4 cvalue)
|
|
||||||
{
|
|
||||||
text *result;
|
|
||||||
|
|
||||||
result = (text *) palloc(VARHDRSZ + 1);
|
|
||||||
VARSIZE(result) = VARHDRSZ + 1;
|
|
||||||
*VARDATA(result) = (char) cvalue;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
} /* ichar() */
|
|
||||||
|
|
||||||
|
|
||||||
text *
|
|
||||||
repeat(text *string, int4 count)
|
|
||||||
{
|
|
||||||
text *result;
|
|
||||||
int slen, tlen;
|
|
||||||
int i;
|
|
||||||
char *cp;
|
|
||||||
|
|
||||||
if (count < 0)
|
|
||||||
count = 0;
|
|
||||||
|
|
||||||
slen = (VARSIZE(string)-VARHDRSZ);
|
|
||||||
tlen = (VARHDRSZ + (count * slen));
|
|
||||||
|
|
||||||
result = (text *) palloc(tlen);
|
|
||||||
|
|
||||||
VARSIZE(result) = tlen;
|
|
||||||
cp = VARDATA(result);
|
|
||||||
for (i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
memcpy(cp, VARDATA(string), slen);
|
|
||||||
cp += slen;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
} /* ichar() */
|
|
||||||
|
|
||||||
Interval *
|
|
||||||
interval_mul(Interval *span1, float8 *arg2)
|
|
||||||
{
|
|
||||||
Interval *result;
|
|
||||||
double months;
|
|
||||||
|
|
||||||
if ((!PointerIsValid(span1)) || (!PointerIsValid(arg2)))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (!PointerIsValid(result = palloc(sizeof(Interval))))
|
|
||||||
elog(ERROR, "Memory allocation failed, can't divide intervals");
|
|
||||||
|
|
||||||
months = (span1->month * *arg2);
|
|
||||||
result->month = rint(months);
|
|
||||||
result->time = JROUND(span1->time * *arg2);
|
|
||||||
result->time += JROUND((months - result->month) * 30);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
} /* interval_mul() */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* dasin - returns a pointer to the arcsin of arg1 (radians)
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
dasin(float64 arg1)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
double tmp;
|
|
||||||
|
|
||||||
if (!PointerIsValid(arg1))
|
|
||||||
return (float64) NULL;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
tmp = *arg1;
|
|
||||||
errno = 0;
|
|
||||||
*result = (float64data) asin(tmp);
|
|
||||||
if (errno != 0
|
|
||||||
#ifdef HAVE_FINITE
|
|
||||||
|| !finite(*result)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
elog(ERROR, "dasin(%f) input is out of range", *arg1);
|
|
||||||
|
|
||||||
CheckFloat8Val(*result);
|
|
||||||
return result;
|
|
||||||
} /* dasin() */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* datan - returns a pointer to the arctan of arg1 (radians)
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
datan(float64 arg1)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
double tmp;
|
|
||||||
|
|
||||||
if (!PointerIsValid(arg1))
|
|
||||||
return (float64) NULL;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
tmp = *arg1;
|
|
||||||
errno = 0;
|
|
||||||
*result = (float64data) atan(tmp);
|
|
||||||
if (errno != 0
|
|
||||||
#ifdef HAVE_FINITE
|
|
||||||
|| !finite(*result)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
elog(ERROR, "atan(%f) input is out of range", *arg1);
|
|
||||||
|
|
||||||
CheckFloat8Val(*result);
|
|
||||||
return result;
|
|
||||||
} /* datan() */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* atan2 - returns a pointer to the arctan2 of arg1 (radians)
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
datan2(float64 arg1, float64 arg2)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
|
|
||||||
if (!PointerIsValid(arg1) || !PointerIsValid(arg1))
|
|
||||||
return (float64) NULL;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
errno = 0;
|
|
||||||
*result = (float64data) atan2(*arg1, *arg2);
|
|
||||||
if (errno != 0
|
|
||||||
#ifdef HAVE_FINITE
|
|
||||||
|| !finite(*result)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
elog(ERROR, "atan2(%f,%f) input is out of range", *arg1, *arg2);
|
|
||||||
|
|
||||||
CheckFloat8Val(*result);
|
|
||||||
return result;
|
|
||||||
} /* datan2() */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* dcos - returns a pointer to the cosine of arg1 (radians)
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
dcos(float64 arg1)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
double tmp;
|
|
||||||
|
|
||||||
if (!PointerIsValid(arg1))
|
|
||||||
return (float64) NULL;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
tmp = *arg1;
|
|
||||||
errno = 0;
|
|
||||||
*result = (float64data) cos(tmp);
|
|
||||||
if (errno != 0
|
|
||||||
#ifdef HAVE_FINITE
|
|
||||||
|| !finite(*result)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
elog(ERROR, "dcos(%f) input is out of range", *arg1);
|
|
||||||
|
|
||||||
CheckFloat8Val(*result);
|
|
||||||
return result;
|
|
||||||
} /* dcos() */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* dcot - returns a pointer to the cotangent of arg1 (radians)
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
dcot(float64 arg1)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
double tmp;
|
|
||||||
|
|
||||||
if (!PointerIsValid(arg1))
|
|
||||||
return (float64) NULL;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
tmp = *arg1;
|
|
||||||
errno = 0;
|
|
||||||
*result = (float64data) tan(tmp);
|
|
||||||
if ((errno != 0) || (*result == 0.0)
|
|
||||||
#ifdef HAVE_FINITE
|
|
||||||
|| !finite(*result)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
elog(ERROR, "dcot(%f) input is out of range", *arg1);
|
|
||||||
|
|
||||||
*result = 1.0/(*result);
|
|
||||||
CheckFloat8Val(*result);
|
|
||||||
return result;
|
|
||||||
} /* dcot() */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* dsin - returns a pointer to the sine of arg1 (radians)
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
dsin(float64 arg1)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
double tmp;
|
|
||||||
|
|
||||||
if (!PointerIsValid(arg1))
|
|
||||||
return (float64) NULL;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
tmp = *arg1;
|
|
||||||
errno = 0;
|
|
||||||
*result = (float64data) sin(tmp);
|
|
||||||
if (errno != 0
|
|
||||||
#ifdef HAVE_FINITE
|
|
||||||
|| !finite(*result)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
elog(ERROR, "dsin(%f) input is out of range", *arg1);
|
|
||||||
|
|
||||||
CheckFloat8Val(*result);
|
|
||||||
return result;
|
|
||||||
} /* dsin() */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* dtan - returns a pointer to the tangent of arg1 (radians)
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
dtan(float64 arg1)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
double tmp;
|
|
||||||
|
|
||||||
if (!PointerIsValid(arg1))
|
|
||||||
return (float64) NULL;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
tmp = *arg1;
|
|
||||||
errno = 0;
|
|
||||||
*result = (float64data) tan(tmp);
|
|
||||||
if (errno != 0
|
|
||||||
#ifdef HAVE_FINITE
|
|
||||||
|| !finite(*result)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
elog(ERROR, "dtan(%f) input is out of range", *arg1);
|
|
||||||
|
|
||||||
CheckFloat8Val(*result);
|
|
||||||
return result;
|
|
||||||
} /* dtan() */
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef M_PI
|
|
||||||
/* from my RH5.2 gcc math.h file - thomas 2000-04-03 */
|
|
||||||
#define M_PI 3.14159265358979323846
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* degrees - returns a pointer to degrees converted from radians
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
degrees(float64 arg1)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
|
|
||||||
if (!arg1)
|
|
||||||
return (float64) NULL;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
*result = ((*arg1) * (180.0 / M_PI));
|
|
||||||
|
|
||||||
CheckFloat8Val(*result);
|
|
||||||
return result;
|
|
||||||
} /* degrees() */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* dpi - returns a pointer to degrees converted to radians
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
dpi(void)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
*result = (M_PI);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
} /* dpi() */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* radians - returns a pointer to radians converted from degrees
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
radians(float64 arg1)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
|
|
||||||
if (!arg1)
|
|
||||||
return (float64) NULL;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
*result = ((*arg1) * (M_PI / 180.0));
|
|
||||||
|
|
||||||
CheckFloat8Val(*result);
|
|
||||||
return result;
|
|
||||||
} /* radians() */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef RAND_MAX
|
|
||||||
|
|
||||||
/*
|
|
||||||
* drandom - returns a random number
|
|
||||||
*/
|
|
||||||
float64
|
|
||||||
drandom(void)
|
|
||||||
{
|
|
||||||
float64 result;
|
|
||||||
|
|
||||||
result = (float64) palloc(sizeof(float64data));
|
|
||||||
|
|
||||||
/* result 0.0-1.0 */
|
|
||||||
*result = (((double)rand()) / RAND_MAX);
|
|
||||||
|
|
||||||
CheckFloat8Val(*result);
|
|
||||||
return result;
|
|
||||||
} /* drandom() */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* setseed - set seed for the random number generator
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
setseed(int32 seed)
|
|
||||||
{
|
|
||||||
srand(seed);
|
|
||||||
|
|
||||||
return;
|
|
||||||
} /* setseed() */
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.15 2000/08/23 05:59:01 thomas Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.16 2000/09/18 20:11:36 petere Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter>
|
<chapter>
|
||||||
@ -31,9 +31,9 @@ $Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.15 2000/08/23 05:59:01 thomas
|
|||||||
<para>
|
<para>
|
||||||
This describes an embedded <acronym>SQL</acronym> in <acronym>C</acronym>
|
This describes an embedded <acronym>SQL</acronym> in <acronym>C</acronym>
|
||||||
package for <productname>Postgres</productname>.
|
package for <productname>Postgres</productname>.
|
||||||
|
|
||||||
It is written by <ulink url="mailto:linus@epact.se">Linus Tolke</ulink>
|
It is written by <ulink url="mailto:linus@epact.se">Linus Tolke</ulink>
|
||||||
and <ulink url="mailto:meskes@debian.org">Michael Meskes</ulink>.
|
and <ulink url="mailto:meskes@debian.org">Michael Meskes</ulink>.
|
||||||
|
The package is installed with the <productname>Postgres</> distribution.
|
||||||
|
|
||||||
<note>
|
<note>
|
||||||
<para>
|
<para>
|
||||||
@ -503,17 +503,6 @@ struct sqlca
|
|||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1>
|
|
||||||
<title>Installation</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Since version 0.5 <application>ecpg</application> is distributed
|
|
||||||
together with <productname>Postgres</productname>. So you
|
|
||||||
should get your precompiler, libraries and header files compiled and
|
|
||||||
installed by default as a part of your installation.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>For the Developer</title>
|
<title>For the Developer</title>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/geqo.sgml,v 1.11 2000/08/23 05:59:02 thomas Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/geqo.sgml,v 1.12 2000/09/18 20:11:37 petere Exp $
|
||||||
Genetic Optimizer
|
Genetic Optimizer
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -233,7 +233,7 @@ P''(t) generation of descendants at a time t
|
|||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Future Implementation Tasks for
|
<title>Future Implementation Tasks for
|
||||||
<productname>ame>Post</productname>ame> <acronym>GEQO</acronym></title>
|
<productname>PostgreSQL</> <acronym>GEQO</acronym></title>
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
<title>Basic Improvements</title>
|
<title>Basic Improvements</title>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.16 2000/08/29 20:02:07 momjian Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.17 2000/09/18 20:11:37 petere Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="odbc">
|
<chapter id="odbc">
|
||||||
@ -70,18 +70,154 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.16 2000/08/29 20:02:07
|
|||||||
same calls and the back end data source would look the same (to the Windows
|
same calls and the back end data source would look the same (to the Windows
|
||||||
app).
|
app).
|
||||||
</para>
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1>
|
||||||
|
<title>Installation</title>
|
||||||
|
|
||||||
<!--
|
|
||||||
<para>
|
<para>
|
||||||
<ulink url="http://www.insightdist.com/">Insight Distributors</ulink>
|
The first thing to note about the <productname>psqlODBC</> driver
|
||||||
provides active and ongoing
|
(or any <acronym>ODBC</> driver) is that there must exist a
|
||||||
support for the core <productname>psqlODBC</productname> distribution.
|
<firstterm>driver manager</> on the system where the
|
||||||
They provide a
|
<acronym>ODBC</> driver is to be used. There exists a free
|
||||||
<ulink url="http://www.insightdist.com/psqlodbc/"><acronym>FAQ</acronym></ulink>,
|
<acronym>ODBC</> driver for Unix called <productname>iODBC</>
|
||||||
ongoing development on the code base, and actively participate on the
|
which can be obtained via <ulink
|
||||||
<ulink url="mailto:interfaces@postgresql.org">interfaces mailing list</ulink>.
|
url="http://www.iodbc.org">http://www.iodbc.org</ulink>.
|
||||||
|
Instructions for installing <productname>iODBC</> are contained in
|
||||||
|
the <productname>iODBC</> distribution. Having said that, any
|
||||||
|
driver manager that you can find for your platform should support
|
||||||
|
the <productname>psqlODBC</> driver, or any other <acronym>ODBC</>
|
||||||
|
driver for that matter.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
To install <productname>psqlODBC</> 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
|
||||||
|
and header files 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>
|
||||||
|
The installation-wide configuration file <filename>odbcinst.ini</> will be
|
||||||
|
installed into the directory <filename>/usr/local/pgsql/etc/</>, or equivalent,
|
||||||
|
depending on what <option>--prefix</> and/or <option>--sysconfdir</> options
|
||||||
|
you supplied to <filename>configure</>. Since this file can also be shared
|
||||||
|
between different <acronym>ODBC</> drivers you can also install it in a shared
|
||||||
|
location. To do that, override the location of this file with the
|
||||||
|
<option>--with-odbcinst</> option.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
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.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<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>
|
||||||
|
|
||||||
|
<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>prefix</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
|
||||||
|
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>
|
</para>
|
||||||
-->
|
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
@ -165,491 +301,20 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.16 2000/08/29 20:02:07
|
|||||||
</sect2>
|
</sect2>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Unix Installation</title>
|
<title>ApplixWare</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<productname>ApplixWare</productname> has an
|
<productname>ApplixWare</productname> has an
|
||||||
<acronym>ODBC</acronym> database interface
|
<acronym>ODBC</acronym> database interface
|
||||||
supported on at least some platforms.
|
supported on at least some platforms.
|
||||||
<productname>ApplixWare</productname> v4.4.2 has been
|
<productname>ApplixWare</productname> 4.4.2 has been
|
||||||
demonstrated under Linux with <productname>Postgres</productname> v7.0
|
demonstrated under Linux with <productname>Postgres</productname> 7.0
|
||||||
using the <productname>psqlODBC</productname>
|
using the <productname>psqlODBC</productname>
|
||||||
driver contained in the <productname>Postgres</productname> distribution.
|
driver contained in the <productname>Postgres</productname> distribution.
|
||||||
</para>
|
</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>
|
|
||||||
|
|
||||||
<step performance="optional">
|
|
||||||
<para>
|
|
||||||
Install the ODBC catalog extensions available in
|
|
||||||
<filename>PGROOT/contrib/odbc/odbc.sql</filename>:
|
|
||||||
|
|
||||||
<programlisting>
|
|
||||||
% psql -e template1 < $PGROOT/contrib/odbc/odbc.sql
|
|
||||||
</programlisting>
|
|
||||||
|
|
||||||
where specifying <literal>template1</literal> as the target
|
|
||||||
database will ensure that all subsequent new databases will
|
|
||||||
have these same definitions.
|
|
||||||
</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>
|
|
||||||
[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>
|
|
||||||
<title>ApplixWare</title>
|
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
<title>Configuration</title>
|
<title>Configuration</title>
|
||||||
|
|
||||||
@ -1089,17 +754,7 @@ endmacro
|
|||||||
</caution>
|
</caution>
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</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>
|
</sect1>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
@ -21,9 +21,6 @@ is assumed to contain 8 bits. In addition, the term
|
|||||||
refers to data which is stored in <productname>Postgres</productname> classes.
|
refers to data which is stored in <productname>Postgres</productname> classes.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<sect1>
|
|
||||||
<title>Page Structure</title>
|
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The following table shows how pages in both normal <productname>Postgres</productname> classes
|
The following table shows how pages in both normal <productname>Postgres</productname> classes
|
||||||
and <productname>Postgres</productname> index
|
and <productname>Postgres</productname> index
|
||||||
@ -176,50 +173,5 @@ itemPointerData
|
|||||||
which points to the next piece and the piece itself. The last piece
|
which points to the next piece and the piece itself. The last piece
|
||||||
is handled normally.
|
is handled normally.
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1>
|
|
||||||
<title>Files</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term>
|
|
||||||
<filename>data/</filename>
|
|
||||||
</term>
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
Location of shared (global) database files.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>
|
|
||||||
<filename>data/base/</filename>
|
|
||||||
</term>
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
Location of local database files.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1>
|
|
||||||
<title>Bugs</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The page format may change in the future to provide more efficient
|
|
||||||
access to large objects.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
This section contains insufficient detail to be of any assistance in
|
|
||||||
writing a new access method.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# GNUMakefile for psqlodbc (Postgres ODBC driver)
|
# GNUMakefile for psqlodbc (Postgres ODBC driver)
|
||||||
#
|
#
|
||||||
# $Header: /cvsroot/pgsql/src/interfaces/odbc/Attic/GNUmakefile,v 1.3 2000/09/17 13:02:51 petere Exp $
|
# $Header: /cvsroot/pgsql/src/interfaces/odbc/Attic/GNUmakefile,v 1.4 2000/09/18 20:11:37 petere Exp $
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -35,21 +35,27 @@ LDFLAGS_SL+= $(LDFLAGS_ODBC)
|
|||||||
odbc_headers = isql.h isqlext.h iodbc.h
|
odbc_headers = isql.h isqlext.h iodbc.h
|
||||||
odbc_includedir = $(includedir)/iodbc
|
odbc_includedir = $(includedir)/iodbc
|
||||||
|
|
||||||
install: all installdirs install-headers install-ini install-lib
|
install: all installdirs install-headers install-ini install-lib install-data
|
||||||
|
|
||||||
installdirs:
|
installdirs:
|
||||||
$(mkinstalldirs) $(DESTDIR)$(odbc_includedir) $(DESTDIR)$(libdir) $(DESTDIR)$(odbcinst_ini_dir)
|
$(mkinstalldirs) $(DESTDIR)$(odbc_includedir) $(DESTDIR)$(libdir) $(DESTDIR)$(odbcinst_ini_dir) $(DESTDIR)$(datadir)
|
||||||
|
|
||||||
.PHONY: install-headers
|
.PHONY: install-headers
|
||||||
install-headers: $(odbc_headers)
|
install-headers: $(odbc_headers)
|
||||||
for i in $^; do $(INSTALL_DATA) $$i $(DESTDIR)$(odbc_includedir) || exit 1; done
|
for i in $^; do $(INSTALL_DATA) $$i $(DESTDIR)$(odbc_includedir)/$$i || exit 1; done
|
||||||
|
|
||||||
.PHONY: install-ini
|
.PHONY: install-ini
|
||||||
install-ini: odbcinst.ini
|
install-ini: odbcinst.ini
|
||||||
$(INSTALL_DATA) $< $(DESTDIR)$(odbcinst_ini_dir)
|
$(INSTALL_DATA) $< $(DESTDIR)$(odbcinst_ini_dir)/$<
|
||||||
|
|
||||||
|
.PHONY: install-data
|
||||||
|
install-data: odbc.sql
|
||||||
|
$(INSTALL_DATA) $< $(DESTDIR)$(datadir)/$<
|
||||||
|
|
||||||
uninstall: uninstall-lib
|
uninstall: uninstall-lib
|
||||||
rm -f $(addprefix $(DESTDIR)$(odbc_includedir)/, $(odbc_headers))
|
rm -f $(addprefix $(DESTDIR)$(odbc_includedir)/, $(odbc_headers))
|
||||||
|
rm -f $(DESTDIR)$(datadir)/odbc.sql
|
||||||
|
# XXX Uninstall the .ini file as well?
|
||||||
|
|
||||||
clean distclean maintainer-clean: clean-lib
|
clean distclean maintainer-clean: clean-lib
|
||||||
rm -f $(OBJS)
|
rm -f $(OBJS)
|
||||||
|
@ -1,16 +1,11 @@
|
|||||||
-- ODBC.sql
|
-- PostgreSQL catalog extensions for ODBC compliance
|
||||||
--
|
-- $Header: /cvsroot/pgsql/src/interfaces/odbc/Attic/odbc.sql,v 1.1 2000/09/18 20:11:37 petere Exp $
|
||||||
|
|
||||||
--
|
|
||||||
-- Character string manipulation
|
|
||||||
--
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Extensions for ODBC compliance in v7.0.
|
|
||||||
-- In the current driver, ODBC functions must map directly into a
|
-- In the current driver, ODBC functions must map directly into a
|
||||||
-- Postgres function. So in some cases we must create a compatible
|
-- Postgres function. So in some cases we must create a compatible
|
||||||
-- function.
|
-- function.
|
||||||
--
|
|
||||||
|
|
||||||
-- truncate on the left
|
-- truncate on the left
|
||||||
CREATE FUNCTION ltrunc(text, integer)
|
CREATE FUNCTION ltrunc(text, integer)
|
||||||
@ -142,4 +137,3 @@ CREATE FUNCTION odbc_user()
|
|||||||
RETURNS text
|
RETURNS text
|
||||||
AS 'SELECT CAST(USER AS text)'
|
AS 'SELECT CAST(USER AS text)'
|
||||||
LANGUAGE 'SQL';
|
LANGUAGE 'SQL';
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user