2013-07-19 56 views
9

Tôi đang sử dụng postgresql, và đã tự hỏi làm thế nào lớnLàm thế nào lớn một id có thể nhận được trong postgresql

id INTEGER PRIMARY KEY 

có thể nhận được so với

id SERIAL PRIMARY KEY 

Trong java một int là 4 byte (32 bit) để có thể nhận được tối đa 2.147.483.647. Đây có phải là trường hợp trong postgresql? Nếu điều đó có nghĩa là tôi không thể vượt qua 2.147.483.647 hàng?

+0

Được trả lời độc đáo bởi @Goat CO, nhưng bạn không thể bị làm phiền khi kiểm tra các hướng dẫn sử dụng trực tuyến về giới hạn trên một loại? Tôi thấy rất nhiều vấn đề cho bạn trong tương lai ... –

Trả lời

19

Dưới đây là một biểu đồ tiện dụng cho 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

đánh giá của bạn là đúng, bạn muốn chạy ra khỏi ID duy nhất nếu bạn sử dụng một kiểu dữ liệu đó là không đủ.

+1

.. nhưng nếu bạn sử dụng 'bigint' (hoặc' bigserial', đó là điều tương tự) [bạn thực sự, thực sự sẽ không chạy hết] (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)

Một bigserial dài 8 byte. Nếu điều đó là không đủ nó có thể sử dụng 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 

Chức năng uuid_generate_v1mc được cung cấp bởi uuid-ossp module

Ưu điểm chính của các chức năng uuid là họ tạo ra một id đó là rất có khả năng là duy nhất trong số các hệ thống khác nhau. A serial sẽ có xung đột giữa các hệ thống đó.

+0

Và ở đây tôi nghĩ rằng hàng nghìn tỷ bảng mà tôi đối phó là lớn, không thể hình dung được hơn 9 nghìn ID. –

+1

Heh ... mọi người sợ xả một phím 'bigint' [chỉ chưa thực hiện phép toán] (http://stackoverflow.com/questions/13132939/what-happens-when-i-exhaust-a-bigint- được tạo ra-key-how-to-handle-it/13133035 # 13133035). Các khóa 'uuid' có thể rất tiện dụng cho các hệ thống phân tán nhưng không cần thiết cho các vấn đề kiệt sức chính. –

+0

@CraigRinger do bigty nghịch lý sinh nhật có thể có xung đột giữa các khóa trước khi nó bị" cạn kiệt ". UUID có 128 bit để tránh vấn đề đó. –