Как найти перекрытия в текстовом массиве в PostgresSQL - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужно добавить ограничение к некоторому столбцу, и для этого я использовал функцию string_to_array, затем мне нужно проверить некоторые перекрытия с помощью оператора &&, но я получаю ошибку: у типа данных text [] нет класса оператора по умолчанию для метод доступа "суть". Как я могу это исправить? Возможно, мне нужно добавить расширение? Или Posgress не поддерживает такие случаи

1 Ответ

1 голос
/ 23 апреля 2020

Ваша таблица, вероятно, выглядит следующим образом:

CREATE TABLE texts (
   id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
   vals text[] NOT NULL
);

Если бы вы правильно нормализовали таблицу, решение было бы простым:

CREATE TABLE texts (
   id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
);

CREATE TABLE texts_vals (
   id bigint REFERENCES texts NOT NULL,
   val text PRIMARY KEY
);

Уникальность гарантируется автоматически!

С текстовым массивом это нельзя сделать с помощью простого ограничения.

Вы можете создать триггер, который проверяет условие, но триггеры всегда подчиняются условиям гонки по одновременным данным модификации, если вы не используете уровень изоляции SERIALIZABLE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...