惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
月光博客
月光博客
V
Visual Studio Blog
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
Jina AI
Jina AI
J
Java Code Geeks
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
Recorded Future
Recorded Future
C
Check Point Blog
腾讯CDC
N
Netflix TechBlog - Medium
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
SecWiki News
SecWiki News
博客园 - Franky
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News | PayPal Newsroom
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
W
WeLiveSecurity
The Last Watchdog
The Last Watchdog
Cloudbric
Cloudbric
F
Full Disclosure
The Cloudflare Blog
Y
Y Combinator Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
S
Schneier on Security
Schneier on Security
Schneier on Security
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
AI
AI
N
News and Events Feed by Topic
T
Tor Project blog
P
Palo Alto Networks Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog

博客园 - 星小梦

Linux系统调整java程序启动用户,导出xlsx时抛出Permission denied异常问题。 vue2的devtools开发工具卡死现象的解决方法 echarts图表在浏览器上打印出现裁剪的问题 apache echarts数据点重影或 Cannot read properties of undefined (reading 'type')错误问题 yarn install出现error Error: certificate has expired异常 git多代码仓库合并的方式 docker容器oshi如何获取宿主机的运行状态信息? su命令引起的nohup进程以root身份启动导致的问题 docker-compose启动服务,影响其他服务的原因 xxl-job provider netty_http server caught exception flutter升级导致的旧项目的运行环境问题排查记录 vue3插件库以及对JSX的支持。 JSX、TSX扩展语法学习材料 commitlint Lint 提交消息格式控制 Chromium历史版本下载方式 Window10 关闭Edge浏览器的多选项卡通过Alt+Tab组合键切换的方式 java 泛型类型如何保留类型的信息的方式 Postgres16 常见问题 docker镜像安装字体支持,解决jdk服务验证码生成找不到字体问题 window和Linux命令行执行多条命令的方法
Postgres16数据库集成外部库dblink和postgres_fdw扩展的方式
星小梦 · 2025-07-30 · via 博客园 - 星小梦

环境信息:

Postgres 16 版本

有关dblink函数如何引用外部库的方式,由于过于简单,这里只贴出官方直达dblink文档链接,自行查看吧。
有关connstr的参数值组成格式说明。

方式2 - postgres_fdw扩展

postgres-fdw扩展官方直达链接文档。

由于都是SQL,接下来就只写相关的SQL,其他的内容去上述的官方文档找即可。


-- 1. 查找当前PG是否支持**postgres_fdw**扩展
SELECT *
FROM pg_available_extensions
WHERE name = 'postgres_fdw';


-- 2. 创建外部服务器
CREATE SERVER foreign_server
        FOREIGN DATA WRAPPER postgres_fdw
        OPTIONS (host '192.83.123.89', port '5432', dbname 'foreign_db');
-- -- 查询外部服务器
select * from pg_foreign_server;
-- -- 删除外部服务器
DROP SERVER IF EXISTS foreign_server;

-- 3. 创建用户映射到远程服务器的角色
CREATE USER MAPPING FOR local_user
        SERVER foreign_server
        OPTIONS (user 'foreign_user', password 'password');

-- -- 删除用户映射
DROP USER MAPPING IF EXISTS FOR local_user SERVER foreign_server;

-- 4. 导入远程服务器的指定schema的表到指定模式中
IMPORT FOREIGN SCHEMA foreign_films
    FROM SERVER foreign_server INTO srv_films;

其他辅助语句


-- 查看当前连接的登录用户
select CURRENT_USER;

-- 删除指定远程服务的`srv_behavior_monitor_dev`下的用户`postgres `的用户映射
DROP USER MAPPING IF EXISTS FOR postgres SERVER srv_behavior_monitor_dev;

-- 查询远程服务的条目信息
SELECT srv.srvname       AS server_name,
       fdw.fdwname       AS wrapper,
       srv.srvoptions    AS options
FROM pg_foreign_server srv
JOIN pg_foreign_data_wrapper fdw
  ON srv.srvfdw = fdw.oid;

-- 查询FDW的信息
select * from  pg_foreign_data_wrapper;
-- 查询远程服务的信息
select * from  pg_foreign_server;
-- 查询用户映射的信息
select * from  pg_user_mapping;

-- 查看授权情况
SELECT
  grantee,
  table_schema,
  table_name,
  privilege_type
FROM information_schema.table_privileges
WHERE table_schema = 'srv_films'
ORDER BY table_name, grantee, privilege_type;

挂载远程数据库Schema授权指定schema及表的权限


-- 根据需要进行授权,授权FDW扩展谁可以进行管理
GRANT ALL PRIVILEGES
  ON FOREIGN DATA WRAPPER postgres_fdw
  TO adminuser;

-- 同上反之,撤销
REVOKE ALL PRIVILEGES
  ON FOREIGN DATA WRAPPER postgres_fdw
  FROM adminuser;

-- 根据需要进行授权,授权谁可以使用`create server`创建外部服务器
GRANT ALL PRIVILEGES
  ON FOREIGN SERVER srv_films
  TO adminuser;

-- 同上反之,撤销
REVOKE ALL PRIVILEGES
  ON FOREIGN SERVER srv_behavior_monitor_dev
  FROM adminuser;

-- 授权模式的所有权限
GRANT USAGE
  ON SCHEMA srv_films
  TO adminuser;

GRANT ALL
  ON ALL TABLES IN SCHEMA srv_films
  TO adminuser;

完整的授权语句:


GRANT ALL PRIVILEGES ON DATABASE mydb TO postgres;

-- 如果还需改模式所有者
ALTER SCHEMA myschema OWNER TO postgres;  

-- 先给 schema 本身的 USAGE(让它能访问这个模式)
GRANT USAGE
  ON SCHEMA myschema
  TO target_user;

-- 给模式下所有表(包括视图)的所有操作权限
GRANT ALL PRIVILEGES
  ON ALL TABLES IN SCHEMA myschema
  TO target_user;

-- 给模式下所有序列的所有操作权限
GRANT ALL PRIVILEGES
  ON ALL SEQUENCES IN SCHEMA myschema
  TO target_user;

-- 给模式下所有函数和过程的执行权限
GRANT ALL PRIVILEGES
  ON ALL FUNCTIONS IN SCHEMA myschema
  TO target_user;

----------------------------------------------------------------------------
-- 为后续在该模式中创建的新对象设置默认权限
-- 新表/视图、新序列、新函数/过程等都自动授予给 target_user

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
  GRANT ALL PRIVILEGES ON TABLES
  TO target_user;

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
  GRANT ALL PRIVILEGES ON SEQUENCES
  TO target_user;

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
  GRANT ALL PRIVILEGES ON FUNCTIONS
  TO target_user;

常见问题

org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping

当你使用dblink_exec执行insert语句时,由于mybatis.xml的参数是使用#{}进行绑定参数,找不到参数?位置的时候报的异常内容,换成${}即可。
虽然${}不安全,但是也没有其他办法了,不然就要把SQL用程序来拼接,然后使用${}进行占位并替换了。

关键参数