2013-07-19 16 views
9

używam PostgreSQL, i zastanawiałem się, jak dużeJak duże id można uzyskać w PostgreSQL

id INTEGER PRIMARY KEY 

można uzyskać w porównaniu do

id SERIAL PRIMARY KEY 

w Javie int jest 4 bajty (32 bity) więc może dostać się do 2 147 483 647. Czy tak jest w postgresql? Jeśli tak, to znaczy, że nie mogę przekroczyć 2 147 483 647 wierszy?

+0

Ładnie odpowiedział @Goat CO, ale nie można się martwić, aby sprawdzić podręczniki online dotyczące limitów na typ? W przyszłości przewiduję wiele problemów ... –

Odpowiedz

19

Oto przydatny wykres dla PostgreSQL:

Name  Storage Size Description      Range 
smallint 2 bytes   small-range integer    -32768 to +32767 
integer  4 bytes   usual choice for integer   -2147483648 to +2147483647 
bigint  8 bytes   large-range integer    -9223372036854775808 to 9223372036854775807 
serial  4 bytes   autoincrementing integer   1 to 2147483647 
bigserial 8 bytes   large autoincrementing integer 1 to 9223372036854775807 

Source

Twoja ocena ma rację, że zabraknie unikatowy identyfikator, jeżeli zostało użyte typ danych, który był niewystarczający.

+1

.. ale jeśli użyjesz 'bigint' (lub' bigserial', co jest tym samym) [naprawdę, naprawdę się nie skończy] (http: //stackoverflow.com/questions/13132939/what-happens-when-exexhaust-a-bintint-generated-key-how-to -handle-it/13133035#13133035). –

3

The data types smallserial, serial and bigserial are not true types, but merely a notational convenience for creating unique identifier columns (similar to the AUTO_INCREMENT property supported by some other databases)

bigserial ma długość 8 bajtów. Jeśli to nie wystarczy, można użyć 128 bits uuid:

create table t (
    id uuid primary key 
); 
insert into t (id) 
select uuid_generate_v1mc(); 
select * from t; 
        id     
-------------------------------------- 
916bf7e6-f0c2-11e2-8d14-d372d5ab075f 

Funkcja uuid_generate_v1mc jest przez uuid-ossp module

Główną zaletą funkcji UUID jest to, że generują one identyfikator, który jest bardzo prawdopodobne być unikalnym wśród różnych systemów. A serial będzie mieć kolizje między tymi systemami.

+0

I tutaj myślałem, że trylionowe tabele rekordów, z którymi miałem do czynienia, były duże, nie wyobrażam sobie, że potrzebuję więcej niż dziewięć kwintyli ID. –

+1

Heh ... ludzie boją się wymusić klucz "biginta" [po prostu nie zrobili matematyki] (http://stackoverflow.com/questions/13132939/what-happens-when-exhaust -a-bintint- wygenerowany klucz-how-to-handle-it/13133035 # 13133035). Klucze uuid mogą być bardzo przydatne dla systemów rozproszonych, ale nie są potrzebne do kluczowych problemów związanych z wyczerpaniem .. –

+0

@CraigRinger ze względu na urodziny paradoks bigint może mieć konflikty między kluczami na długo przed "wyczerpaniem". Identyfikatory UUID mają 128 bitów, aby uniknąć tego problemu. –

Powiązane problemy