После обновления до Postgres 12 и PostGIS 3 с 11 и 2.5 соответственно, теперь я получаю эту ошибку при использовании ST_Equals
в столбце геометрии с индексом GiST. Была функция с аналогичным сообщением об ошибке, вызванная индексом GiST для ST_Covers
, который оказался ошибкой .
Я пытаюсь перепрыгнуть через (многие) обручи чтобы отправить отчет об ошибке в PostGIS, но я подумал, что сначала поищу обратную связь по этому поводу, если это не ошибка или кто-то знает иное?
Код воспроизведения, если postgis установлен на public
схема:
CREATE TABLE "public"."geopoints" (
"id" int4 NOT NULL,
"geopoint" "public"."geometry",
CONSTRAINT "geopoints_pkey" PRIMARY KEY ("id")
)
;
CREATE INDEX "index" ON "public"."geopoints" USING gist (
"geopoint"
);
SELECT COUNT(*) FROM "public".geopoints g1, geopoints g2 WHERE "public".ST_Equals(g1.geopoint, g2.geopoint)
Сообщается об ошибке no spatial operator found for 'st_equals': opfamily 36658 type 36545
. Удаление индекса, запрос выполняется нормально
Версия PostGIS: POSTGIS="3.0.1 3.0.1" [EXTENSION] PGSQL="120" GEOS="3.8.0-CAPI-1.13.1 " PROJ="Rel. 5.2.0, September 15th, 2018" LIBXML="2.9.9" LIBJSON="0.12" LIBPROTOBUF="1.2.1" WAGYU="0.4.3 (Internal)"
Postgres версия: PostgreSQL 12.1, compiled by Visual C++ build 1914, 64-bit
Редактировать, добавлены ответы для комментария:
SELECT a.amopstrategy, a.amoppurpose, o.oprname, f.opfname
FROM pg_amop AS a
JOIN pg_opfamily AS f ON a.amopfamily = f.oid
JOIN pg_operator AS o ON a.amopopr = o.oid
WHERE f.oid = 36658;
1 s << gist_geometry_ops_2d
2 s &< gist_geometry_ops_2d
3 s && gist_geometry_ops_2d
4 s &> gist_geometry_ops_2d
5 s >> gist_geometry_ops_2d
6 s ~= gist_geometry_ops_2d
7 s ~ gist_geometry_ops_2d
8 s @ gist_geometry_ops_2d
9 s &<| gist_geometry_ops_2d
10 s <<| gist_geometry_ops_2d
11 s |>> gist_geometry_ops_2d
12 s |&> gist_geometry_ops_2d
13 o <-> gist_geometry_ops_2d
14 o <#> gist_geometry_ops_2d
и
SELECT typname, typnamespace::regnamespace,
typinput::regproc, typoutput::regproc
FROM pg_type WHERE oid = 36545;
geometry core_system core_system.geometry_in core_system.geometry_out
Редактировать 2:
SELECT a.oid AS amop_oid, a.amopstrategy, a.amoppurpose, o.oid AS opr_oid, o.oprname FROM pg_amop AS a JOIN pg_operator AS o ON a.amopopr = o.oid WHERE a.amopfamily = 36658 AND a.amoplefttype = 36545 AND a.amoprighttype = 36545;
36660 1 s 36644 <<
36661 2 s 36646 &<
36662 3 s 36631 &&
36663 4 s 36653 &>
36664 5 s 36643 >>
36665 6 s 36633 ~=
36666 7 s 36640 ~
36667 8 s 36641 @
36668 9 s 36651 &<|
36669 10 s 36649 <<|
36670 11 s 36648 |>>
36671 12 s 36656 |&>
36672 13 o 36636 <->
36673 14 o 36637 <#>