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

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

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

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

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

一、什么是 mysql_fdw?

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

? 適用場景:

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

二、環(huán)境準備

前提條件

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

安裝依賴

# 安裝編譯工具和 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 版本與目標 MySQL 兼容。若使用 MySQL 8.0,可能需額外處理認證插件(如 caching_sha2_password)。

三、編譯并安裝 mysql_fdw

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

驗證是否安裝成功:

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

四、在 PostgreSQL 中啟用 mysql_fdw

postgres 用戶登錄 psql:

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

五、配置外部服務器與用戶映射

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

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

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

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

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

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

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

假設 MySQL 中有數(shù)據(jù)庫 sales_db,表 orders 結構如下:

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

在 PostgreSQL 中創(chuà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 需測試)

七、實戰(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 用戶有寫權限)

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;

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

八、常見問題與排查

1. 連接失敗:could not connect to MySQL

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

2. 認證失?。∕ySQL 8.0)

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

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

3. 性能問題

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

九、替代方案對比

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

十、總結

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

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

相關文章

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

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

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

    如何解決PostgreSQL執(zhí)行語句長時間卡著不動不報錯也不執(zhí)行的問題

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

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

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

    PostgreSql從庫重新配置的詳情

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

    pgsql 變量賦值方法及注意事項

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

    SpringBoot3集成PostgreSQL的詳細過程

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

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

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

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

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

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

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

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

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

最新評論

泰州市| 彰化县| 柳林县| 武安市| 都兰县| 昌宁县| 邯郸市| 吉水县| 庆城县| 濮阳市| 德令哈市| 苍梧县| 吉林省| 怀宁县| 扶沟县| 佛冈县| 万源市| 达拉特旗| 五河县| 都匀市| 太康县| 西平县| 尉氏县| 句容市| 澎湖县| 康乐县| 新乡县| 江山市| 陵水| 蒙自县| 恩平市| 黄冈市| 滁州市| 循化| 格尔木市| 湘潭县| 如皋市| 长沙县| 东城区| 凤台县| 封开县|