2016-08-08 2 views
0

У меня есть ниже таблицаПользовательские ограничения в Postgres

Column |   Type   |      Modifiers       
-----------+--------------------------+--------------------------------------------------------- 
id  | integer     | not null default nextval('votes_vote_id_seq'::regclass) 
voter  | character varying  | 
votee  | character varying  | 
timestamp | timestamp with time zone | default now() 

В настоящее время у меня есть единственное ограничение с voter и votee означает, что есть только один голос за пользователя

Я хотел бы, чтобы обеспечить соблюдение условия который позволяет еженедельно проголосовать, используя столбец timestamp. Пользователь может голосовать только за голоса только один раз в неделю.

Есть ли способ добавить пользовательские ограничения для postgres? Это те же функции, что и функции?

ответ

0

Ограничение - это что-то вроде специального триггера в PostgreSQL.

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

Решение, которое я рекомендовал бы это использовать SERIALIZABLE сделки в течение (всех, включая читателей, должен использовать их для того, чтобы работать) и проверить свое состояние в BEFORE триггера.
SERIALIZABLE гарантирует, что вышеуказанный сценарий не может произойти.

Смежные вопросы