sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres typ {field type} är bara ett skal

Kort sagt, du behöver installera om postgis, möjligen bara drop extension postgis; och create extension postgis; .

Längre förklaring

Du kan möjligen sakna just den här typen, men jag tvivlar på att det är just det, men om du vill prova, här är från 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.';

Vad gäller vilka skal kan du läsa mer om dem i dokumentationen .

Kort sagt :Vissa typer kräver funktioner som i sin tur kräver att typen med ska deklareras, så ingen av dem kan skapas - normalt.

För att komma runt det problemet kommer Postgres att skapa skaltyper som är ganska mycket platshållare bara för att tillfredsställa validering.

I ditt fall geometry är skaltyp och deklarerades inte korrekt, vilket innebär att postgis inte installerades korrekt.

Skaltypen ser ut så här:

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;

Och funktion som kräver skaltyp kan vara:

CREATE OR REPLACE FUNCTION geometry_in(cstring)
    RETURNS geometry
    AS '$libdir/postgis-2.3','LWGEOM_in'
    LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE;

Om du ser tillbaka på korrekt geometry definition kommer du att märka att den här funktionen är en del av den, men inte i detta skal.




  1. Finns det en gräns för PHP Variable Size?

  2. Hur skickar man HTML-element via JSON med PHP?

  3. kan inte ladda oci8 -> Allvarligt fel:Anrop till odefinierad funktion oci_connect()

  4. Hur skapar och kör man en dynamisk fråga i oracles lagrade procedur?