Estou usando o Informix DBEXPORT para despejar meu banco de dados, no entanto, ele usa | como seu delimitador padrão.
Sei que posso especificar o delimitador que gostaria de usar usando a variável de ambiente DBDELIMITER, mas como faço para defini-la para usar a guia
Eu tentei usar \t, mas isso não parece funcionar
(Está rodando em um CentOS 5 Server btw)
ATUALIZAR
verificando a documentação, diz que você pode especificar a guia usando CTRL-I, mas quando eu a defino como CTRL-I, ela aparece no arquivo unl como ^@
Em teoria, você precisaria especificar uma guia real, possivelmente usando a citação ANSI C do Bash :
Infelizmente, parece que você também não tem permissão para usar a guia. (Teste: Informix 12.10.FC5 no Mac OS X 10.11.6.)
Aliás, tentei algumas alternativas:
$'\a'
(alert, também conhecido como Control-G) e$'\b'
(backspace, também conhecido como Control-H) são ambos aceitos, mas nenhum de$'\f'
(formfeed, também conhecido como Control-L),$'\v'
(tabulação vertical, também conhecido como Control-K),$'\r'
(retorno de carro, também conhecido como Control-M) ou$'\n'
(newline, também conhecido como Control-J) são autorizadas. Qualquer outro caractere de controle de$'\0'
até$'\037'
(números octais, todos exceto 9-13 decimais, 011-015 octal) parece estar OK (e NUL ou 0 sendo OK me surpreendeu!). Você tem alguma guia em seus dados principais? Caso contrário, você pode exportar com um dos caracteres alternativos aceitáveis e mapeá-lo para tabulação. Se você tiver guias, a vida é mais difícil porque você precisa proteger todas as guias que estão em um campo de dados com uma barra invertida.O DB-Access permite
DBDELIMITER=$'\t'
sem problemas e produz um arquivo de descarregamento com delimitadores de tabulação, portanto, o problema não está no código shell que estou usando.Se você tem certeza de que deve ter guias, investigue Art Kagel,
myexport
que faz parte de seuutils_ak
pacote do IIUG Software Repository , que também usa meu SQLCMD, disponível na mesma fonte. O usoDBDELIMITER=$'\t' sqlunload -d stores -t customers
de (ousqlcmd -U -D $'\t' -d stores -t customers
, ou várias outras reviravoltas da linha de comando) produz a saída em um formato delimitado por tabulações. (Por conta própria, o SQLCMD não lida com uma exportação completa; ele descarregará alegremente tabelas únicas. Ele ainda não lida com NUL como um separador de campo ou separador de linha - uma decisão de design ou artefato que preciso revisar.)