在異構存儲庫之間遷移數據(即源數據庫和目標數據庫來自不同供應商的不同數據庫管理系統)會遇到一些挑戰。在某些情況下,可以同時連接兩個數據庫。但有時根本無法實現。面對這樣的困境,數據庫從業者別無選擇,只能從轉儲文件填充表。在這個過程中,Navicat 可以提供很大的幫助。導入向導允許你從各種源導入數據到表/集合,包括 CSV、TXT、XML、DBF 等。此外,你還可以將設置保存為配置文件,以便將來使用或設置自動化任務。在今天的博客,我們將使用免費的 Navicat Premium Lite 17 ,使用 Navicat 導入向導從 PostgreSQL "dvdrental" database 遷移數據到 MySQL 8 實例。
在本教程中,我們將使用 PostgreSQL DAT 文件填充 MySQL 8 中的 film 表。下面是表設計器中的表定義:
要啟動導入向導,請右鍵單擊 Navicat 導航窗格中的目標表(或在 macOS 中按住 Ctrl-Click),然后從彈出的菜單中選擇“導入向導...”:
向導的第一個屏幕是我們選擇源文件的地方。請注意,精簡版只支持基于文本的文件,如 TXT、CSV、XML 和 JSON。雖然我們有一個 .dat 文件,但我們可以選擇文本文件選項,其中包括 .txt、.csv 和 .dat 格式:
在下一個屏幕中,我們將選擇 DAT 文件。每個表都有一個文件。電影表的文件名為“3061.dat”:
接下來是設置分隔符。記錄使用換行(LF)字符分隔,而列則使用制表符(TAB)分隔。文本值周圍沒有引號,因此一定要移除“文本識別符號”文本框中的雙引號(")字符:
在下一個屏幕中,你會看到一些額外的選項。在這里,我們必須取消選中“字段名稱行”框,因為 DAT 文件不包含字段名。我們還需要將“日期順序”改為“年/月/日”("YMD"),并用破折號 (-) 替換正斜線 (/) 分隔符,因為我們要導入的日期是 YYYY-MM-DD hh:mm:ss.ms,即2013-05-26 14:50:58.951 的格式:
我們可以選擇現有表格或創建新表格。由于我們在啟動導入向導時選擇了目標表,因此它應該顯示在這里:
下一步是將源字段映射到目標表中的字段。在這里,我們不能假定它們會一致。快速查看 DAT 文件中的一個條目就會發現,last_update 和 special_features 列是相反的:
我們可以右鍵單擊(或在 macOS 中按住 Ctrl-Click)對話框中的任意位置,然后從上下文菜單中選擇“直接匹配全部”,將字段快速映射到目標表中的字段。不過,一旦這樣做了,我們就必須從目標字段下拉菜單中手動選擇 last_update 和 special_features 列來更改它們的順序:
請注意,字段 13 (f13) 可以安全忽略。
對于導入模式,我們可以“追加”或“復制”記錄,因為表應該是空的:
從一種數據庫類型遷移到另一種數據庫類型時,很有可能會遇到數據轉換錯誤。因此,取消選擇 “高級”中的“使用擴展插入語句”復選框是個不錯的做法。這樣做會使 Navicat 為每條記錄發出單獨的 INSERT 語句,而不是使用以下語法合并多條記錄:
現在,點擊“開始”按鈕啟動導入程序。
不出所料,雖然出現了幾個錯誤(確切地說是 3 個),但 1003 行中的 1000 行已經添加到了目標表中!