Linux

Informix DBDELIMITER 選項卡

  • August 29, 2016

我正在使用 Informix DBEXPORT 轉儲我的數據庫,但是它使用 | 作為其預設分隔符。

我知道我可以使用 DBDELIMITER 環境變數指定我想使用的分隔符,但是如何將其設置為使用製表符

我嘗試使用 \t 但這似乎不起作用

(順便說一句,它在 CentOS 5 伺服器上執行)

更新

檢查文件,它說您可以使用 CTRL-I 指定選項卡,但是當我將其設置為 CTRL-I 時,它在 unl 文件中顯示為 ^@

理論上,您需要指定一個實際的選項卡,可能使用 Bash 的ANSI C 引用

$ DBDELIMITER=$'\t' dbexport stores
Invalid delimiter; Don't use '\\', SPACE or HEX or Multibyte chars.
$

不幸的是,看起來您也不允許使用選項卡。(測試:Mac OS X 10.11.6 上的 Informix 12.10.FC5。)

順便說一句,我嘗試了一些替代方法:$'\a'(alert, aka Control-G) 和$'\b'(backspace, aka Control-H) 都被接受,但是$'\f'(formfeed, aka Control-L)、$'\v'(vertical tab, aka Control-K)、$'\r'(carriage return, aka Control-M) 的$'\n'(newline, aka Control-J)都沒有被允許。任何其他控製字元(八進制數,除了 9-13 十進制, $'\0'011-015$'\037'八進制)似乎都可以(並且 NUL 或 0 可以讓我感到驚訝!)。您的主要數據中有任何標籤嗎?如果沒有,您可以使用可接受的替代字元之一導出,然後將其映射到選項卡。如果您有標籤,生活會更加艱難,因為您需要使用反斜杠保護數據欄位中的任何標籤。

DB-Access 允許DBDELIMITER=$'\t'沒有問題並生成帶有製表符分隔符的解除安裝文件,因此問題不在我正在使用的 shell 程式碼中。

如果您確定必須有選項卡,請調查 Art Kagel’s ,它是IIUG Software Repositorymyexport中他的utils_ak軟體包的一部分,它也使用我的 SQLCMD,可從同一來源獲得。使用(或,或命令行的各種其他變體)以製表符分隔格式生成輸出。(就其本身而言,SQLCMD 不處理完整的導出;不過,它會愉快地解除安裝單個表。它還沒有將 NUL 作為欄位分隔符或行分隔符處理——這是我需要審查的設計決策或人工製品。)DBDELIMITER=$'\t' sqlunload -d stores -t customers``sqlcmd -U -D $'\t' -d stores -t customers

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