Thread: unique constraint
Hi! I have a little problem with a unique constraint: create table meta_data ( id serial primary key, type int not null, data bytea not null, unique (type, data) ); data can be quite large (a few hundred kilo bytes). The unique constraint automatically creates a btree index as I learnedfrom the documentation. The problem is that I get an error when inserting data, that the index is to large. I wouldlike to keep the unique constraint, is there a way to fix this? I googled the problem and found others having similar issues, but I have not found a solution that suited me. Thanks in advance! Best regards, Robert -- NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone! Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a
On Tue, Apr 17, 2012 at 07:46:26PM +0200, Roberto Caravani wrote: > Hi! > > I have a little problem with a unique constraint: > > create table meta_data ( > id serial primary key, > type int not null, > data bytea not null, > unique (type, data) > ); > > data can be quite large (a few hundred kilo bytes). The unique constraint automatically creates a btree index as I learnedfrom the documentation. The problem is that I get an error when inserting data, that the index is to large. I wouldlike to keep the unique constraint, is there a way to fix this? > > I googled the problem and found others having similar issues, but I have not found a solution that suited me. > > Thanks in advance! > > Best regards, > > Robert Hi Robert, You may need to store a crypographic signature for the data and unique that instead. Regards, Ken
"Roberto Caravani" <JFanatiker@gmx.at> writes: > I have a little problem with a unique constraint: > create table meta_data ( > id serial primary key, > type int not null, > data bytea not null, > unique (type, data) > ); > data can be quite large (a few hundred kilo bytes). The unique constraint automatically creates a btree index as I learnedfrom the documentation. The problem is that I get an error when inserting data, that the index is to large. You mean that an index entry is too large, because you have a wide "data" value? The usual hack for that is to put a unique index on some hash of the wide column, trusting that you won't get hash collisions. So for instance create unique index meta_data_unique on meta_data (type, md5(data)); regards, tom lane
Wow, that was fast. Thanks a lot Tom Lane and Ken! This seems to work, thanks! create unique index meta_data_unique on meta_data (type, md5(data)); Best regards, Robert -- NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone! Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a