mysql_fdw
MySQL外部数据包装器
仓库
EnterpriseDB/mysql_fdw
https://github.com/EnterpriseDB/mysql_fdw
源码
mysql_fdw-REL-2_9_3.tar.gz
mysql_fdw-REL-2_9_3.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
mysql_fdw | 2.9.3 | FDW | BSD 3-Clause | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 8600 | mysql_fdw | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | oracle_fdw tds_fdw db2_fdw postgres_fdw wrappers multicorn odbc_fdw jdbc_fdw |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 2.9.3 | 1817161514 | mysql_fdw | - |
| RPM | PGDG | 2.9.3 | 1817161514 | mysql_fdw_$v | - |
| DEB | PGDG | 2.9.3 | 1817161514 | postgresql-$v-mysql-fdw | - |
安装
您可以直接安装 mysql_fdw 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
pig repo add pgdg -u # 添加 PGDG 仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install mysql_fdw; # 当前活跃 PG 版本安装
pig ext install -y mysql_fdw -v 18 # PG 18
pig ext install -y mysql_fdw -v 17 # PG 17
pig ext install -y mysql_fdw -v 16 # PG 16
pig ext install -y mysql_fdw -v 15 # PG 15
pig ext install -y mysql_fdw -v 14 # PG 14
dnf install -y mysql_fdw_18 # PG 18
dnf install -y mysql_fdw_17 # PG 17
dnf install -y mysql_fdw_16 # PG 16
dnf install -y mysql_fdw_15 # PG 15
dnf install -y mysql_fdw_14 # PG 14
apt install -y postgresql-18-mysql-fdw # PG 18
apt install -y postgresql-17-mysql-fdw # PG 17
apt install -y postgresql-16-mysql-fdw # PG 16
apt install -y postgresql-15-mysql-fdw # PG 15
apt install -y postgresql-14-mysql-fdw # PG 14
创建扩展:
CREATE EXTENSION mysql_fdw;
用法
创建服务器
CREATE EXTENSION mysql_fdw;
CREATE SERVER mysql_server
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (host '127.0.0.1', port '3306');
服务器选项: host(默认 127.0.0.1)、port(默认 3306)、secure_auth(默认 true)、init_command、use_remote_estimate(默认 false)、reconnect(默认 false)、sql_mode(默认 ANSI_QUOTES)、fetch_size(默认 100)、character_set、truncatable(默认 true),以及 SSL 选项(ssl_key、ssl_cert、ssl_ca、ssl_capath、ssl_cipher)。
创建用户映射
CREATE USER MAPPING FOR pguser
SERVER mysql_server
OPTIONS (username 'mysqluser', password 'mysqlpass');
创建外部表
CREATE FOREIGN TABLE warehouse (
warehouse_id int,
warehouse_name text,
warehouse_created timestamp
)
SERVER mysql_server
OPTIONS (dbname 'mydb', table_name 'warehouse');
表选项: dbname(必填,MySQL 数据库名)、table_name(默认为外部表名)、fetch_size(覆盖服务器设置)、max_blob_size、truncatable(默认 true)。
CRUD 操作
INSERT INTO warehouse VALUES (1, 'UPS', current_date);
SELECT * FROM warehouse ORDER BY warehouse_id;
UPDATE warehouse SET warehouse_name = 'NEW_NAME' WHERE warehouse_id = 1;
DELETE FROM warehouse WHERE warehouse_id = 3;
下推特性
mysql_fdw 通过多种下推机制优化查询:
- WHERE 子句 下推以最小化数据传输
- 列 下推以仅获取请求的列
- JOIN 下推用于同一 MySQL 服务器上外部表之间的连接
- 聚合 下推支持
min、max、sum、avg、count - ORDER BY 和 LIMIT/OFFSET 下推以减少网络流量