Dba PostgreSQL desde básico a avanzado parte1

6,932 views

Published on

Curso de PostgreSQL orientado a DBA, basado en el libro de
PostgreSQL 9.0 High Performance e información del web site oficial del proyecto.

Published in: Technology

Dba PostgreSQL desde básico a avanzado parte1

  1. 1. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 1/163 Curso de PostgreSQL DBACurso de PostgreSQL DBA Desde Básico a AvanzadoDesde Básico a Avanzado 20112011 Parte 1Parte 1 Ernesto Quiñones AzcárateErnesto Quiñones Azcárate ernesto@eqsoft.neternesto@eqsoft.net
  2. 2. ●1: Instalación, Configuración y Logs bajo Gnu/Linux ●2: Software administración y SQL para DBAs ●3: Objetos de la DB, Herencias y Tablas particionadas ●4: Schemas y Tablespaces, Roles y Accesos ●5: Backup/Restore/Vacuum, Migraciones, Indices ●6: DBLinks, DbiLinks y Paquetes del Contrib ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. ●8: Configuración Avanzada y Problemas Comunes ●9: Replicación Asíncrona con PostgreSQL 9.0 ●10: Pool de Conexiones con PgPool EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 2/163
  3. 3. ●1: Instalación, Configuración y Logs bajo Gnu/Linux 1. Instalación: 3 formas de instalación son las más comunes: ●Instalación vía paquetes instaladores (deb ó rpm) ● Ventajas: mantenimiento prácticamente 0, excepto en cambios de versión superior. ● Desventajas: ramas congeladas o sin actualizar por mucho tiempo, básicamente solo se dan actualizaciones de seguridad. ●Compilación desde el código fuente (descargado o por Ports/Portage) ● Ventajas: Rápida ejecución, menos recursos, uso de última versión, posibilidad de añadir nuevas funcionalidades extendidas. ● Desventajas: Mantenimiento manual, no es sencillo actualizar(salvo en ports/portage) ●Paquetes no oficiales de instalación binarios ● Ventajas: Instalación de una versión específica ● Desventajas: Imposible de mantener EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 3/163
  4. 4. 1. Instalación: Instalación vía paquetes instaladores (deb ó rpm) ● Consideraciones : mantener siempre actualizada mientras no se mueva entre ramas. ●Compilación desde el código fuente (descargado o por Ports/Portage) ● Consideraciones : no instalar en sistemas que usan administradores de paquetes. ●Paquetes no oficiales de instalación binarios ● Consideraciones: usar solo en casos en que se requiera una versión especifica, recomendable siempre tener una copia de la versión de producción para casos de desastres. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 4/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  5. 5. 1.Instalación Requerimientos de hardware: ● Procesador : si planea ejecutar Querys muy complejos es recomendable utilizar plataformas de 64bits. ● Memoria : mientras más ram se pueda tener es mejor, especialmente si se van a ejecutar Querys que van a mover mucha data, mientras mayor capacidad tenga el cache mejor será el rendimiento de las consultas. ● Disco : la cantidad de espacio dependerá del volumen de datos, recomendaciones: ● SCSI, para bases de datos relativamente medianas pero donde se requiere un alto acceso a los datos, entorno muy propenso a caídas de servidor. ● SATA, para bases de datos muy grandes pero con no muy altos requerimientos de acceso a los mismos, usar sistemas de archivos con Journaling (ext4 por ejemplo) para minimizar riesgos en entornos propensos a caídas. ● SSD, para cache de la DB, no usar para almacenamiento de datos “real” debido a su “fragilidad” en entornos propensos a caídas. ● Arreglo de discos, entornos muy grandes de datos con mucho acceso a los mismos. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 5/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  6. 6. 1.Instalación ¿Que Linux usar? : ● Enterprise Edition ● Ventajas: muy seguros, actualizaciones centradas principalmente en la seguridad. ● Desventajas: versiones antiguas incluso al momento de su lanzamiento. CentOS, Ubuntu Server, RedHat, Suse ● Regular Edition ● Ventajas: actualizaciones constantes, se encuentran versiones más recientes. ● Desventajas: no siempre bien probadas, principalmente se enfocan en soltar la versión más reciente posible., mayor sensibilidad a problemas de seguridad. Ubuntu, Fedora, Suse EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 6/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  7. 7. 1. Instalación ¿Unixs Libres? : ● FreeBSD es una excelente opción, gestiona muy bien múltiples conexiones y libera los procesos rápidamente, consumo de recursos increíblemente bajo, soporte comunitario más amplio de todos los BSDs (OpenBSd ó NetBSD). ● OpenSolaris evaluar con cuidado, ¿seguirá siendo libre?, poco soporte comunitarios, se sabe que ZFS es un sistema de archivos excelente para PostgreSQL, se conocen experiencias de muchos procesadores virtualizados con PostgreSQL. ● ¿Solaris y AIX?, buenas plataformas, evaluar bien los costos, seguramente solo se encontrarán versiones antiguas de PostgreSQL disponibles para estas plataformas o se requerirán versiones especificas de muchas librerías dependencias. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 7/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  8. 8. Instalando...... EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 8/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  9. 9. 1. Instalación: ● La mayoría de las distribuciones actuales de GNU/Linux auto-generan los directorios necesarios para correr el cluster de la DB, el caso de CentOS luego de instalar los paquetes es necesario ejecutar este comando como “root”: service postgresql initdb <-- esto genera la estructura de directorios necesaria para ejecutar el cluster. ● Luego de ejecutar el comando tendremos finalmente estos directorios: ● /usr/bin <-- binarios (mezclados con los del sistema) ● /usr/lib <-- librerías (mezclados con los del sistema) ● /var/lib/pgsl/data <-- archivos de configuración y data de la base de datos. ● El usuario administrador más común creado por los instaladores es “postgres” (como en el caso de CentOS, alternativamente es “pgsql” (sistemas Unix principalmente). EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 9/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  10. 10. 1. Instalación: ● Dentro de /var/lib/pgsql/data encontrará los directorios de trabajo del cluster de la base de datos: ● base <-- directorio de data, “tablespace” por defecto. ● global <-- directorio de data global del sistema, por ejemplo: los roles, los catálogos de objetos de la db, etc. ● pg_clog <-- directorio de “commit” de las transacciones, de este directorio es que se lee la data. ● pg_log <-- log de ocurrencias del dbms ● pg_multixact <-- data producida por “locks” del sistema. ● pg_stat_tmp <-- archivos temporales de las estadísticas de las dbs ● pg_subtrans <-- usado en control de sub-transacciones ● pg_tblspc <-- enlaces simbólicos a los tablespaces ● pg_twophase <-- usado en control de commits de “dos fases” (gestiona los commit de las transacciones que afectan al mismo tiempo la misma data) ● pg_xlog <-- directorio de WAL (historia de movimientos de data, es la que asegura que la dbms sea ACID) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 10/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  11. 11. 1. Instalación: ● Dentro de /var/lib/pgsql/data encontrará los directorios de trabajo del cluster de la base de datos: 5 archivos adicionales: ● pg_hba.conf <-- archivos de control de accesos al sistema. ● postmaster.opts <-- comando con el que se ejecuto el servicio de la dbms ● postmaster.pid <-- “pid” del proceso del sistema, en raras ocasiones la dbms se bloquea al reiniciar el servicio porque no se elimina este archivo, se puede borrar manualmente pero jamas mientras el servicio este iniciado. ● pg_ident.conf <-- configuración de usuarios usando método “ident” en pg_hba.conf desde IPs remotas. ● postgresql.conf <-- parámetros de configuración del sistema ● PG_VERSION <-- versión de PostgreSQL instalada EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 11/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  12. 12. 2. Configuración Por defecto PostgreSQL viene configurado para dar accesos en “localhost”, los usuarios comunes de administración son “postgres” (Gnu/Linux) y “pgsql” (Unix). Vamos a crear un nuevo “Super Usuario” desde consola, como usuario “root”: root@host: su – postgres postgres@host: createuser admindb <-- admindb es el usuario a crear ¿Será el nuevo rol un superusuario? (s/n) <-- tendrá el mismo nivel del usuario “postgres” tiene permisos especiales a los catálogos de objetos del Sistema. postgres@host: psql template1 <-- ingresamos para cambiar el Password de “admindb” template1=# alter user admindb password 'dbadmin'; <-- asignamos el nuevo template1=# alter user postgres password 'dbpgsql'; Password. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 12/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  13. 13. 2.Configuración Ahora necesitamos que no cualquier persona con acceso físico al “servidor” pueda ingresar a la base de datos, para ello editamos el archivo “pg_hba.conf” (como usuario “postgres”) postgres@host: nano /var/lib/pgsql/data/pg_hba.conf DICE: # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all ident # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident DEBE DECIR: # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all password # IPv4 local connections: host all all 127.0.0.1/32 password # IPv6 local connections: #host all all ::1/128 ident <-- esto solo si usamos protocolo IPv6 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 13/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  14. 14. 2. Configuración Reiniciamos el sistema postgres@host : pg_ctl restart <--este comando no se puede ejecutar como “root” root@host : service postgresql restart <-- eso es lo mismo como “root” Porque hicimos esto: a) Hemos creado un password para el usuario administrador superior “postgres”. b) Trabajaremos con un usuario alterno para mayor seguridad. c) Evitamos que cualquier persona con acceso al servidor entre a la base de datos si conocer los passwords. Debilidad: Si algún usuario tiene permiso de editar el archivo pg_hba.conf y reiniciar servicios entonces la seguridad es vulnerada. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 14/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  15. 15. 2. Configuración - Archivo pg_hba.conf “pg_hba.conf” nos permite definir (en orden de aplicación): a)Conecciones locales (x socket) ó de host seguras o inseguras (x TCP/IP) b)Base datos a la que nos podemos conectar c)Usuarios que se pueden conectar a las DBs d)Direcciones autorizadas para conectarse (solo en caso TCP/IP) e)Tipo de autenticación # Database administrative login by UNIX sockets local all postgres ident # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all ident # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 md5 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 15/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  16. 16. 2. Configuración - Archivo pg_hba.conf a)Conecciones locales (x socket) ó de host seguras o inseguras (x TCP/IP) Posibles valores: Local <-- conexiones por socket, más rápidas, solo si la aplicación que hará uso de la db esta en el mismo servidor Host <-- lo normal, conexiones vendrán por la red, puede o no tener Soporte SSL Hostssl <-- solo conexión SSL Hostnossl <-- solo sin SSL EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 16/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  17. 17. 2. Configuración - Archivo pg_hba.conf b)Base datos a la que nos podemos conectar Se pueden definir conexiones para todas las db usando “ALL” o una específica mencionándola directamente. Recomendación: no usen combinaciones de mayúsculas y minúsculas. Se puede usar sameuser, samegroup, samerol para indicar que la base de datos a la que me conecto es la misma que mi nombre de usuario, grupo ó rol. c)Usuarios que se pueden conectar a las Dbs Podemos especificar restricciones para todos los usuarios usando “ALL” o para uno específico escribiendo su nombre, si pones “+” por detrás es el nombre de un grupo. En b) y c) podemos poner varias db y usuarios separados por comas. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 17/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  18. 18. 2.Configuración - Archivo pg_hba.conf d)Direcciones autorizadas para conectarse (solo en caso TCP/IP) Podemos especificar IPs directamente o por rango 192.168.1.10/32 <-- solo la IP mencionada 192.168.1.0/24 <-- todo el segmento 192.168.1.x 192.168.0.0/16 <-- todo el segmento 192.168.x.x 192.0.0.0/8 <-- todo el segmento 192.x.x.x 0.0.0.0/0 <-- todo el mundo También podemos especificar IP y netmask (poco usado). Se puede especificar IP de diferentes redes (no todo debe estar en 192.x.x.x). Esto solamente se utiliza en el escenario donde el primer parametro es HOST, HOSTSSL ó HOSTNOSSL. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 18/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  19. 19. 2. Configuración - Archivo pg_hba.conf e)Tipo de autenticación PostgreSQL provee diferentes tipos de autenticación, los mas comunes: Trust <-- permite que se pueda ingresar a la DB sin password Reject <-- cierra el acceso a una DB o a las direcciones especificadas Password <-- requiere que se especifique el password del usuario Ident <-- el usuario a usar debe ser del sistema operativo y debe a la vez ser usuario de la db, usada en conexiones locales Ldap <-- para autentificaciones contra un servicio como OpenLdap Md5, gss, sspi, krb5, radius, cert, pam son de menos uso y requieren configuraciones de otros servicios (como Ldap). Cualquier cambio en este archivo requiere reiniciar el servicio del PostgreSQL. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 19/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  20. 20. 2. Configuración - Archivo postgresql.conf El archivo “postgresql.conf” contiene los parámetros de configuración del rendimiento y funcionalidad del dbms, algunos parámetros principales: listen_addresses = 'localhost' <-- permite especificar si las conexiones a la db son locales o de red (poner “*”). Port = 5432 <-- es el puerto TCP que va a escuchar el Dbms para aceptar conexiones, es posible Tener diferentes instalaciones en el Mismo servidor pero especificando Diferetnes puertos. max_connections = 100 <-- máximo de conexiones simultaneas que aceptará el servidor. shared_buffers = 24MB <-- indica la cantidad de RAM que usa el Dbms para trabajar las consultas, no puede ser mayor a el valor guardado en /proc/sys/kernel/shmmax Modificar /etc/sysctl.conf añadiendo kernel.shmmax=[nuevo_valor_en_#entero] EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 20/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  21. 21. 2. Configuración - Archivo postgresql.conf El archivo “postgresql.conf” contiene los parametros de configuración del rendimiento y funcionalidad del dbms, algunos parámetros principales: autovacuum = on <-- activa la “limpieza” de páginas no-activas en el directorio donde se almacena la data, tomar en cuenta que este es un “lazy vacuum” no un “full vacuum” y que los valores de precisión del vacuum no deben generar congestión en la base de datos. lc_messages = 'es_PE.utf8' <-- determina el tipo de “locale” para el almacenamiento de la data (internacionalización), por defecto se usa el mismo del sistema operativo, recomendación no modificarlo. Cualquier cambio en este archivo requiere reiniciar el servicio del PostgreSQL. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 21/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  22. 22. 2. Configuración Práctica EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 22/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  23. 23. 3. Logs bajo Gnu/Linux Los logs se configuran en el archivo “postgresql.conf”, por defecto el directorio de localización de los Logs en CentOS es “/var/lib/pgsql/data/pg_log”. log_destination = 'stderr' <-- permite generar el log de la dbms. Stderr, manda el log a donde se especifique Syslog, manda el log a /var/log/messages log_connections = off <-- permite loggear las conexiones que recibe la Dbms, ayuda mucho a depurar el pg_hba.conf log_disconnections = off <-- Loggear conexiones cerradas. log_statement = 'none' <-- permite loggear los querys que procesa la Dbms. none, no loggea querys all, loggea todos los querys, bien o mal Procesados (ideal para ambiente de desarrollo) ddl, loggea los comandos que modifican Estructuras en la db mod, loggea los mismos comandos que ddl más Comandos de movimiento de data EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 23/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  24. 24. 3. Logs bajo Gnu/Linux log_directory = 'pg_log' <-- directorio pajo /var/lib/pgsql/data donde se almacenarán los archivos de log, el usuario “postgres” debe tener derechos de escritura Sobre el nuevo directorio. log_filename = 'postgresql-%a.log' <-- nombre del archivo de log. dbms, ayuda mucho a depurar el pg_hba.conf log_truncate_on_rotation = on <-- permite generar un nuevo archivo de log cuando llega a un tamaño determinado o tiene una antigüedad determinada. log_rotation_age = 1d <-- antigüedad máxima log_rotation_size = 0 <-- tamaño máximo en bytes que puede tener el archivo de log. log_duration = off <-- permite loggear la duración de la ejecución de los querys. log_min_duration_statement = -1 <-- permite loggear la duración de la ejecución de los querys. (valor 0 para activar, mayor a 0 solo loggerá el tiempo de los querys que duren más del tiempo indicado en milisegundos) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 24/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  25. 25. 3. Logs Práctica EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 25/163 ●1: Instalación, Configuración y Logs bajo Gnu/Linux
  26. 26. ●2: Software administración y SQL para DBAs 1. Software de Administración – instalando Rpmforge Este es un repositorio adicional de CentOS para tener acceso a una serie de aplicaciones adicionales que nos ayudarán en las siguientes tareas. a. Bajar el rpm oficial de Rpmforge de estas direcciones i686 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm x86_64 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm b. Instalar la firma del repositorio rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt c. Verificar que tenemos la firma correcta rpm -K rpmforge-release-0.5.2-2.el6.rf.*.rpm d. Instalar el rpm rpm -i rpmforge-release-0.5.2-2.el6.rf.*.rpm EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 26/163
  27. 27. 1. Software de Administración - PhpPgAdmin PhpPgAdmin http://phppgadmin.sourceforge.net/ Aplicación Web que nos permite administrar la base de datos, contiene toda la funcionalidad necesaria para un DBA. Puede instalarse de “fuentes” o del repositorio de su distribución de Linux (versiones más antiguas que la última estable), en el caso se CentOS debe ser descargada. Requisitos: - Apache 2 - PHP 5.3 (de preferencia para ejecutar la última versión) - Librerías de PostgreSQL para la versión de PHP a usar - SeLinux (en CentOS) genera algunos problemas para conectarse a la base de datos, para desactivarlo modificar el archivo /etc/selinux/config mover el parámetro “SELINUX” de “enforcing” a “disabled”. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 27/163 ●2: Software administración y SQL para DBAs
  28. 28. 1. Software de Administración - PhpPgAdmin Archivo de configuración “conf/config.inc.php”. $conf['servers'][0]['host'] = ''; <-- host ó IP de la dbms $conf['servers'][0]['port'] = 5432; <-- puerto para conexiones Tcp/Ip $conf['servers'][0]['sslmode']= allow;<-- Si se tiene conexión SSL, sino desactivar $conf['extra_login_security'] = true; <-- indispensable para que no ingrese alguien a la dbms con los usuarios clásicos. $conf['owned_only'] = true; <-- para ver solo los objetos de los Cuales eres propietario $conf['show_advanced'] = false; <-- permite ver los objetos avanzados De la base de datos $conf['show_system'] = false; <-- permite ver los objetos del sistema $conf['show_oids'] = false; <-- permite ver los identificadores Únicos del sistema $conf['max_rows'] = 30; <-- cantidad de registros a visualizar por página en una consulta EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 28/163 ●2: Software administración y SQL para DBAs
  29. 29. 1. Software de Administración - PgAdmin3 PgAdmin3 http://www.pgadmin.org/ Aplicativo GUI que permite una administración y depuración de los objetos de una dbms PostgreSQL. Instalar de preferencia desde los repositorios de su distribución de Linux, en el caso de CentOS la versión de 32 y 64bits puede ser descargada desde aquí: http://pkgs.org/centos-6-rhel-6/epel-x86_64/pgadmin3-1.12.2-2.el6.x86_64.rpm.html La versión actual disponible en Centos 6 de repositorio no oficial es la 1.12 (actual 1.18). Una de las funcionalidades más importantes es el Debugger para funciones, pero requiere que se compile desde código fuente un “contrib” adicional para la base de datos. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 29/163 ●2: Software administración y SQL para DBAs
  30. 30. 1. Software de Administración - PgAdmin3 a. Descargar el paquete y proceder a instalar: rpm -i /ruta_rpm/pgadmin3-1.12.2-2.el6.x86_64.rpm warning: /ruta_rpm/pgadmin3-1.12.2-2.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY error: Failed dependencies: libwx_baseu-2.8.so.0()(64bit) is needed by pgadmin3-1.12.2-2.el6.x86_64 libwx_baseu-2.8.so.0(WXU_2.8)(64bit) is needed by pgadmin3-1.12.2-2.el6.x86_64 libwx_baseu-2.8.so.0(WXU_2.8.5)(64bit) is needed by pgadmin3-1.12.2-2.el6.x86_64 libwx_baseu_net-2.8.so.0()(64bit) is needed by pgadmin3-1.12.2-2.el6.x86_64 .... y varios otros software base más b. Instalar el paquete wsGTK que importará todas las dependencias yum install wxGTK c. Ejecutar paso “a” nuevamente EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 30/163 ●2: Software administración y SQL para DBAs
  31. 31. 1. Software de Administración - PSQL El comando básico para cualquier buen DBA en PostgreSQL es “psql”. PSQL es un comando de consola que nos permitirá conectarnos a cualquier servidor PostgreSQL dentro del alcance de nuestra red, algunos parámetros a tomar en cuenta: psql BASE_DE_DATOS [opciones] -h, --host=HOST <-- hostname ó ip del servidor al que se conectará -p, --port=PUERTO <-- puerto de conexión (5432 por defecto) -U, --username=USUARIO <-- nombre de usuario -w, --no-password <-- no solicita contraseña -W, --password <-- exige ingresar contraseña EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 31/163 ●2: Software administración y SQL para DBAs
  32. 32. 1. Software de Administración - PSQL psql -U postgres -l <-- Lista las bases de datos del password for user postgres: servidor sin ingresar a este List of databases Name | Owner | Encoding | Collation | Ctype |Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres : postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres : postgres=CTc/postgres Una vez conectado a la base de datos podemos usar “d” para pedir diferente tipo de información, la más representativa es: d[S+] list tables, views, and sequences d[S+] NAME describe table, view, sequence, or index db[+] [PATTERN] list tablespaces des[+] [PATTERN] list foreign servers dew[+] [PATTERN] list foreign-data wrappers dn[+] [PATTERN] list schemas dp [PATTERN] list table, view, and sequence access privileges EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 32/163 ●2: Software administración y SQL para DBAs
  33. 33. 1. Software de Administración - PSQL ds[S+] [PATTERN] list sequences dt[S+] [PATTERN] list tables dT[S+] [PATTERN] list data types du[+] [PATTERN] list roles (users) dv[S+] [PATTERN] list views l[+] list all databases Usar “S” muestra además los datos del sistema que se solicitan en la consulta, así por ejemplo: pruebas=# dt Listado de relaciones Esquema | Nombre | Tipo | Dueño ---------+--------+-------+---------- public | tabla1 | tabla | postgres pruebas=# dtS Listado de relaciones Esquema | Nombre | Tipo | Dueño ------------+-------------------------+-------+---------- ....... (presenta varias tablas del sistema) pg_catalog | pg_type | tabla | postgres pg_catalog | pg_user_mapping | tabla | postgres public | tabla1 | tabla | postgres (43 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 33/163 ●2: Software administración y SQL para DBAs
  34. 34. 1. Software de Administración - PSQL El sufijo “+” muestra información adicional a la presentada, por ejemplo descripciones (puede usarse en combinación con “S”) pruebas=# dt Listado de relaciones Esquema | Nombre | Tipo | Dueño ---------+--------+-------+---------- public | tabla1 | tabla | postgres pruebas=# dt+ Listado de relaciones Esquema | Nombre | Tipo | Dueño | Tamaño | Descripción ---------+--------+-------+----------+---------+------------- public | tabla1 | tabla | postgres | 0 bytes | Listado de relaciones Esquema | Nombre | Tipo | Dueño | Tamaño | Descripción ------------+-------------------------+-------+----------+------------+------------- .... (presenta varias tablas del sistema) pg_catalog | pg_ts_dict | tabla | postgres | 8192 bytes | pg_catalog | pg_ts_parser | tabla | postgres | 8192 bytes | pg_catalog | pg_ts_template | tabla | postgres | 8192 bytes | pg_catalog | pg_type | tabla | postgres | 56 kB | pg_catalog | pg_user_mapping | tabla | postgres | 0 bytes | public | tabla1 | tabla | postgres | 0 bytes | (43 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 34/163 ●2: Software administración y SQL para DBAs
  35. 35. 1. Software de Administración Practica EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 35/163 ●2: Software administración y SQL para DBAs
  36. 36. 2. SQL para DBAs – Tipos de Datos a)Tipos de datos numéricos ●smallint ●integer ●bigint ●decimal ●numeric ●Real <-- tomar en cuenta la presición de punto flotante, por ejemplo 10 podría guardarse como 9.9999999E9 ●double precision <-- mismo caso que real ●Serial <-- genera automáticamente una “secuencia”, los seriales actualizan sus datos dependiendo cuantas veces se ejecute un “nextval()” de la secuencia, si la transacción no se completa se generará un “hueco” en el contador. ●Bigserial ●Money <-- inserta el símbolo de la moneda por delante, podemos precisar el símbolo cambiando el “locale” del parámetro lc_monetary en postgresql.conf ●Booelan <-- true ó false, 1 ó 0 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 36/163 ●2: Software administración y SQL para DBAs
  37. 37. 2. SQL para DBAs – Tipos de Datos b)Tipos de datos caractér ●character varying() ó varchar(n) ●character(n) ó char(n) ●Text c) tipo de datos fecha ●timestamp without time zone <-- considere que guardar fecha y tiempo juntos no ayuda a la formación de querys de búsqueda, por ejemplo: prueba=# create table tbl_fecha ( fecha timestamp); prueba=# insert into tbl_fecha values ('2010-01-01'); prueba=# insert into tbl_fecha values ('2010-01-02 01:01:01'); prueba=# select * from tbl_fecha where fecha >= '2010-01-01' and fecha <= '2010-01-02'; fecha --------------------- 2010-01-01 00:00:00 prueba=# select * from tbl_fecha where fecha >= '2010-01-01' and fecha <= '2010-01-02 23:59:59'; fecha --------------------- 2010-01-01 00:00:00 2010-01-02 01:01:01 ●timestamp with time zone ●date ●time without time zone ●time with time zone ●interval EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 37/163 ●2: Software administración y SQL para DBAs
  38. 38. 2. SQL para DBAs – Tipos de Datos d)Tipos direcciones de red ●Cidr <-- solo Ips v.4 ó v.6 ●inet <-- Ips v.4 ó v.6 ó hostnames ●Macaddr <-- dirección de identificador único de una NIC prueba=# create table tbl_inet ( host cidr, hostname varchar(32)); prueba=# insert into tbl_inet values ( '192.168.1.1','192.168.1.1'); INSERT 0 1 prueba=# insert into tbl_inet values ( '292.168.1.1','192.168.1.1'); ERROR: la sintaxis de entrada no es válida para tipo cidr: «292.168.1.1» LÍNEA 1: insert into tbl_inet values ( '292.168.1.1','192.168.1.1'); ^ prueba=# insert into tbl_inet values ( '192.168.1.1','292.168.1.1'); INSERT 0 1 e)Tipo de dato NULO NO es un tipo de datos en si, es una característica que puede tener un tipo de datos cualquiera y significa que aceptará no tener ningún valor. OjO: * En cadenas una cadena vacía o de longitud 0 es diferente que NULL * En valores numéricos el 0 es diferente que NULL EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 38/163 ●2: Software administración y SQL para DBAs
  39. 39. 2. SQL para DBAs - SQL El SQL de PostgreSQL se puede dividir en 2 tipos, los de comandos y los “Utility Commands” y los que requieren “Plan de Ejecución”. Este último grupo son los clásicos Insert, Update, Delete ya que requieren que el interprete de queries los analice y hasta reescriba para una mejor optimizar su ejecución, esto se debe a que “mueven datos”. El primer grupo corresponde a un conjunto de comandos que actúan directamente sobre datos, estructuras y objetos de la base de datos pero que no requieren de un análisis de ejecución, simplemente se ejecutan tal cual se escriben, por ejemplo CREATE, DROP, TRUNCATE, ALTER, etc. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 39/163 ●2: Software administración y SQL para DBAs
  40. 40. 2. SQL para DBAs – SQL - Create Nos permite crear un objeto en la base de datos. Los más usados: CREATE DATABASE -- create a new database CREATE DOMAIN -- define a new domain CREATE FUNCTION -- define a new function CREATE GROUP -- define a new database role CREATE INDEX -- define a new index CREATE LANGUAGE -- define a new procedural language CREATE OPERATOR -- define a new operator CREATE ROLE -- define a new database role CREATE RULE -- define a new rewrite rule CREATE SCHEMA -- define a new schema CREATE SEQUENCE -- define a new sequence generator CREATE TABLE -- define a new table CREATE TABLE AS -- define a new table from the results of a query CREATE TABLESPACE -- define a new tablespace CREATE TRIGGER -- define a new trigger CREATE TYPE -- define a new data type CREATE USER -- define a new database role CREATE VIEW -- define a new view EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 40/163 ●2: Software administración y SQL para DBAs
  41. 41. 2. SQL para DBAs – SQL - Create Los más específicos : CREATE AGGREGATE -- define a new aggregate function CREATE CAST -- define a new cast CREATE CONSTRAINT TRIGGER -- define a new constraint trigger CREATE CONVERSION -- define a new encoding conversion CREATE OPERATOR CLASS -- define a new operator class CREATE OPERATOR FAMILY -- define a new operator family CREATE SERVER -- define a new foreign server CREATE FOREIGN DATA WRAPPER -- define a new foreign-data wrapper CREATE TEXT SEARCH CONFIGURATION -- define a new text search configuration CREATE TEXT SEARCH DICTIONARY -- define a new text search dictionary CREATE TEXT SEARCH PARSER -- define a new text search parser CREATE TEXT SEARCH TEMPLATE -- define a new text search template CREATE USER MAPPING -- define a new mapping of a user to a foreign server http://www.postgresql.org/docs/8.4/interactive/sql-commands.html EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 41/163 ●2: Software administración y SQL para DBAs
  42. 42. 2. SQL para DBAs – SQL – Create y Alter Cada create tiene su sintaxis específica, esto depende del tipo de objeto que estamos creado, en algunos casos como en “create table” la sintaxis puede ser bastante amplia y compleja y en algunos casos como en “create database” es más sencilla, depende de la utilidad del objeto. Alter permite modificar la estructura de un objeto, en general todo objeto creado puede ser modificado pero no todos sus atributos pueden ser modificados, así algunas características podrían estar restringidas y será necesario consultarlo en la documentación, algunas podrían incluso ser restricciones de integridad de la base de datos, por ejemplo será imposible borrar una llave primaria en una tabla si es que las referencias que tiene en otras tablas no son eliminadas previamente. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 42/163 ●2: Software administración y SQL para DBAs
  43. 43. 2. SQL para DBAs – SQL – Create y Drop Create permite crear objetos en la base de datos, básicamente cualquier objeto puede ser creado con la sintaxis: Create tipo_de_objeto nombre_de_objeto caracteristicas create database nombre_objeto create table nombre_objeto (estructura) create index nombre_objeto on table nombre_tabla create view nombre_objeto as sentencia_sql .... etc. Drop permite borrar los objetos de una base de datos. drop database nombre_objeto drop table nombre_objeto drop index nombre_objeto drop view nombre_objeto ... etc. Drop permitirá eliminar un objeto que no tenga restricciones de integridad por estar referencia en otra sección de la base de datos. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 43/163 ●2: Software administración y SQL para DBAs
  44. 44. 2. SQL para DBAs – SQL – Create Database create database nombre_base_datos usuario@host:# psql template1 -U USUARIO Contraseña para usuario USUARIO: psql (8.4.8) Digite «help» para obtener ayuda. template1=# create database prueba2; CREATE DATABASE template1=# q usuario@host:# psql prueba2 -U USUARIO Contraseña para usuario USUARIO: psql (8.4.8) Digite «help» para obtener ayuda. prueba2=# * El propietario (owner) de la base de datos es el usuario quien la crea. * El “encoding” de la base de datos será por defecto el mismo del sistema Operativo en donde esta instalado PostgreSQL. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 44/163 ●2: Software administración y SQL para DBAs
  45. 45. 2. SQL para DBAs – SQL – Create Table create table nombre_tabla ( nombre_de_campo tipo_de_datos); prueba2=# create table tablita (campo1 char(10), campo2 int); CREATE TABLE prueba2=# dt tablita Listado de relaciones Esquema | Nombre | Tipo | Dueño ---------+---------+-------+--------- public | tablita | tabla | dbadmin (1 fila) prueba2=# d tablita Tabla «public.tablita» Columna | Tipo | Modificadores ---------+---------------+--------------- campo1 | character(10) | campo2 | integer | * El owner de la tabla por defecto es el usuario quien la crea. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 45/163 ●2: Software administración y SQL para DBAs
  46. 46. 2. SQL para DBAs – SQL – Create Table Podemos crear tablas en base a otras tablas a través de una consulta SELECT. pruebas=# create table tabla_base (codigo int, nombre char(10)); pruebas=# insert into tabla_base values (1,'A'); * Crear una tabla de un select solo estructura pruebas=# create table tabla_base1 as select * from tabla_base where 1=2; pruebas=# select * from tabla_base1; codigo | nombre --------+-------- * Crear una tabla de un select con sus datos pruebas=# create table tabla_base2 as select * from tabla_base; pruebas=# select * from tabla_base2; codigo | nombre --------+------------ 1 | A * Crear una tabla de un select, solo ciertos campos pruebas=# create table tabla_base3 as select codigo from tabla_base; pruebas=# select * from tabla_base3; codigo -------- 1 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 46/163 ●2: Software administración y SQL para DBAs
  47. 47. 2. SQL para DBAs – SQL - Insert Insert into nombre_tabla (campos, ..) values ( valores, ..); Insert into nombre_tabla values (valores, ..); prueba2=# insert into tablita (campo1, campo2) values ('cadena1', 1); INSERT 0 1 prueba2=# insert into tablita values ('cadena2', 2); INSERT 0 1 prueba2=# insert into tablita values (2, 'cadena2'); ERROR: la sintaxis de entrada no es válida para integer: «cadena2» LÍNEA 1: insert into tablita values (2, 'cadena2'); prueba2=# insert into tablita values ('cadena3'); INSERT 0 1 * Si no se especifica el orden en que debe insertarse los datos entonces se corre el riesgo de que los tipos de datos no concuerden y no se grabe los datos. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 47/163 ●2: Software administración y SQL para DBAs
  48. 48. 2. SQL para DBAs – SQL - Insert * No es necesario que se llenen todos los campos de una tabla, a menos que tengan la restricción NOT NULL prueba2=# create table tablita2 (campo1 char(10), campo2 int not null); CREATE TABLE prueba2=# insert into tablita2 (campo1, campo2) values ('texto', 2); INSERT 0 1 prueba2=# insert into tablita2 (campo1) values ('texto'); ERROR: el valor null para la columna «campo2» viola la restricción not null prueba2=# insert into tablita2 (campo1, campo2) values ('texto', 0); INSERT 0 1 prueba2=# insert into tablita2 (campo1, campo2) values ('texto', null); ERROR: el valor null para la columna «campo2» viola la restricción not null prueba2=# insert into tablita2 (campo1, campo2) values (null, 3); INSERT 0 1 prueba2=# insert into tablita2 (campo1, campo2) values ('A', 10), ('B', 20); <-- puede añadir INSERT 0 2 tantos datos sea necesario EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 48/163 ●2: Software administración y SQL para DBAs
  49. 49. 2. SQL para DBAs – SQL - Insert Cuando trabajamos con tablas con el tipo de datos “SERIAL” es posible retornar el valor autoincremental de este luego que se ejecuta un insert. prueba=# create table tbl_simple ( id serial, nombre varchar(10)); NOTICE: CREATE TABLE creará una secuencia implícita «tbl_simple_id_seq» para la columna serial «tbl_simple.id» CREATE TABLE prueba=# insert into tbl_simple (nombre) values ('ernesto') returning id; id ---- 1 prueba=# insert into tbl_simple (nombre) values ('juan') returning id; id ---- 2 prueba=# insert into tbl_simple (nombre) values ('estosupera10caracteres') returning id; ERROR: el valor es demasiado largo para el tipo character varying(10) prueba=# insert into tbl_simple (nombre) values ('10chars') returning id; id ---- 3 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 49/163 ●2: Software administración y SQL para DBAs
  50. 50. 2. SQL para DBAs – SQL - Insert Es posible ejecutar una inserción de datos desde una consulta del tipo “Select”. prueba=# create table tbl_simple2 ( id serial, nombre varchar(10)); NOTICE: CREATE TABLE creará una secuencia implícita «tbl_simple2_id_seq» para la columna serial «tbl_simple2.id» CREATE TABLE prueba=# insert into tbl_simple2 ( nombre) select nombre from tbl_simple; INSERT 0 4 prueba=# select * from tbl_simple2; id | nombre ----+--------- 1 | ernesto 2 | juan 3 | 111 4 | 10chars (4 filas) prueba=# insert into tbl_simple2 ( nombrE) select nombre from tbl_simple returning id; id ---- 5 6 7 8 (4 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 50/163 ●2: Software administración y SQL para DBAs
  51. 51. 2. SQL para DBAs – SQL – Llaves primarias Una Llave primaria es uno o más campos que determinan un valor único en una tabla, no pueden haber 2 iguales o ser nulo (null), una tabla solo puede tener una llave primaria. prueba2=# create table tablita3 (campo1 int primary key, campo2 float); NOTICE: CREATE TABLE / PRIMARY KEY creará el índice implícito «tablita3_pkey» para la tabla «tablita3» CREATE TABLE prueba2=# d tablita3; Tabla «public.tablita3» Columna | Tipo | Modificadores ---------+------------------+--------------- campo1 | integer | not null campo2 | double precision | Índices: "tablita3_pkey" PRIMARY KEY, btree (campo1) prueba2=# insert into tablita3 (campo1, campo2) values (1,2); INSERT 0 1 prueba2=# insert into tablita3 (campo1, campo2) values (2,3); INSERT 0 1 prueba2=# insert into tablita3 (campo1, campo2) values (2,4); ERROR: llave duplicada viola restricción de unicidad «tablita3_pkey» EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 51/163 ●2: Software administración y SQL para DBAs
  52. 52. 2. SQL para DBAs – SQL – Llaves primarias prueba2=# create table tablita4 (campo1 int , campo2 int, campo3 float, constraint pk_tablita4 primary key (campo1, campo2)); NOTICE: CREATE TABLE / PRIMARY KEY creará el índice implícito «pk_tablita4» para la tabla «tablita4» CREATE TABLE prueba2=# d tablita4; Tabla «public.tablita4» Columna | Tipo | Modificadores ---------+------------------+--------------- campo1 | integer | not null campo2 | integer | not null campo3 | double precision | Índices: "pk_tablita4" PRIMARY KEY, btree (campo1, campo2) prueba2=# insert into tablita4 (campo1, campo2, campo3) values (1,1,2); INSERT 0 1 prueba2=# insert into tablita4 (campo1, campo2, campo3) values (1,2,2); INSERT 0 1 prueba2=# insert into tablita4 (campo1, campo2, campo3) values (1,1,3); ERROR: llave duplicada viola restricción de unicidad «pk_tablita4» prueba2=# insert into tablita4 (campo1, campo2, campo3) values (1,2,4); ERROR: llave duplicada viola restricción de unicidad «pk_tablita4» prueba2=# insert into tablita4 (campo1, campo2, campo3) values (1,null,4); ERROR: el valor null para la columna «campo2» viola la restricción not null EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 52/163 ●2: Software administración y SQL para DBAs
  53. 53. 2. SQL para DBAs – SQL – Llaves Foraneas Una llave foránea obliga que el valor que se almacena en un campo de una tabla este obligatoriamente registrado como parte de la llave primaria de una tabla “maestra” para poder ser aceptado, a esto se le llama integridad referencial. prueba2=# create table maestro (campo1 int primary key, campo2 int); NOTICE: CREATE TABLE / PRIMARY KEY creará el índice implícito «maestro_pkey» para la tabla «maestro» CREATE TABLE prueba2=# create table detalle (campoA int primary key, campoB int, constraint fk_detalle foreign key (campo) references maestro (campo2)); NOTICE: CREATE TABLE / PRIMARY KEY creará el índice implícito «detalle_pkey» para la tabla «detalle» ERROR: no hay restricción unique que coincida con las columnas dadas en la tabla referida «maestro» prueba2=# create table detalle (campoA int primary key, campoB int, constraint fk_detalle foreign key (campoB) references maestro (campo1)); NOTICE: CREATE TABLE / PRIMARY KEY creará el índice implícito «detalle_pkey» para la tabla «detalle» CREATE TABLE prueba2=# d detalle Tabla «public.detalle» Columna | Tipo | Modificadores ---------+---------+--------------- campoa | integer | not null campob | integer | Índices: "detalle_pkey" PRIMARY KEY, btree (campoa) Restricciones de llave foránea: "fk_detalle" FOREIGN KEY (campob) REFERENCES maestro(campo1) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 53/163 ●2: Software administración y SQL para DBAs
  54. 54. 2. SQL para DBAs – SQL – Llaves Foraneas prueba2=# insert into detalle (campoA, campoB) values (1,2); ERROR: inserción o actualización en la tabla «detalle» viola la llave foránea «fk_detalle» DETALLE: La llave (campob)=(2) no está presente en la tabla «maestro». prueba2=# insert into maestro (campo1) values (2); INSERT 0 1 prueba2=# insert into detalle (campoA, campoB) values (1,2); INSERT 0 1 prueba2=# insert into detalle (campoA, campoB) values (1,1); ERROR: inserción o actualización en la tabla «detalle» viola la llave foránea «fk_detalle» DETALLE: La llave (campob)=(1) no está presente en la tabla «maestro». prueba2=# insert into detalle1_1 (campoA, campoB) values (2,null); INSERT 0 1 Eventualmente la referencia puede hacerse con un campo UNIQUE en la tabla maestra, un campo UNIQUE es como una llave primaria, no puede tener valores duplicados. prueba2=# create table maestro1 (campo1 int unique); NOTICE: CREATE TABLE / UNIQUE creará el índice implícito «maestro1_campo1_key» para la tabla «maestro1» CREATE TABLE prueba2=# create table detalle1 (campoA int primary key, campoB int, constraint fk_detalle1 foreign key (campoB) references maestro1 (campo1)); NOTICE: CREATE TABLE / PRIMARY KEY creará el índice implícito «detalle1_pkey» para la tabla «detalle1» CREATE TABLE EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 54/163 ●2: Software administración y SQL para DBAs
  55. 55. 2. SQL para DBAs – SQL – Select El comando SELECT permite ejecutar una consulta en una tabla. prueba2=# select * from tablita4; campo1 | campo2 | campo3 --------+--------+-------- 1 | 1 | 2 1 | 2 | 2 (2 filas) prueba2=# select campo1, campo3 from tablita4; campo1 | campo3 --------+-------- 1 | 2 1 | 2 (2 filas) Se puede pedir todos los campos de una tabla con “*” o solo los que nos interesa detallando todos estosn entre “SELECT” y “FROM”. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 55/163 ●2: Software administración y SQL para DBAs
  56. 56. 2. SQL para DBAs – SQL – Select - Joins Es posible unir el resultado de 2 tablas utilizando los “joins”, en sus formas más básicas tenemos 2 opciones Join, Left Join y Right Join. prueba2=# create table maestro ( codigo int, nombre varchar(100)); CREATE TABLE prueba2=# create table detalle ( correlativo int, codigo int, descripción varchar(100)); CREATE TABLE ^ prueba2=# insert into maestro values (1, 'plan a'); INSERT 0 1 prueba2=# insert into maestro values (2, 'plan b'); INSERT 0 1 prueba2=# insert into maestro values (3, 'plan c'); INSERT 0 1 ^ prueba2=# insert into detalle values (1, 1, 'detalle 1'); INSERT 0 1 prueba2=# insert into detalle values (2, 1, 'detalle 2'); INSERT 0 1 prueba2=# insert into detalle values (3, 2, 'detalle 3'); INSERT 0 1 prueba2=# insert into detalle values (4, 4, 'detalle 4'); INSERT 0 1 prueba2=# insert into detalle values (5, 4, 'detalle 5'); INSERT 0 1 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 56/163 ●2: Software administración y SQL para DBAs
  57. 57. 2. SQL para DBAs – SQL – Select - Joins prueba2=# select * from detalle, maestro; <-- lista el producto de ambas tablas correlativo | codigo | descripción | codigo | nombre -------------+--------+-------------+--------+-------- 1 | 1 | detalle 1 | 1 | plan a 2 | 1 | detalle 2 | 1 | plan a 3 | 2 | detalle 3 | 1 | plan a 4 | 4 | detalle 4 | 1 | plan a 5 | 4 | detalle 5 | 1 | plan a 1 | 1 | detalle 1 | 2 | plan b 2 | 1 | detalle 2 | 2 | plan b 3 | 2 | detalle 3 | 2 | plan b 4 | 4 | detalle 4 | 2 | plan b 5 | 4 | detalle 5 | 2 | plan b 1 | 1 | detalle 1 | 3 | plan c 2 | 1 | detalle 2 | 3 | plan c 3 | 2 | detalle 3 | 3 | plan c 4 | 4 | detalle 4 | 3 | plan c 5 | 4 | detalle 5 | 3 | plan c (15 filas) prueba2=# select * from detalle prueba2-# join maestro on maestro.codigo = detalle.codigo; <-- lista la intersección de ambas tablas correlativo | codigo | descripción | codigo | nombre -------------+--------+-------------+--------+-------- 2 | 1 | detalle 2 | 1 | plan a 1 | 1 | detalle 1 | 1 | plan a 3 | 2 | detalle 3 | 2 | plan b (3 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 57/163 ●2: Software administración y SQL para DBAs
  58. 58. 2. SQL para DBAs – SQL – Select - Joins prueba2=# select * from detalle <-- lista todo lo de “detalle” aunque no se left join maestro on maestro.codigo = detalle.codigo; intersecte con “maestro” correlativo | codigo | descripción | codigo | nombre -------------+--------+-------------+--------+-------- 1 | 1 | detalle 1 | 1 | plan a 2 | 1 | detalle 2 | 1 | plan a 3 | 2 | detalle 3 | 2 | plan b 4 | 4 | detalle 4 | | 5 | 4 | detalle 5 | | (5 filas) prueba2=# select * from detalle <-- lista todo lo de “maestro” aunque no se right join maestro on maestro.codigo = detalle.codigo; intersecte con “detalle” correlativo | codigo | descripción | codigo | nombre -------------+--------+-------------+--------+-------- 2 | 1 | detalle 2 | 1 | plan a 1 | 1 | detalle 1 | 1 | plan a 3 | 2 | detalle 3 | 2 | plan b | | | 3 | plan c (4 filas) Se pueden hacer “joins” entre 2 ó más tablas, pueden mezclarse los diversos tipos de joins presentados cuando se involucran consultas de muchas tablas. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 58/163 ●2: Software administración y SQL para DBAs
  59. 59. 2. SQL para DBAs – SQL – Select – Alias Es posible en una consulta colocar alias a los campos y a las tablas para mejorar los resultados de las consultas y eventualmente las uniones de tablas. prueba2=# select codigo as Cmaestro, nombre Nmaestro from maestro; cmaestro | nmaestro ----------+---------- 1 | plan a 2 | plan b 3 | plan c (3 filas) prueba2=# select maestro.codigo as Cmaestro, nombre Nmaestro from maestro join detalle b on b.codigo = maestro.codigo; cmaestro | nmaestro ----------+---------- 1 | plan a 1 | plan a 2 | plan b (3 filas) prueba2=# select maestro.codigo as Cmaestro, nombre Nmaestro, b.codigo as Dmaestro from maestro join detalle b on b.codigo = maestro.codigo; cmaestro | nmaestro | dmaestro ----------+----------+---------- 1 | plan a | 1 1 | plan a | 1 2 | plan b | 2 (3 filas) prueba2=# select maestro.codigo as Cmaestro, nombre Nmaestro, codigo as Dmaestro from maestro join detalle b on b.codigo = maestro.codigo; ERROR: la referencia a la columna «codigo» es ambigua LÍNEA 1: ...lect maestro.codigo as Cmaestro, nombre Nmaestro, codigo as ... EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 59/163 ●2: Software administración y SQL para DBAs
  60. 60. 2. SQL para DBAs – SQL – Select – Distinct Permite generar un resultado de datos único al realizar una consulta. prueba2=# create table tablaA (campo1 int, campo2 varchar(10)); prueba2=# insert into tablaA values (1, 'A'); prueba2=# insert into tablaA values (2, 'A'); prueba2=# insert into tablaA values (2, 'B'); prueba2=# insert into tablaA values (2, 'B'); prueba2=# insert into tablaA values (1, 'C'); prueba2=# select * from tablaA; campo1 | campo2 --------+-------- 1 | A 2 | A 2 | B 2 | B 1 | C (5 filas) prueba2=# select distinct * from tablaa; campo1 | campo2 --------+-------- 2 | A 1 | C 1 | A 2 | B (4 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 60/163 prueba2=# select distinct campo1 from tablaa; campo1 -------- 1 2 (2 filas) ●2: Software administración y SQL para DBAs
  61. 61. 2. SQL para DBAs – SQL – Select – Where La clausula WHERE nos permitirá filtrar los datos que debe devolver la consulta. prueba2=# select * from tablaA where campo2 = 'A'; campo1 | campo2 --------+-------- 1 | A 2 | A (2 filas) prueba2=# select * from tablaA where campo2 = ''; campo1 | campo2 --------+-------- (0 filas) prueba2=# insert into tablaA values (1, null); INSERT 0 1 prueba2=# select * from tablaA where campo2 = null; <-- los campos con tipo de datos “null” requieren campo1 | campo2 una sintaxis especial --------+-------- (0 filas) prueba2=# select * from tablaA where campo2 is null; campo1 | campo2 --------+-------- 1 | (1 fila) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 61/163 ●2: Software administración y SQL para DBAs
  62. 62. 2. SQL para DBAs – SQL – Select – Where WHERE nos permite simular JOINs. prueba2=# select * from maestro; codigo | nombre --------+-------- 1 | plan a 2 | plan b 3 | plan c (3 filas) prueba2=# select * from detalle; correlativo | codigo | descripción -------------+--------+------------- 1 | 1 | detalle 1 2 | 1 | detalle 2 3 | 2 | detalle 3 4 | 4 | detalle 4 5 | 4 | detalle 5 (5 filas) prueba2=# select * from maestro a , detalle b where a.codigo = b.codigo prueba2-# ; codigo | nombre | correlativo | codigo | descripción --------+--------+-------------+--------+------------- 1 | plan a | 2 | 1 | detalle 2 1 | plan a | 1 | 1 | detalle 1 2 | plan b | 3 | 2 | detalle 3 (3 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 62/163 ●2: Software administración y SQL para DBAs
  63. 63. 2. SQL para DBAs – SQL – Select – Where WHERE nos permite manejar operadores lógicos, los más usados son AND, OR y operadores de precisión como =, !=, <, <=, >, >= (hay muchos otros operadores lógicos y de precisión que se detallarán más adelante) prueba2=# select * from maestro a , detalle b where a.codigo = b.codigo and correlativo < 3; codigo | nombre | correlativo | codigo | descripción --------+--------+-------------+--------+------------- 1 | plan a | 2 | 1 | detalle 2 1 | plan a | 1 | 1 | detalle 1 (2 filas) prueba2=# select * from detalle where codigo < 3 or descripción = 'detalle 5'; correlativo | codigo | descripción -------------+--------+------------- 1 | 1 | detalle 1 2 | 1 | detalle 2 3 | 2 | detalle 3 5 | 4 | detalle 5 (4 filas) Podemos agrupar los operadores entre ( ) prueba2=# select * from detalle where codigo = 2 and codigo = 1 or descripción = 'detalle 5'; correlativo | codigo | descripción -------------+--------+------------- 5 | 4 | detalle 5 (1 fila) prueba2=# select * from detalle where codigo = 2 and (codigo = 1 or descripción = 'detalle 5'); correlativo | codigo | descripción -------------+--------+------------- (0 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 63/163 ●2: Software administración y SQL para DBAs
  64. 64. 2. SQL para DBAs – SQL – Select – Union UNION nos permite unir los resultados de 2 consultas, como restricción los resultados deben coincidir en tipo de datos para las columnas especificadas en cada consulta. prueba2=# select * from tablaA; campo1 | campo2 --------+-------- 1 | A 2 | A 2 | B 2 | B 1 | C 1 | ^ prueba2=# select campo1, campo2 from tablaA where campo1 = 1 union select campo1, campo2 from tablaA where campo2 = 'B'; campo1 | campo2 --------+-------- 1 | A 2 | B 1 | C 1 | prueba2=# select campo1, campo2 from tablaA where campo1 = 1 union all select campo1, campo2 from tablaA where campo2 = 'B'; campo1 | campo2 --------+-------- 1 | A 1 | C 1 | 2 | B 2 | B EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 64/163 ●2: Software administración y SQL para DBAs
  65. 65. 2. SQL para DBAs – SQL – Select – Intersec y Except Como UNION unen 2 o más consultas, pero en este caso con INTERSEC se mostrarán en el resultado solo aquellos datos que coincidan entre ambas consultas y en EXCEPT los que no coincidan. pruebas=# select * from tablaA; campo1 | campo2 --------+-------- 1 | A 2 | A 2 | B 2 | B 1 | C 1 | pruebas=# select campo1, campo2 from tablaA intersect select campo1, campo2 from tablaA where campo1=2; campo1 | campo2 --------+-------- 2 | B 2 | A pruebas=# select campo1, campo2 from tablaA except select campo1, campo2 from tablaA where campo1=2; campo1 | campo2 --------+-------- 1 | C 1 | A 1 | EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 65/163 ●2: Software administración y SQL para DBAs
  66. 66. 2. SQL para DBAs – SQL – Select – GROUP BY GROUP nos permite agrupar los resultados de una consulta, generalmente se usa en operaciones matemáticas como suma, promedio, mayor valor, menor valor, etc. prueba2=# select * from tablaA; campo1 | campo2 --------+-------- 1 | A 2 | A 2 | B 2 | B 1 | C 1 | prueba2=# select sum(campo1), avg(campo1), campo2 from tablaA group by campo2; sum | avg | campo2 -----+------------------------+-------- 1 | 1.00000000000000000000 | 4 | 2.0000000000000000 | B 1 | 1.00000000000000000000 | C 3 | 1.5000000000000000 | A prueba2=# select min(campo1), max(campo1), campo2 from tablaA group by campo2; min | max | campo2 -----+-----+-------- 1 | 1 | 2 | 2 | B 1 | 1 | C 1 | 2 | A * GROUP siempre requerirá que el campo especificado en “group by” sea parte de los resultados de la consulta. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 66/163 ●2: Software administración y SQL para DBAs
  67. 67. 2. SQL para DBAs – SQL – Select – GROUP BY y HAVING HAVING dentro de un GROUP nos permite filtrar los resultados de la consulta operando funciones en el filtro. prueba2=# select * from maestro; codigo | nombre --------+-------- 1 | plan a 2 | plan b 3 | plan c 3 | plan c prueba2=# select codigo, sum(codigo) , count(*) from maestro where sum(codigo) > 1 group by codigo; ERROR: no se permiten funciones de agregación en la cláusula WHERE LÍNEA 1: ...odigo, sum(codigo) , count(*) from maestro where sum(codigo... prueba2=# select codigo, sum(codigo) , count(*) from maestro group by codigo having sum(codigo) > 1; codigo | sum | count --------+-----+------- 3 | 6 | 2 2 | 2 | 1 (2 filas) prueba2=# select codigo, sum(codigo) , count(*), nombre from maestro group by codigo, nombre having sum(codigo) > 1; codigo | sum | count | nombre --------+-----+-------+-------- 3 | 6 | 2 | plan c 2 | 2 | 1 | plan b (2 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 67/163 ●2: Software administración y SQL para DBAs
  68. 68. 2. SQL para DBAs – SQL – Select – ORDER BY, LIMIT y OFFSET ORDER BY nos permite ordenar el resultado de nuestra consulta de manera ASCendente y DESCendente, en vez de indicar el nombre del campo de ordenamiento también podríamos simplemete referencias el número de su posición. prueba2=# select * from maestro; codigo | nombre --------+-------- 1 | plan a 2 | plan b 3 | plan c 3 | plan c 1 | plan a prueba2=# select * from maestro order by nombre asc; codigo | nombre --------+-------- 1 | plan a 1 | plan a 2 | plan b 3 | plan c 3 | plan c prueba2=# select codigo, nombre from maestro order by 2 desc; codigo | nombre --------+-------- 3 | plan c 3 | plan c 2 | plan b 1 | plan a 1 | plan a * OjO PostgreSQL presenta los datos conforme los obtiene al armar el resultado de la consulta, sin un ordenamiento entonces el resultado podría ser aleatorio. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 68/163 ●2: Software administración y SQL para DBAs
  69. 69. 2. SQL para DBAs – SQL – Select – ORDER BY, LIMIT y OFFSET LIMIT permite restringir la cantidad de registros a presentar en una consulta y OFFSET permite indicar a partir de que posición de resultado presentar el resultado, son efectivos solo si se usan con ORDER BY. prueba2=# select * from maestro order by codigo; codigo | nombre --------+-------- 1 | plan a 1 | plan a 2 | plan b 3 | plan c 3 | plan c (5 rows) prueba2=# select * from maestro order by codigo limit 2; codigo | nombre --------+-------- 1 | plan a 1 | plan a (2 rows) prueba2=# select * from maestro order by codigo limit 2 offset 2; codigo | nombre --------+-------- 2 | plan b 3 | plan c (2 rows) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 69/163 ●2: Software administración y SQL para DBAs
  70. 70. 2. SQL para DBAs – SQL – Select – SUBQUERYS Una manera de mejorar las consultas es crear sub-consultas dentro de una consulta principal, a esto se le conoce como subquerys, la combinación del uso de está funcionalidad puede ser muy variada dado que una sub-consulta puede tener a su vez otras sub-consultas anidadas. prueba2=# select * from maestro; codigo | nombre --------+-------- 1 | plan a 2 | plan b 3 | plan c prueba2=# select * from detalle; correlativo | codigo | descripción -------------+--------+------------- 1 | 1 | detalle 1 2 | 1 | detalle 2 3 | 2 | detalle 3 4 | 4 | detalle 4 5 | 4 | detalle 5 prueba2=# select * from detalle a where a.codigo in (select b.codigo from maestro b); correlativo | codigo | descripción -------------+--------+------------- 1 | 1 | detalle 1 2 | 1 | detalle 2 3 | 2 | detalle 3 prueba2=# select * from detalle a where a.codigo in (select b.codigo from maestro b where b.codigo > 1); correlativo | codigo | descripción -------------+--------+------------- 3 | 2 | detalle 3 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 70/163 ●2: Software administración y SQL para DBAs
  71. 71. 2. SQL para DBAs – SQL – Select – SUBQUERYS prueba2=# select a.correlativo, a.descripción, a.codigo, ( select b.nombre from maestro b where b.codigo = a.codigo) as nombre_maestro from detalle a; correlativo | descripción | codigo | nombre_maestro -------------+-------------+--------+---------------- 1 | detalle 1 | 1 | plan a 2 | detalle 2 | 1 | plan a 3 | detalle 3 | 2 | plan b 4 | detalle 4 | 4 | 5 | detalle 5 | 4 | prueba2=# select a.correlativo, a.descripción, ( select sum(b.codigo) from maestro b ) total_codigo, ( select c.codigo from maestro c where a.codigo = c.codigo) as codigo from detalle a; correlativo | descripción | total_codigo | codigo -------------+-------------+--------------+-------- 1 | detalle 1 | 6 | 1 2 | detalle 2 | 6 | 1 3 | detalle 3 | 6 | 2 4 | detalle 4 | 6 | 5 | detalle 5 | 6 | prueba2=# select correlativo, descripción, total_codigo, codigo, total_codigo/codigo as division from (select a.correlativo, a.descripción, ( select sum(b.codigo) from maestro b ) total_codigo, ( select c.codigo from maestro c where a.codigo = c.codigo) as codigo from detalle a) as tabla_temporal; correlativo | descripción | total_codigo | codigo | division -------------+-------------+--------------+--------+---------- 1 | detalle 1 | 6 | 1 | 6 2 | detalle 2 | 6 | 1 | 6 3 | detalle 3 | 6 | 2 | 3 4 | detalle 4 | 6 | | 5 | detalle 5 | 6 | | EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 71/163 ●2: Software administración y SQL para DBAs
  72. 72. 2. SQL para DBAs – SQL – Update Permite actualizar los datos de una tabla, se puede actualizar la información haciendo uso de el filtro WHERE para solo afectar algunos datos. prueba2=# select * from maestro; codigo | nombre --------+-------- 1 | plan a 2 | plan b 3 | plan c 3 | plan c 1 | plan a (5 rows) prueba2=# update maestro set nombre = 'plan a1' where codigo = 1 prueba2-# ; UPDATE 2 prueba2=# select * from maestro; codigo | nombre --------+--------- 2 | plan b 3 | plan c 3 | plan c 1 | plan a1 1 | plan a1 (5 rows) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 72/163 ●2: Software administración y SQL para DBAs
  73. 73. 2. SQL para DBAs – SQL – Update pruebas=# update maestro set nombre = 'A-' || nombre; UPDATE 5 pruebas=# select * from maestro; codigo | nombre --------+---------- 1 | A-plan a 2 | A-plan b 3 | A-plan c 3 | A-plan c 1 | A-plan a (5 filas) pruebas=# update maestro set nombre = 'B-' || (select nombre from maestro a where maestro.codigo = a.codigo limit 1); UPDATE 5 pruebas=# select * from maestro; codigo | nombre --------+------------ 1 | B-A-plan a 2 | B-A-plan b 3 | B-A-plan c 3 | B-A-plan c 1 | B-A-plan a (5 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 73/163 ●2: Software administración y SQL para DBAs
  74. 74. 2. SQL para DBAs – SQL – Update pruebas=# select * from maestro2; codigo | nombre --------+-------- 1 | C1 2 | C2 3 | C3 3 | C3 1 | C1 pruebas=# update maestro set nombre = a.nombre from (select codigo, nombre from maestro2) as a where maestro.codigo = a.codigo; UPDATE 5 pruebas=# select * from maestro2; codigo | nombre --------+-------- 1 | C1 2 | C2 3 | C3 3 | C3 1 | C1 Un UPDATE puede retornar un set de datos al estilo de una consulta usando el comando RETURNING pruebas=# update maestro set nombre = 'D-' || a.nombre from (select codigo, nombre from maestro2) as a where maestro.codigo = a.codigo returning maestro.*; codigo | nombre --------+-------- 1 | D-C1 1 | D-C1 2 | D-C2 3 | D-C3 3 | D-C3 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 74/163 ●2: Software administración y SQL para DBAs
  75. 75. 2. SQL para DBAs – SQL – Delete Permite eliminar los datos de una tabla, se puede eliminar la información haciendo uso de el filtro WHERE para solo afectar algunos datos. prueba2=# select * from maestro; codigo | nombre --------+-------- 1 | plan a 2 | plan b 3 | plan c 3 | plan c 1 | plan a (5 rows) prueba2=# delete from maestro ' where codigo = 1; DELETE 2 prueba2=# select * from maestro; codigo | nombre --------+--------- 2 | plan b 3 | plan c 3 | plan c (3 rows) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 75/163 ●2: Software administración y SQL para DBAs
  76. 76. 2. SQL para DBAs – SQL – Delete Podemos llevar a cabo un DELETE haciendo un WHERE que involucre a otra tabla usando USING, el uso de RETURNING también es válido en DELETE como en el UPDATE. pruebas=# select * from maestro; codigo | nombre --------+-------- 1 | D-C1 1 | D-C1 2 | D-C2 3 | D-C3 3 | D-C3 (5 filas) pruebas=# delete from maestro using maestro2 where maestro.codigo = maestro2.codigo and maestro2.codigo > 2; DELETE 2 pruebas=# delete from maestro using maestro2 where maestro.codigo = maestro2.codigo returning maestro.*; codigo | nombre --------+-------- 1 | D-C1 1 | D-C1 2 | D-C2 (3 filas) DELETE 3 pruebas=# select * from maestro; codigo | nombre --------+-------- (0 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 76/163 ●2: Software administración y SQL para DBAs
  77. 77. 2. SQL para DBAs – SQL – Truncate Permite eliminar todos los datos de una tabla, se diferencia de DELETE en que esta sentencia es “command utility”, se ejecuta directamente y es mucho más conveniente cuando el borrado debe ser masivo, demora mucho menos que un DELETE sin filtro WHERE. prueba2=# select * from maestro; codigo | nombre --------+-------- 1 | plan a 2 | plan b 3 | plan c 3 | plan c 1 | plan a (5 rows) prueba2=# truncate maestro; TRUNCATE TABLE prueba2=# select * from maestro; (0 rows) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 77/163 ●2: Software administración y SQL para DBAs
  78. 78. 2. SQL para DBAs – SQL – Create View Permite crear una “VISTA”, esto es un representación solo de consulta de los datos de una tabla o un conjunto de tablas relacionadas. prueba2=# select * from maestro; codigo | nombre --------+-------- 1 | plan a 2 | plan b 3 | plan c 3 | plan c 1 | plan a (5 rows) prueba2=# truncate maestro; TRUNCATE TABLE prueba2=# select * from maestro; (0 rows) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 78/163 ●2: Software administración y SQL para DBAs
  79. 79. 2. SQL para DBAs – SQL – Copy Copy es una excelente alternativa cuando debemos cargar información de millares de registros en una tabla, es mucho más eficiente que hacer varios insert o un insert de un select. Copy además nos permite generar un archivo con datos de una tabla o de una consulta. prueba=# copy tbl_simple2 to '/tmp/uno.txt'; COPY 8 prueba=# copy tbl_simple2(nombre) to '/tmp/uno.txt'; COPY 8 prueba=# copy (select * from tbl_simple2) to '/tmp/uno.txt'; COPY 8 prueba=# copy (select * from tbl_simple2) to stdin; 1 321ernesto 2 321juan 3 321111 4 32110chars 5 321ernesto 6 321juan 7 321111 8 32110chars EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 79/163 ●2: Software administración y SQL para DBAs
  80. 80. 2. SQL para DBAs – SQL – Copy prueba=# select * from tbl_simple; id | nombre ----+-------- (0 filas) prueba=# copy tbl_simple from '/tmp/uno.txt'; COPY 8 prueba=# select * from tbl_simple; id | nombre ----+------------ 1 | 321ernesto 2 | 321juan 3 | 321111 4 | 32110chars 5 | 321ernesto 6 | 321juan 7 | 321111 8 | 32110chars (8 filas) http://www.postgresql.org/docs/9.0/interactive/sql-copy.html EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 80/163 ●2: Software administración y SQL para DBAs
  81. 81. 2. SQL para DBAs – SELECTs Avanzados - OVER POSTGRESQL > 9.0 prueba=# select * from tbl_window; mes | nombre | sueldo --------+---------+-------- 201001 | ernesto | 10 201002 | ernesto | 11 201003 | ernesto | 12 201001 | juan | 13 201003 | juan | 15 201002 | juan | 14 prueba=# select nombre, mes, sueldo, sum(sueldo) as sueldo_total over (partition by nombre) from tbl_window; nombre | mes | sueldo | sueldo_total ---------+--------+--------+------------- ernesto | 201001 | 10 | 33 ernesto | 201002 | 11 | 33 ernesto | 201003 | 12 | 33 juan | 201001 | 13 | 42 juan | 201003 | 15 | 42 juan | 201002 | 14 | 42 prueba=# select nombre, mes, sueldo, sum(sueldo) over (partition by nombre) sueldo_total, sum(sueldo) over (partition by nombre) / 3 as sueldo_promedio, (sum(sueldo) over (partition by nombre) / 3 )- sueldo as desviacion_promedio from tbl_window; nombre | mes | sueldo | sueldo_total | sueldo_promedio | desviacion_promedio ---------+--------+--------+--------------+-----------------+--------------------- ernesto | 201001 | 10 | 33 | 11 | 1 ernesto | 201002 | 11 | 33 | 11 | 0 ernesto | 201003 | 12 | 33 | 11 | -1 juan | 201001 | 13 | 42 | 14 | 1 juan | 201003 | 15 | 42 | 14 | -1 juan | 201002 | 14 | 42 | 14 | 0 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 81/163 ●2: Software administración y SQL para DBAs
  82. 82. 2. SQL para DBAs – SELECTs Avanzados - OVER POSTGRESQL > 9.0 prueba=# select nombre, mes, sueldo, sum(sueldo) over (partition by nombre order by nombre desc, mes ) from tbl_window; nombre | mes | sueldo | sum ---------+--------+--------+----- juan | 201001 | 13 | 13 juan | 201002 | 14 | 27 juan | 201003 | 15 | 42 ernesto | 201001 | 10 | 10 ernesto | 201002 | 11 | 21 ernesto | 201003 | 12 | 33 prueba=# select nombre, mes, sueldo, rank() over (partition by nombre order by sueldo desc) from tbl_window; nombre | mes | sueldo | rank ---------+--------+--------+------ ernesto | 201003 | 12 | 1 ernesto | 201002 | 11 | 2 ernesto | 201001 | 10 | 3 juan | 201003 | 15 | 1 juan | 201002 | 14 | 2 juan | 201001 | 13 | 3 prueba=# select nombre, sueldo, mes, sum(sueldo) over ventana, avg(sueldo) over ventana from tbl_window window ventana as (partition by nombre); nombre | sueldo | mes | sum | avg ---------+--------+--------+-----+--------------------- ernesto | 10 | 201001 | 33 | 11.0000000000000000 ernesto | 11 | 201002 | 33 | 11.0000000000000000 ernesto | 12 | 201003 | 33 | 11.0000000000000000 juan | 13 | 201001 | 42 | 14.0000000000000000 juan | 15 | 201003 | 42 | 14.0000000000000000 juan | 14 | 201002 | 42 | 14.0000000000000000 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 82/163 ●2: Software administración y SQL para DBAs
  83. 83. 2. SQL para DBAs – SELECTs Avanzados - Variaciones de Distinct prueba=# select distinct nombre, id from tbl_simple2; nombre | id ------------+---- 32110chars | 8 321111 | 3 321111 | 7 321juan | 2 321ernesto | 5 321juan | 6 321ernesto | 1 32110chars | 4 prueba=# select distinct on (nombre) nombre, id from tbl_simple2 order by 1 desc, 2; nombre | id ------------+---- 321juan | 2 321ernesto | 1 321111 | 3 32110chars | 4 prueba=# select distinct on (nombre) nombre, id from tbl_simple2 order by 1, 2 desc; nombre | id ------------+---- 32110chars | 8 321111 | 7 321ernesto | 5 321juan | 6 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 83/163 ●2: Software administración y SQL para DBAs
  84. 84. 2. SQL para DBAs – SELECTs Avanzados – FETCH y LIMIT prueba=# select * from tbl_simple2 fetch first 3 rows only; id | nombre ----+------------ 1 | 321ernesto 2 | 321juan 3 | 321111 (3 filas) prueba=# select * from tbl_simple2 limit 3; id | nombre ----+------------ 1 | 321ernesto 2 | 321juan 3 | 321111 (3 filas) A simple vista parecen iguales, pero en el caso de Limit en siguientes ocasiones donde se ejecute el query el orden en el que tome los datos no necesariamente será el mismo (en el que se almacenaron en la db) a menos que se use un ORDER BY, para FETCH el orden siempre sera igual. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 84/163 ●2: Software administración y SQL para DBAs
  85. 85. 2. SQL para DBAs – SELECTs Avanzados - FOR UPDATE / FOR SHARE FOR UDATE bloqueda el acceso a los registros que se solicitan de tal manera que el query no desbloqueara los registros hasta que haya culminado la transacción en curso. prueba=# select * from tbl_simple2 limit 2 for update; FOR SHARE permite que se modifiquen los datos. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 85/163 ●2: Software administración y SQL para DBAs
  86. 86. 2. SQL para DBAs – SELECTs Avanzados - WITH Facilitamos el trabajo de subquerys definiendolo para ser usados varias veces. prueba=# select * from tbl_simple2; id | nombre ----+--------- 10 | ernesto 20 | juan 12 | pedro 12 | ernesto prueba=# select nombre, sum(id) from tbl_simple2 group by nombre; nombre | sum ---------+----- pedro | 12 ernesto | 22 juan | 20 prueba=# with suma as ( select nombre, sum(id) from tbl_simple2 group by nombre order by 2 desc limit 2) select nombre, id from tbl_simple2 where nombre in (select nombre from suma); nombre | id ---------+---- ernesto | 10 juan | 20 ernesto | 12 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 86/163 ●2: Software administración y SQL para DBAs
  87. 87. 2. SQL para DBAs – SELECTs Avanzados - SIMILAR TO Hacemos búsquedas por expresiones regulares prueba4=# select * from log_regla;              fecha            | id |   nombre   | estado  ­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­+­­­­­­­­­­­­+­­­­­­­­  2010­10­08 20:26:37.200866 |  2 | Ernesto    | I  2010­10­08 20:49:24.691783 |  8 | pedro      | I  2010­10­08 21:00:08.529349 |  1 | alejandro  | U  2010­10­08 21:21:55.82194  |  5 | pepelucho  | U prueba4=# select * from log_regla where nombre similar to '%(a|c)%';  <­­ contiene a ó c            fecha            | id |   nombre   | estado  ­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­+­­­­­­­­­­­­+­­­­­­­­  2010­10­08 21:00:08.529349 |  1 | alejandro  | U  2010­10­08 21:21:55.82194  |  5 | pepelucho  | U prueba4=# select * from log_regla where nombre similar to '%(x|f)%';  fecha | id | nombre | estado  ­­­­­­­+­­­­+­­­­­­­­+­­­­­­­­ EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 87/163 ●2: Software administración y SQL para DBAs
  88. 88. 2. SQL para DBAs – SELECTs Avanzados - SIMILAR TO prueba4=# select * from log_regla where nombre similar to '(d|f)%'; <­­ inicia con d ó f  fecha | id | nombre | estado  ­­­­­­­+­­­­+­­­­­­­­+­­­­­­­­ (0 rows) prueba4=# select * from log_regla where nombre similar to '(p|f)%';            fecha            | id |   nombre   | estado  ­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­+­­­­­­­­­­­­+­­­­­­­­  2010­10­08 20:49:24.691783 |  8 | pedro      | I  2010­10­08 20:49:43.711889 |  9 | pedro      | I  2010­10­08 21:21:55.82194  |  5 | pepelucho  | U  2010­10­08 21:22:06.759216 |  5 | pepelucho1 | U prueba4=# select * from log_regla where nombre similar to '[a­z]{5}'; <­­ alfabéticos de al menos             fecha            | id | nombre | estado                        5 letras  ­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­+­­­­­­­­+­­­­­­­­  2010­10­08 20:49:24.691783 |  8 | pedro  | I  2010­10­08 20:49:43.711889 |  9 | pedro  | I EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 88/163 ●2: Software administración y SQL para DBAs
  89. 89. 2. SQL para DBAs – Actualizaciones en Cascada Cuando existen referencias entre tablas y es necesario modificar o  actualizar datos en las tablas “padrea” tenemos que tener mucho cuidado con  el impacto que podemos tener en las tablas “hijas”, no es buena idea  activar las actualizaciones en cascada por defecto porque podrían  generarnos un problema terrible. pruebas=# create table padre ( id int primary key); pruebas=# create table hija1 ( idH int, idP int, constraint llave_foranea foreign key (idP)  references padre (id)); pruebas=# insert into padre values (1), (2); pruebas=# insert into hija1 values (1,1); pruebas=# insert into hija1 values (1,2); pruebas=# delete from padre where id = 1; ERROR:  update o delete en «padre» viola la llave foránea «llave_foranea» en la tabla «hija1» http://www.postgresql.org/docs/8.4/interactive/sql­createtable.html  EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 89/163 ●2: Software administración y SQL para DBAs
  90. 90. 2. SQL para DBAs – Actualizaciones en Cascada pruebas=# drop table hija1; pruebas=# create table hija2 ( idH int, idP int, constraint llave_foranea foreign key (idP)  references padre (id) ON DELETE CASCADE); pruebas=# insert into hija2 values (1,1); pruebas=# insert into hija2 values (1,2); pruebas=# select * from padre;  id  ­­­­   1   2 pruebas=# delete from padre where id = 1 ; DELETE 1 pruebas=# select * from padre;  id  ­­­­   2 (1 fila) pruebas=# select * from hija2;  idh | idp  ­­­­­+­­­­­    1 |   2 (1 fila) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 90/163 ●2: Software administración y SQL para DBAs
  91. 91. 2. SQL para DBAs – Actualizaciones en Cascada pruebas=# update padre set id = 3 where id = 2; ERROR:  update o delete en «padre» viola la llave foránea «llave_foranea» en la tabla «hija2» DETALLE:  La llave (id)=(2) todavía es referida desde la tabla «hija2». pruebas=# drop table hija2; pruebas=# create table hija3 ( idH int, idP int, constraint llave_foranea foreign key (idP)  references padre (id) ON DELETE CASCADE on update cascade);                     pruebas=# insert into hija3 values (1,2); pruebas=# insert into hija3 values (2,2); pruebas=# select * from hija3;  idh | idp  ­­­­­+­­­­­    1 |   2    2 |   2 pruebas=# select * from padre;  id  ­­­­   2 pruebas=# update padre set id = 3 where id = 2; pruebas=# select * from hija3;  idh | idp  ­­­­­+­­­­­    1 |   3    2 |   3 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 91/163 ●2: Software administración y SQL para DBAs
  92. 92. 2. SQL para DBAs – Actualizaciones en Cascada Borrar tablas unidas por referencias(constraints) esta prohibido hasta que  no se elimine la dependencia o en todo caso se ejecute con el atributo  “CASCADE”. pruebas=# select * from hija3;  idh | idp  ­­­­­+­­­­­    1 |   3    2 |   3 (2 filas) pruebas=# drop table padre; ERROR:  no se puede eliminar tabla padre porque otros objetos dependen de él DETALLE:  restricción «llave_foranea» en tabla hija3 depende de tabla padre SUGERENCIA:  Use DROP ... CASCADE para eliminar además los objetos dependientes. pruebas=# drop table padre cascade; NOTICE:  eliminando además restricción «llave_foranea» en tabla hija3 DROP TABLE pruebas=# select * from hija3;  idh | idp  ­­­­­+­­­­­    1 |   3    2 |   3 (2 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 92/163 ●2: Software administración y SQL para DBAs
  93. 93. ●3: Objetos de la DB, Herencias y Tablas particionadas 1. Objetos de la DB PostgreSQL permite crear objetos comunes de una base de datos tales como: ●Base datos ●Tablas ●Vistas ●Schemas ●Usuarios ●Grupos ●Roles ●Funciones (que sería un simil a store procedures) ●Triggers ●Rules ●Etc, etc. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 93/163
  94. 94. 1. Objetos de la DB - Base datos ● Si puede hacer por consola del OS usando “createdb” o desde consola de PostgreSQL (psql) usando “create database”. ● Podemos especificar quien será el owner de la db, si no se especifica por defecto el owner es el usuario que la esta creando. ● Desde la versión 8.3 PostgreSQL se une fuertemente con el Locate del OS, si no se especifica el encoding o el locate se asumirá el del OS ● La db asume la estructura de una db “template”, esta es por defecto la db “template1”, podemos usar cualquier db como template siempre y cuando no exista ningún usuario logeado en ella, se recomienda no cambiar la estructura de template1, solo se copia estructura y no data. CREATE DATABASE name [ [ WITH ] [ OWNER [=] user_name ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] connlimit ] ] EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 94/163 ●3: Objetos de la DB, Herencias y Tablas particionadas
  95. 95. 1. Objetos de la DB - Base datos Teóricamente no hay problemas de recibir data en Latin1 (ASCii) en una db UTF8, solo es necesario hacer esto: ALTER DATABASE base_de_datos SET client_encoding TO 'latin1'; Para cambiar el encoding de toda la db: update pg_database set encoding=8 where datname=’base_de_datos’; Para ver la tabla de códigos completa: http://www.lscvsystems.com/blog/?p=32 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 95/163 ●3: Objetos de la DB, Herencias y Tablas particionadas
  96. 96. 1. Objetos de la DB - Types Los Types son estructuras de datos definidas por el usuario, además de los ejemplos especificados en las láminas 35 a 37 también podemos: a) Types de datos enumerados template1=# create type mes as enum ('enero', 'febrero', 'marzo'); CREATE TYPE template1=# create table tbl_mes ( fecha mes); CREATE TABLE template1=# insert into tbl_mes values ('enero'); INSERT 0 1 template1=# insert into tbl_mes values ('abril'); ERROR: la sintaxis de entrada no es válida para el enum mes: «abril» LÍNEA 1: insert into tbl_mes values ('abril'); El orden de los enumerados en caso de aplicar al campo un “order by” es el orden en el que fueron declarados los valores. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 96/163 ●3: Objetos de la DB, Herencias y Tablas particionadas
  97. 97. 1. Objetos de la DB - Types b) Types de retorno de estructura de datos template1=# create type tpy_cuenta as( cmp_cuenta char(10)); CREATE TYPE template1=# create function fn_cuenta () returns setof tpy_cuenta as $$ select cuenta from tbl_padre $$ language sql; CREATE FUNCTION template1=# select fn_cuenta(); fn_cuenta ---------------- ("00.01 ") ("10.01 ") ("10.02 ") ("40.01 ") ("540.01 ") (5 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 97/163 ●3: Objetos de la DB, Herencias y Tablas particionadas
  98. 98. 1. Objetos de la DB - Types Crear una tabla de un Type nos ayuda a tener estructuras pre-construidas para los datos. prueba4=# create type tpy_usuario as (id integer, password char(25), nombre  varchar(100)); prueba4=# create table tbl_usuario of tpy_usuario; prueba4=# select * from tbl_usuario;                                                    id | password | nombre   ­­­­+­­­­­­­­­­+­­­­­­­­                                                                (0 rows)    prueba4=# drop type tpy_usuario cascade; NOTICE:  drop cascades to table tbl_usuario DROP TYPE  EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 98/163 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 98/163 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 98/163 ●3: Objetos de la DB, Herencias y Tablas particionadas
  99. 99. 1. Objetos de la DB – Types Un campo de la tabla puede tener la estructura de un Type. prueba4=# create table tbl_usuario2 ( id serial, datos_unicos tpy_usuario); prueba4=# insert into tbl_usuario2 values (1,(1,'password','nombre')); prueba4=# insert into tbl_usuario2 (datos_unicos.id, datos_unicos.password,  datos_unicos.nombre)  values (2, 'password2', 'nombre2'); prueba4=# select * from tbl_usuario2;  id |              datos_unicos                ­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­   1 | (1,"password                 ",nombre)   1 | (2,"password2                ",nombre2) prueba4=# select (datos_unicos).password from tbl_usuario2;          password           ­­­­­­­­­­­­­­­­­­­­­­­­­­­  password                   password2  EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 99/163 ●3: Objetos de la DB, Herencias y Tablas particionadas
  100. 100. 1. Objetos de la DB - Types Borrar el type hará que se pierdan todas los campos creados a partir de este en todas las tablas donde se haya usado. prueba4=# drop type tpy_usuario cascade; NOTICE:  drop cascades to 2 other objects DETAIL:  drop cascades to table tbl_usuario drop cascades to table tbl_usuario2 column datos_unicos DROP TYPE prueba4=# select * from tbl_usuario2;                        id  ­­­­   1   1 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 100/163 ●3: Objetos de la DB, Herencias y Tablas particionadas

×