925952603d
than the local query specifies (e.g. in the FROM clause), throw an ERROR (instead of crashing). Fix for bug #2129 reported by Akio Iwaasa.
174 lines
7.4 KiB
Plaintext
174 lines
7.4 KiB
Plaintext
/*
|
|
* dblink
|
|
*
|
|
* Functions returning results from a remote database
|
|
*
|
|
* Joe Conway <mail@joeconway.com>
|
|
* And contributors:
|
|
* Darko Prenosil <Darko.Prenosil@finteh.hr>
|
|
* Shridhar Daithankar <shridhar_daithankar@persistent.co.in>
|
|
*
|
|
* Copyright (c) 2001-2006, PostgreSQL Global Development Group
|
|
* ALL RIGHTS RESERVED;
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software and its
|
|
* documentation for any purpose, without fee, and without a written agreement
|
|
* is hereby granted, provided that the above copyright notice and this
|
|
* paragraph and the following two paragraphs appear in all copies.
|
|
*
|
|
* IN NO EVENT SHALL THE AUTHOR OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR
|
|
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
|
|
* LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
|
|
* DOCUMENTATION, EVEN IF THE AUTHOR OR DISTRIBUTORS HAVE BEEN ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* THE AUTHOR AND DISTRIBUTORS SPECIFICALLY DISCLAIMS ANY WARRANTIES,
|
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
|
|
* ON AN "AS IS" BASIS, AND THE AUTHOR AND DISTRIBUTORS HAS NO OBLIGATIONS TO
|
|
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
|
*
|
|
*/
|
|
|
|
Release Notes:
|
|
Version 0.7 (as of 25 Feb, 2004)
|
|
- Added new version of dblink, dblink_exec, dblink_open, dblink_close,
|
|
and, dblink_fetch -- allows ERROR on remote side of connection to
|
|
throw NOTICE locally instead of ERROR
|
|
Version 0.6
|
|
- functions deprecated in 0.5 have been removed
|
|
- added ability to create "named" persistent connections
|
|
Version 0.5
|
|
- dblink now supports use directly as a table function; this is the new
|
|
preferred usage going forward
|
|
- Use of dblink_tok is now deprecated; original form of dblink is also
|
|
deprecated. They _will_ be removed in the next version.
|
|
- dblink_last_oid is also deprecated; use dblink_exec() which returns
|
|
the command status as a single row, single column result.
|
|
- Original dblink, dblink_tok, and dblink_last_oid are commented out in
|
|
dblink.sql; remove the comments to use the deprecated functions.
|
|
- dblink_strtok() and dblink_replace() functions were removed. Use
|
|
split() and replace() respectively (new backend functions in
|
|
PostgreSQL 7.3) instead.
|
|
- New functions: dblink_exec() for non-SELECT queries; dblink_connect()
|
|
opens connection that persists for duration of a backend;
|
|
dblink_disconnect() closes a persistent connection; dblink_open()
|
|
opens a cursor; dblink_fetch() fetches results from an open cursor.
|
|
dblink_close() closes a cursor.
|
|
- New test suite: dblink_check.sh, dblink.test.sql,
|
|
dblink.test.expected.out. Execute dblink_check.sh from the same
|
|
directory as the other two files. Output is dblink.test.out and
|
|
dblink.test.diff. Note that dblink.test.sql is a good source
|
|
of example usage.
|
|
|
|
Version 0.4
|
|
- removed cursor wrap around input sql to allow for remote
|
|
execution of INSERT/UPDATE/DELETE
|
|
- dblink now returns a resource id instead of a real pointer
|
|
- added several utility functions -- see below
|
|
|
|
Version 0.3
|
|
- fixed dblink invalid pointer causing corrupt elog message
|
|
- fixed dblink_tok improper handling of null results
|
|
- fixed examples in README.dblink
|
|
|
|
Version 0.2
|
|
- initial release
|
|
|
|
Installation:
|
|
Place these files in a directory called 'dblink' under 'contrib' in the PostgreSQL source tree. Then run:
|
|
|
|
make
|
|
make install
|
|
|
|
You can use dblink.sql to create the functions in your database of choice, e.g.
|
|
|
|
psql template1 < dblink.sql
|
|
|
|
installs following functions into database template1:
|
|
|
|
connection
|
|
------------
|
|
dblink_connect(text) RETURNS text
|
|
- opens an unnamed connection that will persist for duration of
|
|
current backend or until it is disconnected
|
|
dblink_connect(text,text) RETURNS text
|
|
- opens a named connection that will persist for duration of current
|
|
backend or until it is disconnected
|
|
dblink_disconnect() RETURNS text
|
|
- disconnects the unnamed persistent connection
|
|
dblink_disconnect(text) RETURNS text
|
|
- disconnects a named persistent connection
|
|
|
|
cursor
|
|
------------
|
|
dblink_open(text,text [, bool fail_on_error]) RETURNS text
|
|
- opens a cursor using unnamed connection already opened with
|
|
dblink_connect() that will persist for duration of current backend
|
|
or until it is closed
|
|
dblink_open(text,text,text [, bool fail_on_error]) RETURNS text
|
|
- opens a cursor using a named connection already opened with
|
|
dblink_connect() that will persist for duration of current backend
|
|
or until it is closed
|
|
dblink_fetch(text, int [, bool fail_on_error]) RETURNS setof record
|
|
- fetches data from an already opened cursor on the unnamed connection
|
|
dblink_fetch(text, text, int [, bool fail_on_error]) RETURNS setof record
|
|
- fetches data from an already opened cursor on a named connection
|
|
dblink_close(text [, bool fail_on_error]) RETURNS text
|
|
- closes a cursor on the unnamed connection
|
|
dblink_close(text,text [, bool fail_on_error]) RETURNS text
|
|
- closes a cursor on a named connection
|
|
|
|
query
|
|
------------
|
|
dblink(text,text [, bool fail_on_error]) RETURNS setof record
|
|
- returns a set of results from remote SELECT query; the first argument
|
|
is either a connection string, or the name of an already opened
|
|
persistant connection
|
|
dblink(text [, bool fail_on_error]) RETURNS setof record
|
|
- returns a set of results from remote SELECT query, using the unnamed
|
|
connection already opened with dblink_connect()
|
|
|
|
execute
|
|
------------
|
|
dblink_exec(text, text [, bool fail_on_error]) RETURNS text
|
|
- executes an INSERT/UPDATE/DELETE query remotely; the first argument
|
|
is either a connection string, or the name of an already opened
|
|
persistant connection
|
|
dblink_exec(text [, bool fail_on_error]) RETURNS text
|
|
- executes an INSERT/UPDATE/DELETE query remotely, using connection
|
|
already opened with dblink_connect()
|
|
|
|
misc
|
|
------------
|
|
dblink_current_query() RETURNS text
|
|
- returns the current query string
|
|
dblink_get_pkey(text) RETURNS setof text
|
|
- returns the field names of a relation's primary key fields
|
|
dblink_build_sql_insert(text,int2vector,int2,_text,_text) RETURNS text
|
|
- builds an insert statement using a local tuple, replacing the
|
|
selection key field values with alternate supplied values
|
|
dblink_build_sql_delete(text,int2vector,int2,_text) RETURNS text
|
|
- builds a delete statement using supplied values for selection
|
|
key field values
|
|
dblink_build_sql_update(text,int2vector,int2,_text,_text) RETURNS text
|
|
- builds an update statement using a local tuple, replacing the
|
|
selection key field values with alternate supplied values
|
|
|
|
Documentation:
|
|
|
|
Note: Parameters representing relation names must include double
|
|
quotes if the names are mixed-case or contain special characters. They
|
|
must also be appropriately qualified with schema name if applicable.
|
|
|
|
See the following files:
|
|
doc/connection
|
|
doc/cursor
|
|
doc/query
|
|
doc/execute
|
|
doc/misc
|
|
|
|
==================================================================
|
|
-- Joe Conway
|
|
|