Krótko mówiąc, musisz ponownie zainstalować postgis, prawdopodobnie po prostu drop extension postgis;
i create extension postgis;
.
Dłuższe wyjaśnienie
Możliwe, że brakuje ci właśnie tego typu, ale wątpię, że to tylko to, ale jeśli chcesz spróbować, tutaj jest z 2.3:
CREATE TYPE public.geometry
(INPUT=geometry_in,
OUTPUT=geometry_out,
RECEIVE=geometry_recv,
SEND=geometry_send,
TYPMOD_IN=geometry_typmod_in,
TYPMOD_OUT=geometry_typmod_out,
ANALYZE=geometry_analyze,
CATEGORY='U', DEFAULT='',
INTERNALLENGTH=-1, ALIGNMENT=double, STORAGE=MAIN);
ALTER TYPE public.geometry
OWNER TO postgres;
COMMENT ON TYPE public.geometry
IS 'postgis type: Planar spatial data type.';
Jeśli chodzi o powłoki, możesz przeczytać o nich więcej w dokumentacji .
W skrócie :Niektóre typy wymagają funkcji, które z kolei wymagają zadeklarowania tego typu z, więc nie można ich utworzyć - normalnie.
Aby obejść ten problem, Postgres utworzy typy powłoki, które są w zasadzie symbolami zastępczymi tylko po to, aby spełnić walidację.
W Twoim przypadku geometry
jest typem powłoki i nie został poprawnie zadeklarowany, co oznacza, że postgis nie został poprawnie zainstalowany.
Typ powłoki wygląda tak:
CREATE TYPE public.geometry
(INPUT=shell_in,
OUTPUT=shell_out,
RECEIVE=-,
SEND=-,
ANALYZE=-,
CATEGORY='P',
PASSEDBYVALUE, DEFAULT='',
INTERNALLENGTH=4, ALIGNMENT=int4, STORAGE=PLAIN);
ALTER TYPE public.geometry
OWNER TO postgres;
A funkcją wymagającą typu powłoki może być:
CREATE OR REPLACE FUNCTION geometry_in(cstring)
RETURNS geometry
AS '$libdir/postgis-2.3','LWGEOM_in'
LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE;
Jeśli spojrzysz wstecz na właściwą geometry
zauważysz, że ta funkcja jest jego częścią, ale nie w tej powłoce.