Como posso escrever SQL para ler um arquivo XML em um XML
valor PostgreSQL?
O PostgreSQL tem um tipo de dados XML nativo com a XMLPARSE
função de analisar uma string de texto para esse tipo. Ele também tem maneiras de ler dados do sistema de arquivos; a COPY
declaração, entre outros.
Mas não vejo uma maneira de escrever instruções SQL nativas do PostgreSQL para ler o conteúdo de uma entrada do sistema de arquivos e usar isso para preencher um XML
valor. Como posso fazer isso?
Semelhante a esta resposta a uma pergunta anterior, e se você não quiser as restrições de
pg_read_file()
(resumindo:pg_read_file
não pode ler arquivos fora do diretório do banco de dados e lê texto na codificação de caracteres da sessão atual).Esta função funciona para qualquer caminho, mas precisa ser criada como superusuário:
lo_get
foi introduzido em 9.4, então para versões mais antigas você precisaria:então:
A
pg_read_binary_file
função pode fazer isso.Tem limitações: novo no PostgreSQL 9.1 ou superior; deve ser uma sessão de propriedade do superusuário do banco de dados; deve ler um arquivo dentro do diretório do banco de dados ou abaixo. Esses são aceitáveis no meu caso de uso.
Portanto, o seguinte funcionará para criar um
XML
valor nativo de um arquivo:No PostgreSQL 8.3 – 9.0, a
pg_read_file
função pode ser usada, com a limitação adicional de que você não pode especificar uma codificação específica de arquivo (ela lê o arquivo como texto na codificação da sessão atual).Eu postei uma implementação completa do que você está pedindo em uma resposta recente no SO .
Os principais recursos são a
xpath()
função,pg_read_file()
, manipulação de array, funções plpgsql, ..