mirror of https://github.com/postgres/postgres
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 @@
|
|||
#
|
||||
# The PostgreSQL contrib tree Makefile
|
||||
#
|
||||
# $Header: /cvsroot/pgsql/contrib/Makefile,v 1.7 2000/07/16 14:50:29 petere Exp $
|
||||
#
|
||||
# $Header: /cvsroot/pgsql/contrib/Makefile,v 1.8 2000/09/18 20:11:34 petere Exp $
|
||||
|
||||
subdir = contrib
|
||||
top_builddir = ..
|
||||
include ../src/Makefile.global
|
||||
include $(top_builddir)/src/Makefile.global
|
||||
|
||||
WANTED_DIRS = array \
|
||||
earthdistance \
|
||||
|
@ -16,6 +12,7 @@ WANTED_DIRS = array \
|
|||
linux \
|
||||
lo \
|
||||
mSQL-interface \
|
||||
mac \
|
||||
miscutil \
|
||||
noupdate \
|
||||
pg_dumplo \
|
||||
|
@ -27,19 +24,10 @@ WANTED_DIRS = array \
|
|||
unixdate \
|
||||
userlock \
|
||||
vacuumlo
|
||||
# odbc
|
||||
|
||||
all install installdirs uninstall clean distclean maintainer-clean:
|
||||
for dir in $(WANTED_DIRS); do \
|
||||
if [ -e $$dir/Makefile ]; then \
|
||||
$(MAKE) -C $$dir $@ ; \
|
||||
$(MAKE) -C $$dir $@; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
install:
|
||||
for dir in $(WANTED_DIRS); do \
|
||||
if [ -e $$dir/Makefile ]; then \
|
||||
$(MAKE) -C $$dir $@ ; \
|
||||
fi; \
|
||||
done
|
||||
$(INSTALL_DATA) Contrib.index $(docdir)/contrib
|
||||
|
|
162
contrib/README
162
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:
|
||||
odbc
|
||||
spi/preprocessor
|
||||
tools
|
||||
Each subdirectory contains a README file with information about the
|
||||
module. Most items can be built with `gmake all' and installed
|
||||
with `gmake install' in the usual fashion, after you have run the
|
||||
`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
|
||||
is below this text,
|
||||
|
||||
--------
|
||||
#
|
||||
# $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)/$@|" < $< > $@
|
||||
See the PostgreSQL documentation for more information about this
|
||||
procedure.
|
||||
|
||||
|
||||
install: install_doc install_sql install_mod install_bin install_example
|
||||
Index:
|
||||
------
|
||||
|
||||
install_doc:
|
||||
for inst_file in $(DOCS); do \
|
||||
$(INSTALL) $(INSTL_LIB_OPTS) $$inst_file $(CONTRIB_DOCDIR); \
|
||||
done
|
||||
array -
|
||||
Array iterator functions
|
||||
by Massimo Dal Zotto <dz@cs.unitn.it>
|
||||
|
||||
install_sql:
|
||||
for inst_file in $(SQLS); do \
|
||||
$(INSTALL) $(INSTL_LIB_OPTS) $$inst_file $(CONTRIB_SQLDIR); \
|
||||
done
|
||||
earthdistance -
|
||||
Operator for computing earth distance for two points
|
||||
by Hal Snyder <hal@vailsys.com>
|
||||
|
||||
install_mod:
|
||||
for inst_file in $(MODS); do \
|
||||
$(INSTALL) $(INSTL_SHLIB_OPTS) $$inst_file $(CONTRIB_MODDIR); \
|
||||
done
|
||||
findoidjoins -
|
||||
Finds the joins used by oid columns by examining the actual
|
||||
values in the oid columns and row oids.
|
||||
by Bruce Momjian <pgman@candle.pha.pa.us>
|
||||
|
||||
install_bin:
|
||||
for inst_file in $(BINS); do \
|
||||
$(INSTALL) $(INSTL_EXE_OPTS) $$inst_file $(CONTRIB_BINDIR); \
|
||||
done
|
||||
fulltextindex -
|
||||
Full text indexing using triggers
|
||||
by Maarten Boekhold <maartenb@dutepp0.et.tudelft.nl>
|
||||
|
||||
install_example:
|
||||
for inst_file in $(EXAMPLES); do \
|
||||
$(INSTALL) $(INSTL_LIB_OPTS) $$inst_file $(CONTRIB_EXAMPLESDIR); \
|
||||
done
|
||||
isbn_issn -
|
||||
PostgreSQL type extensions for ISBN (books) and ISSN (serials)
|
||||
by Garrett A. Wollman <wollman@khavrinen.lcs.mit.edu>
|
||||
|
||||
depend dep:
|
||||
$(CC) -MM -MG $(CFLAGS) *.c > depend
|
||||
linux -
|
||||
Scripts for starting and stopping the PostgreSQL server on
|
||||
a Linux system
|
||||
by Thomas Lockhart <lockhart@alumni.caltech.edu>
|
||||
|
||||
clean:
|
||||
$(RM) *~ $(OBJS) $(MODS) $(PROGRAM) depend $(OTHER_CLEAN) core log
|
||||
lo -
|
||||
Large Object maintenance
|
||||
by Peter Mount <peter@retep.org.uk>
|
||||
|
||||
ifeq (depend,$(wildcard depend))
|
||||
include depend
|
||||
endif
|
||||
-----------
|
||||
|
||||
mSQL-interface -
|
||||
mSQL API translation library
|
||||
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>
|
||||
|
|
|
@ -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>
|
||||
|
@ -31,9 +31,9 @@ $Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.15 2000/08/23 05:59:01 thomas
|
|||
<para>
|
||||
This describes an embedded <acronym>SQL</acronym> in <acronym>C</acronym>
|
||||
package for <productname>Postgres</productname>.
|
||||
|
||||
It is written by <ulink url="mailto:linus@epact.se">Linus Tolke</ulink>
|
||||
and <ulink url="mailto:meskes@debian.org">Michael Meskes</ulink>.
|
||||
The package is installed with the <productname>Postgres</> distribution.
|
||||
|
||||
<note>
|
||||
<para>
|
||||
|
@ -503,17 +503,6 @@ struct sqlca
|
|||
</para>
|
||||
</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>
|
||||
<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
|
||||
-->
|
||||
|
||||
|
@ -233,7 +233,7 @@ P''(t) generation of descendants at a time t
|
|||
|
||||
<sect1>
|
||||
<title>Future Implementation Tasks for
|
||||
<productname>ame>Post</productname>ame> <acronym>GEQO</acronym></title>
|
||||
<productname>PostgreSQL</> <acronym>GEQO</acronym></title>
|
||||
|
||||
<sect2>
|
||||
<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">
|
||||
|
@ -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
|
||||
app).
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Installation</title>
|
||||
|
||||
<!--
|
||||
<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>.
|
||||
The first thing to note about the <productname>psqlODBC</> driver
|
||||
(or any <acronym>ODBC</> driver) is that there must exist a
|
||||
<firstterm>driver manager</> on the system where the
|
||||
<acronym>ODBC</> driver is to be used. There exists a free
|
||||
<acronym>ODBC</> driver for Unix called <productname>iODBC</>
|
||||
which can be obtained via <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>
|
||||
-->
|
||||
</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>
|
||||
</sect1>
|
||||
|
||||
|
||||
<sect1>
|
||||
<title>Unix Installation</title>
|
||||
<title>ApplixWare</title>
|
||||
|
||||
<para>
|
||||
<productname>ApplixWare</productname> has an
|
||||
<acronym>ODBC</acronym> database interface
|
||||
supported on at least some platforms.
|
||||
<productname>ApplixWare</productname> v4.4.2 has been
|
||||
demonstrated under Linux with <productname>Postgres</productname> v7.0
|
||||
<productname>ApplixWare</productname> 4.4.2 has been
|
||||
demonstrated under Linux with <productname>Postgres</productname> 7.0
|
||||
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>
|
||||
|
||||
<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>
|
||||
<title>Configuration</title>
|
||||
|
||||
|
@ -1089,17 +754,7 @@ endmacro
|
|||
</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>
|
||||
|
||||
|
|
|
@ -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.
|
||||
</para>
|
||||
|
||||
<sect1>
|
||||
<title>Page Structure</title>
|
||||
|
||||
<para>
|
||||
The following table shows how pages in both normal <productname>Postgres</productname> classes
|
||||
and <productname>Postgres</productname> index
|
||||
|
@ -176,50 +173,5 @@ itemPointerData
|
|||
which points to the next piece and the piece itself. The last piece
|
||||
is handled normally.
|
||||
</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>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#
|
||||
# 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_includedir = $(includedir)/iodbc
|
||||
|
||||
install: all installdirs install-headers install-ini install-lib
|
||||
install: all installdirs install-headers install-ini install-lib install-data
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
-- Postgres function. So in some cases we must create a compatible
|
||||
-- function.
|
||||
--
|
||||
|
||||
|
||||
-- truncate on the left
|
||||
CREATE FUNCTION ltrunc(text, integer)
|
||||
|
@ -142,4 +137,3 @@ CREATE FUNCTION odbc_user()
|
|||
RETURNS text
|
||||
AS 'SELECT CAST(USER AS text)'
|
||||
LANGUAGE 'SQL';
|
||||
|
Loading…
Reference in New Issue