2013-07-19 6 views
9

ich postgresql benutze und habe mich gefragt, wie großWie groß kann eine ID in postgresql bekommen

id INTEGER PRIMARY KEY 

kann

id SERIAL PRIMARY KEY 

in Java verglichen erhalten eine int ist 4 Byte (32 Bit) so kann es bis zu 2.147.483.647 kommen. Ist das der Fall in Postgresql? Wenn ja, kann ich nicht über 2.147.483.647 Zeilen hinausgehen?

+0

Schön beantwortet von @ Goat CO, aber Sie könnten nicht die Mühe haben, die Online-Handbücher für Grenzwerte für einen Typ zu überprüfen? Ich sehe viele Probleme für dich in der Zukunft ... –

Antwort

19

Dies ist ein handliches Diagramm für 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

Ihre Einschätzung richtig ist, würden Sie aus einzigartigen IDs ausführen, wenn Sie einen Datentyp verwendet, die nicht ausreichend war.

+1

.. aber wenn du ein 'bigint' (oder' bigserial' verwendest, was dasselbe ist) [du wirst wirklich, wirklich nicht ausgehen] (http: //stackoverflow.com/questions/13132939/what-happens-when-i-exhaust-a-bigint-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)

A bigserial ist 8 Bytes lang. Wenn das nicht genug ist, ist es möglich, die verwenden 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 

Die uuid_generate_v1mc Funktion vom uuid-ossp module vorgesehen

Der Hauptvorteil der UUID-Funktionen ist, dass sie erzeugen eine ID, die sehr wahrscheinlich ist, unter verschiedenen Systemen einzigartig sein. A serial wird Kollisionen zwischen diesen Systemen haben.

+0

Und hier dachte ich, dass die Billionen Plattentische, mit denen ich zu tun habe, groß waren, ich kann mir nicht vorstellen, mehr als neun Trillionen IDs zu benötigen. –

+1

Heh ... Leute, die Angst davor haben, eine 'bigint' Taste auszugeben [habe einfach nicht die Mathematik gemacht] (http://stackoverflow.com/questions/13132939/what-happens-when-i-exhaust-a-bigint- generated-key-how-to-handle-it/13133035 # 13133035). "Uuid" -Tasten können für verteilte Systeme sehr nützlich sein, sind aber für Schlüsselerschöpfungsprobleme unnötig. –

+0

@CraigRinger aufgrund des Geburtstagsparadox bigint kann Konflikte zwischen Schlüsseln haben, lange bevor es "erschöpft" ist. UUIDs haben 128 Bits, um dieses Problem zu vermeiden. –