MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
Zedik
- сержант
- Сообщения: 283
- Зарегистрирован: 2007-01-20 22:30:57
- Откуда: 127.0.0.1
Непрочитанное сообщение
Zedik » 2013-12-24 18:15:52
увеличивается поле id типа serial, хотя запись и не добавляется (duplicate key value violates unique constraint), таким образом следующая уникальная запись попавшая в таблицу будет иметь id не на единицу больше от предыдущего, а намного большее значение.
Подскажите пож-та, что нужно подправить.
Таблицу создаю так:
Код: Выделить всё
CREATE TABLE IF NOT EXISTS table_name (
id serial primary key NOT NULL,
name varchar(128) NOT NULL,
bid varchar(128) NOT NULL
);
CREATE UNIQUE INDEX ibo ON table_name (name,bid);
Zedik
-
Хостинг HostFood.ru
-
Хостинг HostFood.ru
Тарифы на хостинг в России, от 12 рублей:
https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.:
https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах:
https://www.host-food.ru/domains/
-
ChihPih
- ст. прапорщик
- Сообщения: 568
- Зарегистрирован: 2009-09-04 12:23:30
- Откуда: Где-то в России...
-
Контактная информация:
Непрочитанное сообщение
ChihPih » 2013-12-25 16:41:33
А каким запросом записи добавляете?
ChihPih
-
Zedik
- сержант
- Сообщения: 283
- Зарегистрирован: 2007-01-20 22:30:57
- Откуда: 127.0.0.1
Непрочитанное сообщение
Zedik » 2013-12-26 5:39:40
Просто инсертом
Код: Выделить всё
INSERT INTO table_name (bid,name) VALUES ('$bid','$name')";
Zedik
-
filier
- проходил мимо
- Сообщения: 1
- Зарегистрирован: 2009-10-21 22:15:51
filier
-
balex
- проходил мимо
Непрочитанное сообщение
balex » 2014-04-27 10:35:37
Проблема то у чловека не в том чтобы на 1 увеличить, это и сам постгрес умеет. Проблема в "дырках" в первичном ключе после отказов при записи в таблицу, и в данном примере отказ из-за нарушения уникальности в полях name и bid. С этим трудно что то поделать, ибо даже Oracle дырки может оставлять. Можно посоветовать не использовать serial а использовать свою функцию ищущую первый свободный id, но при этом прийдется лочить таблицу что снизит производительность. Если таблица опорная для толпы других таблиц по вторичному ключу и интенчивно запись в нее не делается, это имеет смысл. В противном случае лучше смириться - оптимизатор сам сделает выводы о том как ему хранить "дырявый" индекс. Логика софта естественна ни вкоем случае не должна "предполагать" о порядке следования данных в первичном ключе.
balex