Namn

Populate_Geometry_Columns — Säkerställer att geometrikolumner definieras med typmodifierare eller har lämpliga spatiala begränsningar.

Synopsis

text Populate_Geometry_Columns(boolean use_typmod=true);

int Populate_Geometry_Columns(oid relation_oid, boolean use_typmod=true);

Beskrivning

Säkerställer att geometrikolumner har lämpliga typmodifierare eller spatiala begränsningar för att säkerställa att de registreras korrekt i vyn geometry_columns. Som standard konverteras alla geometrikolumner utan typmodifierare till sådana med typmodifierare.

För bakåtkompatibilitet och för spatiala behov, t.ex. tabellarv där varje underordnad tabell kan ha olika geometrityp, stöds fortfarande det gamla check constraint-beteendet. Om du behöver det gamla beteendet måste du skicka in det nya valfria argumentet som false use_typmod=false. När detta görs kommer geometrikolumner att skapas utan typmodifierare men med 3 definierade begränsningar. Detta innebär i synnerhet att varje geometrikolumn som tillhör en tabell har minst tre begränsningar:

  • enforce_dims_geom - säkerställer att varje geometri har samma dimension (se ST_NDims)

  • enforce_geotype_geom - säkerställer att alla geometrier är av samma typ (se GeometryType)

  • enforce_srid_geom - säkerställer att varje geometri är i samma projektion (se ST_SRID)

Om en oid för tabellen anges försöker denna funktion fastställa srid, dimension och geometrityp för alla geometrikolumner i tabellen och lägger till begränsningar vid behov. Om det lyckas infogas en lämplig rad i tabellen geometry_columns, annars fångas undantaget upp och ett felmeddelande skickas ut som beskriver problemet.

Om oid för en vy anges, som med en tabell oid, försöker denna funktion bestämma srid, dimension och typ för alla geometrier i vyn och infogar lämpliga poster i tabellen geometry_columns, men ingenting görs för att upprätthålla begränsningar.

Den parameterlösa varianten är en enkel omslutning för den parameteriserade varianten. Den trunkerar först och fyller sedan på tabellen geometry_columns för varje spatial tabell och vy i databasen samt lägger till spatiala begränsningar i tabeller där det är lämpligt. Den returnerar en sammanfattning av antalet geometrikolumner som upptäckts i databasen och antalet som infogats i tabellen geometry_columns. Den parametriserade versionen returnerar helt enkelt antalet rader som infogats i tabellen geometry_columns.

Tillgänglighet: 1.4.0

Ändrad: 2.0.0 Som standard används nu typmodifierare i stället för kontrollbegränsningar för att begränsa geometrityper. Du kan fortfarande använda check constraint-beteende istället genom att använda den nya use_typmod och ställa in den på false.

Förbättrad: 2.0.0 use_typmod valfritt argument introducerades som gör det möjligt att kontrollera om kolumner skapas med typmodifierare eller med kontrollbegränsningar.

Exempel

Det här exemplet fyller geometrikolumnens metadata med typmod-beteende. För att detta ska fungera måste data redan finnas.

Kod
CREATE TABLE public.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2,3 4)', 4326) );
SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass);
Utdata
1

Beskriv tabellen för att se den typmod-baserade geometrikolumnen.

Kod
\d myspatial_table
Utdata
Table "public.myspatial_table"

Columns:
  gid  integer                    not null default nextval('myspatial_table_gid_seq'::regclass)
  geom geometry(LineString,4326)

Det här exemplet ändrar geometrikolumnerna så att de använder begränsningar om de inte är typmod-baserade eller redan begränsade. För att detta ska fungera måste data redan finnas.

Kod
CREATE TABLE public.myspatial_table_cs(gid serial, geom geometry);
INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2,3 4)', 4326) );
SELECT Populate_Geometry_Columns('public.myspatial_table_cs'::regclass, false);
Utdata
1

Beskriv tabellen för att se den begränsningsbaserade geometrikolumnen.

Kod
\d myspatial_table_cs
Utdata
Table "public.myspatial_table_cs"
 Column |   Type   |                            Modifiers
--------+----------+------------------------------------------------------------------
 gid    | integer  | not null default nextval('myspatial_table_cs_gid_seq'::regclass)
 geom   | geometry |
Check constraints:
    "enforce_dims_geom" CHECK (st_ndims(geom) = 2)
    "enforce_geotype_geom" CHECK (geometrytype(geom) = 'LINESTRING'::text OR geom IS NULL)
    "enforce_srid_geom" CHECK (st_srid(geom) = 4326)