2010-12-27 9 views
14

기본 키 열의 길이 제한은 얼마입니까? varchar를 기본 키로 사용하겠습니다. PostgreSQL은 기본 키로 사용할 때 varchar 제한을 지정하지 않아도되므로 정보가 없습니다. 얼마나 오래있을 수 있습니까?PostgreSQL 기본 키 길이 제한

+2

필자는 이러한 기본 키에 많은 데이터를 넣을 수 있지만 좋은 생각이 아닙니다. 모든 해답을 가져 주셔서 감사합니다. – FolksLord

답변

6

필자는 최대 varchar 길이가 Postgres 구성 설정이라고 생각합니다. 그러나 크기가 1GB를 초과 할 수없는 것처럼 보입니다. 말한 갖는

http://wiki.postgresql.org/wiki/FAQ#What_is_the_maximum_size_for_a_row.2C_a_table.2C_and_a_database.3F

, 그것은 기본 키 큰 VARCHAR 열이 아마 좋은 생각이 아니다. 직렬 또는 bigserial 사용을 고려하십시오 (http://www.postgresql.org/docs/current/interactive/datatype-numeric.html#DATATYPE-SERIAL)

+0

+1 varchar 나쁜 PK입니다 지적했다. 이렇게하면 참조 테이블에서 사용할 때 성능이 저하됩니다 (가장 최근의 PG 버전으로 링크를 변경했습니다). – DrColossos

+2

@DrColossos :이 명령은 varchar 필드를 다른 테이블의 외래 키로 사용하는 경우에만 해당됩니다. 해당 필드가 단순히 UNIQUE이고 NOT NULL *이어야하며 해당 테이블에서 참조되는 경우에만 숫자 "PRIMARY KEY"를 추가하면 실제로 해를 입을 것입니다. 이제 데이터 무결성을 보장하기 위해 NOT NULL varchar 열에 숫자 PK * 및 * 추가 ​​UNIQUE INDEX의 오버 헤드가 발생합니다. 외래 키에 대해 이야기 할 때 좋은 조언이지만, "varchar는 나쁜 PK입니다"라고 말하는 것은 오해의 소지가 있습니다. –

+0

@Matthew 후속 조치에 대한 감사 : D 세부 사항 및 내 의견을 해석하는 방법을 완전히 알지 못했습니다. 나는 "[...]"참조 표 내에서 사용할 때 "외래 키"라는 의미가 분명했지만이 주제에 대해 더 많은 통찰력을 제공했습니다. 이제 더 잘 알아, 고마워! – DrColossos

19

기본 키를 포함하는 B- 트리 색인의 값의 최대 길이는 버퍼 페이지의 크기의 1/3입니다 (기본적으로 8192/3) = 바이트.

4

테스트를 거쳐야합니다.

PostgreSQL 8.4에서 단일 varchar 열을 기본 키로 사용하여 table을 사용하여 테스트했습니다. 결과적으로 235000 ASCII 문자를 저장할 수 있었고, 116000 개의 직각 문자 (f.g. 'ć') 또는 75000 중국어 (f.g. '汉')를 저장할 수있었습니다. 큰 세트의 경우 메시지가 있습니다.
BŁĄD : 인덱스 행 크기가 5404가 최대 btree를 초과하는 2712

버퍼 페이지의 1/3보다 큰 값은 인덱싱 할 수 없습니다.
값이 허용되었지만 고유성 검사에 전체 문자열이 사용되지는 않았습니다.

글쎄,이 열에 넣을 수있는 매우 많은 양의 데이터입니다. 그러나 위에서 언급 한 것처럼 키와 같은 긴 값을 사용해야하는 경우 디자인이 좋지 않습니다. 인공 기본 키를 사용해야합니다.