PostgreSQL primary key-Länge begrenzen
Was ist das limit von der Länge der primary key-Spalte? Ich werde varchar als primary key. Ich habe keine info gefunden, wie lange kann es schon sein, da PostgreSQL nicht erforderlich, um anzugeben, varchar Grenze, wenn verwendet als Primärschlüssel?
- Ich sehe, ich kann eine Menge von Daten in einer solchen Primärschlüssel, aber es ist nicht eine gute Idee. Vielen Dank für alle Antworten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, dass varchar maximale Länge ist ein Postgres-Konfiguration einstellen. Aber so wie es aussieht wird es nicht mehr als 1 GB in der Größe.
http://wiki.postgresql.org/wiki/FAQ#What_is_the_maximum_size_for_a_row.2C_a_table.2C_and_a_database.3F
Dass gesagt wurde, es ist wahrscheinlich nicht eine gute Idee, um eine große varchar-Spalte als Primärschlüssel. Erwägen Sie die Verwendung einer seriellen oder bigserial (http://www.postgresql.org/docs/current/interactive/datatype-numeric.html#DATATYPE-SERIAL)
Die maximale Länge für einen Wert in einem B-Baum-index, der mit Primärschlüsseln, ist ein Drittel der Größe einer Puffer-Seite, standardmäßig Boden(8192/3) = 2730 bytes.
Sollten Sie einen test.
Habe ich tests gemacht, mit Tabelle, die eine einzige varchar-Spalte als primary key, die auf PostgreSQL 8.4. Das Ergebnis ist, dass ich in der Lage zu speichern 235000 ASCII-Zeichen, Rufnummer 116 000 polnischen diactrical Zeichen ("f".g. 'ć') oder 75000 chinesische f.g. '汉'). Für größere Mengen habe ich eine Nachricht:
BŁĄD: index row size 5404 exceeds btree maximum, 2712
Aber die Botschaft, gesagt, dass:
Werte größer als 1/3 Puffer-Seite nicht indiziert werden kann.
So, die Werte waren erlaubt, jedoch nicht die gesamte Zeichenfolge verwendet wurde, auf Eindeutigkeit überprüfen.
Gut, dies ist eine sehr große Menge von Daten, können Sie in dieser Spalte. Jedoch, wie oben erwähnt, Ihr design ist arm, wenn Sie verwenden, wie lange der Werte als Schlüssel. Sollten Sie künstliche Primärschlüssel.