zoukankan      html  css  js  c++  java
  • PostGIS mysql_fdw使用(Linux)

    ##前文讲了mysql_fdw的安装,此文主要讲mysql_fdw的配置以及使用

    ##附上前文链接:https://www.cnblogs.com/giser-s/p/11208803.html

    背景需求

    业务平台数据库用的是MySQL,地图引擎用的是ArcGIS,ArcSDE不支持MySQL作为空间数据库,因此我们将空间数据库搭在了PostgreSQL上。

    考虑到业务信息与空间信息没法完全划分出界限(即不排除Mysql会存入有待分析的空间数据,PostgreSQL需要将空间数据推到业务端),所以想将两库做同步,并能在ArcMap中进行关联。

    讨论了多套方案:有通过接口进行同步;定时服务同步;以及这里提及的MySQL_fdw外部数据封装包。这里记录mysql_fdw的研究成果。

    前期准备

    因为最终目的需要使ArcSDE能连接库,因此首先还是要在ArcMap中创建企业级空间数据库,不会的参考之前博文链接(方法二):https://www.cnblogs.com/giser-s/p/10345285.html

    配置使用

    1.资源约定

    ##先做约定,后面示例用的资源如下

    ##用户:sde

    ##空间数据库名称:bkrq

    ##空间数据表名称:user_role

    ##Server名称:bkrq_server

    ##Mysql数据源:

    地址:10.19.147.**

    账号/密码:root / pwd123

    数据库:bkrq

    表名:user_role

    2.超级账号登陆bkrq库

    [root@localhost ~]#  su - postgres

    -bash-4.2$ psql

    postgres=#  c bkrq

     3.创建扩展

    bkrq=# CREATE EXTENSION mysql_fdw;

     

    4.创建外部服务器Server

    #超级用户执行(这里用postgres)

    #替换成mysql的真实IP和端口

    bkrq=# CREATE SERVER bkrq_server

         FOREIGN DATA WRAPPER mysql_fdw

         OPTIONS (host '10.19.147.**', port '3306');

     

    5.创建映射Mapping

    #超级用户执行(这里用postgres)
    #pguser 替换成需要查询MYSQL表的PG数据库普通用户
    bkrq=# CREATE USER MAPPING FOR sde
      SERVER bkrq_server
      OPTIONS (username 'root', password 'pwd123');

    6.赋权限

    #超级用户执行(这里用postgres)
    #pguser 替换成需要查询MYSQL表的PG数据库普通用户

    #这里sde默认创建时已经是超级用户,这步非必要

    bkrq=#  grant usage ON FOREIGN SERVER bkrq_server to sde;

    7.切换用户/库

    #普通用户执行(切换到sde用户,库bkrq不变)
    #创建与mysql结构一样的表, 参数中指定表名和库名
    bkrq=#  c bkrq sde;

    8.创建外部表

    #普通用户执行(sde用户,bkrq库)

    #创建外部表(与Mysql同步表,表名、表结构保持一致)

    ######建表时标红处为mysql表,注意区分大小写#######
    bkrq=#  CREATE FOREIGN TABLE USER_ROLE(
      ROLE_ID int,
      ROLE_NAME text,
      ROLE_TXT text,
      MENU_ID text)
      SERVER bkrq_server
    OPTIONS (dbname 'bkrq', table_name 'USER_ROLE');

    9.插入测试

    #普通用户执行(sde用户,bkrq库)
    #支持写MYSQL远程表, 如果要回收写权限,建议使用超级用户建foreign table,并且将select权限赋予给普通用户。
    bkrq=#  INSERT INTO user_role values (1, '2',’3’,’4’);

    10.Mysql_fdw结束

    查看mysql表与pg表,刚才插入的数据是否执行成功即可。至此,Mysql_fdw的配置和使用结束。

    但是,因为ArcGIS的介入,配置还没有结束!

    fdw同步的数据都会存在外部数据表中,与一般的普通表不同(具体区别自行百度),ArcSDE不识别,ArcMap里编辑的就无法同步到MySQL,无奈只能想到用触发器的方式实现。

    #外部数据表在pgAdmin中查看方法。文件--选项--浏览器--外部数据表。

    #彩蛋:这里搜到foreign_table_exposer.fdw,这个扩展的介绍说明就是将外部表转为普通表,但好像版本比较高,我9.4编译失败,大家可以试试

    10.新建表

    #

    bkrq=#  CREATE TABLE tab_act_user_role(ROLE_ID int, ROLE_NAME text, ROLE_TXT text, MENU_ID text);

    11.新建函数/过程

    #新增auditlogfunc的函数过程,实现触发器触发时,更新user_role外部表

    CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$  

        BEGIN  

            if (TG_OP = 'DELETE') then

    delete from user_role where ROLE_ID = OLD.ROLE_ID;

    return old;

    elsif (TG_OP = 'UPDATE') then

    update user_role set ROLE_NAME = new.ROLE_NAME , ROLE_TXT = new.ROLE_TXT , MENU_ID = new.MENU_ID where ROLE_ID = OLD.ROLE_ID;

    return new;

    elsif (TG_OP = 'INSERT') then

    insert into user_role select new.*;

    return new;

    end if;

    return null;

        END;  

    $example_table$ LANGUAGE plpgsql;

    12.新建触发器

    #为内部表tab_act_user_role添加增删改查的触发器

    CREATE TRIGGER example_trigger AFTER INSERT or UPDATE or DELETE ON tab_act_user_role  

    FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();

    13.测试

    insert into tab_act_user_role values (111112,'2','2','2');

    delete from tab_act_user_role where role_id = 111112;

    update tab_act_user_role set role_name ='2222' where role_id = '111111';

    #操作tab_act_user_role表时,如果user_role外部表数据有更新,则表示成功!

    select * from user_role;

    #遇到过下面的错误,在建表的时候Mysql的表一定要设主键

    13.结束

    完结撒花

    foreign_table_exposer

  • 相关阅读:
    转载一篇不错的Mac上安装Apache和多版本PHP的文章
    Mac 上配置tomcat 及可能碰到的问题。
    iOS通知中心 NSNotificationCenter详解
    字符缓冲区读取文件BufferedReader
    BufferedWriter—newLine
    缓冲流复制文件与基本流复制文件比较
    BufferedOutputStream缓冲流
    properties集合
    JDK7,JDK9流中异常的处理
    try-catch-finally处理流中的异常
  • 原文地址:https://www.cnblogs.com/giser-s/p/11208818.html
Copyright © 2011-2022 走看看