PostgreSQL - XML

Índice

PostgreSQL tem suporte para um tipo de dados XMLEmbora isso possa ser muito útil para nós, muitas vezes há críticas porque isso pode levar à quebra de muitas das regras de bancos de dados relacionais como a normalização, embora isso não tenha impedido todos os drivers e motores de bancos de dados high-end fornecer suporte para este tipo De dados.

Carregando dados em XML

Antes de ver como funciona do ponto de vista teórico, vamos ver um exemplo de como podemos carregar um campo com este tipo de dados.

 INSERT INTO web_sessions (session_id, session_state) VALUES ('robe', 'colorredbackgroundsnoopy' :: xml); 
Como vemos, o segundo campo para o qual fazemos a inserção é o campo XML que denotamos colocando-o :: xml no final das informações que queremos inserir.

Consultando o XML

Para fazer perguntas sobre o XML podemos usar a função xpath () por ser bastante útil para este propósito, o primeiro argumento que recebe é uma consulta do tipo XPath e o segundo é uma string que contém o XML, a resposta é um array de objetos XML que atendem às condições da consulta XPath. Vamos ver um exemplo de como fazer isso combinando-o com a função unnest () para mostrar os resultados como se fossem linhas de uma tabela.

PROLONGAR

Vamos analisar os pontos listados:

1. Nós assinamos a matriz, uma vez que XPath ele sempre retorna uma matriz, mesmo se for um único elemento que vem na resposta à consulta.

2. Obtemos o elemento texto tanto no nome quanto no valor de cada elemento prop.

3. Passamos pelas tags ,,,,, do XML.

Como podemos ver, é bastante fácil fazer as consultas para obter os valores dos campos com tipo de dados XML.

Tipos de dados compostos e personalizados

O tipo de objeto composto composto é um tipo especial em PostgreSQL porque geralmente é usado para construir um objeto e, em seguida, é associado a um tipo personalizado ou como o retorno de uma função que precisa retornar várias colunas.

PostgreSQL cria automaticamente um tipo personalizado para todas as tabelas, para qualquer finalidade podemos usar tipos personalizados, como aqueles definidos por padrão no PostgreSQL, podemos até fazer um array desses tipos.

Vamos ver um pequeno código sobre isso:

 CRIAR TABELA user_facts (user_id varchar (30) PRIMARY KEY, fatos census.facts []);
Em seguida, criamos um registro:

 ROW (86, '25001010206', 2012, 123, NULL) :: census.facts
E, finalmente, o inserimos em nossa tabela personalizada:

 INSERT INTO user_facts (user_id, fatos) VALUES ('robe', ARRAY [ROW (86, '25001010206', 2012, 123, NULL) :: census.facts]); 
Podemos até incorporar mais dados ao nosso tipo da seguinte maneira usando concatenação:

 ATUALIZAR user_facts SET fatos = fatos || array (SELECT F FROM census.facts AS F WHERE fact_type_id = 86) WHERE user_id = 'robe'; 
Então, ao fazer a consulta, vemos como tudo faz sentido como na imagem a seguir:

PROLONGAR

Com isso finalizamos este tutorial sobre tipos de dados XML e tipos de dados customizados, como sempre, vale a pena recomendar praticar os tópicos vistos aqui desta forma para manter esse conhecimento o mais atualizado possível para sua aplicação.

wave wave wave wave wave