最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PostgreSQL通過mysql_fdw實(shí)現(xiàn)?MySQL?透明查詢功能

 更新時(shí)間:2026年02月05日 09:38:21   作者:大黃說說  
mysql_fdw是一個(gè)PostgreSQL的FDW擴(kuò)展,由EnterpriseDB開發(fā)并開源,它通過MySQL客戶端庫連接遠(yuǎn)程?MySQL實(shí)例,并將遠(yuǎn)程表映射為PostgreSQL中的外部表本文配置mysql_fdw,實(shí)現(xiàn)PostgreSQL對MySQL表的透明讀寫訪問,真正做到“一處查詢,跨庫聯(lián)動(dòng)”,感興趣的朋友跟隨小編一起看看吧

在多數(shù)據(jù)源并存的企業(yè)環(huán)境中,常常需要在不同數(shù)據(jù)庫之間進(jìn)行聯(lián)合分析或數(shù)據(jù)遷移。PostgreSQL 作為功能強(qiáng)大的開源關(guān)系型數(shù)據(jù)庫,提供了 Foreign Data Wrapper(FDW,外部數(shù)據(jù)包裝器)機(jī)制,允許它像訪問本地表一樣查詢遠(yuǎn)程數(shù)據(jù)庫。

本文將手把手帶你配置 mysql_fdw,實(shí)現(xiàn) PostgreSQL 對 MySQL 表的透明讀寫訪問,真正做到“一處查詢,跨庫聯(lián)動(dòng)”。

一、什么是 mysql_fdw?

mysql_fdw 是一個(gè) PostgreSQL 的 FDW 擴(kuò)展,由 EnterpriseDB 開發(fā)并開源。它通過 MySQL 客戶端庫(libmysqlclient)連接遠(yuǎn)程 MySQL 實(shí)例,并將遠(yuǎn)程表映射為 PostgreSQL 中的“外部表”(Foreign Table)。你可以在 PostgreSQL 中直接對這些外部表執(zhí)行 SELECTINSERT、UPDATE、DELETE 等操作(取決于權(quán)限和配置)。

? 適用場景:

  • 實(shí)時(shí)報(bào)表聚合(PG + MySQL 聯(lián)合查詢)
  • 數(shù)據(jù)遷移過渡期
  • 微服務(wù)間臨時(shí)數(shù)據(jù)打通
  • 避免 ETL 中間層,簡化架構(gòu)

二、環(huán)境準(zhǔn)備

前提條件

  • PostgreSQL 10+(推薦 12+)
  • MySQL 5.7 或 8.0
  • 操作系統(tǒng):Linux(本文以 Ubuntu 22.04 為例)
  • 具備 sudo 權(quán)限

安裝依賴

# 安裝編譯工具和 PostgreSQL 開發(fā)包
sudo apt update
sudo apt install build-essential postgresql-server-dev-all libmysqlclient-dev git
# 克隆 mysql_fdw 源碼(官方 GitHub)
git clone https://github.com/EnterpriseDB/mysql_fdw.git
cd mysql_fdw

?? 注意:確保 libmysqlclient-dev 版本與目標(biāo) MySQL 兼容。若使用 MySQL 8.0,可能需額外處理認(rèn)證插件(如 caching_sha2_password)。

三、編譯并安裝 mysql_fdw

# 編譯(自動(dòng)檢測 pg_config)
make
# 安裝到 PostgreSQL 擴(kuò)展目錄
sudo make install

驗(yàn)證是否安裝成功:

# 查看 PostgreSQL 的 extension 目錄
pg_config --sharedir
# 應(yīng)能在 $SHAREDIR/extension/ 下看到 mysql_fdw.control 和 .so 文件

四、在 PostgreSQL 中啟用 mysql_fdw

postgres 用戶登錄 psql:

-- 創(chuàng)建擴(kuò)展(每個(gè)需使用的數(shù)據(jù)庫都要執(zhí)行)
CREATE EXTENSION mysql_fdw;

五、配置外部服務(wù)器與用戶映射

1. 創(chuàng)建外部服務(wù)器(Foreign Server)

CREATE SERVER mysql_server
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (
    host '192.168.1.100',   -- MySQL 主機(jī) IP
    port '3306'             -- MySQL 端口
);

2. 創(chuàng)建用戶映射(User Mapping)

將 PostgreSQL 用戶映射到 MySQL 的認(rèn)證憑據(jù):

CREATE USER MAPPING FOR postgres  -- PostgreSQL 本地用戶
SERVER mysql_server
OPTIONS (
    username 'remote_user',
    password 'secure_password'
);

?? 安全建議:避免在 SQL 中明文寫密碼,可結(jié)合 .pgpass 或 Vault 等密鑰管理工具。

六、創(chuàng)建外部表(Foreign Table)

假設(shè) MySQL 中有數(shù)據(jù)庫 sales_db,表 orders 結(jié)構(gòu)如下:

-- MySQL 表結(jié)構(gòu)示例
CREATE TABLE orders (
    id INT PRIMARY KEY,
    customer_name VARCHAR(100),
    amount DECIMAL(10,2),
    created_at DATETIME
);

在 PostgreSQL 中創(chuàng)建對應(yīng)的外部表:

CREATE FOREIGN TABLE foreign_orders (
    id INTEGER,
    customer_name TEXT,
    amount NUMERIC(10,2),
    created_at TIMESTAMP
)
SERVER mysql_server
OPTIONS (
    dbname 'sales_db',
    table_name 'orders'
);

?? 注意:

  • 字段名必須一致(大小寫敏感)
  • 類型需兼容(MySQL 的 VARCHAR → PG 的 TEXT,DATETIME → TIMESTAMP)
  • 不支持所有 MySQL 特有類型(如 JSON 需測試)

七、實(shí)戰(zhàn)查詢與寫入

查詢數(shù)據(jù)

SELECT * FROM foreign_orders WHERE amount > 1000;

聯(lián)合本地表查詢

SELECT u.name, o.amount
FROM local_users u
JOIN foreign_orders o ON u.mysql_order_id = o.id;

寫入操作(需 MySQL 用戶有寫權(quán)限)

INSERT INTO foreign_orders (id, customer_name, amount, created_at)
VALUES (1001, 'Alice', 1500.00, NOW());
UPDATE foreign_orders SET amount = 1600 WHERE id = 1001;
DELETE FROM foreign_orders WHERE id = 1001;

?? 警告:寫操作會(huì)直接修改 MySQL 數(shù)據(jù),請謹(jǐn)慎使用!

八、常見問題與排查

1. 連接失?。篶ould not connect to MySQL

  • 檢查 MySQL 是否允許遠(yuǎn)程連接(bind-address
  • 確認(rèn)防火墻開放 3306 端口
  • 驗(yàn)證 MySQL 用戶權(quán)限:GRANT SELECT, INSERT... ON sales_db.* TO 'remote_user'@'%'

2. 認(rèn)證失?。∕ySQL 8.0)

MySQL 8 默認(rèn)使用 caching_sha2_password,而舊版 libmysqlclient 可能不支持。
解決方案

  • 升級(jí) libmysqlclient-dev 到 8.0+
  • 或在 MySQL 中創(chuàng)建兼容用戶:
    CREATE USER 'remote_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

3. 性能問題

  • 外部表查詢無法使用 PostgreSQL 的索引優(yōu)化
  • 復(fù)雜 JOIN 可能導(dǎo)致大量數(shù)據(jù)拉取
  • 建議:對高頻查詢結(jié)果物化(Materialized View)或定期同步

九、替代方案對比

方案優(yōu)點(diǎn)缺點(diǎn)
mysql_fdw實(shí)時(shí)、SQL 透明、支持讀寫依賴 libmysqlclient,部署復(fù)雜
邏輯復(fù)制 + ETL穩(wěn)定、可控延遲高,需維護(hù)管道
dblink(不支持 MySQL)PostgreSQL 原生 dblink 僅支持 PG

十、總結(jié)

通過 mysql_fdw,PostgreSQL 成功打破了與 MySQL 的數(shù)據(jù)孤島。雖然它不適合高并發(fā)寫入或超大規(guī)模分析場景,但在開發(fā)調(diào)試、輕量級(jí)集成、臨時(shí)數(shù)據(jù)橋接等場景中極具價(jià)值。

到此這篇關(guān)于打通異構(gòu)數(shù)據(jù)庫:PostgreSQL 通過 mysql_fdw 實(shí)現(xiàn) MySQL 透明查詢實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)postgresql mysql表透明查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PostgreSQL高級(jí)特性與性能優(yōu)化的實(shí)戰(zhàn)指南

    PostgreSQL高級(jí)特性與性能優(yōu)化的實(shí)戰(zhàn)指南

    本文將深入探討PostgreSQL的高級(jí)特性與性能優(yōu)化技術(shù),結(jié)合Python實(shí)踐,幫助開發(fā)者充分發(fā)揮PostgreSQL的潛力,文中的示例代碼講解詳細(xì),需要的小伙伴可以了解下
    2026-02-02
  • 如何解決PostgreSQL執(zhí)行語句長時(shí)間卡著不動(dòng)不報(bào)錯(cuò)也不執(zhí)行的問題

    如何解決PostgreSQL執(zhí)行語句長時(shí)間卡著不動(dòng)不報(bào)錯(cuò)也不執(zhí)行的問題

    某日開發(fā)同事上報(bào)一sql性能問題,一條查詢好似一直跑不出結(jié)果,查詢了n小時(shí),還未返回結(jié)果,這篇文章主要給大家介紹了關(guān)于如何解決PostgreSQL執(zhí)行語句長時(shí)間卡著不動(dòng)不報(bào)錯(cuò)也不執(zhí)行問題的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • PostgreSQL如何根據(jù)字符串的長度排序

    PostgreSQL如何根據(jù)字符串的長度排序

    在PostgreSQL數(shù)據(jù)庫中,可以通過LENGTH函數(shù)獲取字符串的長度,并據(jù)此進(jìn)行排序,LENGTH函數(shù)會(huì)計(jì)算并返回字符串的字符數(shù)量,要根據(jù)字符串長度進(jìn)行升序排序,可以在SQL查詢中直接使用LENGTH函數(shù),本文介紹PostgreSQL如何根據(jù)字符串的長度排序,感興趣的朋友一起看看吧
    2024-11-11
  • PostgreSql從庫重新配置的詳情

    PostgreSql從庫重新配置的詳情

    這篇文章主要介紹了PostgreSql從庫重新配置的詳情,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • pgsql 變量賦值方法及注意事項(xiàng)

    pgsql 變量賦值方法及注意事項(xiàng)

    這篇文章主要介紹了pgsql 變量賦值方法及注意事項(xiàng),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • SpringBoot3集成PostgreSQL的詳細(xì)過程

    SpringBoot3集成PostgreSQL的詳細(xì)過程

    PostgreSQL是一個(gè)功能強(qiáng)大的開源數(shù)據(jù)庫系統(tǒng),具有可靠性、穩(wěn)定性、數(shù)據(jù)一致性等特點(diǎn),且可以運(yùn)行在所有主流操作系統(tǒng)上,包括Linux、Unix、Windows等,這篇文章主要介紹了SpringBoot3集成PostgreSQL,需要的朋友可以參考下
    2024-03-03
  • 使用PostgreSQL數(shù)據(jù)庫進(jìn)行中文全文搜索的實(shí)現(xiàn)方法

    使用PostgreSQL數(shù)據(jù)庫進(jìn)行中文全文搜索的實(shí)現(xiàn)方法

    目前在PostgreSQL中常見的兩個(gè)中文分詞插件是zhparser和pg_jieba,這里我們使用zhparser,插件的編譯和安裝請查看官方文檔 ,安裝還是比較復(fù)雜的,建議找個(gè)現(xiàn)成docker鏡像,本文給大家介紹了在PostgreSQL數(shù)據(jù)庫使用中文全文搜索,需要的朋友可以參考下
    2023-09-09
  • PostgreSQL常用字符串函數(shù)與示例說明小結(jié)

    PostgreSQL常用字符串函數(shù)與示例說明小結(jié)

    文章介紹了PostgreSQL中常用字符串函數(shù)的使用方法,包括空值處理、字符串位置查詢、長度計(jì)算、大小寫轉(zhuǎn)換、去除空格、連接、替換、匹配、拆分和截取等操作,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • PostgreSQL中的NULL處理實(shí)現(xiàn)

    PostgreSQL中的NULL處理實(shí)現(xiàn)

    PostgreSQL中的NULL值處理功能豐富,可以幫助開發(fā)者更好地管理和查詢數(shù)據(jù),合理地使用NULL值可以提高查詢效率,下面就來詳細(xì)的介紹一下NULL的處理,感興趣的可以了解一下
    2026-03-03
  • postgreSQL如何設(shè)置數(shù)據(jù)庫執(zhí)行超時(shí)時(shí)間

    postgreSQL如何設(shè)置數(shù)據(jù)庫執(zhí)行超時(shí)時(shí)間

    本文我們將深入探討PostgreSQL數(shù)據(jù)庫中的一個(gè)關(guān)鍵設(shè)置SET?statement_timeout,這個(gè)設(shè)置對于管理數(shù)據(jù)庫性能和優(yōu)化查詢執(zhí)行時(shí)間非常重要,讓我們一起來了解它的工作原理以及如何有效地使用它
    2024-01-01

最新評(píng)論

新干县| 景宁| 星座| 曲靖市| 秭归县| 吉木萨尔县| 海原县| 枣强县| 乌拉特前旗| 鱼台县| 西吉县| 都安| 嵩明县| 眉山市| 团风县| 安徽省| 临海市| 柳河县| 西盟| 禄丰县| 佛坪县| 云梦县| 邳州市| 通渭县| 安化县| 安泽县| 昭通市| 嘉善县| 安宁市| 大冶市| 宝丰县| 凤城市| 察隅县| 穆棱市| 苍溪县| 松原市| 日土县| 醴陵市| 新河县| 东明县| 桓仁|