【筆記】.NET開發環境下使用PostgreSQL+Oracle_fdw 實現兩個資料庫之間數據交互操作(一)

来源:https://www.cnblogs.com/fengran/archive/2018/01/11/8269262.html
-Advertisement-
Play Games

一 前言 以往公司開發的地理信息系統數據都是存儲在oracle中,然而在地圖數據的分析和計算中一直存在不小的問題,所以今次我們嘗試使用PostgreSQL+PostGIS來解決這一問題。 本篇筆記的目的就是記錄在研究這一開發路徑期間的“學習的內容”、“遇到的問題和解決過程”以及“簡單的實踐內容”以備 ...


一 前言

    以往公司開發的地理信息系統數據都是存儲在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 下載地址

    https://github.com/laurenz/oracle_fdw/releases/tag/ORACLE_FDW_1_1_0     選擇自己合適的版本下載,然後解壓。

  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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 重新裝了虛擬機中的Linux系統後,在mac下ssh就連不上虛擬機了 localhost:~ zhouqian$ ssh [email protected] @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: R ...
  • 一、 環境要求需要2台LVS和n(n>=2)台RS操作系統 負載均衡模式 VIP NVIPRHEL7.4 NAT 193.168.141.30 192.168.102.165 LVS1 LVS2 RS1 RS2ens3:192.168.102.161 ens3:192.168.102.162 ens ...
  • 註LVS(Linux Virtual Server):Linux虛擬伺服器,這裡通過keepalived作為負載均衡器RS(Real Server):真實伺服器VRRP(Virtual Router Redundancy Protocol): 虛擬路由冗餘協議, 解決區域網中配置靜態網關出現單點失效 ...
  • 今天主要是資料庫,然後哎,白天做了一件蠢事,惹得一個小姐姐心情不好。。。 今天把模擬題做完了,老師自己都說出的有問題。。。。 但是現在自己很多語法也記不住,特別是存儲過程和觸發器、視圖,這些重點考察的語法。好像都有as吧 第6題始終沒有解決,我還沒完全想明白,到底是為什麼錯了。 輸出結果是這個: 自 ...
  • 連接資料庫: 輸入資料庫密碼即可登陸。 查看mysql版本信息: 查看當前時間: 實現Windows與Ubuntu虛擬機之間的文件互傳問題。 其實很簡單就是需要安裝一個VMware tools即可。 打開文件管理就有一個VM的tar包,沒有的話就需要多掛一個cd驅動器。 右鍵,設置, 我有兩個cd驅 ...
  • (scott賬戶) SELECT * FROM scott.dept;--4SELECT * FROM scott.emp;--14 /**笛卡爾積內連接(等值連接)外連接(非等值連接)自連接*/ --笛卡爾積--當查詢數據時沒有使用連接條件,會查出所有關聯數據--4*14=56SELECT * F ...
  • 今天新部署Cloudera Manager Hadoop(CDH)集群 發現祖國江山一片紅,所有服務都報時鐘偏差 1、查看各伺服器,時鐘是否正確 發現並無問題 2、查看CDH主機配置————主機時鐘偏差閾值 尼瑪,這個預設值警告是2s,嚴重是10s,仔細查看界面後面的描述如下: 這是主機運行狀況測試 ...
  • .Net MongoDB LBS地理位置定位 開發過程,實現商家按距離排序 前言: 在使用美團點外賣,看電影,找好吃的時候,經常會註意到軟體有一個按距離排序,找離我最近的商家,心中有一些疑問,.Net+Sql Server是如何做到這一需求的?發現使用關係型資料庫Sql Server實現這一需求是有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...