Postgresql

在 Windows 中將巨大的 DBF 文件導入 Postgres 的最佳和快速方法是什麼?

  • March 25, 2022

我有一些巨大的 DBF 文件(大約 35 GB)要導入 Postgres。什麼是最好和最快的方法?

OBS:我有 300 GB 的可用磁碟空間和 8 GB RAM。

我們遇到了類似的問題,但我們的解決方案涉及一些編碼。我不知道這是否適合你。

我們遵循通常的階段:

  1. 我們讀取 DBF 元數據並創建了一個類似的 SQL ‘create table’ 語句。映射相當簡單,只是我們檢查了數字類型的位數並酌情將它們強制轉換為整數或長整數 (int8)。我們的數據有很多外鍵,最好將它們視為 int8 而不是 numeric(15,0)。
  2. 我們再次讀取 DBF 元數據並創建了一個 (java) 準備好的語句,該語句將插入單行數據。
  3. 我們為 DBF 文件中的每一行“呼叫”了準備好的語句。這確保我們不會遇到無意的 SQL 注入問題,例如像 O’Reilly 這樣的名稱。實際上,我們使用了 400 行的批次(java 中的 ps.addBatch() 和 ps.executeBatch()),並使用了 20 個插入語句的顯式開始/送出塊。兩者都顯著提高了性能。
  4. 最後我們添加了任何主鍵。

我們本可以通過一個中間文件並使用 COPY,但以程式方式執行它更容易(也更安全)。

我們還編寫了自己的 DBF 閱讀器。只花了一天的時間,我們就能夠解決我們在第三方庫中發現的一些數字溢出錯誤。您可以在 Google 上找到足夠的資訊,這並不難。

需要注意的一件事是“dbf”是模糊的。所有 dBase 文件具有相同的整體結構,但有來自不同發布者和版本的調整。它們已記錄在案,但您需要確定文件使用的版本,然後對其進行編碼。

引用自:https://dba.stackexchange.com/questions/120095