PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Der Postgres-Typ {Feldtyp} ist nur eine Shell

Kurz gesagt, Sie müssen Postgis neu installieren, möglicherweise nur drop extension postgis; und create extension postgis; .

Längere Erklärung

Sie könnten möglicherweise genau diesen Typ vermissen, aber ich bezweifle, dass es genau das ist, aber wenn Sie es versuchen möchten, hier ist von 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.';

Was Shells betrifft, können Sie mehr darüber in der Dokumentation .

Kurz gesagt :Einige Typen erfordern Funktionen, die wiederum erfordern, dass dieser Typ mit deklariert werden muss, also kann keiner erstellt werden - normalerweise.

Um dieses Problem zu umgehen, erstellt Postgres Shell-Typen, die eher Platzhalter sind, nur um die Validierung zu erfüllen.

In Ihrem Fall geometry ist ein Shell-Typ und wurde nicht richtig deklariert, was bedeutet, dass Postgis nicht richtig installiert wurde.

Der Shell-Typ sieht folgendermaßen aus:

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;

Und eine Funktion, die einen Shell-Typ erfordert, könnte sein:

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

Wenn Sie auf die richtige geometry zurückblicken Definition werden Sie feststellen, dass diese Funktion ein Teil davon ist, aber nicht in dieser Shell.