PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres type {field type} to tylko powłoka

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak stworzyć użytkownika/bazę danych w skrypcie dla Docker Postgres

  2. Jak skonfigurować pgAdmin III, aby otwierał domyślną bazę danych i wybierał węzeł tabel przy starcie?

  3. ActiveRecord - wybierz pierwszy rekord z każdej grupy

  4. Hibernate i Postgresql - klasa generatora w pliku mapowania hibernacji

  5. Utwórz kopię zapasową PostgreSQL za pomocą pg_dump i pg_dumpall