安装:

进入/root/postgresql-11.2/contrib/dblink

make && make install

切换到postgres用户

[root@fce40690-0e46-4603-e80e-ca351bda31ec dblink]# su - postgres

上一次登录:三 5月  8 03:47:54 UTC 2019pts/1 上

[postgres@fce40690-0e46-4603-e80e-ca351bda31ec ~]$ psql

psql (11.2)

Type "help" for help.

postgres=# create extension dblink;

ERROR:  extension "dblink" already exists

使用:

postgres=# select dblink_connect('mydb', 'dbname=mydb host=localhost');

dblink_connect

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

OK

(1 row)

postgres=# select * from dblink('mydb', 'select * from test') as test(id integer, info varchar(8));

ERROR:  value too long for type character varying(8)

postgres=# select * from dblink('mydb', 'select * from test') as test(id integer, info varchar(32));

id |               info

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

1 | c53bc2b29be0ef76d863a53efed13ea1

2 | 28fd974058eb778168482942c8894004

3 | 6e90dbdf605adffe70761aa8521ab626

4 | c32edb06e0f7e0067322f346ec60e663

5 | 2eb0c9fcb931ede7440244745c686177

6 | d34a41454758897e9b9d0c2dd1a972ae

7 | 09d8e45db5f32a20e4e77ed51cf34b1a

8 | 86cb5c36edda6fffd9f9c75aa9c3f0fe

9 | 7ae28a3b304291dbcb96d19b92b42012

10 | 581fddcce1c9e66a42ae4fad8a604e0d

(10 rows)

postgres=# select dblink_get_connections();

dblink_get_connections

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

{mydb}

(1 row)

创建视图,来固化查询

postgres=# create view test_mydb as select * from dblink('mydb', 'select * from test') as test(id integer, info varchar(32));

CREATE VIEW

postgres=# select dblink_connect('mydb', 'dbname=mydb host=localhost');

dblink_connect

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

OK

(1 row)

postgres=# select * from test_mydb;

id |               info

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

1 | c53bc2b29be0ef76d863a53efed13ea1

2 | 28fd974058eb778168482942c8894004

3 | 6e90dbdf605adffe70761aa8521ab626

4 | c32edb06e0f7e0067322f346ec60e663

5 | 2eb0c9fcb931ede7440244745c686177

6 | d34a41454758897e9b9d0c2dd1a972ae

7 | 09d8e45db5f32a20e4e77ed51cf34b1a

8 | 86cb5c36edda6fffd9f9c75aa9c3f0fe

9 | 7ae28a3b304291dbcb96d19b92b42012

10 | 581fddcce1c9e66a42ae4fad8a604e0d

(10 rows)

执行没有返回结果的SQL

postgres=# select dblink_exec('mydb', 'insert into test values(1, ''dblink insert i am'')');

dblink_exec

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

INSERT 0 1

(1 row)

通fetch的方式分页获取数据:

postgres=# select dblink_open('mydb', 'foo', 'select * from test');

dblink_open

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

OK

(1 row)

^

postgres=# select * from dblink_fetch('mydb', 'foo', 3) as test(id int, info text);

id |               info

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

1 | c53bc2b29be0ef76d863a53efed13ea1

2 | 28fd974058eb778168482942c8894004

3 | 6e90dbdf605adffe70761aa8521ab626

(3 rows)

postgres=# select * from dblink_fetch('mydb', 'foo', 3) as (id int, info text);

id |               info

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

4 | c32edb06e0f7e0067322f346ec60e663

5 | 2eb0c9fcb931ede7440244745c686177

6 | d34a41454758897e9b9d0c2dd1a972ae

(3 rows)

postgres=# (id int, info text);^C

postgres=# select * from dblink_fetch('mydb', 'foo', 3) as (id int, info text);

id |               info

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

7 | 09d8e45db5f32a20e4e77ed51cf34b1a

8 | 86cb5c36edda6fffd9f9c75aa9c3f0fe

9 | 7ae28a3b304291dbcb96d19b92b42012

(3 rows)

postgres=# select * from dblink_fetch('mydb', 'foo', 3) as (id int, info text);

id |               info

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

10 | 581fddcce1c9e66a42ae4fad8a604e0d

1 | dblink insert i am

(2 rows)

使用异步调用:dblink_send_query、dblink_is_busy、dblink_get_notify和dblink_get_result

postgres=# select * from dblink_send_query('mydb', 'select * from test;');

dblink_send_query

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

1

(1 row)

postgres=# select * from dblink_get_result('mydb') as (id int, info text);

id |               info

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

1 | c53bc2b29be0ef76d863a53efed13ea1

2 | 28fd974058eb778168482942c8894004

3 | 6e90dbdf605adffe70761aa8521ab626

4 | c32edb06e0f7e0067322f346ec60e663

5 | 2eb0c9fcb931ede7440244745c686177

6 | d34a41454758897e9b9d0c2dd1a972ae

7 | 09d8e45db5f32a20e4e77ed51cf34b1a

8 | 86cb5c36edda6fffd9f9c75aa9c3f0fe

9 | 7ae28a3b304291dbcb96d19b92b42012

10 | 581fddcce1c9e66a42ae4fad8a604e0d

1 | dblink insert i am

(11 rows)

postgres=# select * from dblink_send_query('mydb', 'select * from test;');

NOTICE:  could not send query: another command is already in progress

dblink_send_query

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

0

(1 row)

—获取到了最后一条,再执行新的SQL才会成功

postgres=# select * from dblink_get_result('mydb') as (id int, info text);

id | info

----+------

(0 rows)

postgres=# select * from dblink_send_query('mydb', 'select * from test;');

dblink_send_query

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

1

(1 row)

获取错误信息:

postgres=# select dblink_error_message('mydb');

dblink_error_message

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

OK

(1 row)

能否用dblink去连接oracle数据库呢?像oracle的dblink一样,连接SQL Server、MySQL、PostgreSQL?

答案是不行的,源码里面可以看到PostgreSQL的dblink是使用的pg的c语言接口去创建连接的,而不是使用ODBC来创建:

dblink_connect(PG_FUNCTION_ARGS)

{

char *conname_or_str = NULL;

char *connstr = NULL;

char *connname = NULL;

char *msg;

PGconn *conn = NULL;

remoteConn *rconn = NULL;

dblink_init();

if (PG_NARGS() == 2)

{

conname_or_str = text_to_cstring(PG_GETARG_TEXT_PP(1));

connname = text_to_cstring(PG_GETARG_TEXT_PP(0));

}

else if (PG_NARGS() == 1)

conname_or_str = text_to_cstring(PG_GETARG_TEXT_PP(0));

if (connname)

rconn = (remoteConn *) MemoryContextAlloc(TopMemoryContext,

sizeof(remoteConn));

/* first check for valid foreign data server */

connstr = get_connect_string(conname_or_str);

if (connstr == NULL)

connstr = conname_or_str;

/* check password in connection string if not superuser */

dblink_connstr_check(connstr);

conn = PQconnectdb(connstr);

if (PQstatus(conn) == CONNECTION_BAD)

{

msg = pchomp(PQerrorMessage(conn));

PQfinish(conn);

if (rconn)

pfree(rconn);

ereport(ERROR,

(errcode(ERRCODE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION),

errmsg("could not establish connection"),

errdetail_internal("%s", msg)));

}

/* check password actually used if not superuser */

dblink_security_check(conn, rconn);

/* attempt to set client encoding to match server encoding, if needed */

if (PQclientEncoding(conn) != GetDatabaseEncoding())

PQsetClientEncoding(conn, GetDatabaseEncodingName());

if (connname)

{

rconn->conn = conn;

createNewConnection(connname, rconn);

}

else

{

if (pconn->conn)

PQfinish(pconn->conn);

pconn->conn = conn;

}

PG_RETURN_TEXT_P(cstring_to_text("OK"));

}

postgresql dblink mysql_PostgreSQL dblink使用过程相关推荐

  1. oracle exp 无效dblink,【案例】Oracle dblink 数据库连接dblink insert插入数据时异常分析...

    天萃荷净 开发DBA反映在测试数据表插入数据,Oracle dblink两库连接插入同步数据时数据量异常 一.诡异Oracle dblink起源 今天开发拿过来一条sql,说有诡异现象,sql如下 I ...

  2. oracle基于dblink创建视图,【案例】Oracle dblink 数据库连接dblink insert操作数据类型发生改变...

    天萃荷净 开发DBA反映Oracle数据库两库之间通过dblink相连.在使用DML语句insert插入数据时操作的数据类型发生了改变 1.Oracle insert列属性 [oracle@saas- ...

  3. linux oracle dblink,Oracle dblink配置

    一. dBlink 简述 dblink(Database Link)数据库链接顾名思义就是数据库的链接,就像电话线一样,是一个通道,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就 ...

  4. 代替oracle dblink,oracle dblink

    oracle dblink 是干嘛的:比如现在有俩个数据库,都是单独的,如果我们现在登陆当前数据库,想访问另一个数据库, 如果我们建了DBLINK我们就可以直接在当前数据库取访问另一个数据库. 如se ...

  5. oracle dblink用处,dblink的使用

    1.创建全局link(使用本地一个用户访问其它用户的表) 语法: create public database link 链接名  CONNECT TO 本地用户名 IDENTIFIED BY 密码 ...

  6. postgres使用dblink

    在oracle中,经常会使用dblink将一些线上的数据导入到开发库中定位问题. postgresql中也可以使用dblink. 下面是网上的资料: 1.如何在postgresql中建立dblink? ...

  7. 经典案例:如何优化Oracle使用DBlink的SQL语句

    作者介绍 赵全文 就职于太极计算机股份有限公司,在中央电化教育馆做Oracle DBA的驻场运维工作.具有3年左右的Oracle工作经验,目前擅长Oracle数据库的SQL脚本编写.故障诊断和性能优化 ...

  8. ORACLE使用DBLINK导入导出数据

    场景: ORACLE数据库A:172.18.169.81:1521/orcl ORACLE数据库B:127.0.0.1:1521/orcl 要将数据库A的所有数据导入到数据库B. 由于数据量极大,所以 ...

  9. Oracle dblink详解

    Oracle dblink详解 概述 1.database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序.在任何分布式环境里,datab ...

最新文章

  1. 极光推送配置(Android Studio),亲测有效
  2. (五)我的JavaScript系列:JavaScript的糟粕
  3. 【项目管理】人力资源管理
  4. linux下卸载已安装的软件
  5. 反射获取成员方法并使用【应用】
  6. 在WPF中实现玻璃模糊效果
  7. 网络设备和OSI参考模型关系
  8. 计算机辅助功能包括什么,CAD软件是什么?有什么功能?
  9. CVPR 2019 | 腾讯AI Lab 6大前沿方向33篇入选论文解读
  10. web前端知识(04html的表单)
  11. QWT6.0.1+win7下安装说明
  12. 转-挂载raw和qcow2格式的KVM硬盘镜像
  13. 线段树相关(研究总结,线段树)
  14. Perl语言入门笔记(一)
  15. R语言数据分析及可视化实战
  16. java jersey_Java Jersey使用总结(转)
  17. 图片处理中对于Sigmod函数图像的理解
  18. 量子力学(4) 全同粒子
  19. 在Linux终端中自定义Bash配色和提示内容
  20. 基于Ubuntu9.10 雨林木风Linux Y1.5发布

热门文章

  1. galera mysql_MySQL的Galera集群(转载)
  2. IP地址发生冲突的快速处理方法!
  3. 跟着迪哥学python 经管之家_经管之家俱乐部:市面上并不多见的经管学习圈子!...
  4. Gitkraken 禁用更新
  5. app offline.html,W3school HTML Offline
  6. Java播放MP3——JLayer
  7. SmartConfig配网之微信AirKiss配网——AT指令
  8. C++STL Iterator和traits
  9. ERA5 积雪 降雪 区别_漠河降雪量已达入秋最大级别,北京也迎降温和大风,注意添衣保暖...
  10. rrdtool zabbix mysql_Zabbix与RRDtool绘图篇(5)_用RRDtool绘制图形