On Sun, Jul 09, 2006 at 12:40:56PM +0000, Mark Morgan Lloyd wrote:
> I know that the FAQ says that the only way to implement a query
> across databases is to use dblink,
The FAQ doesn't say dblink is the only way, it says "contrib/dblink
allows cross-database queries using function calls." However, the
paragraph that says "There is no way to query a database other than
the current one" could be misinterpreted to mean dblink is the only
way if you read "current one" as "method mentioned in the current
FAQ item" rather than as "database to which you are currently
connected."
http://www.postgresql.org/docs/faqs.FAQ.html#item4.17
dbi-link is an alternative to dblink that uses Perl/DBI:
http://pgfoundry.org/projects/dbi-link/
> is this the only way available if additional procedural languages
> are installed?
With the untrusted version of a language you can do essentially
anything that language supports. For example, with plperlu, you
could use DBI to open a connection to another database (even another
DBMS like Oracle, MySQL, etc.), issue a query, fetch the results,
and do whatever you want with those results. Example:
CREATE FUNCTION remote_version(text, text, text) RETURNS text AS $$
use DBI;
my ($dsn, $user, $pass) = @_;
my $dbh = DBI->connect($dsn, $user, $pass);
my @row = $dbh->selectrow_array("SELECT version()");
$dbh->disconnect;
return $row[0];
$$ LANGUAGE plperlu VOLATILE;
SELECT remote_version('dbi:mysql:wopr;host=norad', 'falken', 'joshua');
remote_version
----------------
5.0.22-log
(1 row)
--
Michael Fuhr