Como a ferramenta de importação de shapes no PostGIS
(PostGIS Shapefile Import/Export Manager) tem como padrão a importação de
geometrias múltiplas (multiline e multipolygon), mesmo que elas sejam
geometrias simples, é comum se desejar a alteração dessas feições para
geometrias simples (line e polygon). Isso pode ser feito de várias formas
(habilitando a opção Generate simple geometries instead of MULTI geometries
na importação, por exemplo), mas uma alternativa bem simples para essa
alteração, que é feita diretamente no banco de dados, quando as geometrias deveriam ser simples (ou seja, são únicas, embora tenham sido importadas e/ou estejam
definidas como múltiplas) é o uso da função ST_GeometryN:
ALTER TABLE
nome_da_tabela ALTER COLUMN geom TYPE geometry(LineString,31982) USING
ST_geometryN(geom,1);
No caso desse exemplo uma tabela que estivesse definida como
MultiLineString passa a ser LineString (em polígonos basta substituir o
LineString por Polygon). O exemplo usa como sistema de coordenadas o SIRGAS2000
na zona UTM 22 Sul (31982), para utilização de outro sistema basta trocar o
número de identificação.
O exemplo acima serve apenas quando não há vários polígonos em um mesmo elemento. Para criar uma tabela (com geometrias simples) a partir de uma geometria múltipla (que cada elemento possua vários polígonos) use:
CREATE TABLE nome_da_tabela AS WITH dump AS (SELECT campo1, campo2, campo3,(ST_DUMP(geom)).geom AS geom FROM nome_da_tabela_de_origem) SELECT campo1, campo2, campo3, geom::geometry(LineString,31982) FROM dump;
O exemplo acima serve apenas quando não há vários polígonos em um mesmo elemento. Para criar uma tabela (com geometrias simples) a partir de uma geometria múltipla (que cada elemento possua vários polígonos) use:
CREATE TABLE nome_da_tabela AS WITH dump AS (SELECT campo1, campo2, campo3,(ST_DUMP(geom)).geom AS geom FROM nome_da_tabela_de_origem) SELECT campo1, campo2, campo3, geom::geometry(LineString,31982) FROM dump;