开发者社区 问答 正文

postgresql mysql_fdw同步的外部表,怎么转为内部表?

我使用postgresql外部扩展mysql_fdw,使postgresql与mysql数据库做数据同步,但是这个操作同步过来的表都在postgresql外部表中,我有分析工具需要连接postgresql的内部表(普通表),外部表不识别,请问怎么做?

展开
收起
嗜血kuang魔 2019-07-19 14:42:42 2903 分享 版权
阿里云 AI 助理回答

在 PostgreSQL 中,使用 mysql_fdw 外部数据包装器(foreign data wrapper)确实可以实现与 MySQL 数据库的数据同步,但正如您所提到的,通过这种方式访问的表实际上是外部表,而非 PostgreSQL 的本地(内部)表。如果您需要将这些外部表的数据用于不支持外部表的分析工具,您可以考虑以下几种方法来解决这个问题:

  1. 数据导入

    • 定期或一次性地将外部表的数据导入到 PostgreSQL 的本地表中。这可以通过编写 SQL 脚本或者使用 ETL(Extract, Transform, Load)工具如 Apache NiFi、Talend、Airflow 等来实现。例如,可以使用 INSERT INTO ... SELECT FROM 语句从外部表插入数据到本地表。
    INSERT INTO local_table_name (column1, column2, ...)
    SELECT column1, column2, ...
    FROM external_table_name;
    
  2. 物化视图

    • 创建一个物化视图(Materialized View),它本质上是一个存储了查询结果的本地表,这个查询可以从外部表获取数据。物化视图可以在指定的时间间隔手动刷新或设置为自动刷新,以保持与外部数据的同步。
    CREATE MATERIALIZED VIEW materialized_view_name AS
    SELECT * FROM external_table_name;
    

    并且可以设置刷新策略:

    REFRESH MATERIALIZED VIEW materialized_view_name WITH DATA;
    
  3. 触发器和规则

    • 如果需要实时同步,可以考虑在 MySQL 端设置触发器,在数据发生变化时记录变更日志,然后通过应用程序或服务读取这些日志并在 PostgreSQL 中执行相应的插入、更新或删除操作。这种方法较为复杂,维护成本较高。
  4. 使用中间件或数据同步服务

    • 考虑使用如Debezium这样的CDC(Change Data Capture)工具捕捉MySQL的变更事件,并将这些变更应用到PostgreSQL数据库中,这样可以实现实时或近实时的数据同步。或者利用阿里云的数据传输服务DTS,它提供了跨数据库的数据迁移和同步功能,包括MySQL到PostgreSQL的数据同步。

选择哪种方法取决于您的具体需求,比如数据量大小、同步频率要求以及是否需要实时同步等。如果分析工具对数据新鲜度有较高要求,可能需要采用实时性更高的解决方案。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答