Счетчик чеков Postgres - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь добавить ограничение в таблицу Postgresql и не могу найти правильный синтаксис. В моей таблице есть разные столбцы: дата, тип (перечисление с «вверх» и «вниз») и внешний идентификатор. Я хочу ограничить количество строк с типом «вниз», чтобы оно было меньше или равно количеству «вверх», которые имеют одинаковый внешний идентификатор и дату. Как мне это сделать? К настоящему времени я сделал следующее: ALTER TABLE stocks ADD CONSTRAINT chk_up_down CHECK COUNT(*) AS COUNT FROM stocks GROUP BY date, foreign_id, type, но я не знаю, как оттуда сравнивать. Спасибо.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Это невозможно с ограничением CHECK в PostgreSQL.

Do c говорит:

В настоящее время выражения CHECK не могут содержать подзапросы ни ссылаться на переменные, кроме столбцов текущей строки (см. Раздел 5.4.1). Можно ссылаться на табличноид системного столбца, но не на любой другой системный столбец.

0 голосов
/ 17 июня 2020

Вы можете сделать это только с ограничением check, если вы добавите вспомогательную функцию для возврата разницы в значениях. Затем вы можете потребовать, чтобы разница была больше или равна нулю.

Другой метод, требующий триггера, - это сохранить net сумму в другой таблице и обновлять ее при изменении данных (вставляет / обновляет / удаляет). Затем вы можете добавить ограничение check в эту таблицу, чтобы делать то, что вы хотите.

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