Marc Millas schrieb am 03.06.2021 um 22:51:
on a table we need a primary key and to get a unique combinaison, we need 3
columns of that table:
1 of type integer,
1 of type text,
1 of type geometry
creating the PK constraint doesn work: (even with our current small data set)
ERROR: index row size 6072 exceeds btree version 4 maximum 2704 for index
"xxx_spkey"
DETAIL: Index row references tuple (32,1) in relation "xxx".
HINT: Values larger than 1/3 of a buffer page cannot be indexed.
Consider a function index of an MD5 hash of the value, or use full text
indexing.
ok. we can do this.
but if so, we need to create a gist index on the geometry column to do any
topology request.
so 2 indexes containing this single column.
if we install extension btree_gist, no pb to create an index on all 3 columns.
but as gist does not support unicity, this index cannot be used for the PK.
OK, we may try to use a function to get the bounding box around the geometry
objects and use the result into a btree index........
Any idea (I mean: another idea !) to tackle this ?
Or any critic on the "solution" ??
How do you define the "uniqueness" of the geometry?
GIST can support "uniqueness" through exclusion constraints.
It's not a primary key, so you can't create foreign keys referencing that table,
but it does ensure uniqueness (In fact the "normal" unique indexes are
essentially a special case of exclusion constraints)
create index on the_table using gist (int_column with =, text_col with =,
geometry_col with &&);
Replace the && operator with whatever is appropriate for your use case.
Thomas