EINZIGARTIGE Einschränkung für große VARCHARs - PostgreSQL

8

Ich habe eine Spalte wie folgt definiert:

data_url character varying(32768) NOT NULL

und EINZIGARTIGE Einschränkung für diese Spalte:

CONSTRAINT unique_data_url UNIQUE (data_url)

Wenn ein großes Objekt in die Tabelle eingefügt wird, wird die folgende Fehlermeldung angezeigt:

ERROR:  index row requires 32584 bytes, maximum size is 8191

Wie kann PostgreSQL eingestellt werden, um Objekte zu indizieren, die größer als 8191 Zeichen sind? Platz und Geschwindigkeit sind kein Problem. Es ist eine selten geänderte Tabelle mit höchstens Hunderten von Zeilen.

Umgebung: PostgreSQL 9.3.6, Fedora 20 x64

czerny
quelle
1
Eine gemeinsame Problemumgehung wird mit so etwas wieCONSTRAINT unique_data_url_hash UNIQUE (MD5(data_url))
Josh Kupershmidt
1
Siehe auch
Erwin Brandstetter

Antworten:

3

PostgreSQL erstellt einen Index zur Unterstützung der UNIQUE-Einschränkung. Sie können ein so großes Feld nicht indizieren. Wie @ josh-kupershmidt vorgeschlagen hat, erstellen Sie die Einschränkung für einen Hash des Feldes, und Sie sollten in Ordnung sein, außer bei Hash-Kollisionen.

JoeNahmias
quelle