zapętlenie serial

0

Chciałbym zrobić tak, żeby gdy serial osiągnie max int to wracał do początku i nadawał id od początku, ale żeby nie nadawał id tych które już istnieją.

czyli mam np.

id
1
2
3
5
15

i serial osiągnął max int to kolejne id jakie doda to będzie 4, 6, 7 ...

0

W momencie gdy jesteś w "pobliżu" max int:

  • dla każdego rekordu liczysz nowe ID
    select t1.id, (select count(*) from tablica t2 where t2.id <= t1.id) as new_id
    from tablica t1
  • ustawiasz nowe id w całej bazie
  • ustawiasz serial na wartość n = 1 + max(id)
    ALTER SEQUENCE serial RESTART WITH 105;
0

jak już przekręcisz serial to się odezwij - na pewno dostaniesz jakąś nagrodę. BTW serial ma max 9.22337204 × 10^18 wartości

0

Ale max int ma tylko 2^31 - 1 o ile dobrze pamiętam :p no chociaż fakt nie pomyślałem że nie muszę na tym id robić operacji matematycznych w php więc mogę big inta dać :p

0

serial to serial i nie ma z intem z php nic wspólnego

0

Dokumentacja najlepszym przyjacielem:
http://www.postgresql.org/docs/8.4/static/datatype-numeric.html

Konkretnie:
serial - 1 - 2147483647
bigserial - 1 - 9223372036854775807

Tak więc ciężko osiągnąć maks, chyba że system jest bardzo dynamiczny i posiada sporą liczbę użytkowników. Jeśli serial lub bigserial chcesz wykorzystywać w aplikacjach to trzeba pamiętać by wartość przypisać pod odpowiednio pojemny typ, by nie doszło do overflow.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0