当前位置: 首页 > news >正文

PostgreSQL/Hologres 外部服务器系统表 pg_foreign_server 详解

pg_foreign_server 是 PostgreSQL 和 Hologres 中定义外部数据服务器连接信息的核心系统表,它存储了所有外部服务器的配置信息。

表结构定义解析

CREATE TABLE pg_catalog.pg_foreign_server (srvname name NOT NULL,      -- 外部服务器名称srvowner oid NOT NULL,      -- 服务器所有者的OIDsrvfdw oid NOT NULL,        -- 外部数据包装器(FDW)的OIDsrvtype text,               -- 服务器类型标识符(可选)srvversion text,            -- 服务器版本信息(可选)srvacl aclitem[],           -- 访问权限控制列表srvoptions text[]           -- 服务器特定的选项,以"option=value"格式存储
) WITH OIDS;

字段详细说明

  1. srvname (name类型,非空)
    • 外部服务器的名称,用于在创建外部表时引用
    • 必须唯一,不能与现有服务器重名
  1. srvowner (oid类型,非空)
    • 服务器所有者的OID,关联到pg_authid系统表
    • 决定谁可以修改或删除此服务器定义
  1. srvfdw (oid类型,非空)
    • 外部数据包装器(Foreign Data Wrapper)的OID
    • 关联到pg_foreign_data_wrapper系统表
    • 决定此服务器使用哪种数据源连接器(如mysql_fdw, postgres_fdw等)
  1. srvtype (text类型,可选)
    • 服务器类型的描述性标识符
    • 例如:'mysql', 'oracle', 'hdfs'等
  1. srvversion (text类型,可选)
    • 服务器版本信息
    • 由FDW实现决定如何填充
  1. srvacl (aclitem[]类型)
    • 访问控制列表,定义哪些用户/角色可以使用此服务器
    • 格式示例:{user1=U/user1,user2=U/user1}
  1. srvoptions (text[]类型)
    • 服务器级别的选项设置,以键值对数组形式保存
    • 例如MySQL连接可能包含:{host='mysql.example.com', port='3306', dbname='mydb'}

外部数据架构关系

pg_foreign_data_wrapper (FDW定义)↑
pg_foreign_server (服务器连接定义)↑
pg_foreign_table (外部表定义)↑
pg_class (表的基本属性)

实际应用示例

  1. 查询所有外部服务器信息
SELECT s.srvname AS server_name,fdw.fdwname AS wrapper_name,pg_get_userbyid(s.srvowner) AS owner,s.srvtype,s.srvoptions
FROM pg_foreign_server sJOIN pg_foreign_data_wrapper fdw ON s.srvfdw = fdw.oid;
  1. 创建外部服务器的标准方法(推荐)
CREATE SERVER mysql_server
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (host 'mysql.example.com', port '3306');
  1. 修改服务器选项
ALTER SERVER mysql_server OPTIONS (SET dbname 'newdb');

Hologres中的特殊说明

在阿里云Hologres中:

  1. 支持多种外部数据源连接,如MaxCompute、OSS等
  2. 可能有阿里云特定的FDW实现
  3. 某些选项可能与原生PostgreSQL不同

重要安全警告

您代码中显示的DROP TABLECREATE TABLE语句是直接操作系统表的危险操作:

  1. 绝对不要直接操作系统表,这会导致数据库损坏
  2. 只应使用标准DDL命令管理外部服务器:
-- 创建服务器
CREATE SERVER ... FOREIGN DATA WRAPPER ... OPTIONS (...);-- 删除服务器
DROP SERVER IF EXISTS server_name;
  1. 权限管理应使用GRANT/REVOKE:
GRANT USAGE ON FOREIGN SERVER server_name TO user_name;
http://www.lryc.cn/news/573112.html

相关文章:

  • 基于 Flutter+Sqllite 实现大学个人课表助手 APP(期末作业)
  • 什么是RoCE网络技术
  • 飞书使用技巧 --- 飞书批量导入建群 (以导入名单的方式)
  • HTML5简介
  • 课程目录:腾讯混元3D × Unity3D全流程开发
  • word-spacing 属性
  • 文本分类与聚类:让信息“各归其位”的实用方法
  • 面试题-函数入参为interface类型进行约束
  • Python元组及字符串
  • 经典:在浏览器地址栏输入信息到最终看到网页的全过程,涉及网络协议以及前后端技术
  • SQL Server基础语句2:表连接与集合操作、子查询与CET、高级查询
  • 服务发现与动态负载均衡的结合
  • 零基础学习Redis(12) -- Java连接redis服务器
  • c++26新功能—hive容器
  • gRPC 框架面试题精选及参考答案
  • SVN上传代码
  • 力扣1546. 和为目标值且不重叠的非空子数组的最大数目
  • 【09】设计并实现一套面向 Agent 任务规划的 DSL 语言
  • 针对机器人自修复材料的具体推荐及特性分析
  • vscode搭建spring boot项目
  • Qt、C++自定义按钮、组件、事件编程开发练习,万字实战解析!!
  • TMultiplexedProtocol 和 TMultiplexedProcessor
  • 使用Vue3开发Electorn桌面应用
  • Maven-添加子模块
  • Vue2 day02
  • 记录一次:Java Web 项目 CSS 样式/图片丢失问题:一次深度排查与根源分析
  • 【STM32】STM32的中断系统寄存器NVIC、EXTI
  • Leetcode 440. 字典序的第K小数字
  • C++ CAN总线数据处理框架解析
  • 力扣1477. 找两个和为目标值且不重叠的子数组