aboutsummaryrefslogtreecommitdiff
path: root/contrib/dblink/README.dblink
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/dblink/README.dblink')
-rw-r--r--contrib/dblink/README.dblink157
1 files changed, 157 insertions, 0 deletions
diff --git a/contrib/dblink/README.dblink b/contrib/dblink/README.dblink
new file mode 100644
index 00000000000..04219b7be24
--- /dev/null
+++ b/contrib/dblink/README.dblink
@@ -0,0 +1,157 @@
+/*
+ * dblink
+ *
+ * Functions returning results from a remote database
+ *
+ * Copyright (c) Joseph Conway <joe.conway@mail.com>, 2001;
+ *
+ * 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.
+ *
+ */
+
+Version 0.2 (29 May, 2001):
+ Function to test returning data set from remote database
+ Tested under Linux (Red Hat 6.2 and 7.0) and PostgreSQL 7.1 and 7.2devel
+
+Release Notes:
+
+ 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 -U postgres template1 < dblink.sql
+
+ installs following functions into database template1:
+
+ dblink() - returns a pointer to results from remote query
+ dblink_tok() - extracts and returns individual field results
+
+Documentation
+==================================================================
+Name
+
+dblink -- Returns a pointer to a data set from a remote database
+
+Synopsis
+
+dblink(text connstr, text sql)
+
+Inputs
+
+ connstr
+
+ standard libpq format connection srting,
+ e.g. "hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd"
+
+ sql
+
+ sql statement that you wish to execute on the remote host
+ e.g. "select * from pg_class"
+
+Outputs
+
+ Returns setof int (pointer)
+
+Example usage
+
+ select dblink('hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd','select f1, f2 from mytable');
+
+
+==================================================================
+
+Name
+
+dblink_tok -- Returns individual select field results from a dblink remote query
+
+Synopsis
+
+dblink_tok(int pointer, int fnumber)
+
+Inputs
+
+ pointer
+
+ a pointer returned by a call to dblink()
+
+ fnumber
+
+ the ordinal position (zero based) of the field to be returned from the dblink result set
+
+Outputs
+
+ Returns text
+
+Example usage
+
+ select dblink_tok(t1.dblink_p,0) as f1, dblink_tok(t1.dblink_p,1) as f2
+ from (select dblink('hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd'
+ ,'select f1, f2 from mytable') as dblink_p) as t1;
+
+
+==================================================================
+
+NOTE: If you need to provide selection criteria in a WHERE clause, it is necessary
+to 'fake' a UNION, e.g.
+
+ select
+ dblink_tok(t1.dblink_p,0) as f1
+ ,dblink_tok(t1.dblink_p,1) as f2
+ from
+ (
+ select dblink(
+ 'hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd'
+ ,'select f1, f2 from mytable'
+ ) as dblink_p
+ union
+ select null,null where false
+ ) as t1
+ where
+ f1 = 'mycriteria';
+
+in order to work around an issue with the query optimizer. A more convenient way to approach
+this problem is to create a view:
+
+ create view myremotetable as
+ select
+ dblink_tok(t1.dblink_p,0) as f1
+ ,dblink_tok(t1.dblink_p,1) as f2
+ from
+ (
+ select dblink(
+ 'hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd'
+ ,'select f1, f2 from mytable'
+ ) as dblink_p
+ union
+ select null,null where false
+ ) as t1;
+
+Then you can simply write:
+
+ select f1,f2 from myremotetable where f1 = 'mycriteria';
+
+==================================================================
+
+-- Joe Conway
+