postgresql Postgres:在其周围一定距离内的点上创建唯一索引

2ul0zpep  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(161)

我有一张在postgres 15的table

create table places
(
    id          bigint generated always as identity
        constraint pk_places
            primary key,
    name        varchar(128) not null,
    address     varchar(256) not null,
    region_name varchar      not null
        constraint fk_places_region_name_regions
            references regions
            on update cascade on delete restrict,
    coordinates geography(Point, 4326),
    constraint uq_places_name
        unique (name, region_name)
);

alter table places
    owner to postgres;

create index idx_places_coordinates
    on places using gist (coordinates);

我想在坐标字段上创建一个唯一的索引,但确切的值是唯一的,没有什么意义,因为坐标可能被指定为彼此微小的容差,这有效地使它们非唯一。问题-是否有可能构建唯一索引,使得例如,1个点和将位于例如第一个1周围的100米半径内的另一个点将被视为1(相同)点,并且作为回报将召唤出唯一索引约束异常?
谢谢你

sshcrbum

sshcrbum1#

可以为点周围的小缓冲区创建排除约束,以防止这些缓冲区的边界框重叠:

ALTER TABLE places ADD EXCLUDE USING gist (
   (st_buffer(coordinates, 50, 'quad_segs=1')) WITH &&
);

相关问题