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