我的 postgis 用户朋友们大家好,
我需要你的帮助!
我有一个具有 POLYGON 类型几何形状的表,我想对其进行分区以使查询更有效。由于搜索的主要条件是 ST_Intersects 类型的 WHERE 子句与 AOI,因此我认为这是一个好主意。 (如果没有请告知)
我搜索并发现了关于几何分区表的很少或旧的信息。
我正在尝试在几何列上使用按范围分区,但遇到一些问题。
我读到 PostGIS 可以对几何图形进行排序,因此我为分区的 FROM-TO 值准备了一个点网格。
我在这里有未来吗?还是我应该完全放弃对这张表进行几何分区?谢谢!!
遵循我正在尝试做的事情的简化版本:
CREATE TABLE usercare.product_catalog (
id serial4 NOT NULL,
geom public.geometry(polygon, 4326) NULL,
CONSTRAINT product_catalog_pkey PRIMARY KEY (id, geom)
) PARTITION BY RANGE (geom);
CREATE TABLE product_catalog_A1 PARTITION OF product_catalog for VALUES FROM (ST_GEOMFROMTEXT('POLYGON((-135 67.5, -135 67.5, -135 67.5, -135 67.5))',4326)) TO (ST_GEOMFROMTEXT('POLYGON ((-180 90, -180 90, -180 90, -180 90))',4326));
我所做的就是按 30 度纬度和经度坐标对表进行分区。然后在代码中,您需要决定如何获取插入和查询事务的正确表。
请注意:这是一个非常长的 SQL 文件。它由 5 个部分组成。第一个是创建表的地方。第二个用于向每个表添加主键(继承表需要)。其余的用于索引和触发器。
CREATE TABLE geofences.geofence_0n0e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n30e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n60e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n90e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n120e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n150e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n0w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n30w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n60w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n90w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n120w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0n150w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n0e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n30e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n60e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n90e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n120e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n150e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n0w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n30w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n60w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n90w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n120w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30n150w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n0e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n30e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n60e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n90e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n120e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n150e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n0w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n30w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n60w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n90w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n120w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60n150w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s0e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s30e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s60e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s90e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s120e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s150e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s0w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s30w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s60w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s90w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s120w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_0s150w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s0e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s30e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s60e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s90e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s120e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s150e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s0w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s30w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s60w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s90w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s120w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_30s150w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s0e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s30e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s60e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s90e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s120e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s150e () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s0w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s30w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s60w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s90w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s120w () INHERITS (geofences.base_geofence);
CREATE TABLE geofences.geofence_60s150w () INHERITS (geofences.base_geofence);
ALTER TABLE geofences.geofence_0n0e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n30e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n60e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n90e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n120e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n150e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n0w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n30w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n60w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n90w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n120w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0n150w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n0e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n30e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n60e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n90e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n120e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n150e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n0w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n30w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n60w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n90w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n120w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30n150w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n0e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n30e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n60e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n90e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n120e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n150e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n0w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n30w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n60w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n90w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n120w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60n150w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s0e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s30e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s60e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s90e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s120e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s150e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s0w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s30w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s60w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s90w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s120w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_0s150w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s0e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s30e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s60e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s90e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s120e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s150e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s0w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s30w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s60w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s90w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s120w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_30s150w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s0e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s30e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s60e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s90e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s120e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s150e ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s0w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s30w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s60w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s90w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s120w ADD PRIMARY KEY (id);
ALTER TABLE geofences.geofence_60s150w ADD PRIMARY KEY (id);
CREATE INDEX geofence_0n0e_ix_centroid ON geofences.geofence_0n0e USING GIST (centroid);
CREATE INDEX geofence_0n30e_ix_centroid ON geofences.geofence_0n30e USING GIST (centroid);
CREATE INDEX geofence_0n60e_ix_centroid ON geofences.geofence_0n60e USING GIST (centroid);
CREATE INDEX geofence_0n90e_ix_centroid ON geofences.geofence_0n90e USING GIST (centroid);
CREATE INDEX geofence_0n120e_ix_centroid ON geofences.geofence_0n120e USING GIST (centroid);
CREATE INDEX geofence_0n150e_ix_centroid ON geofences.geofence_0n150e USING GIST (centroid);
CREATE INDEX geofence_0n0w_ix_centroid ON geofences.geofence_0n0w USING GIST (centroid);
CREATE INDEX geofence_0n30w_ix_centroid ON geofences.geofence_0n30w USING GIST (centroid);
CREATE INDEX geofence_0n60w_ix_centroid ON geofences.geofence_0n60w USING GIST (centroid);
CREATE INDEX geofence_0n90w_ix_centroid ON geofences.geofence_0n90w USING GIST (centroid);
CREATE INDEX geofence_0n120w_ix_centroid ON geofences.geofence_0n120w USING GIST (centroid);
CREATE INDEX geofence_0n150w_ix_centroid ON geofences.geofence_0n150w USING GIST (centroid);
CREATE INDEX geofence_30n0e_ix_centroid ON geofences.geofence_30n0e USING GIST (centroid);
CREATE INDEX geofence_30n30e_ix_centroid ON geofences.geofence_30n30e USING GIST (centroid);
CREATE INDEX geofence_30n60e_ix_centroid ON geofences.geofence_30n60e USING GIST (centroid);
CREATE INDEX geofence_30n90e_ix_centroid ON geofences.geofence_30n90e USING GIST (centroid);
CREATE INDEX geofence_30n120e_ix_centroid ON geofences.geofence_30n120e USING GIST (centroid);
CREATE INDEX geofence_30n150e_ix_centroid ON geofences.geofence_30n150e USING GIST (centroid);
CREATE INDEX geofence_30n0w_ix_centroid ON geofences.geofence_30n0w USING GIST (centroid);
CREATE INDEX geofence_30n30w_ix_centroid ON geofences.geofence_30n30w USING GIST (centroid);
CREATE INDEX geofence_30n60w_ix_centroid ON geofences.geofence_30n60w USING GIST (centroid);
CREATE INDEX geofence_30n90w_ix_centroid ON geofences.geofence_30n90w USING GIST (centroid);
CREATE INDEX geofence_30n120w_ix_centroid ON geofences.geofence_30n120w USING GIST (centroid);
CREATE INDEX geofence_30n150w_ix_centroid ON geofences.geofence_30n150w USING GIST (centroid);
CREATE INDEX geofence_60n0e_ix_centroid ON geofences.geofence_60n0e USING GIST (centroid);
CREATE INDEX geofence_60n30e_ix_centroid ON geofences.geofence_60n30e USING GIST (centroid);
CREATE INDEX geofence_60n60e_ix_centroid ON geofences.geofence_60n60e USING GIST (centroid);
CREATE INDEX geofence_60n90e_ix_centroid ON geofences.geofence_60n90e USING GIST (centroid);
CREATE INDEX geofence_60n120e_ix_centroid ON geofences.geofence_60n120e USING GIST (centroid);
CREATE INDEX geofence_60n150e_ix_centroid ON geofences.geofence_60n150e USING GIST (centroid);
CREATE INDEX geofence_60n0w_ix_centroid ON geofences.geofence_60n0w USING GIST (centroid);
CREATE INDEX geofence_60n30w_ix_centroid ON geofences.geofence_60n30w USING GIST (centroid);
CREATE INDEX geofence_60n60w_ix_centroid ON geofences.geofence_60n60w USING GIST (centroid);
CREATE INDEX geofence_60n90w_ix_centroid ON geofences.geofence_60n90w USING GIST (centroid);
CREATE INDEX geofence_60n120w_ix_centroid ON geofences.geofence_60n120w USING GIST (centroid);
CREATE INDEX geofence_60n150w_ix_centroid ON geofences.geofence_60n150w USING GIST (centroid);
CREATE INDEX geofence_0s0e_ix_centroid ON geofences.geofence_0s0e USING GIST (centroid);
CREATE INDEX geofence_0s30e_ix_centroid ON geofences.geofence_0s30e USING GIST (centroid);
CREATE INDEX geofence_0s60e_ix_centroid ON geofences.geofence_0s60e USING GIST (centroid);
CREATE INDEX geofence_0s90e_ix_centroid ON geofences.geofence_0s90e USING GIST (centroid);
CREATE INDEX geofence_0s120e_ix_centroid ON geofences.geofence_0s120e USING GIST (centroid);
CREATE INDEX geofence_0s150e_ix_centroid ON geofences.geofence_0s150e USING GIST (centroid);
CREATE INDEX geofence_0s0w_ix_centroid ON geofences.geofence_0s0w USING GIST (centroid);
CREATE INDEX geofence_0s30w_ix_centroid ON geofences.geofence_0s30w USING GIST (centroid);
CREATE INDEX geofence_0s60w_ix_centroid ON geofences.geofence_0s60w USING GIST (centroid);
CREATE INDEX geofence_0s90w_ix_centroid ON geofences.geofence_0s90w USING GIST (centroid);
CREATE INDEX geofence_0s120w_ix_centroid ON geofences.geofence_0s120w USING GIST (centroid);
CREATE INDEX geofence_0s150w_ix_centroid ON geofences.geofence_0s150w USING GIST (centroid);
CREATE INDEX geofence_30s0e_ix_centroid ON geofences.geofence_30s0e USING GIST (centroid);
CREATE INDEX geofence_30s30e_ix_centroid ON geofences.geofence_30s30e USING GIST (centroid);
CREATE INDEX geofence_30s60e_ix_centroid ON geofences.geofence_30s60e USING GIST (centroid);
CREATE INDEX geofence_30s90e_ix_centroid ON geofences.geofence_30s90e USING GIST (centroid);
CREATE INDEX geofence_30s120e_ix_centroid ON geofences.geofence_30s120e USING GIST (centroid);
CREATE INDEX geofence_30s150e_ix_centroid ON geofences.geofence_30s150e USING GIST (centroid);
CREATE INDEX geofence_30s0w_ix_centroid ON geofences.geofence_30s0w USING GIST (centroid);
CREATE INDEX geofence_30s30w_ix_centroid ON geofences.geofence_30s30w USING GIST (centroid);
CREATE INDEX geofence_30s60w_ix_centroid ON geofences.geofence_30s60w USING GIST (centroid);
CREATE INDEX geofence_30s90w_ix_centroid ON geofences.geofence_30s90w USING GIST (centroid);
CREATE INDEX geofence_30s120w_ix_centroid ON geofences.geofence_30s120w USING GIST (centroid);
CREATE INDEX geofence_30s150w_ix_centroid ON geofences.geofence_30s150w USING GIST (centroid);
CREATE INDEX geofence_60s0e_ix_centroid ON geofences.geofence_60s0e USING GIST (centroid);
CREATE INDEX geofence_60s30e_ix_centroid ON geofences.geofence_60s30e USING GIST (centroid);
CREATE INDEX geofence_60s60e_ix_centroid ON geofences.geofence_60s60e USING GIST (centroid);
CREATE INDEX geofence_60s90e_ix_centroid ON geofences.geofence_60s90e USING GIST (centroid);
CREATE INDEX geofence_60s120e_ix_centroid ON geofences.geofence_60s120e USING GIST (centroid);
CREATE INDEX geofence_60s150e_ix_centroid ON geofences.geofence_60s150e USING GIST (centroid);
CREATE INDEX geofence_60s0w_ix_centroid ON geofences.geofence_60s0w USING GIST (centroid);
CREATE INDEX geofence_60s30w_ix_centroid ON geofences.geofence_60s30w USING GIST (centroid);
CREATE INDEX geofence_60s60w_ix_centroid ON geofences.geofence_60s60w USING GIST (centroid);
CREATE INDEX geofence_60s90w_ix_centroid ON geofences.geofence_60s90w USING GIST (centroid);
CREATE INDEX geofence_60s120w_ix_centroid ON geofences.geofence_60s120w USING GIST (centroid);
CREATE INDEX geofence_60s150w_ix_centroid ON geofences.geofence_60s150w USING GIST (centroid);
CREATE INDEX geofence_0n0e_ix_creator_user_id ON geofences.geofence_0n0e (creator_user_id);
CREATE INDEX geofence_0n30e_ix_creator_user_id ON geofences.geofence_0n30e (creator_user_id);
CREATE INDEX geofence_0n60e_ix_creator_user_id ON geofences.geofence_0n60e (creator_user_id);
CREATE INDEX geofence_0n90e_ix_creator_user_id ON geofences.geofence_0n90e (creator_user_id);
...
CREATE TRIGGER RS_geofences_TR_geofence_0n0e_BI BEFORE INSERT ON geofences.geofence_0n0e FOR EACH ROW EXECUTE PROCEDURE create_schema_table_decimal_uuid('{"geofences"}', 'geofence_0n0e', 8);
CREATE TRIGGER RS_geofences_TR_geofence_0n30e_BI BEFORE INSERT ON geofences.geofence_0n30e FOR EACH ROW EXECUTE PROCEDURE create_schema_table_decimal_uuid('{"geofences"}', 'geofence_0n30e', 8);
CREATE TRIGGER RS_geofences_TR_geofence_0n60e_BI BEFORE INSERT ON geofences.geofence_0n60e FOR EACH ROW EXECUTE PROCEDURE create_schema_table_decimal_uuid('{"geofences"}', 'geofence_0n60e', 8);
CREATE TRIGGER RS_geofences_TR_geofence_0n90e_BI BEFORE INSERT ON geofences.geofence_0n90e FOR EACH ROW EXECUTE PROCEDURE create_schema_table_decimal_uuid('{"geofences"}', 'geofence_0n90e', 8);
...