@artemfisher

Почему тип столбца xml не проверяет входное значение?

В официальной документации написано:
Тип xml предназначен для хранения XML-данных. Его преимущество по сравнению с обычным типом text в том, что он проверяет вводимые значения на допустимость по правилам XML

При этом спокойно вставляю в таблицу произвольную строку и никакой проверки не происходит, данные записываются в таблицу.
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
melkij=> select 'hello'::xml;
  xml  
-------
 hello
(1 строка)

melkij=> select '<foo>hello'::xml;
ERROR:  invalid XML content
СТРОКА 1: select '<foo>hello'::xml;
                 ^
ПОДРОБНОСТИ:  line 1: Premature end of data in tag foo line 1
<foo>hello
          ^
line 1: chunk is not well balanced
<foo>hello

есть проверка.

Если вам нужно проверить, что это не просто валидный xml, но целый документ - добавьте check constraint с проверкой на columnname is document
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
При этом по факту я спокойно вставляю в таблицу произвольную строку и никакой проверки не происходит, данные спокойно записываются в таблицу.

Произвольный текст, не содержащий тегов, является валидным содержимым, но не XML документом. Не-XML фрагмент игнорируется при проверке.

Попробуйте вставить нечто, являющееся документом/фрагментом XML, но с ошибкой в разметке - тут же схлопочете ошибку.
DEMO
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы