Как обеспечить, чтобы в столбце было только одно значение `true` на имена (в перечислении) другого столбца? - PullRequest
1 голос
/ 11 января 2020

У меня есть следующая структура с перечислением { 'ready', 'set', 'go'} на name:

|----------------------|---------------------------|------------------------|
|          Id          |          enabled          |          name          |
|----------------------|---------------------------|------------------------|
|          1           |          true             |        'ready'         |
|----------------------|---------------------------|------------------------|
|          2           |          false            |        'ready'         |
|----------------------|---------------------------|------------------------|
|          3           |          false            |        'ready'         |
|----------------------|---------------------------|------------------------|
|          4           |          false            |        'set'           |
|----------------------|---------------------------|------------------------|
|          5           |          true             |        'set'           |
|----------------------|---------------------------|------------------------|
|          6           |          true             |        'go'            |
|----------------------|---------------------------|------------------------|
|          7           |          false            |        'go'            |
|----------------------|---------------------------|------------------------|

Как я могу наложить на него ограничение, чтобы было только 3 true 's ( один на ready, один на set и один на go)?

1 Ответ

3 голосов
/ 11 января 2020

Вы можете использовать отфильтрованные уникальные индексы (или как Postgres называет их "частичные индексы" ):

create unique index unq_t_name
    on t(name)
    where enabled;
...