postgresql dblink mysql_PostgreSQL dblink使用过程
安装:
进入/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使用过程相关推荐
- oracle exp 无效dblink,【案例】Oracle dblink 数据库连接dblink insert插入数据时异常分析...
天萃荷净 开发DBA反映在测试数据表插入数据,Oracle dblink两库连接插入同步数据时数据量异常 一.诡异Oracle dblink起源 今天开发拿过来一条sql,说有诡异现象,sql如下 I ...
- oracle基于dblink创建视图,【案例】Oracle dblink 数据库连接dblink insert操作数据类型发生改变...
天萃荷净 开发DBA反映Oracle数据库两库之间通过dblink相连.在使用DML语句insert插入数据时操作的数据类型发生了改变 1.Oracle insert列属性 [oracle@saas- ...
- linux oracle dblink,Oracle dblink配置
一. dBlink 简述 dblink(Database Link)数据库链接顾名思义就是数据库的链接,就像电话线一样,是一个通道,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就 ...
- 代替oracle dblink,oracle dblink
oracle dblink 是干嘛的:比如现在有俩个数据库,都是单独的,如果我们现在登陆当前数据库,想访问另一个数据库, 如果我们建了DBLINK我们就可以直接在当前数据库取访问另一个数据库. 如se ...
- oracle dblink用处,dblink的使用
1.创建全局link(使用本地一个用户访问其它用户的表) 语法: create public database link 链接名 CONNECT TO 本地用户名 IDENTIFIED BY 密码 ...
- postgres使用dblink
在oracle中,经常会使用dblink将一些线上的数据导入到开发库中定位问题. postgresql中也可以使用dblink. 下面是网上的资料: 1.如何在postgresql中建立dblink? ...
- 经典案例:如何优化Oracle使用DBlink的SQL语句
作者介绍 赵全文 就职于太极计算机股份有限公司,在中央电化教育馆做Oracle DBA的驻场运维工作.具有3年左右的Oracle工作经验,目前擅长Oracle数据库的SQL脚本编写.故障诊断和性能优化 ...
- ORACLE使用DBLINK导入导出数据
场景: ORACLE数据库A:172.18.169.81:1521/orcl ORACLE数据库B:127.0.0.1:1521/orcl 要将数据库A的所有数据导入到数据库B. 由于数据量极大,所以 ...
- Oracle dblink详解
Oracle dblink详解 概述 1.database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序.在任何分布式环境里,datab ...
最新文章
- 极光推送配置(Android Studio),亲测有效
- (五)我的JavaScript系列:JavaScript的糟粕
- 【项目管理】人力资源管理
- linux下卸载已安装的软件
- 反射获取成员方法并使用【应用】
- 在WPF中实现玻璃模糊效果
- 网络设备和OSI参考模型关系
- 计算机辅助功能包括什么,CAD软件是什么?有什么功能?
- CVPR 2019 | 腾讯AI Lab 6大前沿方向33篇入选论文解读
- web前端知识(04html的表单)
- QWT6.0.1+win7下安装说明
- 转-挂载raw和qcow2格式的KVM硬盘镜像
- 线段树相关(研究总结,线段树)
- Perl语言入门笔记(一)
- R语言数据分析及可视化实战
- java jersey_Java Jersey使用总结(转)
- 图片处理中对于Sigmod函数图像的理解
- 量子力学(4) 全同粒子
- 在Linux终端中自定义Bash配色和提示内容
- 基于Ubuntu9.10 雨林木风Linux Y1.5发布
热门文章
- galera mysql_MySQL的Galera集群(转载)
- IP地址发生冲突的快速处理方法!
- 跟着迪哥学python 经管之家_经管之家俱乐部:市面上并不多见的经管学习圈子!...
- Gitkraken 禁用更新
- app offline.html,W3school HTML Offline
- Java播放MP3——JLayer
- SmartConfig配网之微信AirKiss配网——AT指令
- C++STL Iterator和traits
- ERA5 积雪 降雪 区别_漠河降雪量已达入秋最大级别,北京也迎降温和大风,注意添衣保暖...
- rrdtool zabbix mysql_Zabbix与RRDtool绘图篇(5)_用RRDtool绘制图形