Что исключение ограничений `EXCLUDE ИСПОЛЬЗОВАНИЯ сути (с С &&)` означают?

голоса
2

С PostgreSQL документа

Ограничения исключения гарантировать, что если любые две строки сравниваются по указанным столбцам или выражений, используя указанные операторы, по крайней мере, один из этих операторов сравнения будет возвращать ложные или нуль. Синтаксис:

CREATE TABLE circles (
    c circle,
    EXCLUDE USING gist (c WITH &&)
);

Мне было интересно , что это EXCLUDE USING gist (c WITH &&)значит? В частности, gist(), c WITH &&и EXCLUDE USING.

Можно ли переписать в терминах check? Благодарю.

Задан 09/07/2018 в 12:43
источник пользователем
На других языках...                            


1 ответов

голоса
1

В то время как CHECKограничение вычисляет выражение , основываясь на одной строке таблицы, EXCLUDEограничение оценивает сравнение двух строк в таблице. Думайте об этом как обобщенного UNIQUEограничения: вместо «две строки не могут быть равны», вы можете сказать что - то вроде «две строки не пересекаются», или даже «две строки не могут быть разными ».

Для того , чтобы достичь этого , не проверив все возможные комбинации значений, она нуждается в соответствующую структуру индекса , которая позволяет ему найти возможные нарушения при вставке или обновлении строки. Это то , что gistчасть заявления относится к: определенному типу индекса , который может быть использован для ускорения , кроме равенства операций.

Остальная часть декларации является само ограничение: cэто столбец проверяется, и &&оператор , который не должен возвращать верно для любой пары строк. В этом случае, &&является «перекрывается» оператор , как указано на странице руководства геометрических операторов .

Так , вместе взятое, ограничение EXCLUDE USING gist (c WITH &&)переводится не «никаких два значения cдолжно накладываться друг на друг (точнее, A.c && B.cдолжен возвращать ложным или нуль для всех отдельных строк Aи B), и , пожалуйста , используйте gistиндекс для мониторинга этого ограничения».

Ответил 09/07/2018 в 13:15
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more