Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
Postgres 8 Как можно реализовать уникальность на уровне базы. oid - слишком мал (4 байта) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 10:56 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
не подскажите ли для каких задач oid мал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 11:11 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
Создаешь базовую таблицу у которой делаешь ключ (например table_id) такого типа, какой нужен. Вешаешь на нее триггер для генерации ключа и все остальные таблицы наследуешь от базовой (причем в качестве триггера для ключа используешь функцию триггера базовой таблицы). Таким образом любая запись в любой таблице будет иметь уникальный ключ любой длины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 13:29 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
зачем ирмггер , если есть тип serial? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 14:34 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
потому что он, как и oid, 4 байта :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 15:17 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
Для чего нужно больше ? подскажите ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 15:34 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
tanatпотому что он, как и oid, 4 байта :)) Код: plaintext 1. 2. 3. 4. А таблица, кажется, нужна для получения запросами связанных через такой ключ детей через синтаксис ххх FROM parent* ххх ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 15:52 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
http://gborg.postgresql.org/project/pguuid/projdisplay.php а вообще поиск по "uuid postgres" выдает много результатов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 20:46 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
Возвращаясь к идее общей таблицы uid: например : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. Код: plaintext 1. 2. 3. 4. 5. 6. 2. !!! внимание, вопросик: как в SQL получить по уникуму, поля таблицы-наследника, не описанные в предке? только в plpgsql? через возврат tablename по tableoid из системной таблицы? и вставку его в собираемую SQL строку, запускаемую через EXECUTE? Или есть таки метод получить поля прямо в SQL выражении? ___ PS: Кто вообще работал с такими штуками? Во что выливается обработка ссылки по uid (oid)? В смысле получения по ссылке типа (tableoid-а) а по типу данных - переключение интерфейса? Удобно ли это? - Или этой фенечкой пользоваться менее удобно, чем непосредственным хранением 2-х полей - tid - идентификатор таблицы, в некоей таблице-регистре таблиц (где можно хранить и интерфейсные данные) + id записи в соответствующей таблице? - (по крайней мере в случае миграции/наследования бд код не завязан на старые tableoid) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 11:37 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
чем не устраивает sequence он 8-байтный т.е. макс значение 9223372036854775807 куда уж... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2005, 15:06 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
Ну в общем, я бы сделал именно sequence. А еще, если делать через то, через что у нас раньше казнили - то таблицу с одним полем CHAR(255), в который и писал бы эти самые уникальные значения. Надеюсь 255 байт достаточно для ваших целей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2005, 16:13 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
Охренеть можно!!! 4 байта - это 2^32 = 4 294 967 296 строк!!!!! Это кому не хватает 4 байт для oid??? Ж;-))))))))))))))))))))))))))))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 15:07 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
А если постоянно добавлять / удалять записи? Огород городить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 18:09 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
Даже если добавлять записи в таблицу непрерывно каждую секунду в течении года, этого хватит на 136 лет!!! 2^32 = 4 294 967 296 - oid 60 * 60 * 24 * 364 = 31 449 600 - количество секунд в году 4 294 967 296 / 31 449 600 = 136,6 (лет) А теперь посчитаем сколько это в обьёме базы на одно поле одной таблицы. 4 294 967 296 - количество записей 4 байт - размер данных в поле oid 4 294 967 296 * 4 = 17 179 869 184 байт 17 179 869 184 / 1 000 000 000 = 17,2 Гигабайт Обьём одного поля в базе 17,2 Гигабайт!!!!!!! Это ж охренеть можно! Это кто такие базы проектирует??? Ж;o))))))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2005, 13:49 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
ApeДаже если добавлять записи в таблицу непрерывно каждую секунду в течении года, этого хватит на 136 лет!!! Хм. А если у Вас "запись" первички порождает записи в разные таблички, и каждая "подзапись" должна иметь уникальный внутри базы ID ? Если в "объекте 136.6 "полей", то порождая объект "первички" в секунду (и возможно убивая с примерно той же частотой) вы исчерпаетесь примерно за год. (согласно вашим же подсчетам). При этом (если килинг имеет место) объем на момент краха будет не велик. Но это "чиста теоретич. соображение". Я пока не имел дел с такой размерностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 12:08 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
4321А если у Вас "запись" первички порождает записи в разные таблички, и каждая "подзапись" должна иметь уникальный внутри базы ID ? Если в "объекте 136.6 "полей", то порождая объект "первички" в секунду (и возможно убивая с примерно той же частотой) вы исчерпаетесь примерно за год. (согласно вашим же подсчетам). При этом (если килинг имеет место) объем на момент краха будет не велик. Ну, во-первых, OID имеет циклическую функцию и по достижении максимального значения начинает считать сначала. Поэтому исчерпаться просто не может. Кстати поэтому же, как истинно уникальный идентификатор использовать его просто глупо. Дополнительно к этому, при проведении реиндексации базы OID записей тоже меняется. Что может дать такая уникальность? Если у вас в базе 136 OID полей, а значит 136 таблиц, и запись в одной таблице вызывает кумулятивный эффект по OID-ам во всей базе, то не зная точно скорость появления и скорость уничтожения записей в базе, вы рискуете получить эти лишние 17 Гигабайт в базе гораздо раньше чем предполагаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 19:26 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
о чем споры - для решения задачи есть uuid ... линк в теме выше ... именно то что хочется... насколько я понял там уникальность чуть ли не абсолютная (там длинное поле типа связки мака, таймстампа и плясок с бубнами в чуме) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 21:52 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
Ape 4321А если у Вас "запись" первички порождает записи в разные таблички, и каждая "подзапись" должна иметь уникальный внутри базы ID ? Если в "объекте 136.6 "полей", то порождая объект "первички" в секунду (и возможно убивая с примерно той же частотой) вы исчерпаетесь примерно за год. (согласно вашим же подсчетам). При этом (если килинг имеет место) объем на момент краха будет не велик. Ну, во-первых, OID имеет циклическую функцию и по достижении максимального значения начинает считать сначала. Поэтому исчерпаться просто не может. Кстати поэтому же, как истинно уникальный идентификатор использовать его просто глупо. Дополнительно к этому, при проведении реиндексации базы OID записей тоже меняется. Что может дать такая уникальность? Если у вас в базе 136 OID полей, а значит 136 таблиц, и запись в одной таблице вызывает кумулятивный эффект по OID-ам во всей базе, то не зная точно скорость появления и скорость уничтожения записей в базе, вы рискуете получить эти лишние 17 Гигабайт в базе гораздо раньше чем предполагаете. При чем тут оид? Вопрос о int4 vs int8 и секвенсах на них. (А что оид еще и просто глупо - меня не интересует. Я его не предлагал). Использовать один счетчик на всю базу предложено выше. Чуть ниже приведена реализация. Вы влезли со своими оценками емкости 4битного поля. Я просто указал, что при интенсивной вставке "объектов" детально порезанных по полям (не обязательно в 136 таблиц - может случиться и "основная таблица полей" на 136 записей на "первичную запись + несколько записей в таблицы структуры) сиквенс инт4 исчерпается весьма быстро ("136 лет превращаются", "превращаются брюки в элегантные шорты" ) - т.е. сожрать пару порядков в секвенсе за счет схемы данных - не вопрос. При этом оиды никому на.к не упали. (... WITHOUT OIDS;) - см. више. И никакого проигрыша по объему, супротив ваших больших таблиц с большими дырками, такая "навороченная" схема может (на реальных данных) и не иметь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 10:29 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
assaВозвращаясь к идее общей таблицы uid: ... PS: Кто вообще работал с такими штуками? Во что выливается обработка ссылки по uid (oid)? В смысле получения по ссылке типа (tableoid-а) а по типу данных - переключение интерфейса? Удобно ли это? Изюм есть такой: работает DELETE FROM uid WHERE uid=xxx; - удаляется из любого потомка. Проблема: Хочу FKey с каскадом именно на все uid. К сожалению FKey (и индексы, кааца) работает только с записями самой таблицы (т.е. как ONLY). Как обойти грабель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 13:39 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
2assa поищи функции check_foreign_key check_primary_key , не помню модуля, на работе у нас чел ответственный за СУБД собрал - это специальные сишные ф-ции , которые решают проблему форинов и примари с таблицами-наследниками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 23:47 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
centur2assa поищи функции check_foreign_key check_primary_key , не помню модуля, на работе у нас чел ответственный за СУБД собрал - это специальные сишные ф-ции , которые решают проблему форинов и примари с таблицами-наследниками. ВВаххх! Этта был ба иззюм! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 23:54 |
|
||
|
Уникальный идентификатор на уровне базы
|
|||
|---|---|---|---|
|
#18+
третий одинаковый пост в форуме, надеюсь модеры не обидятся - все по теме... для Primary\foreign ключей на иерархичекие таблицы используй .../contrib/refint как выяснилось с 8.0 идет в стандартной поставке контрибов Дети. Дети! Дети.... перед тем как задать вопро - воспользуйтесь пожалуйста поиском, это уменьшит нагрузку на форум, засоряемый одними и теми же вопросами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2005, 21:37 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=32906308&tid=2007396]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 361ms |

| 0 / 0 |
