Kort sagt, du skal geninstallere postgis, muligvis bare drop extension postgis;
og create extension postgis;
.
Længere forklaring
Du kan muligvis mangle netop denne type, men jeg tvivler på, at det netop er det, men hvis du vil prøve, er her fra 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.';
Hvad angår hvilke skaller, kan du læse mere om dem i dokumentation .
Kort sagt :Nogle typer kræver funktioner, der igen kræver, at typen med skal erklæres, så ingen af dem kan oprettes - normalt.
For at løse dette problem vil Postgres skabe shell-typer, der stort set er pladsholdere bare for at tilfredsstille validering.
I dit tilfælde geometry
er shell-type og blev ikke korrekt deklareret, hvilket betyder, at postgis ikke blev installeret korrekt.
Shell-typen ser sådan ud:
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;
Og funktion, der kræver shell-type, kunne være:
CREATE OR REPLACE FUNCTION geometry_in(cstring)
RETURNS geometry
AS '$libdir/postgis-2.3','LWGEOM_in'
LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE;
Hvis du ser tilbage på korrekt geometry
definition vil du bemærke, at denne funktion er en del af den, men ikke i denne skal.