【PostgreSQL】外部数据

PostgreSQL外部数据

PostgreSQL 实现了 SQL/MED 规范的部分内容,允许您使用常规 SQL 查询访问驻留在 PostgreSQL 外部的数据。此类数据称为外部数据。(请注意,不要将此用法与外键混淆,外键是数据库中的一种约束。

外部数据是在外部数据包装器的帮助下访问的。外部数据包装器是一个库,可以与外部数据源进行通信,隐藏连接到数据源并从中获取数据的详细信息。有一些外部数据包装器可作为模块使用;。其他类型的外部数据包装器可能会被发现为第三方产品。如果现有的外部数据包装器都不符合您的需求,您可以编写自己的包装器contrib;。

若要访问外部数据,需要创建一个外部服务器对象,该对象定义如何根据其支持的外部数据包装器使用的选项集连接到特定的外部数据源。然后,您需要创建一个或多个外部表,用于定义远程数据的结构。外表可以像普通表一样用于查询,但外表在 PostgreSQL 服务器中没有存储。每当使用它时,PostgreSQL 都会要求外部数据包装器从外部源获取数据,或者在更新命令的情况下将数据传输到外部源。

访问远程数据可能需要对外部数据源进行身份验证。此信息可以由用户映射提供,该映射可以根据当前 PostgreSQL 角色提供其他数据,例如用户名和密码。

PostgreSQL提供了多种方式来处理外部数据。以下是几种常见的方法:

外部数据包装程序(Foreign Data Wrappers)

外部数据包装程序(Foreign Data Wrappers):PostgreSQL支持使用外部数据包装程序来连接和查询不同类型的外部数据源,包括其他关系型数据库(如MySQL、Oracle)、非关系型数据库(如MongoDB、Redis)以及其他数据存储系统(如Hadoop、HDFS)等。外部数据包装程序充当了PostgreSQL和外部数据源之间的中间层,使得外部数据可以在PostgreSQL中像本地数据一样进行操作。

创建外部数据包装器的语法如下:

CREATE FOREIGN DATA WRAPPER wrapper_name [HANDLER handler_function] [VALIDATOR validator_function] [OPTIONS (option_name 'option_value', ...)]

wrapper_name是正在创建的外部数据包装器的名称。HANDLER选项指定一个函数的名称,该函数将处理外部数据包装器上的操作。VALIDATOR选项指定一个函数的名称,该函数将在使用该外部数据包装器创建或修改服务器时验证这些选项。

OPTIONS选项用于指定外部数据包装器的选项。这些选项被指定为逗号分隔的键-值对列表。

下面是一个创建外部数据包装器的示例:

CREATE FOREIGN DATA WRAPPER my_wrapper HANDLER my_handler_function VALIDATOR my_validator_function OPTIONS (option1 'value1', option2 'value2');

在本例中,"my_wrapper"是外部数据包装器的名称,"my_handler_function"是处理程序函数的名称,"my_validator_function"是验证器函数的名称,"option1"和"option2"是外部数据包装器的选项。

外部表(Foreign Tables)

外部表(Foreign Tables):外部表是一种特殊的表,它不存储数据,而是通过外部数据源中的数据动态生成。可以使用PostgreSQL的外部数据包装程序(Foreign Data Wrappers)来创建外部表,并通过SQL语句直接访问外部数据。

要在PostgreSQL中创建外表,可以使用以下语法:

CREATE FOREIGN TABLE table_name (column1 data_type,column2 data_type,...
) SERVER server_name
OPTIONS (option1 'value1', option2 'value2', ...);

下面是语法细分:

  • table_name:指定要创建的外表的名称。
  • Column1, column2,…列出外表的列及其数据类型。
  • SERVER server_name:指定提供对数据源访问的外部服务器的名称。
  • OPTIONS (option1 ‘value1’, option2 ‘value2’,…):这些是可选参数,允许您为外表提供额外的选项。可以包括file_name、分隔符、格式、编码等选项,具体取决于所使用的外部数据包装器。

下面是一个使用postgres_fdw扩展名创建一个名为employees的外表的例子:

CREATE EXTENSION IF NOT EXISTS postgres_fdw;CREATE SERVER my_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '127.0.0.1',port '5432',dbname 'my_database'
);CREATE USER MAPPING FOR my_username SERVER my_server OPTIONS (user 'my_username',password 'my_password'
);CREATE FOREIGN TABLE employees (id INT,name VARCHAR(50),age INT,salary NUMERIC
) SERVER my_server OPTIONS (table_name 'employees'
);

在这个例子中,我们首先创建postgres_fdw扩展,如果它还不存在的话。然后,我们创建服务器、用户映射,最后创建具有指定列和选项的外表。

注意,外部表提供了一种使用PostgreSQL访问存储在外部数据源中的数据的方法,但实际数据驻留在数据库之外。因此,您需要确保拥有访问外部数据源所需的权限和特权。

外部函数(Foreign Functions)

外部函数(Foreign Functions):PostgreSQL还支持使用外部函数来处理外部数据。外部函数是由外部数据包装程序提供的,可以在PostgreSQL中调用外部数据源中的函数,从而实现更复杂的操作和计算。

ostgreSQL支持使用外部函数,它允许您从PostgreSQL数据库中调用用其他编程语言编写的函数。这个特性使您能够通过利用其他语言提供的功能来扩展PostgreSQL的功能。

要在PostgreSQL中使用外部函数,需要创建一个语言扩展来定义要调用的函数。该扩展可以用C、c++或任何其他受支持的编程语言编写。

一旦创建并安装了扩展,您就可以通过在SQL语句中指定语言扩展和函数名来使用外部函数。然后PostgreSQL将执行相应的函数代码并返回结果。

当您需要执行复杂的计算或访问难以单独使用SQL实现的外部资源时,外部函数可能特别有用。它们允许您利用现有的代码和库,而不必用SQL重写它们。

注意,在使用外部函数时,需要确保数据库的安全性和完整性。确保检查和验证外部函数的代码,因为它们可能会引入安全漏洞或对数据库性能产生负面影响。

总的来说,外部函数通过集成用其他编程语言编写的代码,为扩展PostgreSQL的功能提供了强大的机制。它们允许您利用现有的库和代码库,从而更容易在数据库中实现复杂的功能。

外部服务器(CREATE SERVER)

PostgreSQL中的CREATE SERVER语句用于在数据库中创建一个新的外部服务器。

创建服务器的语法如下:

CREATE SERVER server_nameFOREIGN DATA WRAPPER wrapper_nameOPTIONS (option_name 'option_value', ...);

这里,server_name是外部服务器的名称,它在数据库中必须是唯一的。Wrapper_name是为外部数据源提供接口的外部数据包装器的名称。

还可以使用options子句为服务器指定其他选项。这些选项特定于所使用的外部数据包装器。每个选项都应该指定为option_name ‘option_value’。

例如,假设我们想要使用postgres_fdw包装器创建一个名为“my_server”的外部服务器。我们可以使用下面的查询:

CREATE SERVER my_serverFOREIGN DATA WRAPPER postgres_fdwOPTIONS (host 'localhost', dbname 'external_db', port '5432');

这将创建一个名为“my_server”的外部服务器,该服务器连接到本地运行的外部PostgreSQL数据库,名称为“external_db”,端口为5432。

请注意,为了使用postgres_fdw包装器,您需要在PostgreSQL数据库中安装并启用相应的扩展。

映射关系(CREATE USER MAPPING)

PostgreSQL CREATE USER MAPPING语句用于创建本地数据库用户和远程服务器用户之间的映射关系。它允许本地数据库中的用户使用不同的用户名和密码对远程对象进行身份验证和访问。

创建用户映射的语法如下:

CREATE USER MAPPING FOR local_userSERVER remote_server[ OPTIONS (option 'value', ...) ]

以下是对各种元素的解释:

  • local_user:本地数据库中的用户名。
  • remote_server:远程服务器的名称。
  • OPTIONS:可选参数,可用于为用户映射指定其他设置。

下面是一个创建用户映射的例子:

CREATE USER MAPPING FOR johnSERVER remote_serverOPTIONS (user 'remote_user', password 'remote_password')

这将在本地数据库中为用户“john”创建一个用户映射,并将其映射到远程服务器中的用户“remote_user”。使用password选项指定远程用户的密码。

注意,为了创建用户映射,您需要在本地数据库和远程服务器上拥有适当的权限。

引入外部模式(IMPORT FOREIGN SCHEMA)

PostgreSQL IMPORT FOREIGN SCHEMA语句允许您从远程服务器导入外部表,并使它们在本地数据库中可用。

IMPORT FOREIGN SCHEMA语句的语法如下:

IMPORT FOREIGN SCHEMA foreign_schema_name
FROM foreign_server_name
INTO local_schema_name;

这里,foreign_schema_name是要导入的远程服务器上的模式名,foreign_server_name是前面使用CREATE server语句定义的外部服务器名,local_schema_name是要在其中创建外部表的本地模式名。

例如,假设您有一个名为my_foreign_server的外部服务器连接到远程Oracle数据库,并且您希望将Oracle数据库上的雇员模式中的所有表导入到本地PostgreSQL数据库的公共模式中。

导入外部模式的命令如下:

IMPORT FOREIGN SCHEMA employees
FROM my_foreign_server
INTO public;

执行此语句后,远程Oracle数据库中employees模式中的所有表将作为外表在本地PostgreSQL数据库的公共模式中可用。

注意,您需要拥有在数据库中创建外部表和定义外部服务器的适当权限。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java基础学习days06 --- final关键字和继承

一、final 可以修饰类,变量,方法 final修饰类,该类不可被继承final 修饰变量,该变量不可被修改,是一个常量final修饰方法,该方法不可被重写 二、继承 1、继承的定义及特点 继承是面向对象编程中的一个基…

【ONE·MySQL || 常见的基本函数】

总言 主要内容:介绍了MySQL中常用的基本函数。一些聚合函数、时间日期函数、字符串函数、数字函数等。       文章目录 总言1、聚合函数1.1、汇总1.2、COUNT()函数1.2.1、基本说明1.2.2、使用演示 1.3、SUM( )函数1.3.1、基本说明1.3.2、使用演示 1.4、AVG( )函…

java基础之Java8新特性-Optional

目录 1.简介 2.Optional类常用方法 3.示例代码 4.示例代码仓库地址 1.简介 Java 8引入了一个重要的新特性,即Optional类。Optional类是为了解决空指针异常而设计的。 在Java中,当我们尝试访问一个空对象的属性或调用其方法时,很容易抛出…

【服务器数据恢复】Hyper-V虚拟化数据恢复案例

服务器数据恢复环境: Windows Server操作系统服务器,部署Hyper-V虚拟化环境,虚拟机的硬盘文件和配置文件存放在某品牌MD3200存储中,MD3200存储中有一组由4块硬盘组成的raid5阵列,存放虚拟机的数据文件;另外…

国内首款支持苹果Find My芯片-伦茨科技ST17H6x

深圳市伦茨科技有限公司(以下简称“伦茨科技”)发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家,该平台提供可通过Apple Find My认证的Apple查找(Find My)功能集成解决方案。…

建立四叉树[中等]

一、题目 给你一个n * n矩阵grid,矩阵由若干0和1组成。请你用四叉树表示该矩阵grid。你需要返回能表示矩阵grid的四叉树的根结点。四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性: 【1】val&#xff1…

WebRTC协议研究

背景 自己在做一个视频分析项目的时候,需要将后台读取的视频实时抛转到前台web页面显示,本来是用的是MQTT协议,已经可以满足需求。但是在实时上线测试的时候,发现当图片比较大的时候,会存在页面不能实时显示图片的bug&…

GLSL着色器入门(持续更新中...)

目录 第一章:OpenGL works with triangles 第二章: Parallel Processing 第章 推荐来自b站的课程004 GLSL is not Javascript_哔哩哔哩_bilibili 第一章:OpenGL works with triangles 当我们谈论GLSL着色器时,其实就是在说怎么…

C语言奇偶数交换排序问题

目录 问题描述如下: move函数的具体实现: main函数 运行效果 代码(注意看注释): 问题描述如下: 给定一个整数数组,要求将其中的奇数元素全部移动到前面,偶数元素全…

Go : ssh操作(四)批处理

简介 有的时候我们不只是进行单纯的上传, 下载, 指令, 而是多个动作的组合操作代码 batch.go package clientimport ("errors""github.com/pkg/sftp""golang.org/x/crypto/ssh" )type BatchCode intconst (…

【深度学习:Foundation Models】基础模型完整指南

【深度学习:Foundation Models】基础模型完整指南 什么是基础模型?基础模型背后的 5 项人工智能原理根据大量数据进行预训练自我监督学习过度拟合微调和快速工程(适应性强)广义的 基础模型的用例基础模型的类型计算机视觉基础模型…

最新版CleanMyMac X4.14.7智能清理mac磁盘垃圾工具

CleanMyMac X是一款专业的Mac清理软件,可智能清理mac磁盘垃圾和多余语言安装包,快速释放电脑内存,轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软件,修复系统漏洞,一键扫描和优化Mac系统,…

借助GPT理解 “ Android中 点击弹框外部 取消弹框”

在平常的开发工作中 或 阅读技术博客/书籍 时,难免会遇到我们不懂的知识点,网络上搜索的资料 需要有准确性,系统性,可实操性。 这样的资料查询很费时间且还不一定能找到,但是如果借助训练过的的gpt,就会省下…

[Kubernetes]7. K8s包管理工具Helm、使用Helm部署mongodb集群(主从数据库集群)

上一节讲解了[Kubernetes]6. k8s Pod配置管理ConfigMap & Secret以及传递环境变量的使用,k8s的命名空间以及使用kubens管理命名空间的使用,这里来介绍一下Helm的使用 一.Helm相关介绍 1.介绍 在 kubernetes 系统上部署容器化应用时需要事 先手动编写资源配置清单文件 以…

Prometheus实战篇:Prometheus监控docker

Prometheus实战篇:Prometheus监控docker 准备环境 监控docker 为了能够获取到Docker容器的运行状态,用户可以通过Docker的stats命令获取当前主机上运行容器的统计信息,可以查看容器的CPU利用率,内存使用量,网络IO总量以及磁盘IO总量等信息. docker stats除了使用命令以外,用户…

【占用网络】SurroundOcc:基于环视相机实现3D语义占用预测 ICCV 2023

前言 本文分享“占用网络”方案中,来自ICCV 2023的SurroundOcc,它基于环视相机实现3D语义占用预测。 使用空间交叉注意力将多相机图像信息提升到3D体素特征,即3D体素Query到2D图像中查询融合特征的思想。 然后使用3D卷积逐步对体素特征进行…

如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行、关键字断行等等内容格式整理

首先,需要用到的这个工具: 百度 密码:qwu2蓝奏云 密码:2r1z 打开工具,切换到“文章工作域”(嗯...默认就是) 找到这个,多内容断行分割 点击打开,出现如下窗口设置 相关的…

Netty-Netty基础应用与了解

前言 Netty 的优势 1、 API 使用简单,开发门槛低; 2、功能强大,预置了多种编解码功能,支持多种主流协议; 3、定制能力强,可以通过 ChannelHandler 对通信框架进行灵活地扩展; 4、性能高…

【教程】通过Excel宏/Pandas两种方法来自动添加渐变数据条

这种数据真的很难看懂: 一般会对其画折线图或者数据条,相比起来就非常直观: 但是每一列都要手动这样设置就非常累了,所以这里就用到了VBA宏(或者Pandas)。 VBA宏方法 从这里进入宏: 随便写一个宏名后点创建&#xff1…

PyTorch项目源码学习(1)

PyTorch PyTorch是一个开源的深度学习框架,项目地址 https://github.com/pytorch/pytorch 在学术工作中的使用频率较高。 其主体由C开发,PyTorch是Torch的Python调用版本。学习PyTorch项目源代码的目的在于学习其中的实现方法与技巧,增加训练…