Postgresql中dblink扩展的使用

一、介绍

        Postgresql数据库提供了一个dblink扩展的插件,能够直接在一个数据库中操作另外一个远程数据库,比如:一个数据库在服务器A上,另外一个数据库在服务器B上,我可以在A这台服务器数据库上面建立一个到B服务器数据库的dblink,然后就可以在A服务器上对B服务器的数据库进行query或者update或者delete操作,同理也可以在B服务器数据库上建立一个到A服务器数据库的dblink。因此通过扩展dblink,就可以关联多个数据库进行连表查询了。

二、使用方法

        dblink插件是PostgreSQL安装包自带的,如果安装数据库时没有安装dblink,可以重新编译安装。但是pg数据库不会默认扩展dblink,如果要在某个数据库中使用该功能,需要重新扩展dblink才可以,否则会报错不存在错误,如下图所示。

1、扩展dblink

        在指定数据库中执行语句:create extension if not exists dblink 即可扩展dblink插件,执行完,如果使用DBeaver工具可以在扩展一栏中看到dblink,如下图所示。

        或者执行select * from pg_available_extensions语句查看当前数据库所有已经扩展过的插件,若结果中存在dblink即表示扩展成功。

 2、使用dblink

(1)dblink_connect/dblink_connect_u:创建dblink连接

两者用法相似,都表示打开一个到数据库的持久连接,但是dblink_connect需要使用超级用户postgres,而dblink_connect_u不需要,所以不安全,一般不推荐使用。

该函数的使用语法:select dblink_connect('conname','connstr'),它有2个参数conname和connstr,其中conname是可选参数。

① conname:用于这个连接的名字。如果忽略,将打开一个未命名的连接并且替换掉任何现有的未命名连接(一般不推荐忽略)

② connstr:数据库连接信息,格式为:

host=数据库连接ip

port=数据库连接端口

dbname=要连接的数据库名称

user=要连接的数据库用户名

password=要连接的数据库密码

        如上图所示,使用DBeaver工具,创建一个dblink,执行sql语句后,如果创建成功会展示OK。上图语句中表示创建了一个名为test的数据库连接,连接到的是10.194.98.82服务器上的xres_xresdb数据库。

(2)dblink_get_connections查询所有已连接的dblink

       改函数的使用语法是:select dblink_get_connections(),它会展示目前数据库中所有已经建立的持久连接

如上图所示,执行语句后,会展示前面已经创建的名称为“test”持久连接。

(3)dblink_disconnect断开连接

       该函数的使用语法是:select dblink_disconnect('conname'),它有一个参数conname:表示需要断开的连接名称,如果该参数忽略表示关闭一个未命名的连接。

        执行关闭sql后,如果关闭成功会返回OK,此时再次执行dblink_get_connections查看所有连接,发现为空,表示刚才创建的test连接已经被关闭。

(4)dblink:在一个远程数据库中执行一个操作

      这里说的“操作”可以是像操作本地数据库一样进行增删改查,但是日常业务中使用查询操作是最多的。该函数的语法是 

dblink('conname','connstr','sql','fail_on_error'),它包含四个参数:

  • conname:要使用的连接名。忽略这个参数将使用未命名连接
  • connstr:数据库连接信息,参考语法(1)中的同名字段
  • sql:在远程数据库中执行的SQL语句
  • fail_on_error:如果为真(忽略是的默认值),那么在连接的远端抛出一个错误时也会在本地抛出一个错误,如果为假,远程错误只在本地被报告未一个NOTICE,并且该函数不返回行

dblink使用的时候有两种方式:第一种已经创建了一个持久连接,第二种没有创建持久连接。

在第一种情况下已经创建命名的连接后,可以直接使用连接名+SQL语句实现,如下所示,但是这种方式的前提是已经提前创建了已命名的持久连接。

第二种情况下,并未创建持久连接时,可以直接通过连接信息+SQL语句的方式实现。

三、总结

        Dblink插件它创建了一个通道,使得我们访问远程数据库就像访问本地数据库一样方便。在某些单纯的数据展示的项目中,当用了多个数据库时,如果使用程序取值处理,这样开发性能和效率都不是很好,而用扩展Dblink就非常简单。但是使用dblink的时候注意慎用insert/update/delete等语句,这些操作建议还是回到原始数据库中进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/416742.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis是单线程还是多线程?

说Redis是单线程或者是多线程这种说法并不严谨,要拿版本说话,Redis的版本有很多3.x、4.x和6.x,版本不同架构也是不同的,不限定版本问是否单线程是不太严谨的。 版本3.x,最早版本,此时Redis是单线程的版本4…

精品ssm人事办公考勤报销管理系统

《[含文档PPT源码等]精品基于ssm办公管理系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: Java——涉及技术: 前端使用技术:HTML5,CSS3、JavaS…

webrtc

stun服务 阿里云服务器安全组添加端口开放 webrtc-streamer视屏流服务器搭建 - 简书

安科瑞Acrel-2000ES 储能柜能量管理系统

安科瑞戴婷 安科瑞储能能量管理系统Acrel-2000ES,专门针对工商业储能柜、储能集装箱研发的一款储能EMS, 具有完善的储能监控与管理功能,涵盖了储能系统设备(PCS、BMS、电表、消防、空调等)的详细信息,实现了数据采集、数据处理、数据存储、数据查询与分…

浅谈 Linux 网络编程 - 网络字节序

文章目录 前言核心知识关于 小端法关于 大端法网络字节序的转换 函数 前言 在进行 socket 网络编程时,会用到字节流的转换函数、例如 inet_pton、htons 等,那么为什么要用到这些函数呢,本篇主要就是对这部分进行介绍。 核心知识 重点需要记…

4-如何进行细分市场的分析-02 细分行业的构成和基本情况

如何快速摸清行业的构成,通常会看同行或自己做过的相似的行业,会根据不同的行业来采用不同的研究方法。对于成熟的行业和不同的行业都会有一些比较通用的研究方式。 假设我们是在分析某一个行业,在分析行业的时候它的本质还是市场分析&#…

Leetcode300. 最长递增子序列 -代码随想录

题目&#xff1a; 代码(首刷看解析 2024年2月29日&#xff09;&#xff1a; class Solution { public:int lengthOfLIS(vector<int>& nums) {int n nums.size();if (n < 1) return 1;vector<int> dp(n, 1);int res 0;for (int i 1; i < n; i) {for(i…

springboot+vue实现oss文件存储

前提oss准备工作 进入阿里云官网&#xff1a;阿里云oss官网 注册 搜OSS&#xff0c;点击“对象存储OSS” 第一次进入需要开通&#xff0c;直接点击立即开通&#xff0c;到右上角AccessKey管理中创建AccessKey&#xff0c;并且记住自己的accessKeyId和accessKeySecret&#…

使用 Gradle 版本目录进行依赖管理 - Android

/ 前言 / 在软件开发中&#xff0c;依赖管理是一个至关重要的方面。合理的依赖版本控制有助于确保项目的稳定性、安全性和可维护性。 Gradle版本目录&#xff08;Version Catalogs&#xff09;是 Gradle 构建工具的一个强大功能&#xff0c;它为项目提供了一种集中管理依赖…

使用Python对数据进行rsa加密

#!/usr/bin/python3 import base64 import json import jsonpath import requests from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 from base64 import b64decode, b64encodedef get_public_key():"""备注&#…

网络工程师笔记3

IP地址类型 A类 255.0.0.0B类 255.255.0.0C类 255.255.255.0D类 E类 子网掩码&#xff1a;从左到右连续的确定网络位 2-4-8-16-32-64-128-256 128 &#xff1a; 1000 0000 64 &#xff1a; 0100 0000 32 &#xff1a; 0010 0000 16 &#xff1a; 0001 0000 8 &am…

vue3 开发记录

1.引入nprogress插件&#xff0c;显示未声明文件 无法找到模块“nprogress”的声明文件。 解决方法&#xff1a; vite-env.d.ts // 解决引入模块的报错提示 declare module "nprogress";2.在 .evn 文件中创建了自定义环境变量 VITE_APP_BASE_URL 但在项目中使用时出…

【c语言】探索联合和枚举---解锁更多选择

前言 上一篇 讲解的是结构体相关知识&#xff0c;接着本篇主要讲解的是 联合和枚举 相关知识 结构体、联合体和枚举都属于 自定义类型。 那么接下来就跟上我的节奏&#xff0c;准备发车~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xf…

如何在群晖NAS中开启FTP服务并实现公网环境访问内网服务

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具&#xff0c;实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

同局域网共享虚拟机(VMware)

一、前言 首先我们先来了解下 VMware 的三种网络模式桥接模式、NAT模式、仅主机模式&#xff0c;网络类型介绍详情可以参考下我之前的文档 Linux系统虚拟机安装&#xff08;上&#xff09;第三章 - 第9步指定网络类型。了解三种网络模式的原理之后&#xff0c;再来剖析下需求&…

Python进阶学习:axis=0和axis=1的区别和用法

Python进阶学习&#xff1a;axis0和axis1的区别和用法 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订阅和…

Python is not set from command line or npm configuration 报错解决

问题 在 npm install 的过程中提示 Python is not set from command line or npm configuration 的报错&#xff0c;相信不少朋友都遇到过&#xff0c;出现这个问题的原因是缺少 python 环境所导致的。 解决方法 1、安装 python 官网&#xff1a;https://www.python.org/dow…

Halcon 求孔洞的大小和数量

文章目录 适用场景汽车按钮案例 适用场景 在工业中可以利用孔洞的多少和孔洞的大小来分析出产品的缺陷问题&#xff0c;例如一个产品有8个孔洞&#xff0c;孔洞多和少都会被识别为不合格产品&#xff0c;或者求出孔洞的面积&#xff0c;如果孔洞的大小超出一定的范围将视为不合…

第十四课 PCB保姆级规则设置(三)

1.SMT&#xff1a;贴片规则&#xff0c;默认设置 2.Mask阻焊&#xff1a;绿油阻焊外扩&#xff08;4mil&#xff09;&#xff0c;助焊0mil 3.器件之间的距离 1&#xff09;有丝印的话&#xff0c;根据空间和整体调节&#xff0c;丝印不冲突就可以 2&#xff09;没有丝印&…

C++惯用法之空基类优化

相关系列文章 C惯用法之Pimpl C惯用法之CRTP(奇异递归模板模式) C之std::tuple(二) : 揭秘底层实现原理 目录 1.空类 2.空基类优化 3.内存布局原则 4.实例分析 5.总结 1.空类 C 中每个对象的实例都可以通过取地址运算符获取其在内存布局中的开始位置&#xff0c;因此每个类…