• 【笔记】.NET开发环境下使用PostgreSQL+Oracle_fdw 实现两个数据库之间数据交互操作(一)


    一 前言

        以往公司开发的地理信息系统数据都是存储在oracle中,然而在地图数据的分析和计算中一直存在不小的问题,所以今次我们尝试使用PostgreSQL+PostGIS来解决这一问题。

        本篇笔记的目的就是记录在研究这一开发路径期间的“学习的内容”、“遇到的问题和解决过程”以及“简单的实践内容”以备忘。

        笔记中可能会出现部分术语概念不准确,还请您能耐心指正或者忽略,反正这是为了我自己能看懂的笔记,你爱看不看。

    二 安装

      1.环境

        Windows7 64位操作系统(公司工作的台式机,探索阶段暂时使用,以后可能会转到Windows系统的服务器上去)。

        已安装了Oracle 11g客户端,这里将不在介绍oracle的安装。

      2.步骤

        基本还是准寻下一步原则,第二步注意一下语言的选择。

        SQL安装完毕后自动弹出Stack Builder引导安装PostGIS等其他扩展。

        我这里只选择了自己需要的PostGIS版本进行了安装。

        详细可以参考同事整理的安装文档:https://www.jianshu.com/p/3b1a4cd8e72e

    三 遇到的第一个问题

      前一天用着好好的数据库,第二天服务就死活链接不上了,而且在pgAdime里没有报任何错误,就很奇怪。

      在尝试了修改配置文件、分析服务管理器启动产生的日志等最终还是没有奏效,索性卸载干净重新安装,居然就好了。。。

      现在仔细想想可能是头一天尝试各种配置文件,把整个配置搞毁了,还有就是真有一些奇怪的bug。不过这里吸取了一个教训就是,在还没有做太多工作的前提下,百度多次都没有明确解决办法的时候,还不如从头来过

      不过这里还是有一些未解决的小问题,就是postgreSQL的日志文件里的错误记录时不时就有乱码,而且不是所有中文都乱码,而是部分报错的记录才乱码,非常的诡异。这个以后要解决一下。

    四 Oracle_fdw的安装部署

      4.1 下载地址

        选择自己合适的版本下载,然后解压。

      4.2 部署

                                                                图1

                                                                图2

        图1是解压后的文件,将文件夹内文件复制到postgresql安装指定目录中(图2)。

        在postgresql控制台中输入

     

    create extension oracle_fdw;

        部署成功!

        这里我遇到过的问题是总提示oracle_fdw不是有效的win32程序,因为我的系统是64位系统,PostgreSQL选择安装的是64位,oracle_fdw自然选择的也是64位,为什么会提示不是有效的32位程序呢?

        百度一圈也么有找到和我相同的问题,只能自己解决,尝试换32位oracle也未果。

        不过后来发现我的oracle客户端安装的是32位,抱着试试看的态度,只能又卸载重安了一遍PostgreSQL,这次选择的是32位,成功了!

    使用oracle_fdw扩展连接oracle数据库

      5.1 创建server   

        oracle已经使用多年,在这里就不总结oracle的配置方法了。

        以下代码可以直接在pgAdmin的SQL查询工具里直接查询。

    create server oradb foreign data wrapper oracle_fdw options(dbserver 'orcl');  

        oradb是server的名称,'orcl'指向tnsnames.ora中配置的实例名。

      5.2 授予用户权限

    grant usage on foreign server oradb to postgres;

        将刚创建的服务oradb授予权限于postgresql用户postgres。

      5.3 数据库同步

    create user mapping for postgres server oradb options(user 'nk_sygis',password 'nk_sygis'); 

        postgres用户下服务oradb连接oracle数据库。

    Oracle外部表应用

      6.1建立外部表(foreign table)

        选择oracle中一个有数据的表,先查看结构和数据。

        我习惯用Navicat Premium直接导出一个表的结构脚本。

       

        根据oracle中的表,在postgresql中创建同结构的foreign table的sql语句如下:

      

    CREATE FOREIGN  TABLE AHW_MAPPOINT_TYPE (
    ID integer NOT NULL ,
    TYPENAME VARCHAR(50) NULL ,
    TABLENAME VARCHAR(50) NULL ,
    MAINICON VARCHAR(200) NULL ,
    SUBICON VARCHAR(200) NULL ,
    SPAREICON VARCHAR(200) NULL ,
    ISDEFAULT integer NULL ,
    USERNAME VARCHAR(50) NULL ,
    PERMISSIONUSERS VARCHAR(1000) NULL ,
    DISPLAYFIELD VARCHAR(1000) NULL ,
    ALLFIELD VARCHAR(1000) NULL ,
    SPARE1 VARCHAR(500) NULL ,
    SPARE2 VARCHAR(500) NULL ,
    REMARK VARCHAR(255) NULL 
    )server oradb options(schema 'AHWD',table 'AHW_MAPPOINT_TYPE');  

      schema:写oracle中的schema(模式名),table是同步的oracle中的表名称。

      不过这里要注意pgAdmin数据库的结构中看不到外部表,不用担心,只要能正常查询到就是建立成功了。这一点不太友好,以后要找个更好的工具用了。

      6.2查询

    select * from AHW_MAPPOINT_TYPE; 

      结果如下图

    以上部分内容参考引用了他人的文档,原地址为:http://blog.csdn.net/freeland1/article/details/42968763

  • 相关阅读:
    String和enum的互相转换
    LeetCode: Sort Colors
    LeetCode: Subsets II
    LeetCode: Spiral Matrix II
    LeetCode: Subsets
    LeetCode: Sum Root to Leaf Numbers
    LeetCode: Sqrt(x)
    LeetCode: Sudoku Solver
    LeetCode: Spiral Matrix
    LeetCode: Substring with Concatenation of All Words
  • 原文地址:https://www.cnblogs.com/fengran/p/8269262.html
Copyright © 2020-2023  润新知