前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >9.7.3 dblink的使用

9.7.3 dblink的使用

作者头像
小徐
发布2019-08-05 14:47:41
1K0
发布2019-08-05 14:47:41
举报
文章被收录于专栏:GreenplumGreenplum

9.7.3 dblink的使用

dblink函数可以方便的访问当前集群或其他集群数据库中的数据,

9.7.3.1 安装dblink函数

进入到GP安装目录下

# cd $GPHOME/share/postgresql/contrib

$ psql -d chinadaas -f dblink.sql

chinadaas : 制定的数据库

dblink默认的安装在制定数据库的public下

9.7.3.2 查看安装后的dblink函数

每个函数的含义请参考:

https://www.postgresql.org/docs/9.6/dblink.html

9.7.3.3 使用dblink读取不同数据库中的数据
9.7.3.3.1 在数据库中创建测试表

$ psql -d stagging

psql (8.3.23)

Type "help" for help.

stagging=# CREATE TABLE testdblink (a int, b text) DISTRIBUTED BY (a);

CREATE TABLE

stagging=# INSERT INTO testdblink VALUES (1, 'Cheese');

INSERT 0 1

stagging=# INSERT INTO testdblink VALUES (2, 'Fish');

INSERT 0 1

以上是在stagging数据库中创建了testdblink 表

9.7.3.3.2 使用dblink读取数据

以下登录的是chinadaas数据库,在以上中已经在chinadaas安装上了dblink函数

$ psql -d chinadaas

psql (8.3.23)

Type "help" for help.

在本地Greenplum数据库系统上创建一个到stagging数据库的命名连接

chinadaas=# SELECT dblink_connect('mylocalconn', 'dbname=stagging');

dblink_connect

----------------

OK

(1 row)

建立一个到远程数据库系统的连接

chinadaas=# SELECT dblink_connect('host=192.168.31.50 port=5432 dbname=stagging');

dblink_connect

----------------

OK

(1 row)

读取其他数据库中的数据,注意必须as一个表来映射其他数据库中的表的字段,字段类型最好一致

chinadaas=# SELECT * FROM dblink('mylocalconn', 'SELECT * FROM testdblink') AS dbltab(id int, product text);

id | product

----+---------

2 | Fish

1 | Cheese

(2 rows)

按照制定条件查询数据

chinadaas=# SELECT * FROM dblink('mylocalconn', 'SELECT * FROM testdblink') AS dbltab(id int, product text) where id='3';

id | product

----+---------

3 | sd

3 | sd

(2 rows)

把其他数据库表中的数据保存到本地

保存方式一

chinadaas=# CREATE TABLE testdbllocal (a int, b text) DISTRIBUTED BY (a);

CREATE TABLE

chinadaas=# INSERT INTO testdbllocal select * FROM dblink('dbname=stagging', 'SELECT * FROM testdblink') AS dbltab(id int, product text);

INSERT 0 2

保存方式二

chinadaas=# create table testdbllocal2 as select * FROM dblink('dbname=stagging', 'SELECT * FROM testdblink') AS dbltab(id int, product text) DISTRIBUTED BY (id);

SELECT 2

9.7.3.3.3 销毁当前的dblink链接

查看当前的链接

chinadaas=# select dblink_get_connections();

dblink_get_connections

------------------------

{mylocalconn}

(1 row)

销毁当前的链接

chinadaas=# SELECT dblink_disconnect('mylocalconn');

dblink_disconnect

-------------------

OK

(1 row)

9.7.3.4 使用dblink更新数据

更新表示最好现开启事务

-- 先执行dblink_connect保持连接

SELECT dblink_connect('mylocalconn','host=192.168.31.50 dbname=stagging');

-- 执行BEGIN命令

SELECT dblink_exec('mylocalconn', 'BEGIN');

-- 执行数据操作(update,insert,create等命令)

SELECT dblink_exec('mylocalconn', 'insert into testdblink(a,b) values(3,''sd'') ');

-- 执行事务提交

SELECT dblink_exec('mylocalconn', 'COMMIT');

-- 解除连接

SELECT dblink_disconnect('mylocalconn');

9.7.3.5 使用视图查询数据

chinadaas=# create view dblink_view_test as select * from dblink('mylocalconn', 'select * from testdblink') as dbltab(id int, product text) where id='3';

CREATE VIEW

chinadaas=# select * from dblink_view_test;

id | product

----+---------

3 | sd

3 | sd

(2 rows)

9.7.3.6 dblink使用注意事项
9.7.3.6.1 superuser用户访问dblink

superuser用户可以随意访问dblink的dblink_connect与dblink_connect_u链接,例如:

chinadaas=# SELECT dblink_connect('dbname=stagging');

dblink_connect

----------------

OK

(1 row)

chinadaas=# SELECT * FROM dblink('SELECT * FROM testdblink') AS dbltab(id int, product text) where id='3';

id | product

----+---------

3 | sd

3 | sd

(2 rows)

9.7.3.6.2 非superuser用户访问dblink会提示让填写链接信息

chinadaas=> SELECT dblink_connect('dbname=stagging');

ERROR: host is required

DETAIL: Non-superusers must provide a host in the connection string.

链接方式一

chinadaas=> SELECT dblink_connect('mylocalconn','host=192.168.31.50 user=xiaoxu password=gpadmin dbname=stagging');

dblink_connect

----------------

OK

(1 row)

链接方式二

chinadaas=> SELECT dblink_connect_u('mylocalconn','dbname=stagging');

ERROR: permission denied for function dblink_connect_u

需要先给用户赋予函数的执行权限,否则回报以上的错误

chinadaas=> SELECT dblink_connect_u('mylocalconn','dbname=stagging');

dblink_connect_u

------------------

OK

(1 row)

或使用以下链接

chinadaas=> SELECT dblink_connect_u('dbname=stagging');

dblink_connect_u

------------------

OK

(1 row)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 河马coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.7.3 dblink的使用
    • 9.7.3.1 安装dblink函数
      • 9.7.3.2 查看安装后的dblink函数
        • 9.7.3.3 使用dblink读取不同数据库中的数据
          • 9.7.3.3.1 在数据库中创建测试表
          • 9.7.3.3.2 使用dblink读取数据
          • 9.7.3.3.3 销毁当前的dblink链接
        • 9.7.3.4 使用dblink更新数据
          • 9.7.3.5 使用视图查询数据
            • 9.7.3.6 dblink使用注意事项
              • 9.7.3.6.1 superuser用户访问dblink
              • 9.7.3.6.2 非superuser用户访问dblink会提示让填写链接信息
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档