Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Уникальное поле по дате! / 6 сообщений из 6, страница 1 из 1
22.03.2008, 13:00
    #35207421
Leximus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальное поле по дате!
Привет Всем!
Хотел узнать, можно ли в PostgreSQL создать уникальное поле по дате?
Данное поле я хочу использовать для протокола!
Если да, то сколько оно будет занимать и будет ли она на 100 процентов уникально даже если в одну секунду два (или более) разных пользователя делают операции!
...
Рейтинг: 0 / 0
22.03.2008, 14:56
    #35207490
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальное поле по дате!
А в чем проблема? Создаёте поле даты. Вешаете на него уникальный индекс. На сколько уникально - надо смотреть, до какого разряда хранится дата в постгресе. Если до секунд. То в одну секунду не даст естественно сохранить. Если до миллисекунд, то в одну миллисекунду не даст. Все также как с любым уникальным полем.
...
Рейтинг: 0 / 0
22.03.2008, 22:23
    #35207842
Leximus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальное поле по дате!
pamirА в чем проблема? Создаёте поле даты. Вешаете на него уникальный индекс. На сколько уникально - надо смотреть, до какого разряда хранится дата в постгресе. Если до секунд. То в одну секунду не даст естественно сохранить. Если до миллисекунд, то в одну миллисекунду не даст. Все также как с любым уникальным полем.

Дак я вои и хотел узнать, есть ли такая возможность сохранять дату, чтобы даже если в один момент создаёшь запись, чтобы это поле никак не пересекалась!
Я насколько догадываюсь, для этого существует функции NOW() и LOCALTIMESTAMP !
...
Рейтинг: 0 / 0
22.03.2008, 23:52
    #35207905
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальное поле по дате!
Leximus pamirА в чем проблема? Создаёте поле даты. Вешаете на него уникальный индекс. На сколько уникально - надо смотреть, до какого разряда хранится дата в постгресе. Если до секунд. То в одну секунду не даст естественно сохранить. Если до миллисекунд, то в одну миллисекунду не даст. Все также как с любым уникальным полем.

Дак я вои и хотел узнать, есть ли такая возможность сохранять дату, чтобы даже если в один момент создаёшь запись, чтобы это поле никак не пересекалась!
Я насколько догадываюсь, для этого существует функции NOW() и LOCALTIMESTAMP !Что-то я не совсем понимаю, зачем Вам уникальность по дате, если нужно, чтобы в один момент можно было создавать несколько записей?
...
Рейтинг: 0 / 0
23.03.2008, 15:24
    #35208245
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальное поле по дате!
LeximusХотел узнать, можно ли в PostgreSQL создать уникальное поле по дате?Можно.
LeximusДанное поле я хочу использовать для протокола!протокола чего ? событий реального мира ? :) тогда имхо требование уникальности - лишнее, так как два события могут произойти одновременно. взять например систему протоколирования срабатывания датчиков открытия дверей - две двери могут быть открыты одновременно разными людьми и было бы глупо потерять второе событие из-за выставленного в базе ограничения уникальности времени события :)
LeximusЕсли да, то сколько оно будет занимать и будет ли она на 100 процентов уникально даже если в одну секунду два (или более) разных пользователя делают операции!время в pg хранится с точностью до микросекунд (одна миллионная часть секунды) и занимать будет 8 байт. Точность зависит от настроек с которыми скомпилиован сервер и от точности, выставленной для поля таблицы при его создании. точнее от
Код: plaintext
1.
2.
3.
4.
seb=> show integer_datetimes ;
 integer_datetimes
-------------------
 on
и от параметра p в timestamp [ (p) ]. Если integer_datetimes = off - это значит что время хранится в виде числа с плавающей точкой и точность будет ухудшаться тем сильнее - чем дальше будет время от даты 2000-01-01. Если integer_datetimes = on - это значит что время хранится в виде 8-ми байтового целого и точность времени не зависит от расстояния до даты 2000-01-01, но при этом уменьшается промежуток представимого значения времени. При хранении времени в виде дробного числа с плавающей точкой двойной точности (integer_datetimes = off) промежуток равен - с 4713 года до нашей эры до 5874897 года нашей эры, а при хранении в виде 8-ми байтного целого - с 4713 года до нашей эры до 294276 года нашей эры.

Насчёт уникальности - непонятно, зачем Вам нужна уникальность ? Вы разве не понимаете что это зависит от пользователей ? Они могут _одновременно_ не то что в секунду, а даже в микросекунду что-то сделать, например нажать на кнопку. такая вероятность есть :)

Более подробно про представление времени в postgres можно прочитать тут: http://www.postgresql.org/docs/current/interactive/datatype-datetime.html
...
Рейтинг: 0 / 0
23.03.2008, 15:32
    #35208249
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальное поле по дате!
если Вам так нужно ограничение уникальности, то его нужно делать по двум полям: unique (user_id, op_time) где user_id - идентификатор пользователя, а op_time - время операции


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Уникальное поле по дате! / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]