PostgreSQL автоматически увеличивает столбец в зависимости от значения другого столбца - PullRequest
0 голосов
/ 01 сентября 2018

В PostgreSQL мы можем определить столбец как SERIAL , чтобы автоматически увеличить его с помощью запроса вставки.

Может ли это автоинкремент произойти при переходе к другому значению столбца?

Я объясню свой вопрос на следующем примере.

В мультитенантном SaaS-приложении может быть сценарий, в котором нам может понадобиться увеличить столбец (скажем, item_id столбец в таблице элементов) для каждой учетной записи пользователя.

Пример: таблица предметов

item_id | account_id

100 | 1

101 | 1

102 | 1

100 | 2

извините за плохое форматирование таблицы. Надеюсь, у вас есть представление об основной структуре.

В приведенном выше примере, как только новая учетная запись создается (например, учетная запись 2), серийный счет item_id должен начинаться с начала снова, т. Е. 100.

Если пользователь в учетной записи 1 удаляет item_id 102 и создает новую запись элемента, тогда для item_id должно быть установлено значение 103 и т. Д.

Я пытался найти решение, но не смог получить указатель с помощью поиска Google. Так что любая помощь будет высоко ценится!

PS: Я знаю, что это можно сделать из кода бэкэнда, но мне более интересно узнать, есть ли у базы данных решение для этого или нет.

1 Ответ

0 голосов
/ 01 сентября 2018

Вы не можете определить SERIAL для разделения на другие столбцы. Но вы можете использовать функцию ROW_NUMBER(). Если вам не нужно, чтобы это значение материализовалось, вы можете написать что-то вроде:

CREATE VIEW v_item_table
AS
SELECT *, 
 ROW_NUMBER() OVER(PARTITION BY item_id ORDER BY some_timestamp_col) AS account_id
FROM item_table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...