当前位置: 首页 > 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;

相关文章:

  • React 组件通信
  • 解锁K-近邻算法:数据挖掘的秘密武器
  • 使用Trae编辑器与MCP协议构建高德地图定制化服务
  • vscode内嵌浏览器实时预览vue项目
  • Pytorch3D 中涉及的知识点汇总
  • Stable Diffusion 项目实战落地:绘制真人卡通IP形象(一)甄嬛旗装格格:从“真人”到“卡通”化,神奇的转变之旅!
  • 领域驱动设计(DDD)【0】之DDD理论概念认识
  • wordpress外贸独立站常用留言表单插件 contact form 7
  • Linux TCP/IP协议栈中的TCP输入处理:net/ipv4/tcp_input.c解析
  • 人工智能的未来:从“提示即程序”到“部分自治”
  • Kubernetes 节点故障自愈方案:结合 Node Problem Detector 与自动化脚本
  • SQL关键字三分钟入门:INSERT INTO —— 插入数据详解
  • 剑指offer37_数组中出现次数超过一半的数字
  • Rust调用 DeepSeek API
  • Sublime text启用vim
  • Maven-添加子模块
  • Python从入门到实战学习笔记(二)
  • IEC61850 通信协议测试验证方法详解
  • YAML 数据格式详解
  • Python爬虫实战:研究Splinter相关技术
  • 做网站服务好/模板免费下载网站
  • 西安网站建设官网/百度提问
  • 临朐网站建设建站首选哪家公司/怎么自己制作网页
  • 装潢公司网站设计与制作/交换友情链接推广法
  • 无锡建设网站/百度贴吧官网入口
  • 营销型网站建设深度网/百度seo优化多少钱