Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Можно ли использовать беззнаковые числа в PostgreSQL? Аналог unsigned int в MySQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 18:55 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
можно , см. доках CREATE TABLE CHECK (my_field>=0) если ты хочешь преаращать signged в unsigned при insert'ах то скорее всего придется юзать тригера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 19:16 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Не. Не так. Задача простая: Создаём таблицу, где первое поле ключевое и счётчик. Если счётчик тип int , то имеем 2 147 483 647 возможных значений счётчика. А если unsigned int , то в два раза больше. Другими словами, 4 байта можно использовать более эффективно. В MySQL есть операнд UNSIGNED, а в PostgreSQL как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 19:29 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Хмм... а что сериал уже исчерпался ? с таким подходом что инт лучше - делаем текст поле, на текст триггер, который и поле увеличивает и кучу всего проверяет, если надо, тады и unsigned отдыхает... тут собственно бесконечность у нас в руках.. А еще тут есть уникальность в рамках базы (если не автоинкремент делать, а что похитрей...) =)) А если често не разу еще не видел чтобы сериал за 100 млн перевалил, может конечно мало видел..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 21:55 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
centurХмм... а что сериал уже исчерпался ? ... А если често не разу еще не видел чтобы сериал за 100 млн перевалил, может конечно мало видел..... А мне и не надо, чтобы счётчик доходил до сумасшедших чисел. Как раз наоборот. Если бы был оператор UNSIGNED для любого целочисленного типа, то остальное дело техники. Можно было бы сделать свою последовательность, эффективно используя всё пространство числового значения а не только положительную его часть. Например UNSIGNED SMALLINT дало бы счётчик на 65534 значения. И т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2005, 22:22 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Ape Например UNSIGNED SMALLINT дало бы счётчик на 65534 значения. И т.д. А вы что-то сэкономить хотите таким образом? Кроме места на диске, другого и не видно, что тут можео сэкономить. Оцените, во что выльется экономия двух байтов в 10 млн. записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 00:07 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
DkmS Ape Например UNSIGNED SMALLINT дало бы счётчик на 65534 значения. И т.д. А вы что-то сэкономить хотите таким образом? Кроме места на диске, другого и не видно, что тут можео сэкономить. Оцените, во что выльется экономия двух байтов в 10 млн. записей. Да, это понятно, но желание всё оптимизировать присутствует всегда и не даёт спокойно спать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 10:21 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Ape Например UNSIGNED SMALLINT дало бы счётчик на 65534 значения. И т.д. наверное это дело техники например: Код: plaintext 1. 2. вот и вся ёптимизация ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 11:22 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
4321 наверное это дело техники например: Код: plaintext 1. 2. Каким образом можно int2 присвоить значение 65534 , если сервер располагает все значения для данного типа в диапазоне от -32768 до +32767 , а беззнаковые величины не декларированы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 14:56 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Ape 4321 наверное это дело техники например: Код: plaintext 1. 2. Каким образом можно int2 присвоить значение 65534 , если сервер располагает все значения для данного типа в диапазоне от -32768 до +32767 , а беззнаковые величины не декларированы? вопрос неверный. правильный вопрос (имеющий отношение к оптимизации) можно ли засунуть в инт2 65534 значений счетчика. Ответ - можно. Как - показано выше. Если вам счетчики нужны не в какчестве ссылочных полей (для связей), а как нечто значимое (т.е. оптимизация у вас левым боком) - ничто не мешеате Вам интерпретировать id как id + 6534/2 на клиенте . И не пытайтесь иметь людям мозги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 16:08 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
шиза... ну вычитай из своего unsigned int 2 147 483 647 и получиш свой сигнед инт.. воткнеш его спокойно в базу и сиди радуйся оптимизации :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 16:08 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
авторвопрос неверный. правильный вопрос (имеющий отношение к оптимизации) можно ли засунуть в инт2 65534 значений счетчика. Ответ - можно. Как - показано выше. Если вам счетчики нужны не в какчестве ссылочных полей (для связей), а как нечто значимое (т.е. оптимизация у вас левым боком) - ничто не мешеате Вам интерпретировать id как id + 6534/2 на клиенте. Нет, вопрос-то как раз верный. Несколькими постами выше я и ставил условие задачи, что счётчик является ключевым полем и естественно служит для связи. Оптимизировать-то мне нужно хранение данных на сервере, а не работу клиента с числовыми данными. Согласитесь, если есть возможность не хранить лишние байты в базе, то их не надо хранить. От этого и скорость выше и база меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 18:01 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Ape Несколькими постами выше я и ставил условие задачи, что счётчик является ключевым полем и естественно служит для связи. Что мешает отрицательному числу быть ключевым полем и служить для связи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 21:54 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Sad SpiritЧто мешает отрицательному числу быть ключевым полем и служить для связи? Привычка, скорее всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 23:04 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Sad Spirit Что мешает отрицательному числу быть ключевым полем и служить для связи? DkmS Привычка, скорее всего. Привычка здесь не причём. Виной всему всё та же оптимизация и совмещение функций. Мешает этому то, что кроме того, это ключевое поле по совместительству является номером документа или клиента. Согласитесь, странный номер клиента -147 524 . Применять какой либо изврат на стороне клиента, типа подстановки дополнительных буковок в зависимости от знака, есть нарушение бизнес-логики. Для нумерации документов это вообще не подходит ни каким боком. Если создавать отдельное поле для номера, то какая это нахрен оптимизация?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 09:59 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
есть такой тип называется oid он 4х байтный беззнаковый.. если совесть позволит испоьзуй. :) если нет CREATE TYPE uint4 (INPUT=oidin, OUTPUT=oidout, DEFAULT='', INTERNALLENGTH=4, ALIGNMENT=int4, STORAGE=PLAIN); CREATE CAST (int4 AS uint4) WITHOUT FUNCTION AS IMPLICIT; CREATE CAST (uint4 as int4) WITHOUT FUNCTION AS IMPLICIT; и т.д... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 10:16 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Ape Применять какой либо изврат на стороне клиента, типа подстановки дополнительных буковок в зависимости от знака, есть нарушение бизнес-логики. мдя. ("А почему, собственно" у Вас нарушается логика? Не сезонное ли это?) Никто не утверждает, что наличие беззнаковых типов не упростило бы жизнь в таких вот "крайних случаях" (хм). Просто сказано, что отоптимизировать "в этом смысле" - дело техники. И вернуть вместо -1318 целое число (сдвигом, а совсем таки не "в зависимости от знака") - тоже дело техники. Причем не сложной. Нежелание этим заниматься - ваша проблема. Т.к. это Вам было необходимо что-то там оптимизировать. А совсем не мне. "А ты азартен, Парамоша" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 10:25 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Ape Привычка здесь не причём. Виной всему всё та же оптимизация и совмещение функций. Мешает этому то, что кроме того, это ключевое поле по совместительству является номером документа или клиента. Согласитесь, странный номер клиента -147 524 . Использовать значение ключевого поля в кач-ве номера на клиенте --- неправильное решение, следующим вопросом очевидно будет "как избавиться от пропусков в нумерации". Единственная задача "суррогатного" первичного ключа --- идентифицировать запись, его значение никого особо интересовать не должно. Вообще, вся тема напоминает настойчивый поиск более-менее искуственного недостатка с целью к нему прикопаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 10:27 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Sad SpiritИспользовать значение ключевого поля в кач-ве номера на клиенте --- неправильное решение, следующим вопросом очевидно будет "как избавиться от пропусков в нумерации". Единственная задача "суррогатного" первичного ключа --- идентифицировать запись, его значение никого особо интересовать не должно. Согласен. Как правило, такое разделение "значащих полей" полей и суррогатных ключей избавляет хтоя бы от необходимости каскадов (что очень далеко от "оптимальности") при "удалении пропусков" (и прочих изменениях "значения" Sad Spirit Вообще, вся тема напоминает настойчивый поиск более-менее искуственного недостатка с целью к нему прикопаться. Не, ну wbear показал, как можно создавать свои типы. Это полезно. И снимает вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 10:38 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Sad Spirit Использовать значение ключевого поля в кач-ве номера на клиенте --- неправильное решение, следующим вопросом очевидно будет "как избавиться от пропусков в нумерации". Единственная задача "суррогатного" первичного ключа --- идентифицировать запись, его значение никого особо интересовать не должно. Вообще, вся тема напоминает настойчивый поиск более-менее искуственного недостатка с целью к нему прикопаться. Ну, зачем же так резко. Я спросил, Вы ответили. Не нравится вопрос, не отвечайте. 4321 мдя. ("А почему, собственно" у Вас нарушается логика? Не сезонное ли это?) Спасибо за личностное определение... и за помощь в разборе вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 14:10 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
А я согласен с автором топика. Мне тоже выёживаться с отрицательными идентификаторами влом. Не понятно вообще почему отсутствует фундаментальный, с математической точки зрения, тип "положительное целое число" и введен как стандарт производный от него тип(понятие) "отрицательное целое число". Вот разработчики MySQL взяли на себя смелость не согласиться с этой очевидной глупостью и добавили беззнаковые типы, в отличие от разработчиков PostgreSQL,Interbase и Oracle. Также совершенно непонятно отсутсвие int1 в этих трех уважаемых СУБД. Между тем этот тип нужен позарез. У меня в базе множество справочников с диапазоном 0..255 и множество таблиц которые на эти стравочники ссылаются. Я много раз спрашивал как реализовать то, как реализовать это и не получал вразумительного ответа ни разу. Вместо этого получал "умные советы" применять типы ,большей размерности, что чревато увеличением размера индекса в памяти и на диске и удвоением размера базы данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 12:22 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Кроме того автоинкремент(SERIAL) int2,int4,int8 никак не позволит использовать отрицательный диапазон(выдаст ошибку), поэтому не понятно как создать ключевое поле с полным диапазоном значений. Кроме того даже если это удасться, то выборка с сортировкой по первичному ключу(который предполагает возрастание значений во времени) даст неправильный порядок записей. Для правильной сортировки придется вводить дополнительные поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 12:34 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
MySQLCraftКроме того автоинкремент(SERIAL) int2,int4,int8 никак не позволит использовать отрицательный диапазон(выдаст ошибку), поэтому не понятно как создать ключевое поле с полным диапазоном значений. Кроме того даже если это удасться, то выборка с сортировкой по первичному ключу(который предполагает возрастание значений во времени) даст неправильный порядок записей. Для правильной сортировки придется вводить дополнительные поля. Код: 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. 49. 50. 51. 52. 53. 54. 55. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 12:55 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Хм.. был жестоко обманут менеджером pgAdmin3, который не позволял устанавливать отрицательных начальных значений, а при попытке в инсерте переполнить int и уйти в отрицательный диапазон я получал ошибку... Был неправ. Значит всё ОК! Просто нужно всё делать ручками. Я возрадовался со всеми уважаемыми читателями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 17:44 |
|
||
|
Беззнаковое число в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Согласен с топикстартером, unsigned поля были бы очень кстати. А к изобретателем велосипеда которые ездит задом вперед - у вас во многих таблицах сериальные ключи имеют отрицательные значения? А нахерачить по десять строк то для обхода того-сего, эт конечно можно. Но, имхо, не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2007, 09:02 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=32987474&tid=2005461]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 376ms |

| 0 / 0 |
