mongo_fdw
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
mongo_fdw | 5.5.3 | FDW | LGPL-3.0 | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 8700 | mongo_fdw | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | wrappers redis_fdw kafka_fdw hdfs_fdw documentdb_core documentdb_distributed multicorn jdbc_fdw |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 5.5.3 | 1817161514 | mongo_fdw | - |
| RPM | PGDG | 5.5.3 | 1817161514 | mongo_fdw_$v | - |
| DEB | PIGSTY | 5.5.3 | 1817161514 | postgresql-$v-mongo-fdw | - |
安装
您可以直接安装 mongo_fdw 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
pig repo add pgdg -u # 添加 PGDG 仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install mongo_fdw; # 当前活跃 PG 版本安装
pig ext install -y mongo_fdw -v 18 # PG 18
pig ext install -y mongo_fdw -v 17 # PG 17
pig ext install -y mongo_fdw -v 16 # PG 16
pig ext install -y mongo_fdw -v 15 # PG 15
pig ext install -y mongo_fdw -v 14 # PG 14
dnf install -y mongo_fdw_18 # PG 18
dnf install -y mongo_fdw_17 # PG 17
dnf install -y mongo_fdw_16 # PG 16
dnf install -y mongo_fdw_15 # PG 15
dnf install -y mongo_fdw_14 # PG 14
apt install -y postgresql-18-mongo-fdw # PG 18
apt install -y postgresql-17-mongo-fdw # PG 17
apt install -y postgresql-16-mongo-fdw # PG 16
apt install -y postgresql-15-mongo-fdw # PG 15
apt install -y postgresql-14-mongo-fdw # PG 14
创建扩展:
CREATE EXTENSION mongo_fdw;
用法
创建服务器
CREATE EXTENSION mongo_fdw;
CREATE SERVER mongo_server FOREIGN DATA WRAPPER mongo_fdw
OPTIONS (address '127.0.0.1', port '27017');
服务器选项: address(默认 127.0.0.1)、port(默认 27017)、authentication_database、replica_set、read_preference(primary、secondary、primaryPreferred、secondaryPreferred、nearest)、ssl(默认 false)、pem_file、pem_pwd、ca_file、ca_dir、crl_file、weak_cert_validation、use_remote_estimate(默认 false)、enable_join_pushdown(默认 true)、enable_aggregate_pushdown(默认 true)、enable_order_by_pushdown(默认 true)。
创建用户映射
CREATE USER MAPPING FOR pguser SERVER mongo_server
OPTIONS (username 'mongouser', password 'mongopass');
创建外部表
CREATE FOREIGN TABLE warehouse (
_id name,
warehouse_id int,
warehouse_name text,
warehouse_created timestamptz
)
SERVER mongo_server
OPTIONS (database 'mydb', collection 'warehouse');
重要: 第一列必须是 name 类型的 _id(MongoDB 的对象标识符)。
表选项: database(默认 test)、collection(默认为表名)、enable_join_pushdown、enable_aggregate_pushdown、enable_order_by_pushdown。
CRUD 操作
SELECT warehouse_id, warehouse_name FROM warehouse WHERE warehouse_id > 10;
INSERT INTO warehouse VALUES ('new_id', 100, 'New Warehouse', now());
UPDATE warehouse SET warehouse_name = 'Updated' WHERE warehouse_id = 100;
DELETE FROM warehouse WHERE warehouse_id = 100;
下推特性
mongo_fdw 将 WHERE 子句、同一服务器上外部表之间的 JOIN、聚合函数、ORDER BY、LIMIT 和 OFFSET 下推到 MongoDB,以实现高效查询执行。诊断远端执行计划时,可使用 mongo_fdw.enable_join_pushdown、mongo_fdw.enable_aggregate_pushdown、mongo_fdw.enable_order_by_pushdown 和 mongo_fdw.log_remote_query GUC。
版本说明
mongo_fdw 5.5.3,上游 tag 为 REL-5_5_3,增加 PostgreSQL 18 支持,为 MongoDB 8 更新 bundled mongoc-driver 和 json-c libraries,增加 mongo_fdw.log_remote_query debug GUC,并修复 nested-field、WHERE、ORDER BY 和 unsafe join-pushdown 场景。本线中上游已停止 PostgreSQL 12 支持。
注意事项
- BSON 仅支持 UTF-8;确保 PostgreSQL 数据库使用 UTF-8 编码
- 包含大写字母或点号(用于嵌套文档)的列名需要双引号
- PostgreSQL 默认将列名限制为 63 个字符