195
CURSO CURSO POSTGRESQL / POSTGRESQL / POSTGIS POSTGIS BASICO BASICO 2012 2012

CURSO POSTGIS

Embed Size (px)

Citation preview

  • CURSO CURSO POSTGRESQL / POSTGRESQL /

    POSTGISPOSTGIS

    BASICOBASICO

    20122012

  • Informacin en el SIGInformacin en el SIG Datos Geogrficos y datos tabularesDatos Geogrficos y datos tabulares Se estima que el 80% de los datos corporativos poseen un componente grograficoSe estima que el 80% de los datos corporativos poseen un componente grografico fuentesfuentes

    Datos espacialesDatos espaciales EstructuracinEstructuracin Identificacin mediante Cdigo.Identificacin mediante Cdigo. Organizacin mediante capas segn el tipo de informacin y relacin espacial.Organizacin mediante capas segn el tipo de informacin y relacin espacial. GeometraGeometra Relaciones espacialesRelaciones espaciales

    Base de datosBase de datos EstructuracinEstructuracin Identificacin mediante cdigos y usos de Indices y/o Llaves PrimariasIdentificacin mediante cdigos y usos de Indices y/o Llaves Primarias Relaciones, consultas o vistas, Funciones, etc...Relaciones, consultas o vistas, Funciones, etc... AdministracinAdministracin

    Base de datos espacialBase de datos espacial Igual al anteriorIgual al anterior Indexado por relacin espacialIndexado por relacin espacial Funciones espacialesFunciones espaciales Relaciones , consultas, vistas, Funciones... etc., aplicadas al entorno espacialRelaciones , consultas, vistas, Funciones... etc., aplicadas al entorno espacial

  • Esquema conceptualEsquema conceptual

    DatosEspaciales

    Diferentes formatos

    Base deDatos

    Espacial

    Productos GIS

    ModeloEspacial

    BasadoEn las

    Especific.DelOGC

    Tarea 1 -capa1 -capa2 - ...

    Tarea 2 -capa1 -capa2 - ...

    Tarea 3.

  • Esquema LgicoEsquema Lgico

    APLICACIONES

    Java/.NET/...

    Servicios de Mapa en Web

    Aplicacin o serviciosde Mapa en Web

    Internet / Intranet

    Mvil(SVG)

    PRODUCTO GIS

    Datos Espaciales

    DatosTabulares

    ArchivosGeograficos

  • Base de datosBase de datos

  • Preliminar

    En los ltimos aos el software de base de datos ha experimentado un gran crecimiento tanto en su potencialidad como en la demanda de la misma, debido a los altos requerimientos de manejo y procesamiento de la informacin por empresas o instituciones de diverso tamao.

    Las caractersticas mas importantes que se buscan en ellas es:

    Estabilidad Potencia Robustez Fcil Administracin Implementacin de estndares Velocidad

  • Que es una Base de datos?

    Son herramientas de gran importancia para el almacenamiento, administracin y manejo de grandes volmenes de datos.

    Los sistemas gestores de base de datos relacionales (SGBDR o RDBMS en ingles) tienen como caractersticas principales:

    Tolerancia a fallos Transacciones ACID (Atomicity, Consistency, Isolation, Durability). Acceso multiusuario a grandes volmenes de datos Consultas escalables a grandes volmenes de datos Control de seguridad, acceso y bloqueos Lenguajes de programacin de funciones Lenguaje de consultas SQL y modelado DDL (Data Definition

    Languaje)

  • Historia

    EL concepto de la base de datos nace en 1960, usada por el ejercito norteamericano

    El modelo relacional aplicado a la gestin de bases de datos es un modelo basado en la lgica de predicados y teora de conjuntos.

    Fue formulada y propuesta por primera vez en 1969 por Edgar Codd quien pretenda evitar sin prdida de datos, la necesidad de escribir programas que expresen consultas de la base de datos y asegurar la integridad de la base de datos.

    Relacin es un trmino matemtico para tabla", por lo que "relacional" bsicamente significa basado en tablas". No se refiere a enlaces o uniones entre tablas, de forma contraria a la creencia general.

    La primera descripcin del modelo relacional de Edgar Coddl, "Derivability, Redundancy, and Consistency of Relations Stored in Large Data Banks", se public en un informe del grupo de trabajo de IBM en 1969.

    1977 Se crea la empresa Software Develoment Labs,

    1979 renombrado a Relational Software,

    1983 renombrado a Oracle Corporation

    1974 Ingres = INteractive Graphics REtrieval System

    1986-1993 Postgres

    1995 PostQUEL cambiado por SQL, Postgres95

    1996 PostgreSQL Global Development Group

    2001 Soporte TOAST (PostGIS!)

    2005 Soporte Windows

    1992 Illustra

    1995 Illustra es comprado por Informix

  • Primeras versiones de base de datos

    Ao de aparicin aproximada MySQL 1990 MSSQL Server 1989 PostgreSQL 1986 IBM DB2 1983 Oracle

    Oracle Oracle Corporation 1983 Faberbeta Relational Software 1977

  • Primeras versiones de bases de datos ESPACIAL

    Las primeras versiones de las bases de datos espaciales son relativamente nuevas

    Oracle Spatial 1996 SDO 1998 Spatial 2000 8i. Spatial. Primera implementacin nativa

    Postgis 0.1 Mayo del 2001 Mysql 4.1.0 Abril del 2003 MS SQL Server en 2008

  • Bases de datosBases de datos Base de datosBase de datos

    Conjunto de datos almacenados con una estructura lgica. Conjunto de datos almacenados con una estructura lgica. Necesita de una Estructura conceptual con la que la informacin se Necesita de una Estructura conceptual con la que la informacin se

    relacionan entre ellos.relacionan entre ellos. En la prctica, es el conjunto de datos ms los programas que hacen En la prctica, es el conjunto de datos ms los programas que hacen

    de ellos un conjunto consistente. de ellos un conjunto consistente. ComponentesComponentes

    ServidorServidor Base de datosBase de datos TablaTabla

    Columnas o atributosColumnas o atributos ndices y Llavesndices y Llaves

    VistasVistas Disparadores (Triggers)Disparadores (Triggers) Funciones / Procedimientos almacenados (Store Procedure)Funciones / Procedimientos almacenados (Store Procedure) OperadoresOperadores Tipos de datosTipos de datos

  • Bases de datosBases de datos Existen multitud de gestores de bases de datos o programas que permiten manejar la Existen multitud de gestores de bases de datos o programas que permiten manejar la

    informacin de modo sencillo. informacin de modo sencillo. ORACLEORACLE Microsoft SQL ServerMicrosoft SQL Server InformixInformix DB2DB2

    En el mundo del software libre, Existen bases de datos Muy potentesEn el mundo del software libre, Existen bases de datos Muy potentes MySQLMySQL PostgreSQLPostgreSQL SQLITESQLITE

    PostgreSQL es software libre.PostgreSQL es software libre. Liberado bajo la licencia BSD, lo que significa que cualquiera puede Liberado bajo la licencia BSD, lo que significa que cualquiera puede

    disponer de su cdigo fuente, modificarlo a voluntad y disponer de su cdigo fuente, modificarlo a voluntad y redistribuirlo libremente. redistribuirlo libremente.

  • POSTGRESQL

  • PostgreSQLPostgreSQL Es creado por comunidades de desarrollo libre, no

    pertenece a ninguna compaa Las comunidades orientadas al desarrollo en:

    Motor y nuevas funcionalidades Documentacin Aplicaciones, mdulos o extensiones Correccin de errores en versiones de prueba

    Es Multiplataforma (Windows, MacOS, Linux, Unix, OpenSolares, FreeBSD)

    Existen cientos de usuarios por todo el mundo

  • Historia

    Se inicia en la universidad de Berkley en 1977 bajo el nombre de Se inicia en la universidad de Berkley en 1977 bajo el nombre de INGRES como un ejercicio de aplicacin de las teoras de las Bases INGRES como un ejercicio de aplicacin de las teoras de las Bases de datos relacionales.de datos relacionales.

    En 1986 cambia el nombre a POSTGRES con el objetivo de aplicar En 1986 cambia el nombre a POSTGRES con el objetivo de aplicar los conceptos de objetos relacionales.los conceptos de objetos relacionales.

    En 1995 cambia el nombre a Postgres95 que luego derivara a En 1995 cambia el nombre a Postgres95 que luego derivara a PostgreSQLPostgreSQL

    En 1996 se integra al mundo del Open Source en la versin 6.0En 1996 se integra al mundo del Open Source en la versin 6.0 En el 2000 se comienza a implementar el soporte del IPV6 (protocolo En el 2000 se comienza a implementar el soporte del IPV6 (protocolo

    de Internet versin 6)de Internet versin 6) 2004 se lanza PostgreSQL 8.0, se inicia su adopcin en el mundo 2004 se lanza PostgreSQL 8.0, se inicia su adopcin en el mundo

    comercial, se le calific como la 5ta DBMS mas popular en USA.comercial, se le calific como la 5ta DBMS mas popular en USA. Ultimas versiones 8.2.20, 8.3.14, 8.4.7, 9.03, 9.1.1, 9.1.3, 9.1.4, 9.2.0Ultimas versiones 8.2.20, 8.3.14, 8.4.7, 9.03, 9.1.1, 9.1.3, 9.1.4, 9.2.0

  • PostgreSQL

    Limites del PostgreSql

    Tamao mximo para una base de datos: sin limites (existen bases de datos de 32 TB)

    Tamao mximo para una tabla: 64 TB Tamao mximo para un registro: sin limites (dependen de la memoria swap y el

    sistema operativo) Tamao mximo para un campo: 1 GB Nmero mximo de filas en una tabla: sin limites (dependen de la memoria swap y el

    sistema operativo) Nmero mximo de columnas en una tabla: 1600 independiente del tipo de columna Nmero mximo de ndices en una tabla: sin limites (dependen de la memoria swap y

    el sistema operativo) Numero de lenguajes en las que se puede programar las funciones: aproximadamente

    10 (pl/pgsql, Java, Pearl, Python, tcl, php, C, C++, Ruby, etc.)

    El nmero mximo de columnas puede ser cuadruplicado por el aumento del tamao de bloque por defecto a 32k.

  • PostgreSQL

    Se puede administrar mediante diversos tipos de interfases como:

    Consola digitacin de las instrucciones directamente

    Grfico (GUI) . Mediante ayudas grficas, los mas usados son:

    PGADMIN III en entorno de escritorio.

    PhpPgAdmin- en entorno web.

  • PostgreSQL

    CONSOLA

  • PostgreSQL

    PGADMIN IIIHerramienta de

    cdigo abierto para la administracin de la base de datos POSTGRESQL.

    Incluye;Interfaz grficaHerramientas de

    consulta SQLEditor de funciones

  • PostgreSQL

    PhpPgAdmin

  • PostgreSQLPostgreSQLCaractersticas

    Instalacin ilimitada Ahorros considerables en costos de operacin Estabilidad y confiabilidad Extensible Multiplataforma Diseado para ambientes de alto volmen Soporte de transacciones Bloqueo a nivel de registro Soporte total de la integridad referencial a nivel de

    fila y columna.

  • PostgreSQLPostgreSQL Caractersticas

    Soporte completa a disparadores (Triggers), vistas (Views), y funciones (functions y store procedures).

    Soporte para el almacenamiento de BLOBs (binary large objects)

    Consultas y subconsultas Soporte a conexiones de base de datos seguras

    (criptografa) Modelo de seguridad para acceso a objetos de base

    de datos por usuarios y grupos de usuarios.

  • PostgreSQLPostgreSQL CaractersticasCaractersticas

    DBMSObjeto-RelacionalDBMSObjeto-Relacional Modelo objeto-relacional, Maneja rutinas complejas y reglas.Modelo objeto-relacional, Maneja rutinas complejas y reglas. Soporte de Consultas SQL declarativas, control de concurrencia, Soporte de Consultas SQL declarativas, control de concurrencia,

    soporte multi-usuario, transacciones, optimizacin de consultas, soporte multi-usuario, transacciones, optimizacin de consultas, herencia, y arreglos herencia, y arreglos

    Las caracteristicas OO permiten que una tabla pueda heredar los Las caracteristicas OO permiten que una tabla pueda heredar los atributos de otra, manteniendose la coherencia entre los datos de atributos de otra, manteniendose la coherencia entre los datos de las tablas hijas y padres (herencia multiple).las tablas hijas y padres (herencia multiple).

    La consulta, insercion y borrado de columnas en la tabla padre, La consulta, insercion y borrado de columnas en la tabla padre, hara lo propio en las hijas.hara lo propio en las hijas.

    Altamente ExtensibleAltamente Extensible Soporta operadores, funcionales, mtodos de acceso y tipos de Soporta operadores, funcionales, mtodos de acceso y tipos de

    datos definidos por el usuario. datos definidos por el usuario. IntegridadReferencialIntegridadReferencial

    Soporta integridad referencial, la cual es utilizada para garantizar la Soporta integridad referencial, la cual es utilizada para garantizar la validez de los datos de la base de datos.validez de los datos de la base de datos.

  • PostgreSQLPostgreSQL CaractersticasCaractersticas

    APIFlexibleAPIFlexible La flexibilidad del API de PostgreSQL Permite la implementacin de La flexibilidad del API de PostgreSQL Permite la implementacin de

    desarrollos usando Object Pascal, Python, Perl, PHP, ODBC, desarrollos usando Object Pascal, Python, Perl, PHP, ODBC, Java/JDBC, Ruby, TCL, C/C++, y Pike. Java/JDBC, Ruby, TCL, C/C++, y Pike.

    LenguajesProceduralesLenguajesProcedurales Soporte para lenguajes procedurales internos, incluyendo un Soporte para lenguajes procedurales internos, incluyendo un

    lenguaje nativo denominado PL/pgSQL. Lenguaje es comparable al lenguaje nativo denominado PL/pgSQL. Lenguaje es comparable al lenguaje procedural de Oracle, PL/SQL. lenguaje procedural de Oracle, PL/SQL.

    Habilidad para usar lenguajes de procedimientos nativos como Habilidad para usar lenguajes de procedimientos nativos como pl/Perl, pl/Python, pl/TCL o SQL como lenguaje procedural pl/Perl, pl/Python, pl/TCL o SQL como lenguaje procedural embebido. embebido.

    Posibiliad de usar lenguajes de procedimientos no nativos como Posibiliad de usar lenguajes de procedimientos no nativos como pl/ua, pl/php, pl/r, pl/javascript, pl/lolcode, pl/scheme, pl/java, etc pl/ua, pl/php, pl/r, pl/javascript, pl/lolcode, pl/scheme, pl/java, etc ..

    Cliente/ServidorCliente/Servidor Arquitectura proceso-por-usuario cliente/servidor. Esta es similar Arquitectura proceso-por-usuario cliente/servidor. Esta es similar

    al mtodo del Apache 1.3.x para manejar procesos. Hay un al mtodo del Apache 1.3.x para manejar procesos. Hay un proceso maestro que se ramifica para proporcionar conexiones proceso maestro que se ramifica para proporcionar conexiones adicionales para cada cliente que intente conectar a PostgreSQL.adicionales para cada cliente que intente conectar a PostgreSQL.

    Soportado por: Java (JDBC), ODBC, Perl, Ruby, C, C++, PHP, Lisp, Soportado por: Java (JDBC), ODBC, Perl, Ruby, C, C++, PHP, Lisp, Scheme, QT, etc. Scheme, QT, etc.

  • PostgreSQLPostgreSQL Caractersticas

    Usa un sistema denominado MVCC (Acceso concurrente multiversin, por sus siglas en ingls) PostgreSQL permite que mientras un proceso escribe en una tabla, otros accedan a la misma tabla sin necesidad de bloqueos.

    Cada usuario obtiene una visin consistente de lo ltimo a lo que se le hizo commit. Esta estrategia es superior al uso de bloqueos por tabla o por filas comn en otras bases, eliminando la necesidad del uso de bloqueos explcitos.

    Amplia variedad de tipos nativos Nmeros de precisin arbitraria. Texto de largo ilimitado. Figuras geomtricas (con una variedad de funciones asociadas). Direcciones IP (IPv4 e IPv6). Bloques de direcciones estilo CIDR. Direcciones MAC. Arrays. Ademas los usuarios pueden crear sus propios tipos de datos, los que pueden ser por

    completo indexables gracias a la infraestructura GiST de PostgreSQL. Por ejemplo los tipos de datos GIS creados por el proyecto PostGIS.

  • PostgreSQLPostgreSQLFunciones

    Bloques de cdigo que se ejecutan en el servidor. Pueden ser escritos en varios lenguajes, con sus caracteristicas relacionadas a cada una de ellas, desde las operaciones bsicas de programacin, tales como bifurcaciones y bucles, hasta las complejidades de la programacin orientada a objetos o la programacin funcional.

    Algunos de los lenguajes que se pueden usar son los siguientes: Un lenguaje propio llamado PL/PgSQL (similar al

    PL/SQL de oracle), C, C++, Java PL/Java web, PL/Perl, plPHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl, PL/Scheme, Lenguaje para aplicaciones estadsticas R por medio de PL/R.

    El concepto de funciones, en otros DBMS, son muchas veces referidas como "procedimientos almacenados" (Stored Procedures en ingls).

  • PostgreSQLPostgreSQL Otras Caractersticas

    Claves ajenas tambin denominadas Llaves ajenas o Claves Forneas (foreign keys).

    Disparadores (triggers): es una accin especfica que se realiza de acuerdo a un evento, cuando ste ocurra dentro de la base de datos. En PostgreSQL esto significa la ejecucin de un procedimiento almacenado basado en una determinada accin sobre una tabla especfica. Todos los disparadores se definen por seis caractersticas:

    El nombre del disparador o trigger El momento en que el disparador debe arrancar El evento del disparador deber activarse sobre... La tabla donde el disparador se activar La frecuencia de la ejecucin La funcin que podra ser llamada

  • PostgreSQLPostgreSQLOtras Caractersticas

    Uso de Vistas. Integridad transaccional. Herencia de tablas. Tipos de datos y operaciones geomtricas. Soporte para transacciones distribuidas. Permite integrarse en un

    sistema distribuido formado por varios recursos (ejem. una base de datos PostgreSQL, otra Oracle, una cola de mensajes IBM MQ JMS y un ERP SAP) gestionado por un servidor de aplicaciones donde el xito ("commit") de la transaccin globlal es el resultado del xito de las transacciones locales.

  • PostgreSQLPostgreSQLRequerimientos

    Procesador: se recomienda un procesador de 64 bits, aunque es posible instalar en procesadores de 32 bits para usos limitados o locales.

    Memoria: se recomienda al menos 4GB Disco: el espacio depende del volumen de datos

    SCSI: para bases de datos relativamente medianas pero donde se requiere un alto acceso de datos, entorno muy propenso a caidas del servidor.

    SATA: para bases de datos muy grandes, pero con no muy altos requerimientos de accesos a los mismos, usar sistemas con Journaling (ext4 por ejemplo) para minimiazas los riesgos de caidas.

    SSD: para usar como cahe de a base de datos Arreglo de discos: para entornos muy grandes con mucho

    acceso a los mismos

  • PostgreSQLPostgreSQL Instalacin de PostgreSQL en Windows

    Ejecucion del programa instalador, descargado de la pagina de POSGRESQL o de la distribucion de Gismap.

    Localizacin en el Disco (directorio) donde se instalar, se recomienda que no sea el disco C: ni en el directorio archivos del programa

    Numero de puerto, por default es 5432, pero puede usarse otros.

    Adicionalmente se instala los componentes Postgis Otros (ODBC, JDBC, OLDB, .NET).

    Definicin del SuperUsuario y la Clave Configuracin y optimizacin de los archivos pg_hba.conf y Configuracin y optimizacin de los archivos pg_hba.conf y

    postgresql.confpostgresql.conf

  • PostgreSQLPostgreSQL Instalacin de PostgreSQL en LinuxInstalacin de PostgreSQL en Linux

    Descarga del cdigo Fuente o de un paquete (rpm o deb) Descarga del cdigo Fuente o de un paquete (rpm o deb) segun el Tipo de distribucion de Linux (RedHat, segun el Tipo de distribucion de Linux (RedHat, Kubuntu, Fedora, etc.), se recomienda usar las Kubuntu, Fedora, etc.), se recomienda usar las herramientas propias de la distribucion para la herramientas propias de la distribucion para la busqueda y descarga del producto y de todos los busqueda y descarga del producto y de todos los dependientes (YUM, APT-GET, etc.).dependientes (YUM, APT-GET, etc.).

    sudo apt-get install postgresql-9.0 libpq-devsudo apt-get install postgresql-9.0 libpq-dev Configuracin y optimizacin de los archivos pg_hba.conf Configuracin y optimizacin de los archivos pg_hba.conf

    y postgresql.confy postgresql.conf Administracin mediante PhpPgAdmin y Apache o Administracin mediante PhpPgAdmin y Apache o

    directamente mediante pgAdmin IIIdirectamente mediante pgAdmin III

  • PostgreSQLPostgreSQL Procesos PrioritariosProcesos Prioritarios

    Copias de SeguridadCopias de Seguridad ReplicasReplicas OptimizacinOptimizacin UsuariosUsuarios

    AccionesAcciones Creacin de una base de datosCreacin de una base de datos Creacin de tablasCreacin de tablas Definicin de Llaves, Indices y relacionesDefinicin de Llaves, Indices y relaciones Definicin de VistasDefinicin de Vistas Consultas de datos Consultas de datos Creacin de Disparadores (triggers)Creacin de Disparadores (triggers) Creacin de Procedimientos Almacenados o funciones Creacin de Procedimientos Almacenados o funciones

    (Store procedure)(Store procedure)

  • PostgreSQLPostgreSQL Copias de SeguridadCopias de Seguridad

    BackupBackup En otros discos o almacenamiento remotosEn otros discos o almacenamiento remotos Se debe identificar claramente la fecha en el nombre del Se debe identificar claramente la fecha en el nombre del

    archivoarchivo Puede ser total o parcialPuede ser total o parcial Generalmente se utiliza el formato CUSTOMGeneralmente se utiliza el formato CUSTOM

    RestaurarRestaurar Puede ser total o parcialPuede ser total o parcial Puede ser adicional (control de versiones) o Sobre escritura Puede ser adicional (control de versiones) o Sobre escritura

    (Reemplaza la data anterior)(Reemplaza la data anterior) ReplicasReplicas

    Directas. Mediante indicaciones a la Base de datos o Directas. Mediante indicaciones a la Base de datos o Tablas o Campos especficosTablas o Campos especficos

    Indirectas. Mediante procedimientos y Disparadores.Indirectas. Mediante procedimientos y Disparadores.

  • PostgreSQLPostgreSQL La administracin de la base de datos puede La administracin de la base de datos puede

    realizase mediante instrucciones en una consola realizase mediante instrucciones en una consola de comandos, o mediante una interfase grafica de comandos, o mediante una interfase grafica usando un GUI como PGADMIN IIIusando un GUI como PGADMIN III

    OptimizacinOptimizacin Mejorar el modo de organizacin fsica de los datosMejorar el modo de organizacin fsica de los datos Revisar las relaciones entre las tablasRevisar las relaciones entre las tablas ReIndexar los datosReIndexar los datos

    Usuarios y GruposUsuarios y Grupos Creacin de Usuarios y gruposCreacin de Usuarios y grupos Identificacin de los privilegios de los gruposIdentificacin de los privilegios de los grupos

  • PostgreSQLPostgreSQL Manejo de Grupos o RolesManejo de Grupos o Roles

    Simplifica la asignacin de privilegiosSimplifica la asignacin de privilegios El role puede ser creado sin nombre y puede estar sin El role puede ser creado sin nombre y puede estar sin

    usuariosusuarios Se pueden adicionar los usuarios que pertenecen al Se pueden adicionar los usuarios que pertenecen al

    role, posteriormente a su creacinrole, posteriormente a su creacin Se asignan los permisos y privilegios al roleSe asignan los permisos y privilegios al role

    CREATE ROLE consulta;CREATE ROLE consulta; CREATE ROLE catastro VALID UNTIL 'infinity';CREATE ROLE catastro VALID UNTIL 'infinity'; CREATE ROLE mantenimiento VALID UNTIL '2012-CREATE ROLE mantenimiento VALID UNTIL '2012-

    11-23 00:00:00';11-23 00:00:00'; CREATE ROLE mantenimiento2 VALID UNTIL CREATE ROLE mantenimiento2 VALID UNTIL

    '2012-11-23 00:00:00' CONNECTION LIMIT 10;'2012-11-23 00:00:00' CONNECTION LIMIT 10;

  • SeguridadSeguridad Creacin de Grupos:Creacin de Grupos:

    Se puede tener grupos dentro de grupos.Se puede tener grupos dentro de grupos. Si el usuario tiene la fecha de expiracin caducada no podr Si el usuario tiene la fecha de expiracin caducada no podr

    conectarse a una BD.conectarse a una BD. Si el usuario no se le asigna fecha de expiracin podr acceder Si el usuario no se le asigna fecha de expiracin podr acceder

    siempre.siempre. Si el usuario no posee contrasea no podr conectarse a una Si el usuario no posee contrasea no podr conectarse a una

    BD.BD. Para que un usuario, que pertenece a un grupo, herede los Para que un usuario, que pertenece a un grupo, herede los

    permisos del grupo es necesario que en las propiedades del permisos del grupo es necesario que en las propiedades del usuario este habilitado el check: Inherits rights from parent usuario este habilitado el check: Inherits rights from parent roles.roles.

    Para que un usuario acceda a los objetos, es necesario que en Para que un usuario acceda a los objetos, es necesario que en las propiedades del objeto este habilitado el check de permisos las propiedades del objeto este habilitado el check de permisos al grupo que pertenece en la opcin privilegios. Estos permisos al grupo que pertenece en la opcin privilegios. Estos permisos pueden ser establecidos con mayor rapidez a nivel de Schemas pueden ser establecidos con mayor rapidez a nivel de Schemas usando el grant wizard(click derecho sobre Schemas).usando el grant wizard(click derecho sobre Schemas).

  • SeguridadSeguridad

  • PostgreSQLPostgreSQL Manejo de UsuariosManejo de Usuarios

    Permisos para los accesos remotosPermisos para los accesos remotos Acceso o restriccin a la base de datos o a Acceso o restriccin a la base de datos o a

    tablas especificastablas especificas Ejemplos:Ejemplos:

    CreacinCreacin CREATE USER cons WITH PASSWORD 'N0gi7!'; CREATE USER cons WITH PASSWORD 'N0gi7!'; CREATE USER cons WITH PASSWORD 'N0gi7! VALID CREATE USER cons WITH PASSWORD 'N0gi7! VALID

    UNTIL '2012-11-11'; UNTIL '2012-11-11'; ModificacinModificacin

    ALTER USER cons ALTER USER cons Eliminacin Eliminacin

    DROP USER cons DROP USER cons

  • PostgreSQLPostgreSQL Manejo de PrivilegiosManejo de Privilegios

    Describe que usuarios estn autorizados para realizar Describe que usuarios estn autorizados para realizar consultas, actualizaciones, etc.consultas, actualizaciones, etc.

    Existen Privilegios de Accesos y RestriccionesExisten Privilegios de Accesos y Restricciones Modos:Modos:

    GRANT ON SEQUENCE ..GRANT ON SEQUENCE .. GRANT ON DATABASE ..GRANT ON DATABASE .. GRANT ON FUNCTION ..GRANT ON FUNCTION .. GRANT ON LANGUAGE GRANT ON LANGUAGE GRANT ON SCHEMA GRANT ON SCHEMA GRANT ON TABLESPACE GRANT ON TABLESPACE

    Ejm:Ejm: GRANT ALL ON TABLE poblados TO catastro;GRANT ALL ON TABLE poblados TO catastro;

  • PostgreSQLPostgreSQL

  • PostgreSQLPostgreSQL CreacinCreacin

    Creacin de una base de datosCreacin de una base de datos Creacin de un schema (opcional)Creacin de un schema (opcional) Creacin de tablas y columnasCreacin de tablas y columnas IndexadosIndexados

    Ejemplo:Ejemplo:CREATE TABLE parquesCREATE TABLE parques

    ( __gid serial NOT NULL,( __gid serial NOT NULL,

    nomb_pq character varying,nomb_pq character varying,

    cen_pob character varying,cen_pob character varying,

    area_pq double precision,area_pq double precision,

    observacion character varying,observacion character varying,

    ubigeo character varying,ubigeo character varying,

    CONSTRAINT parques_pkey PRIMARY KEY (__gid)CONSTRAINT parques_pkey PRIMARY KEY (__gid)

    WITH ( OIDS=TRUE );WITH ( OIDS=TRUE );

    ALTER TABLE parques OWNER TO postgres;ALTER TABLE parques OWNER TO postgres;

  • PostgreSQLPostgreSQL ConsultasConsultas

    SELECT SELECT lista_de_camposlista_de_campos FROM FROM tablatabla [[criterioscriterios]] [[indicaciones_de_ordenamientoindicaciones_de_ordenamiento] ]

    SELECT SELECT lista_de_camposlista_de_campos FROM FROM tabla, tabla1,tabla2, tabla, tabla1,tabla2, . . [[criterios_de_enlace_y_seleccincriterios_de_enlace_y_seleccin]] [[indicaciones_de_ordenamientoindicaciones_de_ordenamiento]]

    EjemploEjemplo SELECT * FROM lotes; SELECT * FROM lotes; SELECT codigo, manz , propietario date FROM lotes; SELECT codigo, manz , propietario date FROM lotes; SELECT codigo, (manz+lote+unidad) AS codig_cat, fecha SELECT codigo, (manz+lote+unidad) AS codig_cat, fecha

    FROM lotes; FROM lotes; SELECT * FROM lotes WHERE codigo like %04%' AND SELECT * FROM lotes WHERE codigo like %04%' AND

    area > 1000.0; area > 1000.0; SELECT DISTINCT zonas FROM lotes ORDER BY zonas; SELECT DISTINCT zonas FROM lotes ORDER BY zonas;

  • PostgreSQLPostgreSQL Insertar datosInsertar datos

    INSERT INTO tabla [(attr1, ...attrN)] INSERT INTO tabla [(attr1, ...attrN)] VALUES (expr1,..exprN) | SELECT [DISTINCT [ON attrN]] expr1, VALUES (expr1,..exprN) | SELECT [DISTINCT [ON attrN]] expr1, ...exprN [FROM tabla] [WHERE condicin] [GROUP BY lista] [HAVING ...exprN [FROM tabla] [WHERE condicin] [GROUP BY lista] [HAVING condicin] [ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...]; condicin] [ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...];

    EjemploEjemplo INSERT INTO lotes VALUES (Juan Perez', 46, 50, 0.25, '11/27/1994'); INSERT INTO lotes VALUES (Juan Perez', 46, 50, 0.25, '11/27/1994');

    INSERT INTO productos (product_no, name, price) VALUES (1, 'Cheese', INSERT INTO productos (product_no, name, price) VALUES (1, 'Cheese', 9.99); 9.99);

    INSERT INTO productos (product_no, name) VALUES (1, 'Cheese'); INSERT INTO productos (product_no, name) VALUES (1, 'Cheese');

    INSERT INTO productos VALUES (1, 'Cheese'); INSERT INTO productos VALUES (1, 'Cheese');

    INSERT INTO productos (producto_no, name, price) VALUES (1, 'Cheese', INSERT INTO productos (producto_no, name, price) VALUES (1, 'Cheese', 9.99), (2, 'Bread', 1.99), (3, 'Milk', 2.99); 9.99), (2, 'Bread', 1.99), (3, 'Milk', 2.99);

  • PostgreSQLPostgreSQL Consultas con unionesConsultas con uniones

    SELECT t1.cod, t1.manz AS manzana, t1.r176EE AS deuda, SELECT t1.cod, t1.manz AS manzana, t1.r176EE AS deuda, t2.zona, t2.m3445 AS meses FROM lotes t1, rentas t2 t2.zona, t2.m3445 AS meses FROM lotes t1, rentas t2 WHERE t1.cod < t2.cod AND t1.factor > t2.r176EE; WHERE t1.cod < t2.cod AND t1.factor > t2.r176EE;

    SELECT * FROM lotes LEFT JOIN rentas ON lotes.cod = SELECT * FROM lotes LEFT JOIN rentas ON lotes.cod = rentas.cod; rentas.cod;

    SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num; SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num; SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND

    t2.value = 'xxx'; t2.value = 'xxx';

  • PostgreSQLPostgreSQL Condicin (Where)Condicin (Where)

    Retorna un valor lgicoRetorna un valor lgico WHERE pisos > 3 WHERE pisos > 3 WHERE estado = bueno WHERE estado = bueno WHERE material IN (1, 2, 3) WHERE material IN (1, 2, 3) WHERE material IN (SELECT material FROM WHERE material IN (SELECT material FROM

    lista_de_material) lista_de_material) WHERE material IN (SELECT material FROM WHERE material IN (SELECT material FROM

    lista_de_material WHERE c2 = factor.c1 + 10) lista_de_material WHERE c2 = factor.c1 + 10) WHERE factores BETWEEN (SELECT lista_de_material WHERE factores BETWEEN (SELECT lista_de_material

    FROM t2 WHERE c2 = factor.c1 + 10) AND 100 FROM t2 WHERE c2 = factor.c1 + 10) AND 100 WHERE EXISTS (SELECT deuda FROM rentas WHERE WHERE EXISTS (SELECT deuda FROM rentas WHERE

    deuda > 100) deuda > 100)

  • PostgreSQLPostgreSQL ActualizacionesActualizaciones

    UPDATE lotes SET estado = malo, factor = factor - 2 UPDATE lotes SET estado = malo, factor = factor - 2 WHERE fecha > '11/28/2006'; WHERE fecha > '11/28/2006';

    UPDATE productos SET precio = precio * 1.10; UPDATE productos SET precio = precio * 1.10; UPDATE zonas SET a = 5, b = 3, c = 1 WHERE a > UPDATE zonas SET a = 5, b = 3, c = 1 WHERE a >

    0; 0; EliminacinEliminacin

    DELETE FROM lotes WHERE zona = 4B; DELETE FROM lotes WHERE zona = 4B; DELETE FROM lotes WHERE area

  • PostgreSQLPostgreSQL SELECT max(altura) FROM niveles; SELECT max(altura) FROM niveles; SELECT zona FROM lotes WHERE altura = max(altura); SELECT zona FROM lotes WHERE altura = max(altura);

    AgrupamientoAgrupamiento SELECT codigo FROM lotes WHERE deuda = (SELECT SELECT codigo FROM lotes WHERE deuda = (SELECT

    max(deuda) FROM rentas); max(deuda) FROM rentas); SELECT zona, max(altura) FROM lotes GROUP BY zona; SELECT zona, max(altura) FROM lotes GROUP BY zona;

  • PostgreSQLPostgreSQL Consulta usando agrupacion y OVER

    Consulta de areas acumuladas por manzana ordenado por codigo catastral select codigocata, mz_cat, lote_cat, cod_via ,area, sum(area)over (partition by mz_cat order by

    codigocata) from lotes09 Consulta de areas totales por manzana, promedios, desviacion promedio por lote con referencia

    a la manzana select codigocata, mz_cat, lote_cat, cod_via ,area,

    sum(area) over (partition by mz_cat order by codigocata) as area_acumulada, sum(area) over (partition by mz_cat ) as area_total , count(*) over (partition by mz_cat ) as cantidad, sum(area) over (partition by mz_cat ) / count(*) over (partition by mz_cat ) as promedio,avg(area) over (partition by mz_cat ) as prom,sum(area) over (partition by mz_cat ) / count(*) over (partition by mz_cat ) - area as desviacion_promedio from lotes09

    Uso de rank() y dense_rank() select codigocata, mz_cat, lote_cat, cod_via ,area, row_number() over (order by codigocata desc nulls

    last), rank() over (order by area desc nulls last), dense_rank() OVER (ORDER BY area DESC NULLS LAST) from lotes09 order by area desc

    Lista de manzanas y lotes ordenados y numerados por el rea por los lotes de cada manzana select codigocata, mz_cat, lote_cat, cod_via ,area, rank() over (partition by mz_cat order by codigocata)

    from lotes09

  • PostgreSQLPostgreSQL Transacciones

    Permite la realizacin de mltiples operaciones y segurar que todas terminen satisfactoriamente para registrar la operacin o en caso contrario mantenerlo como era originalmente.

    Estructura: BEGIN

    ----- operaciones ----COMMIT / ROLLBACK

    Ejemplo: BEGIN;

  • FUNCIONES

    Son equivalentes a los STORE PROCEDURE de otras bases de datos, pero con mayores capacidades.

    Para la creacin de funciones Paso de parmetros Definicin de variables Procesos directos o por lazos Definicin del retorno Asignacin de privilegios

    Se soporta como tipo de parametos ANYARRAY, ANYELEMENT, ANYNONARRAY o ANYENUM para declararlo.

  • FUNCIONES CABECERA

    // declaracion de la funcion, indica el tipo de dato que se retornara// ademas se declaran las variables internas que se usaran en la funcin

    CREATE OR REPLACE FUNCTION __gg_cleangeometry(geometry) RETURNS geometry AS

    $BODY$DECLARE

    inGeom ALIAS for $1; outGeom geometry; tmpLinestring geometry;

    // una variable puede tomar el tipo de dato de la estructura de una tablav_toponimia tb_lotes.toponima%TYPE; para un tipo de atributov_fila tb_lotes%ROWTYPE; para un registro de datos completov_fila_actual record;

    // o definir un valor constantev_nombre CONSTANT varchar := 'erika';

  • FUNCIONESCUERPO

    //Inicio del contenido de la funcin, se hacen uso de las variables internas, se indica el retorno en diferentes partes de la funcin segn las condiciones se cumplan

    Begin

    outGeom := NULL;

    IF (GeometryType(inGeom) = 'POLYGON' OR GeometryType(inGeom) = 'MULTIPOLYGON') THEN

    if not isValid(inGeom) THEN

    tmpLinestring := st_union(st_multi(st_boundary(inGeom)),st_pointn(boundary(inGeom),1));

    outGeom = buildarea(tmpLinestring);

    IF (GeometryType(inGeom) = 'MULTIPOLYGON') THEN RETURN st_multi(outGeom);

    ELSE RETURN outGeom; END IF;

    else RETURN inGeom; END IF;

    ELSIF (GeometryType(inGeom) = 'LINESTRING') THEN

    outGeom := st_union(st_multi(inGeom),st_pointn(inGeom,1)); RETURN outGeom;

    ELSIF (GeometryType(inGeom) = 'MULTILINESTRING') THEN

    outGeom := multi(st_union(st_multi(inGeom),st_pointn(inGeom,1))); RETURN outGeom;

    ELSE RAISE NOTICE 'EL tipo % no es soportado',GeometryType(inGeom); RETURN inGeom;

    END IF;

    End;$BODY$

  • FUNCIONESPIE

    // fin de la declaracin de la funcin, se indica el lenguaje a usar, as como los permisos de accesos a la funcin

    LANGUAGE plpgsql VOLATILE COST 100;

    ALTER FUNCTION __gg_cleangeometry(geometry) OWNER TO postgres;

    GRANT EXECUTE ON FUNCTION __gg_cleangeometry(geometry) TO public;

    GRANT EXECUTE ON FUNCTION __gg_cleangeometry(geometry) TO consulta;

  • Funciones

    Se pueden declarar parametros de entrada (IN), salida (OUT) o de entrada y salida (INOUT)CREATE OR REPLACE FUNCTION funcion1 (texto_via varchar, OUT nombre varchar, OUT tipo varchar) RETURNS record as$$BEGIN tipo := substr(texto_via,1,3); nombre := substr(texto_via,4,30);END;$$ LANGUAGE plpgsql;

    CREATE OR REPLACE FUNCTION funcion2 (texto_via varchar) RETURNS integer AS$$DECLARE nombre varchar; tipo varchar; datos record;BEGIN SELECT * INTO nombre,tipo from funcion1(texto_via); RAISE NOTICE 'tipo de via es:%',tipo; RAISE NOTICE 'Nombre de la via es:%',nombre; RETURN 1;END;$$ LANGUAGE plpgsql;

    Se prueba mediante:SELECT funcion2('AV. JAVIER PRADO');

  • Disparadores (Triggers)

    Definicion del disparador CREATE TRIGGER trig_mencom_ult_dist

    BEFORE INSERT OR UPDATE ON movilsat.card_last_data FOR EACH ROW WHEN (NEW.* IS DISTICT FROM OLD.*) solo en 9.x EXECUTE PROCEDURE movilsat.tg_distrito();

  • REGLAS (RULES)

    Nos permiten desarrollar alguna accion ante un evento producido en una tabla o vista. A diferencia del TRIGGER no se puede desarrollar una logica.

  • Accesibilidad a los objetosAccesibilidad a los objetos El acceso a cualquier objeto que contiene El acceso a cualquier objeto que contiene

    maysculas en su nombre debe estar descrito maysculas en su nombre debe estar descrito entre comillas y respetar estrictamente las entre comillas y respetar estrictamente las maysculas y minsculas. Ejemplo: maysculas y minsculas. Ejemplo: Tb_Alumno,Tb_Alumno, su acceso ser su acceso ser Tb_AlumnoTb_Alumno..

    Para objetos cuyo nombre esta totalmente en Para objetos cuyo nombre esta totalmente en minsculas es indiferente la forma en que se minsculas es indiferente la forma en que se escriba el acceso a ellas siendo indiferente la escriba el acceso a ellas siendo indiferente la diferencia entre maysculas y minsculas y no diferencia entre maysculas y minsculas y no se necesita describirlo entre comillas dobles. se necesita describirlo entre comillas dobles. Ejemplo: Ejemplo: pruebaprueba, su acceso ser , su acceso ser pruebaprueba o o PRUEBAPRUEBA..

  • Accesibilidad a los objetosAccesibilidad a los objetos

  • PostgreSQL 9.X

  • PostgreSQL 9.X

    Las nuevas funcionalidades en Postgre 9.X presenta avances en el rendimiento es escalabilidad vertical para que se pueda manejar cargas de trabajo cada vez mas grandes. As mismo se incluyen mejoras de alta disponibilidad que dan a los administradores de bases de datos (DBAs) mas opciones para configuraciones de alta disponibilidad (HA).

    En la replicas no es necesario que todos los esclavos esten conectados al maestro, esto puede ser en cascada, es decir el maestro a aun esclavo1, del esclavo1 al esclavo 2, etc., mejorando y distribuyendo el performance correspondiente.

    Un nuevo tipo de datos para el manejo de RANGOS (Rage Type). Soporte de datos tipo JSON MVCC: Multiversion Concurrent Control

  • PostgreSQL 9.XReplicas

    Importancia de las Replicas Para tener un sistema tolerable a fallas. Para balancear la carga de trabajo en diversos servidores. Para aplicaciones de alto consumo en consultas (B.I.) Para tener un ambiente de pruebas o desarrollo lo mas

    parecido al ambiente de produccion. Etc.

    Que es WAL WAL es un buffer donde se llevan a cabo las operaciones a la

    data una vez terminada se pasan al almacenamiento de datos principal, si algo pasara entonces el are de datos permanecera intacto,solo seperdera lo que esta en el WAL.

    WAL genera segmentos de 16mb (configurable) en archivos fisicos que tienen paginas de datos de 8kb (configurable).

  • PostgreSQL 9.XReplicas

    Replica Asincronica - Stream Replication (SR). Esta funcionalidad nos permite transferir

    asincronicamente los registros WAL sobre la marcha (record-based log shiping) entre un servidor maestro y varios esclavos. Consiste en un tiempo de demora entre el servidor Maestro procesando la informacion y el esclavo recibiendola. Se utilizan los archivos WAL que permiten regenerar la base de datos. Existe un problema que si se cae el servidos Maestro, se podrian perder algunas transacciones.

  • PostgreSQL 9.XReplicas

    Replica Sincronica - Syncronous Replication (Replicacion Sincronica): Controlada por sesin, permitiendo la alta disponibilidad con consistencia entre mltiples servidores. No es necesario ser un super usuario. Las transacciones no se completan a menos que se completen en el servidor Maestro y en el Esclavo (esto genera un tiempo de proceso mayor para la transaccin). La nica posibilidad de perder datos es que se caigan ambos servidores.

    Maestro

    Esclavo 1 Esclavo 2 Esclavo 3

  • PostgreSQL 9.XReplicas

    Replica en Cascada: Es asincronica, funciona al estilo del primer tipo de replicacion copiando los archivos WAL.

    Tabla 1

    Tabla 2

    Tabla 3

    Tabla 1

    Tabla 2

    Tabla 3

    Tabla 1

    Tabla 2Replica de Serv1 a Serv 2Replica de Serv2 a Serv 3

    Serv 1 Serv 2 Serv 3

  • PostgreSQLPostgreSQL Soporte de tablas foraneas

    Tradicionalmente PostgreSQL soporta el acceso a datos de otros motores de bases de datos mediante paquetes CONTRIB.

    Actualmente se puede configurar las conexiones sin la instalacin de paquetes adicionales ejecutando comandos como:

    CREATE FOREIGN TABLE [IF NOT EXIST] tabla ([{columna tipo [NULL | NOT NULL] } [, ]]) SERVER servidor [OPTIONS (opciones [, ...])];

    Alter Drop ...

  • PostgreSQL 9.X

    Hot Standby (HS). Esta nueva funcionalidad nos permite acceder en modo de solo lectura a todos los datos disponibles en el servidor esclavo en donde estamos replicando nuestra base de datos desde el servidor maestro.

    Mejora en la seguridad y autentificacion. Grante Revoke Schema. Se pueden definir privilegios para toda las tablas, secuencias

    y funciones en un esquema (scheme) con un solo comando SQL. GRANT SELECT ON ALL TABLES IN SCHEMA public TO usuario; GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO usuario; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO usuario;

    Estos comandos solamente afectan a los objetos que existan en el momento de ejecutar el comando y no a los que se creen en el futuro.

    ALTER DEFAULT PROVILEGES Para definir los privilegios por defecto de objetos que se creen en el futuro

    ALTER DEFAULT PRIVILEGES FOR ROLE usuario GRANTE SELECT ON TABLES TO public;

  • PostgreSQL 9.X

    Disparadores de columnas: Se ejecutan cuando una o mas columnas definidas por el usuario se actualizan. Con este tipo de disparadores nos ahorraremos el tener que utilizar la lgica condicional y comparacin de valores en las funciones usadas por nuestro disparador, como se ha tenido que hacer en las versiones previas.

    Disparadores WHEN: con los disparadores condicionales se pueden definir una condicin del disparador. De esta manera nos ahorramos el tener que usar una condicin IF .. THEN dentro del disparador, reduciendo el consumo del CPU en el servidor.

    Solo se ejecutara la funcion check_accounts_update() si el balance viejo es distinto que el balance nuevo.

    CREATE TRIGGER check_updateBEFORE UPDATE ON cuentasFOR EACH ROWWHEN (OLD.balance IS DISTINCT FROM New.balance)EXECUTE PROCEDURE check_accounts_update();

    Regionalizacion por columnas: soportando la definicin del encode por columnas . Writable Common Table Expresion: Ejecuta actualizaciones mltiples complejas en

    una simple consulta.

  • PostgreSQL 9.X

    DEFERRABLE CONSTRAINTS: Con esta funcionalidad . La unicidad de una restriccin es forzada al final de la sentencia SQL ejecutada y no en cada tupla actualizada.

    CREATE TABLE test (a int primary key); INSERT INTO test VALUES (1),(2); UPDATE test set a=a+1;

    NOT VALID CHECK CONSTRAINTS: Se puede usar para restringir y optimizar el uso del constraints

    ALTER TABLE test ADD CHECK (a>100) NOT VALID; Ordenacin de funciones agregadas: El resultado de una funciona agregada del tipo array_agg o

    string_agg, depender del orden en que se reciban los datos SELECT oficina,string_agg(nombre,', ' ORDER BY nombre) FROM sueldos GROUP BY oficina; Se obtiene la lista de oficinas con una lista separada por comas de nombres correspondientes ordenados.

    VACUMM FULL mejorado: en versiones previas un VACUMM FULL era una operacin lenta y que consuma muchos recursos. En la versin actual no realiza la operacin por grupo de registros sino crea una tabla temporal que actualiza a la original cuando la operacin este terminada, de esta forma es mucho mas rpido

    Indexamiento de los K vecinos mas cercanos (K-Nearest-Neightbor). Indices sobre la distancia para consultas rpidas de ubicacin (espacial) y de textos semejantes (algoritmo KNN).

  • PostgreSQL 9.X

    Mejoras en la definicin de procedimientos almacenados Inclusin y mejoras en el modulo contrib Hstore: en el uso de columnas

    con datos tipo llave-valor Unlogged Tables: Son tablas especiales que mejoran el desempeo, pues

    son mas rpidas al escribir los datos, pero son susceptibles a truncamientos en caso de fallos. Este tipo de tablas estn pensadas para datos efmeros (datos temporales, cache, etc.)

  • PostgreSQL 9.X

    Nuevos tipos de datos Range

    Representan rango de valores, se pueden usar con numeros enteros (normales y grandes), numericos, horas y fechas, se pueden crear rangos propios usando CREATE TYPE

    Ejemplo 1: CREATE TABLE reservaciones (habitacion CHARACTER VARYING NOT NULL, duracion

    TSTZRANGE, EXCLUDE USING gist (duracion WITH &&)); INSERT INTO reservaciones VALUES (101,'[2012-02-01 14:27:00, 2012-02-05 12:00:00]'); select * from test.reservaciones where duracion @> '2012-02-08'::timestamp

    Ejemplo 2: CREATE TYPE floatrange as RANGE (subtype = float8, subtype_diff=float8mi);

    Ejemplo 3: CREATE TABLE sueldos (__gid INTEGER, cargo CHARACTER VARYING, sueldo

    int4range); INSERT INTO sueldos VALUES (1,'practicante','[400,800]'); INSERT INTO sueldos VALUES (2,'practicante2','[500,900]'); INSERT INTO sueldos VALUES (3,'ingeniero','[1500,]'); select * from sueldos select upper(sueldo),lower(sueldo) from sueldos select sueldo @> 900 as ok,__gid FROM sueldos

  • POSTGISPOSTGIS

  • Glosario de Terminos

    EPSG - (European Petrolium Survey Group) Actualmente define la especificacin para una gran cantidad de sistemas de proyeccin espacial. Usado por las comunidades y soluciones de arquitectura abierta. En SRS se usa con el prefijo EPSG y seguido por el cdigo correspondiente

    GeoJSON - (http://geojson.org/) Geograohy Javascript Object Notation. Es un nuevo estndar, incluido por OGC. Combina la estructura de JSON y agrega la descripcin de la geometra

    GEOS - (Geometry Engine Open Source). Es el motor usado por POSTGIS, incluye funciones avanzadas en C++, Es un hijo del proyecto JTS.

    GML - (Geography Markup Language) Definido por OGC, es un formato de almacenamiento y traslado de datos geogrficos, basado en XML, usado como salida por WFS.

    KML - (Keyhole Markup Language). Otro formato basado en XML, incluye formato de estilos, empleado principalmente por Google y posteriormente adoptado como un estndar de transporte de datos por el OGC

    OGC - (Open Geospatial Consortium). Define especificaciones y reglas para los intercambios de dtos geoespaciales entre productos o tecnologas

    SRID (Spatial Reference Identifier). El la clave primaria (generalmente un numero) en un catalogo de proyecciones geograficas. Se usa el termino mucho en bases de datos espaciales basadas en las especificaciones del OGC.

    SRS (ID) (Spatial Reference System). Su concepto es similar al SRID. Define el sistema de proyeccin geografico de lso datos espaciales. Generalmente se ve como EPSG:4326 (WGS 84 long lat), EPSG:32718 (UTM WGS 84 Zona 18 Sur), EPSG:900913 (Web mercator).

    WFS (Web Feature Service).Creado por OGC. Permite trasladar (por Internet) los datos vectoriales y sus atributos.

    WMS (Web Map Service). Creado por OGC. Permite trasladar (por Internet) el mapa como imagen y las ocnsultas respectivas.

  • Concepto basico

    Un Servidor de base de datos esta compuestos principalmente de: Al menos una base de datos Conjunto de tablas Conjunto de funciones Conjunto de reglas Conjunto de tipos

    Una base de datos espacial tiene ademas Tablas complementarias (lista de proyecciones, vistas de tablas con geometras, tablas raster, etc.) Nuevas funciones espaciales (constructores, anlisis, accesorios, etc.) Definicin de nuevas reglas Nuevos tipos (geometry, points, linestrings, etc.) Indexado espacial, basado en el mnimo rectngulo que contiene el elemento.

    Un servidor de base de datos contiene todas las bases de datos y tablas necesarias para un proyecto Bases de datos espacial o geodatabase contiene todo un grupo de tablas organizadas por esquemas La tabla espacial es equivalente a un Layer que contiene elementos (feature collection) o registros El registro esta compuesto por su geometra, las reglas y relaciones , y es definido como un elemento (feature) Cada Elemento tiene una geometra, que esta compuesto por tipo de geometras, vrtices, coordenadas, valores x e

    y, correspondientes a una proyeccin geogrfica El modelo est basado en las especificaciones del OGC y otros estandares para el manejo de 3D y raster

  • Que es unaBase de datos espacial

    Es un sistema administrador de bases de datos que manejan datos existentes en un espacio o geografa sobre la superficie de la tierra.

    Se busca hacer una representacin simplificada o abstraccin del mundo real en capas o tablas de datos y sus relaciones espaciales.

    Ofrece una serie de funciones e indices para realizar consultas o manipular los datos usando SQL.

    Criterios bsicos en una base de datos espacial

    Modelo de datos espaciales: Tipos de datos espaciales (tipo de geometra) y operadores espaciales (relaciones espaciales, topologia, etc.).

    Lenguaje de consultas, de procesamiento y optimizacin espacial para su acceso y representacin.

    Data mining espacial (principio de buscar en grandes volmenes de datos para obtener informacin relevante).

  • Base de datos espacial Otras bases de datos han implementado funcionalidades de base de datos espacial como:

    Oracle RDBMS con Oracle Spatial o Locator PostgreSQL con POSTGIS SQLite con SpataLite

    En menor grado estan emplementadas en: SQLServer 2008 2012 IBM DB2 con Spatial Extender Teradata IBM Informix con Spatial dataBlade

    Mysql aun no es una base de datos espacial completa, porque : no considera algunos tipos e indices Los tipos son definidos en tablas MyISAM solamente. Las funciones solo operan con la caja (bounding box) Esta en desarrollo

    ArcSDE no es una base de datos espacial Es un middleware espacial. Es decir se pone encima de una base de datos e interpreta los

    requerimientos, Es independiente de la base de datos y manejan transacciones, versionamiento o validaciones con reglas propias y no nativas a la base de datos com Oracle, PostgreSQL.

    Implica administrar la base de datos y el ArcSDE Es totalmente dependiente y potenciado con los productos de la linea de Esri

  • Que es PostgreSQL - PostgisQue es PostgreSQL - Postgis Extensin al PostgreSQL, permite que el servidor de BD sea

    utilizado como una BD espacial backend para GIS. Se integra al mismo nivel que todos los tipos y funciones

    existentes permitiendo una administracin, uso de recursos, procesamiento y almacenamiento altamente eficiente.

    Utiliza ndices espaciales GIST para acelerar el acceso y consulta de datos

    Incluye funciones de construccin, edicin y anlisis de datos espaciales

    PostGIS es para PostgreSQL lo que Oracle Spatial es para Oracle.

    Se puede almacenar Puntos, multipuntos, linea, multilinea, poligonos, multipoligonos, y colleccion de geometras mediante las especificaciones SFS (Simple Feature Specification para SQL) del OGC.

  • POSTGIS Garantiza transacciones ACID

    Atomicidad (Atomicity). Asegura que la transaccion se realizo o no, ante un fallo el sistema no queda a medias, si una parte de la transaccin falla toda la transaccin falla, el estado de la base de datos no se modifica.

    Consistencia (Consistency). Asegura que solo se empieza lo que se puede acabar, evitando ejecutar aquellas operaciones que no vana romper las reglas y directrices de la integridad de la base de datos.

    Aislamiento (Isolation). Asegura que asegura que una operacin no puede afectar a otras, de ese modo la realizacion de dos transacciones sobre la misma informacion sean independientes y no generen ningun tipo de error.

    Durabilidad (Durability). Asegura que una vez que la transaccin se ha confirmado Seguir siendo as, incluso en caso de cada de energa, accidentes o errores.

    Alto rendimiento Recuperacin de cadas Copias de seguridad Replicacin Soporte SQL

  • PostgisPostgisArquitecturaArquitectura

    Liblwgeom

    Proj4

    GEOS

    PostGisExtension

    POSTGRESQL

    LibXML2

  • PostgisPostgisArquitecturaArquitectura

    POSTGRESQL. Motor de la base de datos Postgis. Extension espacial, funciones y tipos.

    GEOS. Libreria en C++ para la implementacion de los algoritmos de funciones espaciales y topologia

    PROJ4. Para la implementacion de funciones de proyecciones espaciales.

    LIBXml. Manejo de formatos XML (GML, KML; SVG, etc,)

    GDAL. Libreria en C++ para el acceso y procesamiento de Raster (en la version 2.0)

  • POSTGIS

    Agrega tipos de datos Para la definicin en la estructura de la tabla.

    Indexado espacial Para organizar y acelerar las consultas espaciales

    por sus coordenadas Funciones espaciales

    Para realizar consultas procesando o alterando la geometria

    Definir reglas o Eventos Crear nuevas funciones

  • Tipo de informacin

    Vectorial Raster Datos espaciales

  • Tipo de Objetos Geogrficos(WKB y WKT)

    OGC define dos estndares para expresar objetos espaciales: WKT Well-Know Text WKB Well-Know Binary

    Ambos incluyen informacin del tipo de objeto y el sistema de proyeccin de coordenadas del mismo.

    Estos objetos son: POINT LINESTRING POLYGON MULTIPOINT MULTILINESTRING MULTIPOLYGON GEOMETRYCOLLECTION

  • Tipo de Objetos Geogrficos(WKB y WKT)

    GeometriaSpatial

    ReferenceId (SRID)

    Point Curve Surface Geometry Collection

    LineString Polygon

    MultipointMulticurveMultisurface

    Multipolygon

    Geometry

    Multilinestring

  • Tipo de Objetos Geogrficos(EWKB y EWKT)

    Las especificaciones del OGC solo soportan geometras 2D, y el SRID no esta incluido dentro de su formato de salida. Postgis extiende el formato como un grupo extendido de los objetos geogrficos del OGC, esto podra variar en el futuro, especialmente si OGC define formatos 3D.

    EWKT y EWKB agrega coordenadas tipo 3dm, 3dz, 4d, ademas de incluir la informacin del SRID.

    POINT (0 0 0) XYZ SRID=4326;POINT(-71 -12) XY con SRID POINT(0 0 0 0) --XYZM POLYGON(((0 0 0, 4 4 0, 0 4 0, 0 0 0),(1 1 0, 2 1 0, 2 2 0, 1 2 0, 1 1 0)),((-

    1 -1 0, -1 -2 0, -2 -2 0, -2 -1 0, -1 -1 0))) -- XYZ

  • Tipos de funciones espaciales

    Las funciones espaciales se agrupan en: Constructores de geometras (crear con coordenadas o desde un WKT,

    GML, KML). Editores (remover, cambiar vrtices, snap, transformar, afinar la coordenada,

    modificar la geometra, etc). Accesorios (manejo de vrtices, dimensiones,geometras,SRID, x, y, etc.). Salidas (binario, GML, KML, SVG, etc.). Relaciones espaciales y dimensiones (centroide, punto mas cercano, rea,

    permetro, contener, traslapar, cruzar, etc). Operadores (igual, a la izquierda, semejantes, a la derecha, etc.). Procesamiento de geometras (coleccionar, explotar, buffer, interseccin,

    nodos, poligonizar, remover puntos repetidos, etc.). Referenciando a la linea (interpolacin en una linea, localizar, cortar,

    extender, segmento de linea, etc.) Transacciones grandes (autorizacin, verificacin, bloqueo, etc.).

  • Relaciones espaciales

  • Relaciones espaciales

  • Formato de la geometra WKT (Well know text) y Formato de la geometra WKT (Well know text) y WKB (Well know Binary)WKB (Well know Binary)

    Basada en WKT segn las especificaciones del OGCBasada en WKT segn las especificaciones del OGC POINT(POINT(x1 y1x1 y1)) LINESTRING(LINESTRING(x1 y1, x2 y2, x3 y3,x1 y1, x2 y2, x3 y3, .. ..)) POLYGON(POLYGON((x1 y1, x2 y2, x3 y3, ..),(x1 y1, x2 y2, x3 y3, ..)(x1 y1, x2 y2, x3 y3, ..),(x1 y1, x2 y2, x3 y3, ..))) MULTIPOINT(MULTIPOINT(x1 y1, x2 y2, x3 y3, ..x1 y1, x2 y2, x3 y3, ..)) MULTILINESTRING(MULTILINESTRING((x1 y1, x2 y2, x3 y3, ..),(x1 y1, x2 y2, x3 (x1 y1, x2 y2, x3 y3, ..),(x1 y1, x2 y2, x3

    y3, ..)y3, ..))) LINEARRING(LINEARRING(x1 y1, x2 y2, x3 y3,x1 y1, x2 y2, x3 y3, ., ., x1 y1x1 y1) (depreciado)) (depreciado) MULTIPOLYGON(MULTIPOLYGON(((x1 y1, x2 y2, x3 y3, ..),(x1 y1, x2 y2, x3 ((x1 y1, x2 y2, x3 y3, ..),(x1 y1, x2 y2, x3

    y3, ..)),((x1 y1, x2 y2, x3 y3, ..))y3, ..)),((x1 y1, x2 y2, x3 y3, ..)))) GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(X1 Y1),LINESTRING((x1 y1, POINT(X1 Y1),LINESTRING((x1 y1,

    x2 y2, x3 y3, ..), x2 y2, x3 y3, ..), ))

  • Formato de la geometra WKT y WKBFormato de la geometra WKT y WKB

    Ejemplo WKT:Ejemplo WKT: POINT(POINT(00 00)) LINESTRING(LINESTRING(0 0,1 1,1 20 0,1 1,1 2)) POLYGON(POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)(0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))) MULTIPOINT(MULTIPOINT(0 0, 1 120 0, 1 12)) MULTILINESTRING(MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)(0 0,1 1,1 2),(2 3,3 2,5 4))) LINEARRING(LINEARRING(x1 y1, x2 y2, x3 y3,x1 y1, x2 y2, x3 y3, ., ., x1 y1x1 y1)) MULTIPOLYGON(MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)),((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)),((-1 -1,-1 -2,-2 -2,-((-1 -1,-1 -2,-2 -2,-

    2 -1,-1 -12 -1,-1 -1)))))) GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4)POINT(2 3),LINESTRING(2 3,3 4)))

    Ejemplo WKB:Ejemplo WKB: 0101000000000000000000F03F000000000000F03F0101000000000000000000F03F000000000000F03F 0103000020CE7F00000100000005000000CA9B081691FC1041D77D4D830103000020CE7F00000100000005000000CA9B081691FC1041D77D4D83

    1C866041AAD01079A4FC10416F573DA51886604197159C798CFC104131C866041AAD01079A4FC10416F573DA51886604197159C798CFC104135613C89188660414A8A83F679FC1041A7B94B671C866041CA9B0816915613C89188660414A8A83F679FC1041A7B94B671C866041CA9B081691FC1041D77D4D831C866041FC1041D77D4D831C866041

  • VALIDEZ DE LOS OBJETOS ESPACIALES

    LINESTRING Validos (a) y (c) Invlidos (b) y (d)MULTILINESTRING Vlidos (e) y (f) Invlidos (g)POLYGON Vlidos (h) y (i)MULTIPOLYGON Vlido (j) y (m)

    a

    c d

    be gf

    h i j

    k l m

  • POSTGIS

    A partir de la version 1.5 se utiliza un tipo de datos llamado GEOGRAPHY

    El tipo Geography siempre tiene un SRID igual a 4326

    Existen 20 funciones espaciales orientadas especialmente para este tipo de datos.

    Se puede convertir hacia o desde un tipo GEOMETRY (debe estar definido con SRID 4326).

  • Instalacin de Postgis

    Instalar PostgreSQL Especificar el directorio donde los datos se almacenaran (es posible

    cambiarlo usando TableSpace) Especificar el Puerto, por default: 5432 Especificar los permisos de conexin de las Ips permitidas Indicar la clave del superusuario

    Instalar Postgis A- Usando el Applicacion Stack Builder B- desde una directorio de descarga previa

    Se indica la clave del superusuario para la instalacin en el servidor No es necesario crear una base de datos previa

    Se pueden instalar la versin 1.5.x y la versin 2.0 (en bases de datos distintas pero en un mismo servidor. A partir de postgre 9.2 solo esta disponible la versin 2.0

  • POSTGIS

    Todas las operaciones en la base de datos, se pueden realizar en modo comando (escribiendo sentencias SQL) o usando PGADMIN III.

    Adicionalmente la creacin de una tabla espacial se puede realizar automaticamente desde GISMAP, As mismo las sentencias en SQL pueden ser realizadas (SI retorna una geometra y solo una, el resultado sera mapeado).

  • PostgreSQL - PostgisPostgreSQL - Postgis Creacin de una Base de datos espacialCreacin de una Base de datos espacial

    Crear la tablaCrear la tabla Asignar una GEOMETRIA Y REGISTRARLOAsignar una GEOMETRIA Y REGISTRARLO Indexar espacialmente (GIST)Indexar espacialmente (GIST) Se recomienda usar una Llave (Primary Key).Se recomienda usar una Llave (Primary Key).

    Tablas del sistemaTablas del sistema SPATIAL_REF_SYSSPATIAL_REF_SYS

    Descripcin del sistema de coordenadas espacial que se pueden usarDescripcin del sistema de coordenadas espacial que se pueden usar Identifica por un Identifica por un SRIDSRID Utiliza EPSG como estndar de referencias y codificacin de las proyeccionesUtiliza EPSG como estndar de referencias y codificacin de las proyecciones Texto de la proyeccin es indicado en formato de texto WKT (OGC) y formato PROJ.4Texto de la proyeccin es indicado en formato de texto WKT (OGC) y formato PROJ.4

    GEOMETRY_COLUMNS (es una vista en la versin 2.0)GEOMETRY_COLUMNS (es una vista en la versin 2.0) Registra las tablas espacialesRegistra las tablas espaciales Se especifica el SRID de la tabla, si el SRID es -1 o 0 usa un sistema de coordenadas Se especifica el SRID de la tabla, si el SRID es -1 o 0 usa un sistema de coordenadas

    espacial libre para el almacenamiento de datos, pero no permite ajustes ni cambios o espacial libre para el almacenamiento de datos, pero no permite ajustes ni cambios o correcciones por proyeccin geogrficacorrecciones por proyeccin geogrfica

    Se especifica si la data ser 2D o 3DSe especifica si la data ser 2D o 3D En el tipo de datos se puede especificar POINT, LINESTRING, POLYGON,En el tipo de datos se puede especificar POINT, LINESTRING, POLYGON, MULTYPOINT, GEOMETRYCOLLECTION, o GEOMETRY si es tipo variable MULTYPOINT, GEOMETRYCOLLECTION, o GEOMETRY si es tipo variable

    (recomendado, es el que usa GisMap).(recomendado, es el que usa GisMap).

  • PostgreSQL - PostgisPostgreSQL - Postgis Vistas

    Geography Columns. Es una vista parecida a Geometry Columns, con la diferencia que se almacenan solamente las tablas espaciales con tipo Geography (latitud longitud)

    Desde la version 2.0 se adicionaron: Tipos

    Raster Funciones para carga, salida y procesamiento de imagenes.

    Vistas Raster_Columns Raster_Overviews

    Scheme Topology

    Tabla layer Tabla topology

  • PostgreSQL - PostgisPostgreSQL - Postgis Creacin de tabla espacial coordenadas cartesianas Creacin de tabla espacial coordenadas cartesianas

    (default)(default) CREATE TABLE CREATE TABLE parques(parques(

    parque_id int4,parque_id int4,parque_nombre varchar(128),parque_nombre varchar(128),parque_fecha date);parque_fecha date);

    SELECT AddGeometryColumn(SELECT AddGeometryColumn( 'public', 'parques', 'public', 'parques', 'geometria', -1, 'GEOMETRY' , 2 ) ;'geometria', -1, 'GEOMETRY' , 2 ) ;

    EN la version 2.0 se puede, ademas, realizar EN la version 2.0 se puede, ademas, realizar directamente mediante:directamente mediante:

    Creando una tablaCreando una tabla CREATE TABLECREATE TABLE parques(parque_id int4,parque_nombre varchar(128),parque_fecha parques(parque_id int4,parque_nombre varchar(128),parque_fecha

    date),date),geometria geometry(Geometry,32718)geometria geometry(Geometry,32718);; Modificando una tablaModificando una tabla ALTER TABLE ALTER TABLE tabla tabla ADD COLUMNADD COLUMN geometria geometria geometry(Point,4326)geometry(Point,4326);; ALTER TABLEALTER TABLE tabla tabla ADD COLUMNADD COLUMN geometria geometria geometry(Geometry,32718)geometry(Geometry,32718);;

  • PostgreSQL - PostgisPostgreSQL - Postgis Creacin de tabla espacialCreacin de tabla espacial

    CREATE TABLECREATE TABLE calles( calles(__gid serial NOT NULL;__gid serial NOT NULL;calle_id int4,calle_id int4,calle_nombre varchar(128),calle_nombre varchar(128),CONSTRAINS calles_pkey PRIMARY KEY (__gid));CONSTRAINS calles_pkey PRIMARY KEY (__gid));

    SELECT SELECT AddGeometryColumnAddGeometryColumn( 'public', 'calles', ( 'public', 'calles', 'geometria','geometria',3279832798, 'GEOMETRY' , 3 ) ;, 'GEOMETRY' , 3 ) ;

    Constraint Constraint (depreciado en la versin 2.0)(depreciado en la versin 2.0) Para coordenadas 2D o 3D: Para coordenadas 2D o 3D:

    CONSTRAINT enforce_dims_geometria CHECK (st_ndims(geometria) = 2);CONSTRAINT enforce_dims_geometria CHECK (st_ndims(geometria) = 2);

    Para tipo de proyeccin geogrfica: Para tipo de proyeccin geogrfica: CONSTRAINT enforce_srid_geometria CHECK (st_srid(geometria) = (32798));CONSTRAINT enforce_srid_geometria CHECK (st_srid(geometria) = (32798));

    Opcional para un tipo de geometria en particular: Opcional para un tipo de geometria en particular: CONSTRAINT enforce_geotype_line CHECK CONSTRAINT enforce_geotype_line CHECK (geometrytype(line)='LINESTRING'::text or line is NULL);(geometrytype(line)='LINESTRING'::text or line is NULL);

  • PostgreSQL - PostgisPostgreSQL - Postgis Insertar Datos espacialesInsertar Datos espaciales

    INSERT INTO calles (calle_id, INSERT INTO calles (calle_id, geometria, geometria, calle_nombrecalle_nombre ) VALUES (1, ) VALUES (1, ST_GeometryFromText ('LINESTRING(191232 243118,191108 ST_GeometryFromText ('LINESTRING(191232 243118,191108 243242)',32718)243242)',32718),28 de Julio');,28 de Julio');

    INSERT INTO calles (calle_id, INSERT INTO calles (calle_id, geometria, geometria, calle_nombrecalle_nombre ) VALUES (1, ) VALUES (1, GeomFromText ('LINESTRING(189141 244158,189265 GeomFromText ('LINESTRING(189141 244158,189265 244817)' )244817)' ),'Miraflores');,'Miraflores');

    INSERT INTO calles (calle_id, INSERT INTO calles (calle_id, geometria, geometria, calle_nombrecalle_nombre ) VALUES (1, ) VALUES (1, GeomFromText ('LINESTRING(192783 228138,192612 229814)', GeomFromText ('LINESTRING(192783 228138,192612 229814)', 32718)32718),'Larco');,'Larco');

    INSERT INTO calles (calle_id, INSERT INTO calles (calle_id, geometria, geometria, calle_nombrecalle_nombre ) VALUES (1, ) VALUES (1, ST_GeometryFromText ('LINESTRING(189412 252431,189631 ST_GeometryFromText ('LINESTRING(189412 252431,189631 259122)', 32718)259122)', 32718),'Pardo');,'Pardo');

    INSERT INTO calles(calle_id, INSERT INTO calles(calle_id, geometria, geometria, calle_nombrecalle_nombre ) VALUES (1, ) VALUES (1, ST_GeomFromText ('LINESTRING(190131 224148,190871 ST_GeomFromText ('LINESTRING(190131 224148,190871 228134)',32718)228134)',32718),'Ejemplo');,'Ejemplo');

  • PostgreSQL - PostgisPostgreSQL - PostgisConsulta de datos espacialesConsulta de datos espaciales La geometria se almacena en modo codificado, una La geometria se almacena en modo codificado, una

    consulta simple de la tabla nos retorna la geometria consulta simple de la tabla nos retorna la geometria del modo:del modo:

    Select calle_id, geometria from calles;Select calle_id, geometria from calles; '15013802006001';'0103000020CE7F0000010000008F000000B957D9D9A6BA1241EF57020'15013802006001';'0103000020CE7F0000010000008F000000B957D9D9A6BA1241EF57020

    F2675604106C1D6CBA7BA12415CF1654526756041643BDF4FA8BA1241295C8F62267560F2675604106C1D6CBA7BA12415CF1654526756041643BDF4FA8BA1241295C8F6226756041C520B0F2AABA12416DE7FBB526756041765140EBACBA1241640476E12675604120A6741C520B0F2AABA12416DE7FBB526756041765140EBACBA1241640476E12675604120A67ACFADBA12413DD60AF52675604183DEB810B2BA1241BB2EB53C27756041...'ACFADBA12413DD60AF52675604183DEB810B2BA1241BB2EB53C27756041...'

    Se utiliza la funcin st_astext() para visualizar las Se utiliza la funcin st_astext() para visualizar las geometrias en formato WKTgeometrias en formato WKT

    Select calle_id,st_astext(geometria) from calles;Select calle_id,st_astext(geometria) from calles; '15013802006001';'POLYGON((306857.712743159 8628528.46903607,306857.949061409 '15013802006001';'POLYGON((306857.712743159 8628528.46903607,306857.949061409

    8628530.16869419,306858.078 8628531.08,306858.737 8628533.687,....))'8628530.16869419,306858.078 8628531.08,306858.737 8628533.687,....))'

    La consulta de datos se puede realizar usando funciones La consulta de datos se puede realizar usando funciones geograficas de comparacion y anlisis entre los objetos geograficas de comparacion y anlisis entre los objetos (registros) y su geometria.(registros) y su geometria.

  • PostgreSQL - PostgisPostgreSQL - Postgis ConsultaConsulta

    SELECT SELECT lista de columnaslista de columnas from from tablatabla where where condicionescondiciones

    En la En la lista de las columnaslista de las columnas se pueden incluir funciones de se pueden incluir funciones de comparacion para obtener un valor verdadero o falso, o comparacion para obtener un valor verdadero o falso, o funciones de proceso geografico que retornen geometras.funciones de proceso geografico que retornen geometras.

    En las En las condicionescondiciones se comparan geometrias para obtener se comparan geometrias para obtener valores derdaderos o falsos.valores derdaderos o falsos.

    Ejemplo: Ejemplo: SELECTSELECT id, nombre, id, nombre, AsTextAsText(geometria) AS (geometria) AS geometria, geometria, st_areast_area(geometria) (geometria) FROMFROM gtest gtest wherewhere st_areast_area(geometria)>20000;(geometria)>20000;

  • PostgreSQL - PostgisPostgreSQL - PostgisInterseccin entre geometras y comparacion de contener a Interseccin entre geometras y comparacion de contener a

    otra geometriaotra geometriaSELECT cod_catastral, geometria FROM lotes WHERE geometria && SELECT cod_catastral, geometria FROM lotes WHERE geometria &&

    st_GeometryFromText('st_GeometryFromText('POLYGON (( 279104.09095488646 POLYGON (( 279104.09095488646 8659250.419186546, 278546.19532917906 8659122.148003528, 8659250.419186546, 278546.19532917906 8659122.148003528, 278984.2218144232 8658903.134760905, 279157.8640272438 278984.2218144232 8658903.134760905, 279157.8640272438 8659039.24785031, 279104.09095488646 8659250.419186546 ))8659039.24785031, 279104.09095488646 8659250.419186546 )) ') ') AND st_contains(st_GeometryFromText('AND st_contains(st_GeometryFromText('POLYGON (( 279104.09095488646 POLYGON (( 279104.09095488646 8659250.419186546, 278546.19532917906 8659122.148003528, 8659250.419186546, 278546.19532917906 8659122.148003528, 278984.2218144232 8658903.134760905, 279157.8640272438 278984.2218144232 8658903.134760905, 279157.8640272438 8659039.24785031, 279104.090954886468659039.24785031, 279104.09095488646

    8659250.419186546 ))8659250.419186546 ))'),geometria );'),geometria ); Consulta de datos dentro de un corredor o cercanaConsulta de datos dentro de un corredor o cercana

    SELECT * FROM vias WHERE ST_Distance(GeometryFromText('POINT ( SELECT * FROM vias WHERE ST_Distance(GeometryFromText('POINT ( 279104.09095488646 8659250.419186546 )',-1),geometria)

  • PostgreSQL - PostgisPostgreSQL - PostgisInterseccin entre geometras y comparacion de contener a Interseccin entre geometras y comparacion de contener a

    otra geometriaotra geometriaSELECT cod_catastral, geometria FROM lotes WHERE geometria && SELECT cod_catastral, geometria FROM lotes WHERE geometria &&

    st_GeometryFromText('st_GeometryFromText('POLYGON (( 279104.09095488646 POLYGON (( 279104.09095488646 8659250.419186546, 278546.19532917906 8659122.148003528, 8659250.419186546, 278546.19532917906 8659122.148003528, 278984.2218144232 8658903.134760905, 279157.8640272438 278984.2218144232 8658903.134760905, 279157.8640272438 8659039.24785031, 279104.09095488646 8659250.419186546 ))8659039.24785031, 279104.09095488646 8659250.419186546 )) ') ') AND st_contains(st_GeometryFromText('AND st_contains(st_GeometryFromText('POLYGON (( 279104.09095488646 POLYGON (( 279104.09095488646 8659250.419186546, 278546.19532917906 8659122.148003528, 8659250.419186546, 278546.19532917906 8659122.148003528, 278984.2218144232 8658903.134760905, 279157.8640272438 278984.2218144232 8658903.134760905, 279157.8640272438 8659039.24785031, 279104.090954886468659039.24785031, 279104.09095488646

    8659250.419186546 ))8659250.419186546 ))'),geometria );'),geometria ); Consulta de datos dentro de un corredor o cercanaConsulta de datos dentro de un corredor o cercana

    SELECT * FROM vias WHERE ST_Distance(GeometryFromText('POINT ( SELECT * FROM vias WHERE ST_Distance(GeometryFromText('POINT ( 279104.09095488646 8659250.419186546 )',-1),geometria)

  • Accesando componentes de la Accesando componentes de la geometriageometria

    Multi-geometria ST_NumGeometries(geometra) - Retorna un nmero ST_GeometryN(geometra,posicin) Retorna una geometra simple

    Poligono ST_NumInteriorRings(geometra) - Retorna un nmero ST_NRings(geometra) - Retorna un nmero ST_ExteriorRing(geometra) - Retorna un linestring ST_InteriorRingN(geometra, posicin) - Retorna un linestring

  • Accesando componentes de la Accesando componentes de la geometriageometria

    Lineas ST_NumPoints(geometra) - Retorna un nmero ST_NPoints(geometra) Retorna un nmero ST_PointN(geometra, posicin) Retorna un punto

    Punto ST_X(geometra) ST_Y(geometra) ST_Z(geometra) ST_M(geometra)

  • EjemplosEjemplos Cuantos colegios estn a 5000 metros de un Casino conociendo sus Cuantos colegios estn a 5000 metros de un Casino conociendo sus

    coordenadascoordenadas SELECTSELECT geometria, colegio geometria, colegio FROMFROM colegios colegios WHEREWHERE

    ST_DistanceST_Distance(geometria, ST_GeomFromText('POINT(284807.475773773 (geometria, ST_GeomFromText('POINT(284807.475773773 8659201.37565484)',0)) < 50008659201.37565484)',0)) < 5000

    Es una bsqueda directa, no se usan ndices espaciales, proceso lento para Es una bsqueda directa, no se usan ndices espaciales, proceso lento para grandes volmenes de datosgrandes volmenes de datos

    SELECTSELECT geometria, colegio geometria, colegio FROMFROM colegios colegios WHEREWHERE geometria && geometria && ST_ExpandST_Expand(Geometryfromtext('POINT ( 284807.475773773 (Geometryfromtext('POINT ( 284807.475773773 8659201.37565484 )',0),5000) 8659201.37565484 )',0),5000) ANDAND ST_DistanceST_Distance(geometria, (geometria, ST_geomfromtext('POINT ( 284807.475773773 8659201.37565484 )',0)) < ST_geomfromtext('POINT ( 284807.475773773 8659201.37565484 )',0)) < 50005000

    Uso de indexado espacial para identificar reas que restringen el universo de la Uso de indexado espacial para identificar reas que restringen el universo de la bsquedabsqueda

    SELECTSELECT geometria, colegio geometria, colegio FROMFROM colegios colegios WHEREWHERE ST_DWITHIN(ST_DWITHIN(geometria, geometryfromtext('POINT ( 284807.475773773 geometria, geometryfromtext('POINT ( 284807.475773773 8659201.37565484 )',0), 5000)8659201.37565484 )',0), 5000)

    Uso de una funcin postgis que emplea el indexado espacial para identificar Uso de una funcin postgis que emplea el indexado espacial para identificar reas que restringen el universo de la bsquedareas que restringen el universo de la bsqueda

  • PostgreSQL - PostgisPostgreSQL - Postgis Unin de tablasUnin de tablas

    La unin (JOIN) es necesario cuando se necesita asociar datos La unin (JOIN) es necesario cuando se necesita asociar datos tabulares a datos geogrficos.tabulares a datos geogrficos.

    El LEFT JOIN es necesario si se desea retener TODOS los datos El LEFT JOIN es necesario si se desea retener TODOS los datos espaciales y agregarles datos tabulares en los casos que se puedan.espaciales y agregarles datos tabulares en los casos que se puedan.

    Ejem. Ejem. lote (con la columna codigo" y geometra) lote (con la columna codigo" y geometra) propietarios (con la columna codigo" e informacion del propietario del propietarios (con la columna codigo" e informacion del propietario del

    prediopredio Se crea una tabla:Se crea una tabla:

    CREATECREATE TABLETABLE loteunion (codigo integer, propietario text); loteunion (codigo integer, propietario text); SELECTSELECT AddGeometryColumn( public', loteunion', geometria', 0, AddGeometryColumn( public', loteunion', geometria', 0,

    GEOMETRY' , 2 ) ;GEOMETRY' , 2 ) ; INSERTINSERT INTOINTO loteunion loteunion SELECTSELECT p.codigo as codigo, o.propietario as p.codigo as codigo, o.propietario as

    propietario, p.geometria as geometria propietario, p.geometria as geometria FROMFROM lote p lote p LEFTLEFT JOINJOIN propietarios o propietarios o ONON o.codigo = p.codigo; o.codigo = p.codigo;

  • PostgreSQL - PostgisPostgreSQL - Postgis Traslape de tablasTraslape de tablas

    Algunos casos se requiere separar o partir elementos de Algunos casos se requiere separar o partir elementos de una tabla con otra manteniendo los datos una tabla con otra manteniendo los datos

    Ejem.Ejem. Se parte de zonificaciones o sectorizacion para encuestas y se Se parte de zonificaciones o sectorizacion para encuestas y se

    tienen manzanas ademas las zonas pasan entre manzanas, se tienen manzanas ademas las zonas pasan entre manzanas, se puede iobtener los poligonos de las manzanas aque estan dentro y puede iobtener los poligonos de las manzanas aque estan dentro y ademas partir aquellas que se requieran, manteniendo su data y ademas partir aquellas que se requieran, manteniendo su data y calculando posteriormente el area necesaria.calculando posteriormente el area necesaria.

    CREATECREATE TABLETABLE resultados resultados ASAS SELECTSELECT ST_IntersectionST_Intersection(f.geometria, c.geometria) AS geometria, (f.geometria, c.geometria) AS geometria, f.cod_catastral, c.zona FROM lotes f, zonas c f.cod_catastral, c.zona FROM lotes f, zonas c WHEREWHERE f.geometria && c.geometria AND f.geometria && c.geometria AND ST_IntersectsST_Intersects(f.geometria, (f.geometria, c.geometria)c.geometria)

  • PostgreSQL - PostgisPostgreSQL - Postgis Operadores espacialesOperadores espaciales

    &&&& Indica cuado dos geometras se traslapanIndica cuado dos geometras se traslapan ~=~= Indican si dos geometras son idnticasIndican si dos geometras son idnticas = = Indica cuando dos geometra son igualesIndica cuando dos geometra son iguales Ejem.Ejem.

    SELECTSELECT ID,NOMBRE ID,NOMBRE FROMFROM calles calles WHEREWHERE GEOMETRY~=GEOMETRY~=ST_GeomFromTextST_GeomFromText('LINESTRING(191232 ('LINESTRING(191232 243118,191108 243242)',0);243118,191108 243242)',0);

    Los operadores espaciales trabajan sobre el bounding box (caja Los operadores espaciales trabajan sobre el bounding box (caja envolvente) de un objeto, generadas por el indexado espacial Gist.envolvente) de un objeto, generadas por el indexado espacial Gist.

  • PostgreSQL - PostgisPostgreSQL - Postgis El indexado espacial no se utiliza siempre, ni de forma automtica en una

    comparacin u operadocin espacial. Debido a la naturaleza rectangular de los ndices R-Tree (que es base del Gist del postgis), los ndices espaciales slo son buenos para las comparaciones de caja (bounding box). Por ello, casi todas las bases de datos espaciales implementan la seleccin espacial en dos fases:

    Bsqueda indexada por caja, sobre toda la tabla . Bsqueda espacial de elemento a elemento, teniendo en cuenta toda su geometra,

    pero solamente aplicado al subconjunto devuelto por la primera seleccin. En Postgis la primera fase de la busqueda la realiza el operador &&. Al igual que el signo =

    significa igual a, el smbolo && significa traslapan las cajas.

    La gran mayora de comandos de PostGIS utilizan por defecto el operador &&, por ejemplo ST_Intersects o ST_DWithin.

    Existe para cada una de estas funciones, la misma versin que no utiliza la indexacin espacial: son las que empiezan con _ (_ST_Intersects (), etc.). Por ejemplo, la definicin de la funcin ST_Intersects () es realmente una funcin de SQL que reescrita la consulta en trminos de una operacin indexada (&&) y una funcin no indexada.

  • PostgreSQL - PostgisPostgreSQL - PostgisPruebas con sentencias indexadas y sin usar indice Sin usar indices

    explain analyse select st_intersection(l.geometria,r.geometria) from lotes l, retiros r where _st_intersects(l.geometria,r.geometria)

    Usando indices con un operador espacial explain analyse select st_intersection(l.geometria,r.geometria) from

    lotes l, retiros r where l.geometria && r.geometria and _st_intersects(l.geometria,r.geometria)

    Mas eficiente explain analyse select st_intersection(l.geometria,r.geometria) from

    lotes l, retiros r where st_intersects(l.geometria,r.geometria)

  • Importancia del SRIDImportancia del SRID Es un cdigo que sirve para especificar en la tabla y a sus registros, en que proyecciones

    geogrfica se encuentran almacenadas. Estas proyecciones geogrficas estn definidas en la tabla spatial_ref_sys ,

    Si no se especifica un SRID, se toma por default -1. EL SRID se indica al momento de crear la geometra y mediante las funciones correspondientes al registrar la tabla en geometry_columns

    Obtener un SRID con valor 0 o -1

    SELECT srid(st_geomfromtext('POINT ( 278858.19117608573 8659133.910863105 )'))

    Obrtener un SRID con valor 32718

    SELECT srid(st_geomfromtext('POINT ( 278858.19117608573 8659133.910863105 )',32718))

    En Gismap, si se crea una capa, y se graba al postgis, se asume un srid igual a -1 o 0, pero se puede asignar el srid antes de guardarlo para su correcto registro y definicin. Cuando se lee una tabla, se usa el srid especificado en postgis.

    En Postgis es posible corregir una asignacin errada o asignar a una tabla su correspondiente SRID

    Si se usa un SRID diferente a -1 o 0, se puede usar ST_TRANSFORM para cambiar la proyeccin geogrfica por ejemplo de lat/lon a wgs84 utm 18 sur

  • PostgreSQL - PostgisPostgreSQL - Postgis Para visualizar los datos espaciales, se utiliza Gismap

    profesional. Cargando la tabla completa, seleccionando como formato

    POSTGIS Ejecutando sentencias SQL, En el men capa, seleccionar

    consulta BdeSQL En el dialogo:

    Seleccionando el tipo de base de datos (postgrsql) Indicando la conexion url: jdbc:postgresql://ip:5432/dbname Indicando el usuario y la clave Escribiendo la sentencia SQL, pueden retornar multiples

    columasn, pero debe haber solamente una geometra, si el resultado del SQL no tiene geometra, se asume en las coordenadas 1,1 como referencia.

  • Postgis - FuncionesPostgis - Funciones Tipos

    Box2d Se usa para representarla caja que encierra a una geometra o grupo de

    geometras Box3d

    Igual que el anterior pero en 3 dimensiones. Geometry_dump

    Un tipo de dato espacial con dos campos: geom y path, usado generalmente por la funcion ST_Dump(geometria) para geometrias complejas (multis, tin, compundcurve, polyhedral, etc.)

    Geometry Un tipo de datos con coordenadas planas

    Geography Un tipo de datos con proyeccin elipsoidal, usado generalmente con

    coordenadas en proyeccin Lat / Lon.

  • Postgis - FuncionesPostgis - Funciones Administrativas

    AddGeometryColumn Agrega una columna geometria una tabla existente.

    AddGeometryColumn(varchar table_name, varchar column_name, integer srid, varchar type, integer dimension);

    AddGeometryColumn(varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension);

    AddGeometryColumn(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension);

    En la version 2.0 es equivalente a usar: ALTER TABLE tabla ADD COLUMN geometria geometry(Point,4326); ALTER TABLE tabla ADD COLUMN geometria geometry(Geometry,32718);

    DropGeometryColumn Remueve una columna geometria de una tabla espacial.

    DropGeometryColumn(varchar table_name, varchar column_name); DropGeometryColumn(varchar schema_name, varchar table_name, varchar

    column_name); DropGeometryColumn(varchar catalog_name, varchar schema_name, varchar

    table_name, varchar column_name); En la version 2.0 es equivalente a usar ALTER TABLE o desde el pgadmin III

  • Postgis - FuncionesPostgis - Funciones Administrativas

    DropGeometryTable Elimina una tabla y sus referencias en la columna geometria. DropGeometryTable(varchar table_name); DropGeometryTable(varchar schema_name, varchar table_name); DropGeometryTable(varchar catalog_name, varchar schema_name, varchar

    table_name); En la version 2.0 es equivalente a usar DROP TABLE directamente, o eliminar la tabla

    con el PGAdmin III.

  • Postgis - FuncionesPostgis - Funciones Administrativas

    PostGIS_Full_Version Nos muestra la versin del Postgis y sus libreras

    SELECT Postgis_Full_Version(); PostGIS_GEOS_Version PostGIS_LibXML_Version PostGIS_Lib_Build_Date PostGIS_Lib_Version PostGIS_PROJ_Version Postgis_Version

    Muestra la versin de Postgis y si usa las libreras Geos, Porj4

  • Postgis - FuncionesPostgis - Funciones Administrativas

    Populate_Geometry_Columns Asegura que la columna geometra esta correctamente definida con los

    constrains espaciales correspondientes y esta registrado en la tabla geometry_columns.

    Ejm: select Populate_Geometry_Columns() select Populate_Geometry_Columns('lotes'::regclass)

    Probe_Geometry_Columns (depreciado en la version 2.0) Scans todas las tablas con PostGIS geometry constraints y los agrega a la

    tabla geometry_columns si no estn registrados (las vistas deben registrarse manualmente).

    UpdateGeometrySRID Actualiza el SRID de todos los elementos en una columna geometra,

    actualizando sus contrains y referencias.

  • Postgis - FuncionesPostgis - Funciones Constructores

    ST_BdPolyFromText Construye un objeto poligono dado una coleccin de linestrings cerrados como

    MultiLineString representados en WKT. ST_BdMPolyFromText Construye un multipoligono dado una coleccin de linestrings cerrados como

    MultiLineString representados en WKT. ST_GeogFromText / ST_GeographyFromText

    Retorna un objeto Geography dada su geometria en WKT. ST_GeogFromWKB

    Retorna un objeto Geography dada su geometria en WKT ST_GeomCollFromText

    Retorna un objeto Geometry Collection dada su geometra en WKT. Si no se especifica el SRID, su valor por default es -1.

    ST_GEOMFROMEWKB / ST_GEOMFROMEWKT Retorna una gemetra del formato extendido del WKT o WKB

  • Postgis - FuncionesPostgis - Funciones Constructores

    ST_GeomFromText /ST_GeometryFromText Retorna un objeto Geometry dada su geometria en WKT. Si no se

    especifica el SRID, su valor por default es -1 o 0 ST_GeomFromGML / GMLToSQL

    Retorna un objeto Geometry dada su geometria en GML. ST_GeomFromKML

    Retorna un objeto Geometry dada su geometria en KML.ST_GeomFromKML

    ST_GeomFromWKB Retorna un objeto Geometry dada su geometria en WKB. Si no se

    especifica el SRID, su valor por default es -1 o 0. ST_GeomFromJSON

    Retorna un objeto Geometry dada su geometra en formato JSON.

  • Postgis - FuncionesPostgis - Funciones

    Constructores ST_LineFromMultiPoint

    Crea un LineString de una geometria MultiPoint. ST_LineFromText

    Crea un objeto geometry de un texto WKT, SI no se especifica un srid, tomara el valor por default de -1.

    ST_LineFromWKB Crea un