dblink
模块被提供用来轻松地建立与位于同一数据库主机或者远程主机上的其他数据库之间的连接。dblink
被用于让数据库用户在其他数据库中执行短小的临时查询。dblink
并非作为临时表或者gptransfer
等管理工具的替代品而设计。
下列过程展示了在Greenplum数据库中配置和使用dblink
的基本步骤。更多关于其函数的信息可见PostgreSQL文档中的dblink部分。
- 从创建一个将用
dblink
功能查询的示例表开始。这些命令会在postgres
数据库中创建一个小表,后面用户将从gpadmin
数据库中使用dblink
查询它: ``` $ psql -d postgres psql (8.3.23) Type "help" for help.
postgres=# CREATE TABLE testdblink (a int, b text) DISTRIBUTED BY (a); CREATE TABLE postgres=# INSERT INTO testdblink VALUES (1, 'Cheese'); INSERT 0 1 postgres=# INSERT INTO testdblink VALUES (2, 'Fish'); INSERT 0 1 postgres=# \q $
2. 登入一个不同的数据库(在这个例子中是`gpadmin`)并且安装`dblink`函数(如果它们还没有被安装)。用户将使用`$GPHOME/share/postgresql/contrib/dblink.sql`脚本安装`dblink`函数:
$ psql -d gpadmin psql (8.3.23) Type "help" for help.
gpadmin=# \i /usr/local/gpdb/share/postgresql/contrib/dblink.sql SET CREATE FUNCTION CREATE FUNCTION CREATE FUNCTION CREATE FUNCTION REVOKE REVOKE CREATE FUNCTION CREATE FUNCTION ...
3. 使用`dblink_connect`函数创建到其他数据库的隐式连接和命名连接。用户提供的连接串应该是一个libpq样式的键/值串。例如,要在本地Greenplum数据库系统上创建一个到`postgres`数据库的命名连接:
gpadmin=# SELECT dblink_connect('mylocalconn', 'dbname=postgres');
dblink_connect
OK (1 row)
要建立一个到远程数据库系统的连接,只需要在连接串中简单地包括主机和端口信息。例如,要创建一个到远程系统的隐式`dblink`连接:
gpadmin=# SELECT dblink_connect('host=remotehost port=5432 dbname=postgres');
4. 使用基本`dblink`函数使用一个配置好的连接来查询一个数据库。记住`dblink`函数会返回一个记录类型,这样用户必须指定`dblink`查询中返回的列。例如,下面的命令使用命名连接来查询用户在步骤1中创建的表:
gpadmin=# SELECT FROM dblink('mylocalconn', 'SELECT FROM testdblink') AS dbltab(id int, product text); id | product ----+--------- 1 | Cheese 2 | Fish (2 rows)
在这个Greenplum数据库发行中,修改表数据的语句不能使用命名或者隐式`dblink`连接。相反,用户必须直接在`dblink`函数中提供连接串。例如:
gpadmin=# CREATE TABLE testdbllocal (a int, b text) DISTRIBUTED BY (a); CREATE TABLE gpadmin=# INSERT INTO testdbllocal select FROM dblink('dbname=postgres', 'SELECT FROM testdblink') AS dbltab(id int, product text); INSERT 0 2 ```
上级主题: Greenplum数据库工具指南