##前文讲了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

PostGIS mysql_fdw使用(Linux)的更多相关文章

  1. PostGIS mysql_fdw安装(Linux)

    ##本人在安装过程中,可能因为系统环境因素或是其他原因,参考网上的文章没有一篇是非常顺利的,所以自己总结一下. ##安装过程中非常坎坷,有些地方反复了好几次,弄的有点模糊,但模糊的地方在文中我会指出. ...

  2. PostGIS mysql_fdw操作日志(留观)

    #####Linux终端操作命令记录,留做自己后面研究,绿色部分为成功部分 错误: 服务器"mysql_server" 不存在postgres=# create user mapp ...

  3. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  4. [zz] 安装PostGIS(Linux篇)

    0.安装PostgreSQL数据库 参考安装PostgreSQL数据库(Linux篇). 1.安装proj4 #tar zxvf proj-4.8.0.tar.gz#cd proj-4.8.0#./c ...

  5. PostGIS 安装教程(Linux)(二)

    ##接上篇,上篇讲述了Postgresql的安装,此篇介绍postgis的安装 ##附上上篇链接:https://www.cnblogs.com/giser-s/p/11195419.html 二.安 ...

  6. PostGIS 安装教程(Linux)(一)

    ##本文分两部分,第一部分讲linux下postgresql的安装,第二部分讲postgis的安装 ##感谢作者:https://www.linuxidc.com/Linux/2017-10/1475 ...

  7. Linux 平台PostGIS安装

    1.前提条件: postgresql 9.6.1 已经通过源码方式安装完成并可成功运行. 2. other OS packets OS: CentOS 6.4 X64 X64: libxml2-dev ...

  8. PostgreSQL9.1 with PostGIS 2.1.4 for mapping coordinates on linux/ubuntu 已经打包成deb 可下载

    For location based service, I try to use postgresql with postgis. You can download postgis from here ...

  9. PostGIS 使用Mysql_fdw同步ArcGIS填坑记录

    ##实现Mysql_fdw数据同步过程中,出现过很多坑,开此贴记录一下 1.触发器记录 这里insert的时候,采用过insert into f_pressureline select new.*,出 ...

随机推荐

  1. 拨云见日,彻底弄清楚Java日志框架 log4j, logback, slf4j的区别与联系

    log4j 以及 logback, slf4j 官网 日志框架的困惑 作为一个正常的项目,是必须有日志框架的存在的,没有日志,很难追踪一些奇奇怪怪的系统问题. 但是,我们经常在项目的依赖中,见到奇奇怪 ...

  2. 解决tortoiseSvn 访问版本库的时候一直初始化,或者无响应的问题

    现象 svn访问版本库时一直提示: please wait while the repository browser is initializing 没有反应,甚至3-4分钟才会出来,即便出来也会很卡 ...

  3. github实用的搜索小技巧

    查资源,学习优秀的框架,搜索是一种能力! 作为程序猿开发中最大的同性交友网站,github当之无愧,里面有很多优秀的开源框架,各种技术大佬混迹其中,有他们总结的学习教程,造好的轮子(开发的各种工具,技 ...

  4. 深究1.8版本HashMap源码

    put方法 public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } 在putVal方法之 ...

  5. 百度NLP预训练模型ERNIE2.0最强实操课程来袭!【附教程】

    2019年3月,百度正式发布NLP模型ERNIE,其在中文任务中全面超越BERT一度引发业界广泛关注和探讨.经过短短几个月时间,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基 ...

  6. Java 干货之深入理解Java泛型

    一般的类和方法,只能使用具体的类型,要么是基本类型,要么是自定义的类.如果要编写可以应用多中类型的代码,这种刻板的限制对代码得束缚会就会很大. ---<Thinking in Java> ...

  7. DP动态规划学习笔记

    作为考察范围最广,考察次数最多的算法,当然要开一篇博客来复习啦. 子曰:温故而知新,可以为师矣 我复习DP时有一些自己对DP的理解,也就分享出来吧. ——正片开始—— 动态规划算法,即Dynamic ...

  8. OV5640摄像头的数据处理配置流程(一)

    module RGB_init( //系统信号输入(时钟+复位) input cmos_clk_i, //模块控制时钟 input rst_n_i, //系统复位信号 //OV5640输出信号(从56 ...

  9. 题解【洛谷】CF134A

    题解 CF134A [Average Numbers] 这题就是简单的模拟. 只不过要优化一下常数什么的 思路: 为了不浪费时间总是取平均数,直接用一个 S 储存总和,每次都减去 a_i​ 再除以 n ...

  10. [考试反思]1002csp-s模拟测试56:凌乱

    放假回来状态回升??(玩够了-但是稍困) T1打的不完全对,但是过掉了.很快的想到了二分吧喇叭啦.. 然后T2也挺快想出来了但是挂细节没发现,考试快结束的时候才发现出锅了. 改了过来是正解,但是出题人 ...