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
PostGIS mysql_fdw使用(Linux)的更多相关文章
- PostGIS mysql_fdw安装(Linux)
##本人在安装过程中,可能因为系统环境因素或是其他原因,参考网上的文章没有一篇是非常顺利的,所以自己总结一下. ##安装过程中非常坎坷,有些地方反复了好几次,弄的有点模糊,但模糊的地方在文中我会指出. ...
- PostGIS mysql_fdw操作日志(留观)
#####Linux终端操作命令记录,留做自己后面研究,绿色部分为成功部分 错误: 服务器"mysql_server" 不存在postgres=# create user mapp ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- [zz] 安装PostGIS(Linux篇)
0.安装PostgreSQL数据库 参考安装PostgreSQL数据库(Linux篇). 1.安装proj4 #tar zxvf proj-4.8.0.tar.gz#cd proj-4.8.0#./c ...
- PostGIS 安装教程(Linux)(二)
##接上篇,上篇讲述了Postgresql的安装,此篇介绍postgis的安装 ##附上上篇链接:https://www.cnblogs.com/giser-s/p/11195419.html 二.安 ...
- PostGIS 安装教程(Linux)(一)
##本文分两部分,第一部分讲linux下postgresql的安装,第二部分讲postgis的安装 ##感谢作者:https://www.linuxidc.com/Linux/2017-10/1475 ...
- Linux 平台PostGIS安装
1.前提条件: postgresql 9.6.1 已经通过源码方式安装完成并可成功运行. 2. other OS packets OS: CentOS 6.4 X64 X64: libxml2-dev ...
- 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 ...
- PostGIS 使用Mysql_fdw同步ArcGIS填坑记录
##实现Mysql_fdw数据同步过程中,出现过很多坑,开此贴记录一下 1.触发器记录 这里insert的时候,采用过insert into f_pressureline select new.*,出 ...
随机推荐
- 为什么要用dubbo,dubbo是什么,为什么要和zk结合使用?
目录 为什么要用dubbo dubbo是什么 dubbo架构 dubbo和zk关系 为什么要用dubbo? 随着互联网的发展,网站的应用规模不断扩大,常规的垂直架构已经无法应,分布式服务架构势在必行, ...
- vue render
Vue 的 render 渲染 API vue2 的 vnode tag: 当前节点的标签名 data: 当前节点是数据对象 children: 子节点,数组也是vnode 类型 text: 当前节点 ...
- element ui实现手动上传文件,且只能上传单个文件,并能覆盖上传。
element ui提供了成熟的组件场景,但实际工作中难免会遇到认(sha)真(diao)的产品.比如,最近遇到的,要求实现手动上传特定格式文件(用户点击“上传文件”按钮,确定之后,只是单纯选择了文件 ...
- 设计模式(十三)Visitor模式
Visitor模式可以用来把数据结构与处理分离开.通俗来说就是编写一个访问者类来访问数据结构中的元素,并把对各元素的处理交给访问者类.这样,当需要增加新的处理时,只需要编写新的访问者,然后让数据结构可 ...
- spring boot 面试题详解
1.什么是springboot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件) 创建独立的spring引用程序 main方法运行 嵌入的T ...
- 是true还是false呢?
古来圣贤皆寂寞 惟有[努]者留其名 ---[努]原文:饮 先总结一个小知识点:0.null.NaN.undefined."" 转成布尔值为false 其他则一律返回true 1.首 ...
- 手撕公司SSO登陆原理
Single Sign-on SSO是老生常谈的话题了,但部分同学对SSO可能掌握的也是云里雾里,一知半解.本次手撕公司的SSO登陆原理,试图以一种简单,流畅的形式为你提供 有用的SSO登陆原理. 按 ...
- sshd服务及基于密钥远程登陆(无需密码)
上一条博客说明了用sshd服务远程登陆另一个系统,但是需要密码,如果不用密码呢?有没有简便的方法呢?下面为大家介绍一下,也就是基于密钥的安全验证:需要在本地生成”密钥对“后将公钥传送至服务端,进行公共 ...
- Promise对象及它在js中的执行顺序
关于Promise对象的学习及它的执行顺序 学习阮一峰老师的ES6入门后的记录 1.promise的定义 promise是一个对象,通常包裹着一个异步操作,promise对象提供一些接口的方法,返回一 ...
- MySQL初始化root密码以及root密码忘记解决方法
一.MySQL初始化root密码 mysql默认root用户没有密码,输入mysql –u root 进入mysql 1.进入mysql数据库 use mysql; 2.初始化root密码 mysql ...