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

推荐订阅源

博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
G
Google Developers Blog
B
Blog
Engineering at Meta
Engineering at Meta
阮一峰的网络日志
阮一峰的网络日志
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
The Cloudflare Blog
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
雷峰网
雷峰网
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
量子位
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
H
Help Net Security
Help Net Security
Help Net Security
P
Palo Alto Networks Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Troy Hunt's Blog
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
Apple Machine Learning Research
Apple Machine Learning Research
Scott Helme
Scott Helme
N
News | PayPal Newsroom
AWS News Blog
AWS News Blog
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
腾讯CDC
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
TaoSecurity Blog
TaoSecurity Blog
GbyAI
GbyAI
Y
Y Combinator Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
Docker

博客园 - 星小梦

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用程序来拼接,然后使用${}进行占位并替换了。

关键参数