做网站需要学啥,山西云起时网站建设,个人房产网签查询系统,千岛湖建设集团办公网站PostgreSQL外部数据
PostgreSQL 实现了 SQL/MED 规范的部分内容#xff0c;允许您使用常规 SQL 查询访问驻留在 PostgreSQL 外部的数据。此类数据称为外部数据。#xff08;请注意#xff0c;不要将此用法与外键混淆#xff0c;外键是数据库中的一种约束。
外部数据是在外…PostgreSQL外部数据
PostgreSQL 实现了 SQL/MED 规范的部分内容允许您使用常规 SQL 查询访问驻留在 PostgreSQL 外部的数据。此类数据称为外部数据。请注意不要将此用法与外键混淆外键是数据库中的一种约束。
外部数据是在外部数据包装器的帮助下访问的。外部数据包装器是一个库可以与外部数据源进行通信隐藏连接到数据源并从中获取数据的详细信息。有一些外部数据包装器可作为模块使用;。其他类型的外部数据包装器可能会被发现为第三方产品。如果现有的外部数据包装器都不符合您的需求您可以编写自己的包装器contrib;。
若要访问外部数据需要创建一个外部服务器对象该对象定义如何根据其支持的外部数据包装器使用的选项集连接到特定的外部数据源。然后您需要创建一个或多个外部表用于定义远程数据的结构。外表可以像普通表一样用于查询但外表在 PostgreSQL 服务器中没有存储。每当使用它时PostgreSQL 都会要求外部数据包装器从外部源获取数据或者在更新命令的情况下将数据传输到外部源。
访问远程数据可能需要对外部数据源进行身份验证。此信息可以由用户映射提供该映射可以根据当前 PostgreSQL 角色提供其他数据例如用户名和密码。
PostgreSQL提供了多种方式来处理外部数据。以下是几种常见的方法
外部数据包装程序Foreign Data Wrappers
外部数据包装程序Foreign Data WrappersPostgreSQL支持使用外部数据包装程序来连接和查询不同类型的外部数据源包括其他关系型数据库如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 FunctionsPostgreSQL还支持使用外部函数来处理外部数据。外部函数是由外部数据包装程序提供的可以在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数据库的公共模式中可用。
注意您需要拥有在数据库中创建外部表和定义外部服务器的适当权限。