Size: a a a

pgsql – PostgreSQL

2021 January 24

N

Name in pgsql – PostgreSQL
Приветствую. Подскажите, возможно ли настроить constraint Check , чтобы он при INSERT добавлял новые данные, если сочетание значений в трёх столбца будут уникальны? Нужно добавить, купленный билет, при условии, что на данный сеанс места свободны.
источник

am

a m in pgsql – PostgreSQL
Можно сделать триггер.
источник

am

a m in pgsql – PostgreSQL
И проверку на уникальность в рамках таблицы через составной уникальный индекс и ON CONFLICT. Только совершенно непонятно, какую именно логику вы хотите на все это повесить.
источник

am

a m in pgsql – PostgreSQL
Обычно делают ON CONFLICT DO NOTHING и по нулевому количеству вставленных строк приложение пишет «ой, извините, только что раскупили».
источник

IK

Igor Komarov in pgsql – PostgreSQL
Name
Приветствую. Подскажите, возможно ли настроить constraint Check , чтобы он при INSERT добавлял новые данные, если сочетание значений в трёх столбца будут уникальны? Нужно добавить, купленный билет, при условии, что на данный сеанс места свободны.
Процедура в одной транзакции?
источник

N

Name in pgsql – PostgreSQL
Проверить, что билет на данное место не куплен.
источник

N

Name in pgsql – PostgreSQL
Если не куплен, добавить значения. Если куплен, ошибку получить.
источник

IK

Igor Komarov in pgsql – PostgreSQL
Ну я и говорю, в транзакцию упаковать запросы (разбить на exists и insert), и завернуть ее в процедуру
источник

N

Name in pgsql – PostgreSQL
Спасибо. Почитаю про это :)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Name
Если не куплен, добавить значения. Если куплен, ошибку получить.
Хмм... а разве обычный уникальный индекс чем-то не подходит для этой задачи?
источник

N

Name in pgsql – PostgreSQL
В нём тоже можно условие писать?
источник

N

Name in pgsql – PostgreSQL
CREATE UNIQUE INDEX users_unique_idx ON users(email) WHERE deleted = false; Я пока такое нашёл, думал как то с этим разобраться или с CHECK
источник

N

Name in pgsql – PostgreSQL
Или EXCLUDE
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Name
В нём тоже можно условие писать?
Какое условие?

> Проверить, что билет на данное место не куплен.
> Если не куплен, добавить значения. Если куплен, ошибку получить.

Как определяется, что билет куплен? Вы схему таблицы / пример данных можете показать?
источник

N

Name in pgsql – PostgreSQL
Сейчас показать не могу. Билет будет куплен, если ID сеанса + ряд + место = отсутствуют в таблице. Иначе место куплено.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Name
Сейчас показать не могу. Билет будет куплен, если ID сеанса + ряд + место = отсутствуют в таблице. Иначе место куплено.
CREATE UNIQUE INDEX ON the_table (ID сеанса, ряд, место);

Нет?
источник

N

Name in pgsql – PostgreSQL
Выглядит, как ДА.
источник

N

Name in pgsql – PostgreSQL
источник

N

Name in pgsql – PostgreSQL
Yaroslav Schekin
CREATE UNIQUE INDEX ON the_table (ID сеанса, ряд, место);

Нет?
Завтра с утра попробую. Спасибо большое.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Name
Завтра с утра попробую. Спасибо большое.
Не за что. ;)
Не используйте timestamp, кстати: https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_timestamp_.28without_time_zone.29
источник