Você está na página 1de 22

Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.

es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

PRACTICA CON POSTGRES/POSTGIS


Instalación
Windows xp1
Para estas prácticas emplearemos la versión 8.2.5.

Illustration 1: Página de descarga de PostgreSQL


En primer lugar descomprimiremos el fichero postgresql-8.2.5-1.zip que encontraremos en
el directorio del cdrom software/postgres-postgis. Este fichero puede descargarse también
en http://www.postgresql.org/

Una vez descargado lo descomprimiremos y ejecutaremos el fichero postgresql-8.2.msi.

Primero deberemos seleccionar el idioma. Como el español no está disponible podemos


seleccionar el inglés. Le damos a Siguiente.

 1 En el caso que tuviésemos instalado el programa cygwin, tendremos que eliminar de la variable de entorno
PATH la ruta a los binarios de este programa. Para acceder a las variables de entorno, desde un explorador de
archivos, pulsar el botón derecho del ratón sobre MiPC, y en Propiedades/Opciones Avanzadas/Variables de
entorno.

1
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

En la siguiente ventana seleccionamos "PostGIS Spatial Extensions" y le decimos que lo


instale en nuestro disco duro local y le damos a Siguiente. Con esta opción estamos
incluyendo el módulo de PostGIS en la instalación.

Illustration 2: Programa de instalación de Postgres en Windows

En la nueva ventana señalamos “Install as a service2” para que arranque Postgres cuando
arranca el sistema. También indicamos un nombre de usuario y contraseña que añadirá al
sistema si no existe y con el que se ejecutará la base de datos. Podemos poner, por ejemplo,
"postgres" como usuario, y "postgres" como contraseña. Le damos a Siguiente.

2 Para ver los servicios instalados en windows xp ir a Panel de control -> Rendimiento y mantenimiento-
>Herramientas Administrativas -> Servicios. Aunque la instalación crea el servicio automáticamente para
que se inicie al arrancar la máquina, en el caso que falle, habrá que comprobar que el servicio está en
estado “iniciado” y que se arranca “automáticamente”.

2
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Illustration 3: Configuración del servicio de PostgreSQL en windows

En el siguiente paso el asistente nos pide varios parámetros sobre la configuración de la


base de datos:

 Indicamos que inicialice el cluster.

 Seleccionamos el puerto de escucha (5432).

 Permitimos que se pueda acceder desde otras máquinas a la base de datos.

 Seleccionamos el lenguaje (Español).

 Seleccionamos la codificación por defecto de las instancias de bases de datos, por


ejemplo, latin9.

 Finalmente indicamos el nombre y contraseña que tendrá el superusuario de la base


de datos, por ejemplo, “postgres” y contraseña “postgres”. No hay que confundir
este usuario (el que emplearemos para conectarnos a la base de datos) con el usuario
que utiliza el sistema operativo para ejecutar la base de datos (el que comentábamos
anteriormente).

3
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

El resto de la instalación se completa pulsando a "Siguiente”.

Una vez finalizada la instalación, si queremos disponer de las herramientas de de


PostgreSQL y PostGIS que se ejecutan en un intérprete de comandos
(pg_dump,shp2pgsql...), ponemos el directorio bin de la instalación de Postgres
(C:\Archivos de programa\PostgreSQL\8.2\bin) en la varialbe de entorno PATH. Lo
añadiremos desde un explorador de archivos, dándole al botón derecho del ratón sobre
MiPC, y en Propiedades/Opciones Avanzadas/Variables de entorno.

4
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Illustration 4: Modificar la variable de entorno PATH

Illustration 5: Menú de Postgres en Windows

Para comprobar la correcta instalación ejecutar la herramienta de administración pgAdmin3


(Inicio -> Programas -> PostgresSQL8.2 -> pgAdmin III).
Nos conectamos al servidor localhost haciendo doble click en el icono, nos solicitará la
contraseña del usuario postgres (usuario de la base de datos), al validarnos veremos una
serie de objetos que se han creado en la instalación , los más importantes son:
 Bases de datos: son las instancias de bases de datos creadas, por defecto se crea la
base de datos “postgres” y la base de datos con soporte geoespacial
“template_postgis”. Esta instancia de base de datos contiene las funciones,
procedimientos, tipos de datos y más objetos necesarios para manejar información
vectorial georreferenciada.
 Esquemas: son los contenedores de información de una instancia de base de datos.
Una base de datos puede tener varios esquemas. Entre bases de datos no se puede
ver la información pero sí entre esquemas dentro de la misma bd. Por defecto se
crea un esquema public.

5
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

 Tablas: son las unidades contenedoras de información dentro de un esquema. Por


defecto, se habrán creado dos tablas (tal como se especifica en la norma SFA:
 geometry_columns: tabla con información sobre las tablas que contienen alguna
columna con geometrías georeferenciadas.
 spatial_ref_sys: tabla con información sobre los sistemas de referencia
empleados en la georreferenciación de las geometrías.

Conceptos básicos
Illustration 6: Herramienta de administración pgAdmin III

Una vez instalada la base de datos y comprobado su correcto funcionamiento, abordaremos


los conceptos más básicos como puede ser la creación de una instancia de base de datos
postGIS, la carga de datos vectoriales en un tabla y su posterior eliminación.

Creación de una instancia de base de datos


postGIS.
Tras instalar el software, crearemos una instancia de base de datos que utilizaremos en el
resto de la práctica.

6
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Windows XP
Crearemos una nueva base de datos empleando la plantilla que viene por defecto,
template_postgis. El uso de esta plantilla nos garantiza que la instancia de base de datos
creada tendrá todos los objetos de postGIS (las tablas geometry_columns y spatial_ref_sys,
funciones, tipos de datos, casts, ...)
El primer paso es ejecutar la herramienta pgAdmin3 conectándonos con el usuario
“postgres”. Sobre el icono “Bases de datos” , botón derecho del ratón Nueva Base de Datos
...

Illustration 7: Crear una nueva base de datos con pgAdmin III


Aparecerá un cuadro de diálogo en el que indicaremos los siguiente parámetros:
 Nombre: nombre de la instancia de base de datos, en nuestro caso le llamaremos
“postgis”.
 Codificado: codificación de los caracteres de la base de datos, en nuestro caso
“latin9” puesto que las fuentes de datos que emplearemos están en esta codificación.
Es recomendable emplear la codificación “utf-8” como comentaremos más adelante.
De momento, y para simplificar, emplearemos esta “obsoleta” codificación.
 Plantilla: emplearemos la plantilla que viene con la instalación para la generación
de bases de datos postgis, “template_postgis”.

7
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Illustration 8: Parámetros en pgAdmin III para crear una bd


De momento, nos centraremos en éstos parámetros, más adelante veremos el resto.

Crear una capa postGIS con gvSIG


Tras la creación de una instancia de base de datos postGIS, emplearemos gvSIG para crear
unas tablas con información vectorial. Recordemos los parámetros de conexión:

 Usuario: postgres

 Password: postgres

 Host(máquina): localhost

 Puerto: 5432

 Base de datos: postgis

 Esquema: public

Empezaremos esta parte de la práctica creando una nueva vista en gvSIG. Tras ello
cargamos el shapefile limitesadminandalucia.shp que encontraremos en el directorio
“data/españa/andalucia/municipiosAndal.shp” del cdrom. (Vista -> Añadir Capa ->
Archivo)

8
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Illustration 9: carga de un shapefile en gvSIG

Una vez cargada la capa, la exportaremos a postGIS con su utilidad de exportación de


capas3 (Capa -> Exportar a ... -> postGIS)

3 Para poderse exportar una capa debe estar seleccionada.

9
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Illustration 10: Exportar capa con gvSIG

Indicamos el nombre de la tabla que contendrá la información geográfica y alfanumérica


del shapefile, le podemos llamar limitesadminandalucia, por ejemplo.

Tras este paso, aparecerá un cuadro de diálogo donde especificaremos los parámetros de
conexión a la base de datos que comentábamos al principio de este capítulo.

Illustration 11: Parámetros de conexión al exportar una


capa en gvSIG
10
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Tras cargar los datos en postGIS, el programa nos preguntará si deseamos cargar la capa
recién creada en la vista. Responderemos afirmativamente a esta cuestión con la finalidad
de ver la tabla recién creada.

Práctica Libre: probar a cargar otras capas shape.

Cargar una capa PostGIS en gvSIG


Para comprobar que todo el proceso ha sido correcto, cargaremos la tabla recién cargada en
gvSIG (Vista -> Añadir Capa -> GeoBD). Por ello no insertaremos la capa en la vista tras
su carga. De nuevo, ponemos los parámetros de conexión.

Illustration 12: Conexión GeoBD gvSIG+


Finalmente seleccionamos la tabla que acabamos de crear:

11
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Conceptos avanzados en PostgresSQL


Aunque realmente no se tratan de conceptos “muy avanzados”, queremos dividir esta parte
en la que se profundiza sobre la base de datos PostgresSQL.
La mayoría de los ejercicios los haremos con la herramienta de administración pgAdmin
III.

Esquemas
Hasta ahora hemos visto el concepto de instancia de base de datos y plantilla, además de
éstos, veremos que una base de datos puede tener varios esquemas que son los que
realmente contienen las tablas, procedimientos, etc ... Por defecto, cuando creas una base de
datos se crea el esquema “public”.

12
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Algunas de las características de los esquemas son los siguientes:


 Objetos de diferentes esquemas puede “verse” siempre que estén en la misma
instancia de base de datos. Objetos de distintas bases de datos no tienen acceso.
 Para acceder a un objeto de un esquema, en SQL se especifica como
nombre_esquema.nombre_objeto. Si no especificas el esquema en una consulta,
postgreSQL utilizará cualquiera de los esquemas especificados en la variable de
usuario search_path.
Para crear un esquema con pgAdminIII basta con pulsar el botón derecho sobre los
esquema y seleccionar “Nuevo Esquema”.

Práctica libre: modificar la variable “search_path” del usuario postgres de forma que
acceda por defecto a un esquema distinto al “public”. Comprobar que al cargar un
shapefile con el comando “shp2pgsql” la tabla se guarda en el nuevo esquema. Volver a
ejecutar el comando indicando en esta ocasión la ruta completa a la tabla con la sintaxis
Illustration 13: Creación de esquemas con pgAdminIII
“esquema.tabla”, guardar la tabla en el esquema “public”.

Roles y privilegios
Hasta el momento hemos empleado el DBA (postgres) como usuario para realizar todas las
operaciones en la bases de datos. Sin embargo, esto no es recomendable ya que este usuario
tiene privilegios totales sobre cualquier objeto de la base de datos. En una organización, lo
más habitual es que exista un conjunto de usuarios que tiene ciertos privilegios sobre
ciertos objetos de la base de datos. En esta parte de la práctica veremos cómo añadir roles
(usuarios o grupos de usuarios) y otorgar privilegios a dichos roles.

13
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

En postgreSQL encontraremos dos tipos de roles, el rol de login y el rol de grupo. El


primero identifica a un usuario y el segundo a un grupo. La única diferencia significativa
entre ambos es que el primero puede conectarse a la base de datos mientras que el segundo
no puede. El segundo tipo de rol, el de grupo, lo emplearemos para agrupar los roles de
login que comparten los mismos privilegios.
En cuanto a los privilegios, se pueden diferenciar entre los privilegios en el esquema y los
privilegios en los objetos del esquema (tablas, funciones, ...). Los privilegios en un
esquema son de uso (puedo acceder al esquema) y creación (puedo crear objetos en el
esquema), mientras que los privilegios en los objetos son los típicos SELECT, UPDATE,
INSERT, etc.
Para familiarizarnos con estos conceptos emplearemos la base de datos creada
anteriormente, “postgis”, donde crearemos dos roles de grupo, el primero llamado
“editores” que tendrá privilegios para crear y modificar objetos en el esquema “public” y el
segundo, llamado “consultores” que sólo tendrá permisos de consulta. Una vez creado
estos grupos, añadiremos un usuario “consultorX” al grupo “consultores” y un usuario (rol
de login) llamado “editorX” al grupo de “editores”. La idea es que los usuarios de un grupo
puedan leer la cartografía y los usuarios de otro grupo puedan modificarla.

Creación de roles de grupo.


En primer lugar nos conectamos a la base de datos del servidor localhost con el DBA que
es el único rol que existe por ahora. Tras conectarnos, pulsaremos con el botón derecho de
nuestro ratón en “Roles de grupo” y seleccionamos “Nuevo Rol de Grupo”. Aparecerá un
diálogo como el de la figura en el que pondremos los datos de los nuevos roles de grupo4.

4 Los checkbox que aparecen son privilegios especiales del rol que no son heredados por los miembros de
ese rol.

14
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Creación de roles de login


Una vez creados los grupos, crearemos
Illustration los roles
14: Creación de login
de un grupo en “editorX” y “consultorX” que
postgreSQL
pertenecerán al grupo “editores” y consultores respectivamente. Para crear los roles de
login, pulsar con el botón derecho en “Roles de Login -> Crear Nuevo Rol de Login”.
Aparecerá un cuadro de diálogo igual al que utilizábamos para crear los roles de grupo,
aquí es importante destacar que se debe marcar la casilla Hereda permisos de los roles
padre, con ésto todos los roles que pertenezcan a este tendrán los mismos privilegios. Tras
indicar el nombre del rol nos situaremos en la pestaña “Membresía del Role” e indicaremos
que el usuario es miembro del grupo correspondiente.

Illustration 15: Rol de grupo al que pertenece un usuario

15
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Asignar privilegios en un esquema.


Una vez creados todos los roles, el siguiente paso será asignar a los roles de grupo los
privilegios en el esquema y en los objetos del esquema. Para dar permisos en el esquema,
pulsaremos con el botón derecho en el esquema y seleccionamos “Propiedades ->
Privilegios”, allí añadimos el grupo correspondiente e indicamos el tipo de privilegios. En
nuestro ejemplo añadiremos el grupo “editores” con todos los privilegios y el grupo
“consultores” con privilegios de uso.

Illustration 16: Privilegios en un esquema

Asignar privilegios en un objeto de un esquema


Tras asignar los privilegios en el esquema, debemos hacer los mismo para cada objeto
concreto del esquema, para ello seleccionamos con el botón derecho del ratón el “Asistente
para permisos” en el esquema. En él seleccionamos todos los elementos que nos interesan,
en nuestro caso la tabla limitesadminandalucia y la tabla geometry_columns5, después
pasamos a la pestaña de privilegios donde elegimos todos los privilegios “All” para el
grupo “editores” y “Select” para el grupo “consultores”.

5 Es importante dar permisos en esta tabla ya que las aplicaciones cliente, como gvSIG, consultan esta tabla
para averiguar datos referentes a las tablas que contienen cartografía.

16
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Además, para el grupo de editores deberemos dar todos los permisos en la secuencia de la
tabla (limitesadminandalucia) ya que para crear nuevos elementos en la tabla se necesita el
uso de dicha secuencia.

Illustration 17: Privilegios en un


esquema

Comprobación de los privilegios con gvSIG


Primero comprobaremos como el rol “consultorX” sólo es capaz de visualizar una tabla
(privilegio SELECT), paraIllustration
ello cargaremos
18: Miembrosla tabla
de un grupo“limitesadminandalucia” empleando

17
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

una conexión con el usuario “consultorX”. Deberá de visualizarse sin problemas. Tras ello
seleccionaremos la capa y la pondremos en edición para añadir una carretera, gvSIG
indicará un error que confirma nuestras sospechas, “consultorX” no tiene privilegios para
modificar el objeto “limitesadminandalucia”.
La segunda comprobación será poner en edición la capa “limitesadminandalucia” para
añadir un elemento pero en este caso con el usuario “editorX”. No deberá dar problemas al
terminar la edición.

Configuración de parámetros (postgresql.conf)


En este fichero podemos modificar los parámetros generales de configuración de la
instalación de postgreSQL como el puerto de escucha, la opción de autovacuum, etc ...

Illustration 19: Fichero postgresql.conf


Para modificarlo podemos utilizar pgAdmin3, “Archivo -> Abrir postgresql.conf6”.

Práctica libre: probar a modificar algún parámetro. Por ejemplo, se puede cambiar el
puerto al 6432 y probar a conectarnos con gvSIG.

6 En linux este fichero está en el direcotorio /etc/postgres y tiene permisos para el usuario y grupo
“postgres”. Para modificarlo desde pgAdminIII deberás tener permisos de escritura.

18
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Seguridad a nivel de red (pg_hba.conf)


PostgreSQL dispone de un mecanismo para restringir el acceso por la red (a través del
puerto 5432). Para modificar dicho acceso tenemos el fichero pg_hba.conf que podemos

manipular con pgAdminIII, “Abrir -> Fichero pg_hba.conf”.


Illustration 20: Fichero pg_hba.conf

Copias de seguridad
Aunque existen varios métodos para hacer copias de seguridad (física, lógica, física online,
...), en este punto nos centraremos en las copias de seguridad lógicas de una instancia de
base de datos con pgAdminIII.
Para realizar la copia de seguridad nos situamos con el ratón encima de la base de datos, en
nuestro ejemplo “postgis”, y con el botón derecho seleccionamos “Resguardo”. Nos
aparecerá un cuadro de diálogo dónde seleccionaremos el fichero en el que se volcará los
datos y otros parámetros.
Si todo el proceso ha sido correcto nos aparecerá un mensaje indicando algo como: “El
proceso retornó el código de salida 0”

19
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Illustration 21: Copias de seguridad lógicas con pgAdminIII


En el segundo paso simularemos una caída de la base de datos y su posterior recuperación
con la copia de seguridad. Para ello, eliminaremos la base de datos postGIS, sobre la base
de datos pulsaremos el botón derecho del ratón “Borrar/Eliminar”. Una vez borrada la base
de datos la volveremos a crear con el mismo nombre, sobre ella pulsaremos el botón
derecho del ratón y elegiremos la opción “Restaurar”.

Illustration 22: Restaurar una base de datos con


pgAdminIII

Podemos comprobar el resultado volviendo a cargar la tabla “limitesadminandalucia” con


gvSIG.

20
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Conceptos avanzados en PostGIS


Una vez profundizado en los aspectos más básicos de postgreSQL nos centraremos en el
módulo postGIS.

Funciones openGIS
PostGIS implementa la especificación SFA que define un esquema SQL para el acceso a
información georreferenciada en una base de datos relacional. En esta especificación se
definen una serie de operaciones básicas sobre geometrías, cómo deben almacenarse en la
base de datos, etc ...
Veamos mediante una serie de ejercicios algunas de estas funciones y las posibilidades del
lenguaje de acceso a bases de datos SQL7.
Emplearemos la base de datos “postgis” que hemos estado utilizando durante toda la
práctica y el programa para ejecutar sentencias SQL de pgadmin. Para poder ejecutar una
sentencia SQL seleccionamos con el ratón la instancia de base de datos deseada y elegimos
en el menú “Herramientas -> Herramientas para Consulta”

Illustration 23: Herramienta para consultas SQL

7 En los ejercicios emplearemos funciones estádar del lenguaje SQL, propias del estándar openGIS y
funciones específicas de PostGIS.

21
Geog. Diego J. Padrón – diego.padron@uah.es – http://www.geogra.uah.es/~diego
Desarrollo de Servidores de mapas con software libre
El carácter distribuido de la Información Espacial

Ejercicios
1. ¿Cuántas municipios hay?
select count(*) from limitesadminandalucia
2. ¿Cuales son los distintos tipos de limitesadminandalucia?
select distinct(cod_ent) from limitesadminandalucia
3. ¿Qué tipo de geometrías representa las limitesadminandalucia?
select distinct(geometryType(the_geom)) from limitesadminandalucia
4. Ver en formato WKT la carretera con identificador único 10.
select asText(the_geom) from limitesadminandalucia where gid=10
5. Ver en formato WKB la carretera con identificador único 10.
select asBinary(the_geom) from limitesadminandalucia where gid=10
6. Obtener los identificadores únicos de las limitesadminandalucia que están dentro del
rectángulo formado por las coordenadas minX=450000, minY=4050000,
maxX=500000, maxY=4100000
select gid FROM limitesadminandalucia WHERE
the_geom && setSRID('BOX3D(450000 4050000, 500000 4100000)'::box3d, 23030)
7. Añadir una nueva carretera que cruza en línea recta desde el punto 450000, 4050000
al 500000, 4100000 y es del tipo 'V10'
insert into limitesadminandalucia(the_geom,cod_ent) values
(GeomFromText('MULTILINESTRING((450000 4050000, 500000
4100000))','23030'),'v10')
8. Obtener el centro de la carretera recién creada.
select astext(centroid(the_geom)) from limitesadminandalucia where cod_ent='v10'

22

Você também pode gostar