SlideShare una empresa de Scribd logo
1 de 186
Descargar para leer sin conexión
Curso de PostgreSQL DBA
                              2010




                                                            informes@eqsoft.net


EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                1/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
●Día 1: Instalación y Configuración
       ●Día 2: Objetos de la DB y Accesos
       ●Día 3: SQL y Tipos de datos especiales
       ●Día 4: Transacciones, Functions, Triggers y Rules
       ●Día 5: Mantenimiento y análisis de querys




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                2/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 1. Instalación:

 3 forma de instalación son las más comunes:

 ●   Instalación vía paquetes instaladores (deb ó rpm)
      ● Ventajas: mantenimiento prácticamente 0
      ● Desventajas: ramas congeladas o sin actualizar por mucho tiempo

 ●   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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                3/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 1. Instalación:

 Instalación vía paquetes instaladores (deb ó rpm)
   ● Consideraciones : mantener siempre actualiza 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                4/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                5/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 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

 ●   Desktop 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                6/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                7/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración




 Instalando......




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                8/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 1. Instalación:
 ●   La mayoría de las distribuciones actuales generan los directorios
     necesarios para correr el cluster de la DB, el caso de Ubuntu:

     ●   /etc/postgresql     <-- archivos de configuración, separados por
                                 versión principalmente pg_hba.conf y
                                 postgresql.conf.
     ●   /usr/lib/postgresql <-- binarios y librerías, separados por versiones,
                                 separados por versión.
     ●   /var/lib/postgresql <-- data de la DB, separados por versión.

 ●   El usuario administrador más común creado por los instaladores es
     “postgres”, alternativamente es “pgsql” (en otras distribuciones).




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                9/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 1. Instalación:
 ●   Dentro de /var/lib/postgresql/x.y/main (reemplazar x.y con la versión de
     su PostgreSQL) encontrará los directorios de trabajo de la base de datos:

     ● Base            <--   directorio de data
     ● global          <--   directorio de data global del sistema
     ● pg_clog         <--   directorio de resultado de transacciones
     ● pg_multixact    <--   locks
     ● pg_stat_tmp     <--   archivos temporales de las estadísticas de las dbs
     ● pg_subtrans     <--   usado en control de transacciones
     ● pg_tblspc       <--   enlaces simbólicos a los tablespaces
     ● pg_twophase     <--   usado en control de transacciones
     ● pg_xlog         <--   directorio de WAL (historia de movimientos de data, es
                             la que asegura que la dbms sea ACID)

       2 archivos adicionales:
     ● 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.


EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               10/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 2. Asegurando el sistema.

 Por defecto PostgreSQL viene configurado para dar accesos en “localhost”,
 los usuarios comunes de administración son “postgres” y “pgsql”.

 Vamos a crear un nuevo “Super Usuario” desde consola:

 usuario@host: sudo su – postgres                       <-- ingrese su password

 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               11/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 2. Asegurando el sistema

 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”.

 usuario@host: sudo nano /etc/postgresql/8.4/main/pg_hba.conf <-- reemplace 8.4 por su
 DICE:                                                            versión instalada
 # Database administrative login by UNIX sockets
 local   all         postgres                           ident
 # "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
 DEBE DECIR:
 # Database administrative login by UNIX sockets
 #local   all         postgres                          ident
 # "local" is for Unix domain socket connections only
 local   all         all                                password   <-- obligamos a que todo usuario
 # IPv4 local connections:                                             conecte localmente escriba
 host    all         all         127.0.0.1/32           password       su password
 # IPv6 local connections:
 #host    all         all         ::1/128               md5        <-- usamos esto solo si tenemos
                                                                       protocolo Ipv6.




EQ Soft Consultoría y Soporte E.I.R.L.                                  Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                     12/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 2. Asegurando el sistema

 Reiniciamos el sistema

 usuario@host: sudo /etc/init.d/postgresql-X.Y restart <-- X.Y la versión
                                                           Instalada.

 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:
 pg_hba.conf, si lo pueden editar nos desasen la seguridad.




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               13/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 3. Archivo de configuración 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.                                     Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                        14/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 3. Archivo de configuración pg_hba.conf

 a)Conecciones locales (x socket) ó de host seguras o inseguras (x TCP/IP)

 Posbles 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               15/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 Configuración básica:

 2. Archivo de configuración 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 detras 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               16/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 3. Archivo de configuración 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.                             Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                17/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 3. Archivo de configuración 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               18/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 4. Archivo de configuración postgresql.conf

 El archivo “postgresql.conf” contiene los parametros 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               19/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 4. Archivo de configuración postgresql.conf

 El archivo “postgresql.conf” contiene los parametros de configuración del
 rendimiento y funcionalidad del dbms, algunos parámetros principales:

 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_statement = 'none'     <-- permite loggear los querys que procesa la
                                Dbms.
                                none, no loggea querys
                                all, loggea todos los querys, bien o mal
                                     procesados
                                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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               20/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 4. Archivo de configuración 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
                                presició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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               21/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración



 Archivo de configuración pg_hba.conf y postgresql.conf




 Practica




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               22/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 5. Instalando PhpPgAdmin y PgAdmin3


 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).

 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['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




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               23/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 5. Instalando PhpPgAdmin y 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.

 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               24/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración



 5. Instalando PhpPgAdmin y PgAdmin3




 Practica




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               25/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 5. Afinando Postgresql

 PostgreSQL no requiere demasiado trabajo de afinamiento, básicamente
 concentra toda la labor de esto en los parámetros de postgresql.conf

 Los valores que tiene postgresql.conf están pensados para trabajar en una
 configuración de hardware mínima.

 a)como calcular el valor de SHARED_BUFFERS

 Shared_buffers nos dice cuanta memoria va a consumir la dbms, se recomeinda que sea al
 menos 10% a 25% de la ram disponible en el sistema y hasta un 40%, el valor nunca
 puede ser jamas al informado en “/proc/sys/kernel/shmmax”.

 Para medir el valor correcto debemos contar cuantas “páginas” caben en la cantidad de
 ram asignada en shared_buffers, una página generalmente mide 8kb, por ejemplo si
 tenemos 4gb de ram asignaremos 400mb (400mb no es exacto el 10%):

 En postgresql.conf ponemos:
 shared_buffers=400mb




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               26/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 5. Afinando Postgresql

 a)como calcular el valor de SHARED_BUFFERS

 Calculamos el valor en shmmax:

 400mb x 1024kb = 409600   <-- cantidad de kb a utilizar por el buffer
 409600 / 8 = 51200        <-- cantidad de páginas a utilizar por el buffer
 51200 x 8192b = 419430400 <-- cantidad mínima de ram en bytes que se debe configurar
                               Debe considerarse que hay otras aplicaciones que hacen
                               Uso de esta cantidad de ram asignada.


 Abrimos el archivo “/etc/sysctl.conf” y añadimos:
 kernel.shmmax = 421527552 <-- añadimos un par de megas más para asegurarnos que no
                                Nos faltará ram.




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               27/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 5. Afinando Postgresql

 b)como calcular el valor de WORK_MEM

 work_mem es el espacio de memoria que se usará para los ordenamientos de los datos
 cuando se ejecutan consultas, no existe una formula exacta de cálculo dependerá de que
 tanta data se mueva en las consultas que ejecutamos y cual es la concurrencia de
 ejecución de las consultas.

 La regla   dice, si las consultas se ejecutan con poca concurrencia entonces asignar
 entre 2%   a 4% de la ram disponible será ideal, pero si la concurrencia es alta
 entonces   debe asignarse menos memoria debido a que cada consulta consume la misma
 cantidad   de ram.

 work_men = 163MB     <-- 4% de 4gb (redondeado)




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               28/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración


 5. Afinando Postgresql

 c)temp_buffers

 Es la cantidad de memoria que tendrá asignada cada conexión al dbms para manejo de
 tablas temporales, esta no se libera hasta que la sesión muera, cada sesión podría
 manejar un tamaño difereten y mayor al de default (8mb) pero solo hasta antes de
 generar la primera tabla temporal.

 d)max_locks_per_transaction

 Permite indicar cuantos objetos se pueden bloquear en una transacción, un registro no
 se considera un objeto, el default es 64 solo valdría la pena subirlo si es que
 tenemos transacciones que bloquean muchos más objetos únicos (tablas) que este valor,
 obviamente el consumo de memoria crecerá.

 e)max_connections

 Determina cuantas conexiones soportará el dbms, subirlo significará un consumo de
 recursos adicional en el OS (sistema operativo), y en realidad no servirá de mucho si
 es que el OS no soporta esta carga de trabajo.




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               29/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 Configuración básica:

 5. Afinando Postgresql

 f)random_page_cost

 Determina en que momento se van a utilizar índices ó búsquedas
 secuenciales, el valor por defecto es 4, se recomienda aumentarlo para
 discos lentos y bajarlo para discos rápidos.

 Considere que los índices son efectivos si la variedad de datos es alta, si
 es baja entonces es probable que aunque se mueva la configuración se
 ejecuten búsquedas secuenciales.

 g)effective_cache_size

 Setea el tamaño de cache en RAM que se usará en una consulta, el valor por defecto es
 128Mb, un valor alto facilitará el uso de índices, un valor bajo hará que se prefiera
 el uso de búsquedas secuenciales, se recomienda como máximo 50% del total de la RAM.




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               30/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Instalación y Configuración

 Configuración básica:

 5. Afinando Postgresql

 h)statement_timeout

 Configura cuanto tiempo puede demorar un query en ejecutarse, evita que se lancen
 querys extremadamente pesados que demoren mucho tiempo en ejecutarse, por defecto es 0
 (desactivado) pero se expresa en milisegundos, OjO configurarlo afectará todos los
 querys.




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               31/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 PostgreSQL permite crear objetos comunes de uan 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               32/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 a) 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               33/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 a) Base datos

 Teóricamente no hay problemas de recibir data en Latin1 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               34/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 b) Tablas

 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               35/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 b) Tablas

 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               36/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 b) Tablas

 Un campo de la tabla puede tener la estructura de un Type.

 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               37/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 b) Tablas

 INHERITS nos permite heredar a la estructura de nuestra nueva tabla la estructura de
 otra tabla.

 prueba4=# create table tbl_padre (id integer, nombre varchar(100));
 prueba4=# create table tbl_hijo (direccion varchar(200)) INHERITS (tbl_padre);
 CREATE TABLE
 prueba4=# select * from tbl_hijo;                                             
  id | nombre | direccion 
 ­­­­+­­­­­­­­+­­­­­­­­­­­
 (0 rows)

 prueba4=# drop table tbl_padre cascade;
 NOTICE:  drop cascades to table tbl_hijo
 DROP TABLE

 LIKE genera el mismo efecto pero al borrar la tabla padre no se pierde la estructura.

 prueba4=# create table tbl_hijo2  (like tbl_padre);
 prueba4=# create table tbl_hijo3  (like tbl_padre, casa varchar(300));



EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               38/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 c) Vistas

 Una interesante funcionalidad extendida es la posibilidad de tener vistas “updatable”,
 es soportado solo insert y update.

 prueba4=# create table tbl_vista ( id integer, nombre varchar(100));

 prueba4=# crea view vw_vista as select * from tbl_vista;

 prueba4=# create rule rul_vista as on insert to vw_vista do instead insert into
 tbl_vista (id,nombre) values (new.id, new.nombre);

 prueba4=# insert into vw_vista (id,nombre) values (1,'ernesto');

 prueba4=# select * from tbl_vista;
  id | nombre
 ----+---------
   1 | ernesto




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               39/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 d) Schemas

 Los esquemas son contenedores de objetos dentro de una db, por default
 trabajamos en el schema PUBLIC.

 La principal utilidad puede estar en la administración de permisos a los
 objetos de la db ó simplemente la organización.

 prueba4=#   create   schema public2;
 prueba4=#   create   table public2.tbl_prueba(id integer);
 prueba4=#   create   table public.tbl_prueba(id integer);
 prueba4=#   insert   into tbl_prueba values(1);
 prueba4=#   insert   into public2.tbl_prueba(2);

 prueba4=# select * from public.tbl_prueba;
  id
 ----
   1
 prueba4=# select * from public2.tbl_prueba;
  id
 ----
   2




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               40/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 e) Domain

 Los domains nos dejan crear tipos de datos validados, si lo eliminamos
 eliminamos todos los campos de todas las tablas que lo han usado.

 prueba3=# create domain dmn_adulto as integer check (value > 18 and value < 60);
 prueba3=# create table tbl_persona(id int, edad dmn_adulto);

 prueba3=# insert into persona values (1,25);
 INSERT 0 1
 prueba3=# insert into persona values (1,5);
 ERROR: value for domain dmn_adulto violates check constraint "dmn_adulto_check"

 prueba3=# drop domain dmn_adulto cascade;
 NOTICE: drop cascades to table persona column edad
 DROP DOMAIN
 prueba3=# select * from persona;
  id
 ----
   1




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               41/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB

 f) Sequence

 Una funcionalidad interesante puede ser aplicable en entornos donde se
 producen muchas “insersiones” de data, y es mantener una cantidad de
 números en memoria para un acceso más rápido a los contadores.

 prueba4=# create sequence contador cache 100;                <-- reserva 100 números en
                                                                  Cache

 Cycle permite reiniciar el contador con el mínimo valor especificado cuando
 este llega a su máximo valor declarado.

 prueba4=# create sequence cmin_max cycle minvalue 1 maxvalue 3;

 Increment permite definir cada cuantas unidades aumentará el contador,
 positivo ó negativo.

 prueba4=# create sequence salto increment -10;




EQ Soft Consultoría y Soporte E.I.R.L.                             Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                42/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 1. Objetos convencionales en la DB




 Practica




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               43/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 2. Accesos

 a) Los roles

 Un rol es básicamente lo mismo que un usuario ó un grupo, no existe diferencia
 fundamental entre ambos, principalmente al crear un usuario tiene más permisos
 asignados que cuando uno crea un rol donde todo esta desactivado por defecto.

 CREATE ROLE name [ [ WITH ] option [ ... ] ]
 where option can be:
       SUPERUSER | NOSUPERUSER
     | CREATEDB | NOCREATEDB
     | CREATEROLE | NOCREATEROLE
     | CREATEUSER | NOCREATEUSER
     | INHERIT | NOINHERIT
     | LOGIN | NOLOGIN
     | CONNECTION LIMIT connlimit
     | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
     | VALID UNTIL 'timestamp'
     | IN ROLE rolename [, ...]
     | IN GROUP rolename [, ...]
     | ROLE rolename [, ...]
     | ADMIN rolename [, ...]
     | USER rolename [, ...]
     | SYSID uid




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               44/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 2. Accesos

 b) Los permisos

 Por defecto uno tiene permisos totales sobre los objetos que haya creado
 con su propio rol, ningún rol puede acceder a un objeto creado por otro
 rol.

 Se usan 2 comandos principales para asignación de permisos Grant (autoriza)
 y Revoke (desautoriza).

 prueba4=# create role usr1 password 'prueba';
 prueba4=# create role usr2 password 'prueba';

 Como usr1
 prueba4=> create table tbl_prueba ( id integer);

 Como usr2
 prueba4=> select * from tbl_prueba;
 ERROR: permission denied for relation tbl_prueba




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               45/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 2. Accesos

 b) Los permisos - GRANT

 ●GRANT   ON TABLE
 ●GRANT   ( column ) ON TABLE
 ●GRANT   ON SEQUENCE
 ●GRANT   ON DATABASE
 ●GRANT   ON FOREIGN DATA WRAPPER           <-- para conexiones Dlink
 ●GRANT   ON FOREIGN SERVER                 <-- para conexiones Dlink
 ●GRANT   ON FUNCTION
 ●GRANT   ON LANGUAGE
 ●GRANT   ON LARGE OBJECT
 ●GRANT   ON SCHEMA
 ●GRANT   ON TABLESPACE
 ●GRANT   role_name TO role_name




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               46/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 2. Accesos

 b) Los permisos - GRANT

 ●GRANT ON TABLE
 ●GRANT ( column ) ON TABLE




     prueba4=# create role usr3 password 'usr3' login;
     prueba4=# create table tbl_acceso (id integer, nombre varchar(100));
     prueba4=# grant insert on table tbl_accesos to usr3;

     Como usr3

     prueba4=> select * from tbl_acceso;
     ERROR: permission denied for relation tbl_acceso

     prueba4=> insert into tbl_acceso values ( 1, 'ernesto');
     INSERT 0 1




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               47/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 2. Accesos

 b) Los permisos - GRANT

 ●GRANT ON TABLE
 ●GRANT ( column ) ON TABLE




     prueba4=# grant select (nombre) on tbl_acceso to usr3;
     GRANT

     Como usr3

     prueba4=> select * from tbl_acceso;
     ERROR: permission denied for relation tbl_acceso

     prueba4=> select nombre from tbl_acceso;
      nombre
     ---------
      ernesto

     No existe GRANT para “vistas”, se tratan como tablas (usar ON TABLE).



EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               48/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 2. Accesos

 b) Los permisos - GRANT

 ●GRANT ON DATABASE
 ●GRANT ON SCHEMA




     prueba4=# create table sin_acceso.prueba(id integer);
     CREATE TABLE

     Como usuario usr3

     prueba4=> select * from sin_acceso.prueba;
     ERROR: permission denied for schema sin_acceso
     LINE 1: select * from sin_acceso.prueba;

     Como superusuario:

     prueba4=# grant usage on sin_acceso to usr3;
     prueba4=# grant select on table sin_acceso.prueba to usr3;




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               49/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 2. Accesos

 b) Los permisos - REVOKE

  Sigue más o menos la misma estructura de GRANT salvo que en vez de dar
 permisos los retira.

 REVOKE [ GRANT OPTION FOR ]
     { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
     [,...] | ALL [ PRIVILEGES ] }
     ON { [ TABLE ] table_name [, ...]
          | ALL TABLES IN SCHEMA schema_name [, ...] }
     FROM { [ GROUP ] role_name | PUBLIC } [, ...]
     [ CASCADE | RESTRICT ]




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               50/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 2. Accesos

 c) Usuarios del dbms vs Usuarios de la aplicación

  Muchas aplicaciones (especialmente web) siguen la lógica de conectarse a la
 dbms usando un solo usuario y controlan los accesos a opciones del sistema.

 Esto es muy práctico de mantener, no llena la dbms de usuarios, PERO,
 permite que todos tengan el mismo nivel de acceso a todos los objetos de la
 db con los problemas que esto puede tener.

 Para ver los accesos superiores de un rol puede utilizar este comando:

 prueba4=> select * from pg_user;
   usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig
 -----------+----------+-------------+----------+-----------+----------+----------+-----------
  postgres |        10 | t           | t        | t         | ******** |          |
  dbadmin   |    16392 | t           | t        | t         | ******** |          |
  pgsql     |    16643 | t           | t        | t         | ******** |          |
  usr3      |    24410 | f           | f        | f         | ******** | infinity |
  usr4      |    24414 | f           | f        | f         | ******** |          |




EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    51/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 2. Accesos

 c) Usuarios del dbms vs Usuarios de la aplicación

  OjO, todas las claves por defecto se guardan encriptadas en MD5 (lo cual 
 es relativamente seguro, pero no totalmente) sin embargo cerciórese de no 
 generar claves sin encriptación ya que fácilmente se puede ver estas con el 
 siguiente comando:

 template1=# create role usr8 unencrypted password 'se_me_ve_todo' login;

 template1=# select usename, passwd from pg_shadow; 
   usename  |               passwd                
 ­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  postgres  | md54abfba9c735cfbc34d97b56a593120c0
  dbadmin   | md5695c0e25f6fe7c4ce633c67292190b90
  pgsql     | 
  usr1      | md51575823e236277b188fdd5d691aa8d08
  usr3      | md5f06099b5e97add7ed510d76e24146f1e
  usr8      | se_me_ve_todo



EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               52/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 2. Accesos




 PRACTICA




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               53/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 3. TableSpaces y Tablas Particionadas

 a) Tablespace

 Los tablespaces nos permite generar áreas de almacenamiento de objetos de
 una db en directorios ó unidades de almacenamiento diferentes a la
 determinada por defecto.

 La ventaja de esto es que podemos balancear el trabajo de nuestra DB en
 diversas unidades haciendo que nuestra performanse mejore notablemente.

 Un tablespace puede ser:

 ●Otro disco duro
 ●Un “disco” de estado solido (SSD)

 ●Una memoria USB

 ●Un “disco” virtual (en RAM)

 ●Otros tipos de unidades de almacenamiento




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               54/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 3. TableSpaces y Tablas Particionadas

 a) Tablespace

 CREATE TABLESPACE tablespacename [ OWNER username ] LOCATION 'directory'

 El owner siempre es por defecto el creador, el directorio donde se creará
 el tablespace debe estar VACIO y tener los permisos del usuario de Linux
 que ejecuta el servicio del dbms.
 Como root (o con sudo):
 root@depeche:~# mkdir /home/tablespace
 root@depeche:~# chown postgres:postgres /home/tablespace/

 En consola de PgSQL:
 template1=# create tablespace ts_prueba location '/home/tablespace';
 template1=# create table tbl_prueba(id serial) tablespace ts_prueba;

 Como root:
 root@depeche:/home/tablespace#   ls -la
 total 16
 drwx------ 3 postgres postgres   4096   2010-10-04   12:43   .
 drwxr-xr-x 4 root     root       4096   2010-10-04   12:35   ..
 drwx------ 2 postgres postgres   4096   2010-10-04   12:43   1            <-- directorio de la data
 -rw------- 1 postgres postgres      4   2010-10-04   12:41   PG_VERSION




EQ Soft Consultoría y Soporte E.I.R.L.                                       Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                          55/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 3. TableSpaces y Tablas Particionadas

 a) Tablespace
 Podemos usar esta funcionalidad con:

 ●Base de datos
 ●Tablas

 ●Indices




 Se recomienda que los Tablespaces creados en discos virtuales ó memorias USB solo
 almacenen objetos de la db de los cuales se puedo presncindir como tablas temporales,
 esto debido a que son muy volátiles y fácil de corromper o perder los datos (por
 ejemplo tener un tablespace en disco virtual desaparece si alguien reinicia el
 servidor).

 Los tablespace de índices tienen una muy buena persormanse en discos SSD.

 Más sobre tablespace en ram:
 http://wiki.postgresql.org/wiki/La_verdad_y_la_mentira_de_los_tablespaces_en_memoria




EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    56/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 3. TableSpaces y Tablas Particionadas

 b) Tablas particionadas
 Las tablas particionadas nos permiten crear diferentes espacios de almacenamiento para
 una data en común.

 template1=# create table tbl_padre(cuenta char(10));
 template1=# create table tbl_hija10(cuenta char(10)) inherits (tbl_padre);
 template1=# create table tbl_hija20(cuenta char(10)) inherits (tbl_padre);

 template1=# insert into tbl_hija20 values('20.01');
 template1=# insert into tbl_hija10 values('10.01');

 template1=# select * from tbl_padre;
    cuenta
 ------------
  10.01
  20.01

 template1=# select * from tbl_hija10;
    cuenta
 ------------
  10.01


EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               57/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 3. TableSpaces y Tablas Particionadas

 b) Tablas particionadas
 template1=# create table tbl_hija30(descripcion varchar(100)) inherits (tbl_padre);
 template1=# insert into tbl_hija30 values('30.01', 'orden');
 template1=# select * from tbl_hija30;
    cuenta   | descripcion
 ------------+-------------
  30.01      | orden

 template1=# select * from tbl_padre;
    cuenta
 ------------
 ..
  30.01

 template1=# create table tbl_hija40() inherits (tbl_padre);
 template1=# insert into tbl_hija40 values('40.01');
 template1=# select * from tbl_padre;
     cuenta
 ------------
 ...
  40.01

 template1=# select * from tbl_hija40;
    cuenta
 ------------
  40.01



EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    58/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 3. TableSpaces y Tablas Particionadas

 b) Tablas particionadas
 template1=# create table tbl_hija50( check (substr(cuenta,1,1) = '5' )) inherits (tbl_padre);
 template1=# insert into tbl_hija50 values('540.01');

 template1=# insert into tbl_hija50 values('640.01');
 ERROR: el nuevo registro para la relación «tbl_hija50» viola la restricción check
 «tbl_hija50_cuenta_check»

 template1=# select * from tbl_padrE;
     cuenta
 ------------
 ...
  540.01

 template1=# drop table tbl_padre;
 ERROR: no se puede eliminar tabla tbl_padre porque otros objetos dependen de él
 DETALLE: tabla tbl_hija10 depende de tabla tbl_padre
 tabla tbl_hija20 depende de tabla tbl_padre
 tabla tbl_hija30 depende de tabla tbl_padre
 tabla tbl_hija40 depende de tabla tbl_padre
 SUGERENCIA: Use DROP ... CASCADE para eliminar además los objetos dependientes.

 template1=# drop table tbl_hija20;
 DROP TABLE




EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    59/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 3. TableSpaces y Tablas Particionadas

 b) Tablas particionadas
 Supongamos que tenemos el caso de una tabla de movimientos contables, con millones de
 registros por mes y decidimos crear una tabla por mes, pero es tanta data que
 necesitamos grabarla en diferentes unidades físicas de almacenamiento, aplicamos:
 template1=# create table tbl_hija60( check (substr(cuenta,1,1) = '6' )) inherits (tbl_padre)
 tablespace ts_prueba;
 CREATE TABLE

 A cada tabla “hija” podemos aplicarle sus propios índices y relaciones, al igual que a
 la tabla padre.
 template1=# create index idx_padre on tbl_padre(cuenta);
 CREATE INDEX
 template1=# create index idx_padre2 on tbl_padre(cuenta) tablespace ts_prueba;
 CREATE INDEX

 Para retirar la herencia entre las tablas.
 template1=# alter table tbl_hija30 no inherit tbl_padre;
 template1=# select * from tbl_padre;
    cuenta
 ------------
  10.01
  40.01
  540.01
 (3 filas)



EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    60/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 3. TableSpaces y Tablas Particionadas

 b) Tablas particionadas
 Podemos crear rules o triggers para manejar la correcta desviación de los datos cuando
 se intenta grabar en la tabla principal ó padre.

 template1=# CREATE RULE rl_tbl_padre10 AS
 template1-# ON INSERT TO tbl_padre WHERE ( substr(cuenta,1,2) = '10' )
 template1-# DO INSTEAD INSERT INTO tbl_hija10 VALUES (NEW.cuenta);

 template1=# insert into tbl_padre values ('10.02');
 template1=# select * from tbl_padre;
    cuenta
 ------------
  00.01
  10.01
  10.02
  40.01
  540.01
 (5 filas)

 template1=# select * from tbl_hija10;
    cuenta
 ------------
  10.01
  10.02
 (2 filas)


EQ Soft Consultoría y Soporte E.I.R.L.                                    Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                       61/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Objetos de la DB y Accesos


 3. TableSpaces y Tablas Particionadas

 b) Tablas particionadas




 PRACTICA




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               62/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 1. Creando estructuras de datos

 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.                                     Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                        63/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 1. Creando estructuras de datos
 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.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    64/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 2. 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               65/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 2. 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.                                                Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                                   66/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 2. 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




EQ Soft Consultoría y Soporte E.I.R.L.                                  Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                     67/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 2. Tipos de datos




 PRACTICA




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               68/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 a)Tsvector

 El tipo de datos Vector nos permite almacenar cadenas en lexemas para facilitar las
 búsquedas de cadenas específicas en textos muy largos.

 prueba=# create table tbl_vector ( campo1 text, campo2 tsvector);

 prueba=# insert into tbl_vector values ( 'esta es una pruena de un vector repitiendo la palabra vector','esta es una
 prueba de un vector repitiendo la palabra vector');

 prueba=# insert into tbl_vector values ( 'esta es una pruena de un vector repitiendo la palabra vector','esta es una
 prueba de un vector repitiendo la palabra vector');

 prueba=# insert into tbl_vector values ( 'árbol y vector añade acentos y eñes','árbol y vector añade acentos y eñes');

 prueba=# insert into tbl_vector values ( 'las ratas y los ratones estan ratoneando un rato', 'las ratas y los ratones
 estan ratoneando un rato');


                 ^
 prueba=# select * from tbl_vector;
                             campo1                            |                                  campo2
 --------------------------------------------------------------+---------------------------------------------------------------------------
  esta es una pruena de un vector                              | 'de' 'es' 'esta' 'prueba' 'un' 'una' 'vector'
  esta es una pruena de un vector repitiendo la palabra vector | 'de' 'es' 'esta' 'la' 'palabra' 'prueba' 'repitiendo' 'un' 'una' 'vector'
  árbol y vector añade acentos y eñes                          | 'acentos' 'añade' 'eñes' 'vector' 'y' 'árbol'
  las ratas y los ratones estan ratoneando un rato             | 'estan' 'las' 'los' 'ratas' 'rato' 'ratoneando' 'ratones' 'un' 'y'




EQ Soft Consultoría y Soporte E.I.R.L.                                                                    Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                                                       69/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 a)Tsvector

 prueba=# select campo1 from tbl_vector where to_tsvector(campo1) @@ to_tsquery('añade');
                campo1
 -------------------------------------
  árbol y vector añade acentos y eñes


 prueba=# select campo1 from tbl_vector where to_tsvector(campo1) @@ to_tsquery('vector & palabra');
                             campo1
 --------------------------------------------------------------
  esta es una pruena de un vector repitiendo la palabra vector


 Podemos acceder directamente al campo del vector.
 prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('pg_catalog.spanish','vector');
                             campo1
 --------------------------------------------------------------
  esta es una pruena de un vector
  esta es una pruena de un vector repitiendo la palabra vector
  árbol y vector añade acentos y eñes


 Pero esto no funciona, ¿porque?

 prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('pg_catalog.spanish','palabra');
  campo1
 --------
 (0 filas)



EQ Soft Consultoría y Soporte E.I.R.L.                                               Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                                  70/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 a)Tsvector

 Para una mejor administración de los datos debemos especificar el idioma en el cual
 estamos añadiendo los datos.

 prueba=# insert into tbl_vector values('esto añade soporte en español', to_tsvector('pg_catalog.spanish','esto añade
 soporte en español'));
 prueba=# select campo2 from tbl_vector;
                                   campo2
 ---------------------------------------------------------------------------
  'acentos' 'añade' 'eñes' 'vector' 'y' 'árbol'
  'añad':2 'español':5 'soport':3



 prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('pg_catalog.spanish','añad');
             campo1
 -------------------------------
  esto añade soporte en español



 prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('pg_catalog.spanish','añada');
             campo1
 -------------------------------
  esto añade soporte en español




EQ Soft Consultoría y Soporte E.I.R.L.                                               Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                                  71/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 a)Tsvector

 Tenemos a nuestra disposición diferentes operadores lógicos
 prueba=# delete from tbl_vector;
 prueba=# insert into tbl_vector values('esto añade soporte en español', to_tsvector('pg_catalog.spanish','esto añade
 soporte en español'));
 prueba=# insert into tbl_vector values('vamos a repetir vector 2 veces más, vector, vector',
 to_tsvector('pg_catalog.spanish','vamos a repetir vector 2 veces más, vector, vector'));

 prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('añada & vector');
  campo1
 --------
 (0 filas)

 prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('añada | vector');
                        campo1
 ----------------------------------------------------
  esto añade soporte en español
  vamos a repetir vector 2 veces más, vector, vector
 (2 filas)

 prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('!vec');
             campo1
 -------------------------------
  esto añade soporte en español

 prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('!vec & añada');
             campo1
 -------------------------------
  esto añade soporte en español



EQ Soft Consultoría y Soporte E.I.R.L.                                                  Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                                     72/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 a)Tsvector

 Para combinar operadores lógicos entre varios campos:
 && <-- and
 ●|| <-- or

 ●!! <-- not




 Los vectores se pueden indexar, para ellos existe el tipo de índice GIN.
 prueba=# create index idx_vector3 on tbl_vector using gin(campo2);
 CREATE INDEX

 En caso de que los textos se actualicen demasiado seguido entonces podemos crear un
 trigger para que actualice la columna donde están guardados los lexemas.

 Para listar los lexemas más usados:
 prueba=# SELECT * FROM ts_stat('SELECT campo2 FROM tbl_vector') ORDER BY nentry DESC, ndoc DESC, word LIMIT 5;
   word   | ndoc | nentry
 ---------+------+--------
  cociner |    1 |      5
  adrià   |    1 |      3
  gaston |     1 |      3
  mund    |    1 |      3
  peruan |     1 |      3




EQ Soft Consultoría y Soporte E.I.R.L.                                               Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                                  73/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 b)Arreglos

 Los arreglos en PostgreSQL son como en cualquier lenguaje de programación, su longitud
 y dimensión es variable.
 prueba4=# create table tbl_array (data int[]);
 prueba4=# insert into tbl_array values('{1,2,3,4,5}');
 prueba4=# select * from tbl_array;
     data
 -------------
  {1,2,3,4,5}


 prueba4=# alter table tbl_array add column data2 int[][];
 prueba4=# insert into tbl_array (data2) values('{{1,2},{2,3},{3,4},{4,5},{5,6}}');
 prueba4=# select * from tbl_array;
     data     |              data2
 -------------+---------------------------------
  {1,2,3,4,5} |
              | {{1,2},{2,3},{3,4},{4,5},{5,6}}




EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    74/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 b)Arreglos

 prueba4=# select data from tbl_array where data[2]=2;
     data
 -------------
  {1,2,3,4,5}
 (1 row)

 prueba4=# select data from tbl_array where data[2]=1;
  data
 ------
 (0 rows)

 prueba4=# select data2 from tbl_array where data2[1][2]=2;
               data2
 ---------------------------------
  {{1,2},{2,3},{3,4},{4,5},{5,6}}
 (1 row)

 prueba4=# select data2 from tbl_array where data2[1][3]=2;
  data2
 -------
 (0 rows)




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               75/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 b)Arreglos

 prueba4=# alter table tbl_array add column data3 int[][3];
 ALTER TABLE

 prueba4=# insert into tbl_array (data3) values('{{1,2,3},{2,3,4}}');
 INSERT 0 1
 prueba4=# select * from tbl_array;
     data     |              data2              |       data3
 -------------+---------------------------------+-------------------
  {1,2,3,4,5} |                                 |
              | {{1,2},{2,3},{3,4},{4,5},{5,6}} |
              |                                 | {{1,2,3},{2,3,4}}
 (3 rows)

 prueba4=# select data3 from tbl_array where data3[2][3]=4;
        data3
 -------------------
  {{1,2,3},{2,3,4}}
 (1 row

 prueba4=# select data3 from tbl_array where data3[2][5]=4;
  data3
 -------
 (0 rows)




EQ Soft Consultoría y Soporte E.I.R.L.                                  Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                     76/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 c)OIDs

 Los OIDs son identificadores únicos de los objetos en la base de datos, incluso cada
 registro tiene un OID propio que jamas se repite en ninguna otra tabla.

 prueba4=# create table tbl_oid2(id integer) with oids;

 prueba4=# insert into tbl_oid2 values(1);
 INSERT 24446 1
 prueba4=# insert into tbl_oid2 values(2);
 INSERT 24447 1
 prueba4=# select * from tbl_oid2;
  id
 ----
   1
   2
 (2 rows)

 prueba4=# select oid,* from tbl_oid2;
   oid | id
 -------+----
  24446 | 1
  24447 | 2
 (2 rows)




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               77/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 c)OIDs

 Para obtener los oids de los objetos en la base de datos
 prueba4=# select oid,relname from pg_class where substr(relname,1,3) = 'tbl';
   oid |        relname
 -------+---------------------
 ...
  24440 | tbl_oid
  24443 | tbl_oid2

 prueba4=# SELECT attrelid,attname FROM pg_attribute where attrelid = 'tbl_oid2'::Regclass;
  attrelid | attname
 ----------+----------
     24443 | tableoid
 ...
     24443 | oid
 ...
     24443 | id

 prueba4=# SELECT attrelid,attname FROM pg_attribute where attrelid = 'vw_vista'::Regclass;
  attrelid | attname
 ----------+---------
     24380 | id
     24380 | nombre




EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    78/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 c)OIDs

 Podemos borrar data apuntando a su OID

 prueba4=# delete from tbl_oid2 where oid = 24447;
 DELETE 1

 prueba4=# select * from tbl_oid2;
  id
 ----
   1
 (1 row)


 Ahora por defecto ya no se crean OIDs para data, esto debido a que en volúmenes muy
 grandes de datos los OIDs podrían llegar a ser insuficientes y es por ello que se
 prescinde de ellos por defecto.




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               79/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 d)Very Large Objetcs

 PostgreSQL permite guardar binarios dentro de una tabla de muchos gigas de extensión,
 estos files no se guardan directamente dentro de la tabla creada sino en un ambiente
 especial y se apunta el oid del file para acceder a este.

 prueba4=# create table tbl_files( name varchar(100), file oid);

 prueba4=# insert into tbl_files values('primer archivo',
 lo_import('/home/ernesto/Descargas/Programa.pdf'));
 INSERT 0 1
 prueba4=# select * from tbl_files;
       name      | file
 ----------------+-------
  primer archivo | 24455
 (1 row

 prueba4=# select lo_export(tbl_files.file,'/tmp/Programa.pdf') from tbl_files where file = '24455';
  lo_export
 -----------
          1
 (1 row)




EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    80/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales
 d)Very Large Objetcs

 Para retirar el binario añadido a la base de datos.

 prueba4=# update tbl_files set file = null;   <-- borramos el link pero no la data

 prueba4=# insert into tbl_files values('segundo archivo', lo_import('/home/ernesto/Descargas/LAN.png'));

 prueba4=# select * from tbl_files;
       name       | file
 -----------------+-------
  primer archivo |
  segundo archivo | 24456

 prueba4=# select lo_unlink(tbl_files.file) from tbl_files where file = 24456;
  lo_unlink
 -----------
          1

 prueba4=# update tbl_files set file= lo_import('/home/ernesto/Descargas/LAN.png') where name = 'segundo
 archivo';
 prueba4=# select * from tbl_files;
       name       | file
 -----------------+-------
  primer archivo |
  segundo archivo | 24457




EQ Soft Consultoría y Soporte E.I.R.L.                                        Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                           81/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 3. Tipos de datos especiales




 PRACTICA




EQ Soft Consultoría y Soporte E.I.R.L.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               82/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 a)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.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    83/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 a)Insert
 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.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    84/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 b)Update
 prueba=# select * from tbl_simple;
  id | nombre
 ----+---------
   1 | ernesto
   2 | juan
   3 | 111
   4 | 10chars

 prueba=# update tbl_simple2 set nombre = '1'||nombre;
 UPDATE 8

 prueba=# update tbl_simple set nombre = (select tbl_simple2.nombre from tbl_simple2 where
 tbl_simple2.id = tbl_simple.id);
 UPDATE 4

 prueba=# select * from tbl_simple;
  id | nombre
 ----+----------
   1 | 1ernesto
   2 | 1juan
   3 | 1111
   4 | 110chars




EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    85/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 b)Update
 prueba=# update tbl_simple2 set nombre = '2'||nombre;

 prueba=# update tbl_simple set nombre = a.nombre from ( select id, nombre from tbl_simple2) as a
 where tbl_simple.id = a.id;
 UPDATE 4

 prueba=# select * from tbl_simple;
  id | nombre
 ----+-----------
   1 | 21ernesto
   2 | 21juan
   3 | 21111
   4 | 2110chars

 prueba=# update tbl_simple set nombre = a.nombre from ( select id, nombre from tbl_simple2) as a
 where tbl_simple.id = a.id returning tbl_simple.*;
  id | nombre
 ----+-----------
   1 | 21ernesto
   2 | 21juan
   3 | 21111
   4 | 2110chars




EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    86/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 b)Update
 prueba=# update tbl_simple set nombre = a.nombre from ( select tbl_simple2.id, tbl_simple2.nombre
 from tbl_simple2 join tbl_simple on tbl_simple.id = tbl_simple2.id) as a where a.id=tbl_simple.id
 returning tbl_simple.*;

  id |   nombre
 ----+------------
   1 | 321ernesto
   2 | 321juan
   3 | 321111
   4 | 32110chars
 (4 filas)




EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    87/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 c)Delete
 prueba=# delete from tbl_simple using tbl_simple2 where tbl_simple.id=tbl_simple2.id returning
 tbl_simple.*;

  id |   nombre
 ----+------------
   1 | 321ernesto
   2 | 321juan
   3 | 321111
   4 | 32110chars

 prueba=# select * from tbl_simple;
  id | nombre
 ----+--------
 (0 filas)




EQ Soft Consultoría y Soporte E.I.R.L.                                 Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                    88/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 d)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 insertde
 un select.

 Copy además nos permite generar un un archivo exportado con datos.
 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               89/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 d)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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               90/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 e)Select - OVER
 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.                                               Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                                  91/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 e)Select - OVER
 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.                                               Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                                  92/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 e)Select – FROM ONLY
 prueba=# create table ciudades ( nombre varchar(100));

 prueba=# create table capitales ( capital boolean) inherits (ciudades);


 prueba=#   insert   into   ciudades values ('callao');
 prueba=#   insert   into   ciudades values ('piura');
 prueba=#   insert   into   capitales values ('lima', true);
 prueba=#   insert   into   capitales values ('buenos aires', true);

 prueba=# select * from ciudades;
     nombre
 --------------
  callao
  piura
  lima
  buenos aires
 (4 filas)

 prueba=# select * from only ciudades;
  nombre
 --------
  callao
  piura
 (2 filas)




EQ Soft Consultoría y Soporte E.I.R.L.                                     Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                        93/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 e)Select – 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.                                                  Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                                     94/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 e)Select – 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               95/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 e)Select – 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.                            Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                               96/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 e)Select – 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.                                               Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                                  97/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
SQL y Tipos de Datos Especiales


 4. Sentencias SQL

 e)Select – 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.                                  Curso de PostgreSQL DBA
Http://www.eqsoft.net                                                                     98/186
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL
Curso de PostgreSQL

Más contenido relacionado

La actualidad más candente

Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3Bryan Rodríguez
 
Migrando de MSSQL a PostgreSQL
Migrando de MSSQL a PostgreSQLMigrando de MSSQL a PostgreSQL
Migrando de MSSQL a PostgreSQLscastell77
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadSantiago Zarate
 
Cluster con postgresql
Cluster con postgresqlCluster con postgresql
Cluster con postgresqlesmeraldaq2011
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQLbrobelo
 
Postgresql Como Funciona Una Dbms Por Dentro
Postgresql Como Funciona Una Dbms Por DentroPostgresql Como Funciona Una Dbms Por Dentro
Postgresql Como Funciona Una Dbms Por DentroEQ SOFT EIRL
 
Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5AdrianAsisVegaSegura
 
Instalación de sgbd en diferentes plataformas de windows
Instalación de sgbd en diferentes plataformas de windowsInstalación de sgbd en diferentes plataformas de windows
Instalación de sgbd en diferentes plataformas de windowsDaniel Huerta Cruz
 
Requerimientos de instalación
Requerimientos de instalaciónRequerimientos de instalación
Requerimientos de instalaciónPrincezitha Ruiz
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slonyJohanna Mendez
 
Instalación y configuración de sgbd presentacion
Instalación y configuración de sgbd presentacionInstalación y configuración de sgbd presentacion
Instalación y configuración de sgbd presentacionhugoAlvidrez
 
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.EtiCAGNU
 
Replicacion Postgresql
Replicacion PostgresqlReplicacion Postgresql
Replicacion Postgresqljockbrera
 
Presentación de Postgresql 9.1
Presentación de Postgresql 9.1Presentación de Postgresql 9.1
Presentación de Postgresql 9.1EQ SOFT EIRL
 

La actualidad más candente (20)

Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3
 
Migrando de MSSQL a PostgreSQL
Migrando de MSSQL a PostgreSQLMigrando de MSSQL a PostgreSQL
Migrando de MSSQL a PostgreSQL
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidad
 
Cluster en sql server
Cluster en sql serverCluster en sql server
Cluster en sql server
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Cluster con postgresql
Cluster con postgresqlCluster con postgresql
Cluster con postgresql
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Postgresql Como Funciona Una Dbms Por Dentro
Postgresql Como Funciona Una Dbms Por DentroPostgresql Como Funciona Una Dbms Por Dentro
Postgresql Como Funciona Una Dbms Por Dentro
 
Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5
 
Postgresql
PostgresqlPostgresql
Postgresql
 
Instalación de sgbd en diferentes plataformas de windows
Instalación de sgbd en diferentes plataformas de windowsInstalación de sgbd en diferentes plataformas de windows
Instalación de sgbd en diferentes plataformas de windows
 
Introducción a PostgreSql
Introducción a PostgreSqlIntroducción a PostgreSql
Introducción a PostgreSql
 
Requerimientos de instalación
Requerimientos de instalaciónRequerimientos de instalación
Requerimientos de instalación
 
Postgresql expo
Postgresql expoPostgresql expo
Postgresql expo
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Instalación y configuración de sgbd presentacion
Instalación y configuración de sgbd presentacionInstalación y configuración de sgbd presentacion
Instalación y configuración de sgbd presentacion
 
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
 
Replicacion Postgresql
Replicacion PostgresqlReplicacion Postgresql
Replicacion Postgresql
 
Presentación de Postgresql 9.1
Presentación de Postgresql 9.1Presentación de Postgresql 9.1
Presentación de Postgresql 9.1
 

Destacado

Catálogo de Servicios de Eq Soft - 2016
Catálogo de Servicios de Eq Soft - 2016Catálogo de Servicios de Eq Soft - 2016
Catálogo de Servicios de Eq Soft - 2016EQ SOFT EIRL
 
Servicios de Software Factory - EqSoft
Servicios de Software Factory - EqSoftServicios de Software Factory - EqSoft
Servicios de Software Factory - EqSoftEQ SOFT EIRL
 
Emite - Facturación Electrónica
Emite - Facturación ElectrónicaEmite - Facturación Electrónica
Emite - Facturación ElectrónicaEQ SOFT EIRL
 
Brochure Soluciones de Sensores Para Museos
Brochure Soluciones de Sensores Para MuseosBrochure Soluciones de Sensores Para Museos
Brochure Soluciones de Sensores Para MuseosEQ SOFT EIRL
 
Afinamiento de la_base_de_datos
Afinamiento de la_base_de_datosAfinamiento de la_base_de_datos
Afinamiento de la_base_de_datosUTN
 
58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasicoLucia Zambrano Franco
 
LA ADMINISTRACIÓN PÚBLICA. MODELOS
LA ADMINISTRACIÓN PÚBLICA. MODELOSLA ADMINISTRACIÓN PÚBLICA. MODELOS
LA ADMINISTRACIÓN PÚBLICA. MODELOSVanezza Reyes
 
Comandos y funciones sql postgres
Comandos y funciones sql postgresComandos y funciones sql postgres
Comandos y funciones sql postgresHIPOLITO GRULLON
 
Alta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLAlta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLCarlos Gustavo Ruiz
 
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...Nicola Strappazzon C.
 
26 prolog con base de datos postgresql paso a paso
26 prolog con  base de datos postgresql   paso a paso26 prolog con  base de datos postgresql   paso a paso
26 prolog con base de datos postgresql paso a paso.. ..
 
Evolucion de PostgreSQL hasta 9.4
Evolucion de PostgreSQL hasta 9.4Evolucion de PostgreSQL hasta 9.4
Evolucion de PostgreSQL hasta 9.4Anthony Sotolongo
 
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLMANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLJesus Alberto Casco Agudelo
 

Destacado (16)

Catálogo de Servicios de Eq Soft - 2016
Catálogo de Servicios de Eq Soft - 2016Catálogo de Servicios de Eq Soft - 2016
Catálogo de Servicios de Eq Soft - 2016
 
Servicios de Software Factory - EqSoft
Servicios de Software Factory - EqSoftServicios de Software Factory - EqSoft
Servicios de Software Factory - EqSoft
 
Emite - Facturación Electrónica
Emite - Facturación ElectrónicaEmite - Facturación Electrónica
Emite - Facturación Electrónica
 
Brochure Soluciones de Sensores Para Museos
Brochure Soluciones de Sensores Para MuseosBrochure Soluciones de Sensores Para Museos
Brochure Soluciones de Sensores Para Museos
 
Afinamiento de la_base_de_datos
Afinamiento de la_base_de_datosAfinamiento de la_base_de_datos
Afinamiento de la_base_de_datos
 
58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico58517228 postgre sql-desarrolladoresbasico
58517228 postgre sql-desarrolladoresbasico
 
LA ADMINISTRACIÓN PÚBLICA. MODELOS
LA ADMINISTRACIÓN PÚBLICA. MODELOSLA ADMINISTRACIÓN PÚBLICA. MODELOS
LA ADMINISTRACIÓN PÚBLICA. MODELOS
 
Presentación postgre sql
Presentación postgre sqlPresentación postgre sql
Presentación postgre sql
 
Postgre
PostgrePostgre
Postgre
 
Comandos y funciones sql postgres
Comandos y funciones sql postgresComandos y funciones sql postgres
Comandos y funciones sql postgres
 
Alta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLAlta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQL
 
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
 
26 prolog con base de datos postgresql paso a paso
26 prolog con  base de datos postgresql   paso a paso26 prolog con  base de datos postgresql   paso a paso
26 prolog con base de datos postgresql paso a paso
 
Tp1 db avanz-v1.1
Tp1 db avanz-v1.1Tp1 db avanz-v1.1
Tp1 db avanz-v1.1
 
Evolucion de PostgreSQL hasta 9.4
Evolucion de PostgreSQL hasta 9.4Evolucion de PostgreSQL hasta 9.4
Evolucion de PostgreSQL hasta 9.4
 
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLMANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
 

Similar a Curso de PostgreSQL

Paso4 colborativo3 grupo11
Paso4 colborativo3 grupo11Paso4 colborativo3 grupo11
Paso4 colborativo3 grupo11YOLAGAR
 
Motor de base de datos
Motor de base de datos Motor de base de datos
Motor de base de datos maryciprian05
 
Potsgrade emerson
Potsgrade emerson Potsgrade emerson
Potsgrade emerson HeidyGuzmn2
 
Alta disponibilidad con Pacemaker
Alta disponibilidad con PacemakerAlta disponibilidad con Pacemaker
Alta disponibilidad con PacemakerNelson Calero
 
Sistemas operativos para red
Sistemas operativos para redSistemas operativos para red
Sistemas operativos para red123456damian
 
Unidad 9. El proceos de instalación en Linux
Unidad 9. El proceos de instalación en LinuxUnidad 9. El proceos de instalación en Linux
Unidad 9. El proceos de instalación en Linuxcarmenrico14
 
Entonamiento y perfilado de Drupal
Entonamiento y perfilado de DrupalEntonamiento y perfilado de Drupal
Entonamiento y perfilado de Drupalcamposer
 
Tres gestores de bases de datos
Tres gestores de bases de datosTres gestores de bases de datos
Tres gestores de bases de datossatakin_armando7
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slonyJohanna Mendez
 
Instalacion y configuracion de postgre sql
Instalacion y configuracion de postgre sqlInstalacion y configuracion de postgre sql
Instalacion y configuracion de postgre sqlUPTM
 
Slackware asterisk
Slackware asteriskSlackware asterisk
Slackware asteriskpavel
 
Slackware asterisk
Slackware asteriskSlackware asterisk
Slackware asteriskpavel
 
Postgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_pPostgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_pedvin_marcelo
 

Similar a Curso de PostgreSQL (20)

Pg pool cluster postgresql
Pg pool cluster postgresqlPg pool cluster postgresql
Pg pool cluster postgresql
 
Paso4 colborativo3 grupo11
Paso4 colborativo3 grupo11Paso4 colborativo3 grupo11
Paso4 colborativo3 grupo11
 
Oracle
OracleOracle
Oracle
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Motor de base de datos
Motor de base de datos Motor de base de datos
Motor de base de datos
 
Potsgrade emerson
Potsgrade emerson Potsgrade emerson
Potsgrade emerson
 
Alta disponibilidad con Pacemaker
Alta disponibilidad con PacemakerAlta disponibilidad con Pacemaker
Alta disponibilidad con Pacemaker
 
Base de datos sql
Base de datos sqlBase de datos sql
Base de datos sql
 
Sistema operativo de red
Sistema operativo de redSistema operativo de red
Sistema operativo de red
 
Sistemas operativos para red
Sistemas operativos para redSistemas operativos para red
Sistemas operativos para red
 
Unidad 9. El proceos de instalación en Linux
Unidad 9. El proceos de instalación en LinuxUnidad 9. El proceos de instalación en Linux
Unidad 9. El proceos de instalación en Linux
 
Entonamiento y perfilado de Drupal
Entonamiento y perfilado de DrupalEntonamiento y perfilado de Drupal
Entonamiento y perfilado de Drupal
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
Tres gestores de bases de datos
Tres gestores de bases de datosTres gestores de bases de datos
Tres gestores de bases de datos
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Instalacion y configuracion de postgre sql
Instalacion y configuracion de postgre sqlInstalacion y configuracion de postgre sql
Instalacion y configuracion de postgre sql
 
Slackware asterisk
Slackware asteriskSlackware asterisk
Slackware asterisk
 
Slackware asterisk
Slackware asteriskSlackware asterisk
Slackware asterisk
 
Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
Postgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_pPostgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_p
 

Más de EQ SOFT EIRL

Libro sobre exportación de servicios post Covid-19
Libro sobre exportación de servicios post Covid-19Libro sobre exportación de servicios post Covid-19
Libro sobre exportación de servicios post Covid-19EQ SOFT EIRL
 
Peruanos en Twitter
Peruanos en TwitterPeruanos en Twitter
Peruanos en TwitterEQ SOFT EIRL
 
Recomendaciones Para el Tratamiento de Datos en Inteligencia Artificial
Recomendaciones Para el Tratamiento de Datos en Inteligencia ArtificialRecomendaciones Para el Tratamiento de Datos en Inteligencia Artificial
Recomendaciones Para el Tratamiento de Datos en Inteligencia ArtificialEQ SOFT EIRL
 
Centros Regionales de Innovación Aplicada
Centros Regionales de Innovación AplicadaCentros Regionales de Innovación Aplicada
Centros Regionales de Innovación AplicadaEQ SOFT EIRL
 
EQ Soft: Soluciones de innovación agraria
EQ Soft: Soluciones de innovación agrariaEQ Soft: Soluciones de innovación agraria
EQ Soft: Soluciones de innovación agrariaEQ SOFT EIRL
 
Transformación Digital en Logística
Transformación Digital en LogísticaTransformación Digital en Logística
Transformación Digital en LogísticaEQ SOFT EIRL
 
Propuestas de innovacón financiera
Propuestas de innovacón financieraPropuestas de innovacón financiera
Propuestas de innovacón financieraEQ SOFT EIRL
 
Clusters Empresariales en Latinoamérica
Clusters Empresariales en LatinoaméricaClusters Empresariales en Latinoamérica
Clusters Empresariales en LatinoaméricaEQ SOFT EIRL
 
Inteligencia Artificial en la Administración Pública
Inteligencia Artificial en la Administración PúblicaInteligencia Artificial en la Administración Pública
Inteligencia Artificial en la Administración PúblicaEQ SOFT EIRL
 
Inteligencia artificial para las empresas 2019
Inteligencia artificial para las empresas 2019Inteligencia artificial para las empresas 2019
Inteligencia artificial para las empresas 2019EQ SOFT EIRL
 
Platique.me solución integral de Smart ChatBot
Platique.me solución integral de Smart ChatBotPlatique.me solución integral de Smart ChatBot
Platique.me solución integral de Smart ChatBotEQ SOFT EIRL
 
Logos Dictados - solución de Speech to Text
Logos Dictados - solución de Speech to TextLogos Dictados - solución de Speech to Text
Logos Dictados - solución de Speech to TextEQ SOFT EIRL
 
Logos Biblios - Gestión de Conocimientos
Logos Biblios - Gestión de ConocimientosLogos Biblios - Gestión de Conocimientos
Logos Biblios - Gestión de ConocimientosEQ SOFT EIRL
 
Logos, Framework de Inteligencia Artificial
Logos, Framework de Inteligencia ArtificialLogos, Framework de Inteligencia Artificial
Logos, Framework de Inteligencia ArtificialEQ SOFT EIRL
 
Logos: Framework de Inteligencia Artificial
Logos: Framework de Inteligencia ArtificialLogos: Framework de Inteligencia Artificial
Logos: Framework de Inteligencia ArtificialEQ SOFT EIRL
 
Presentación de Logos en el Cade Digital
Presentación de Logos en el Cade DigitalPresentación de Logos en el Cade Digital
Presentación de Logos en el Cade DigitalEQ SOFT EIRL
 
Logos Codex: Plataforma de Big Data
Logos Codex: Plataforma de Big DataLogos Codex: Plataforma de Big Data
Logos Codex: Plataforma de Big DataEQ SOFT EIRL
 
Portafolio de Productos y Servicios de EqSoft
Portafolio de Productos y Servicios de EqSoftPortafolio de Productos y Servicios de EqSoft
Portafolio de Productos y Servicios de EqSoftEQ SOFT EIRL
 
Soluciones de RPA para automatizar procesos
Soluciones de RPA para automatizar procesosSoluciones de RPA para automatizar procesos
Soluciones de RPA para automatizar procesosEQ SOFT EIRL
 

Más de EQ SOFT EIRL (20)

Libro sobre exportación de servicios post Covid-19
Libro sobre exportación de servicios post Covid-19Libro sobre exportación de servicios post Covid-19
Libro sobre exportación de servicios post Covid-19
 
Peruanos en Twitter
Peruanos en TwitterPeruanos en Twitter
Peruanos en Twitter
 
Recomendaciones Para el Tratamiento de Datos en Inteligencia Artificial
Recomendaciones Para el Tratamiento de Datos en Inteligencia ArtificialRecomendaciones Para el Tratamiento de Datos en Inteligencia Artificial
Recomendaciones Para el Tratamiento de Datos en Inteligencia Artificial
 
Centros Regionales de Innovación Aplicada
Centros Regionales de Innovación AplicadaCentros Regionales de Innovación Aplicada
Centros Regionales de Innovación Aplicada
 
EQ Soft: Soluciones de innovación agraria
EQ Soft: Soluciones de innovación agrariaEQ Soft: Soluciones de innovación agraria
EQ Soft: Soluciones de innovación agraria
 
Transformación Digital en Logística
Transformación Digital en LogísticaTransformación Digital en Logística
Transformación Digital en Logística
 
Propuestas de innovacón financiera
Propuestas de innovacón financieraPropuestas de innovacón financiera
Propuestas de innovacón financiera
 
Clusters Empresariales en Latinoamérica
Clusters Empresariales en LatinoaméricaClusters Empresariales en Latinoamérica
Clusters Empresariales en Latinoamérica
 
Inteligencia Artificial en la Administración Pública
Inteligencia Artificial en la Administración PúblicaInteligencia Artificial en la Administración Pública
Inteligencia Artificial en la Administración Pública
 
Inteligencia artificial para las empresas 2019
Inteligencia artificial para las empresas 2019Inteligencia artificial para las empresas 2019
Inteligencia artificial para las empresas 2019
 
Platique.me solución integral de Smart ChatBot
Platique.me solución integral de Smart ChatBotPlatique.me solución integral de Smart ChatBot
Platique.me solución integral de Smart ChatBot
 
Logos Dictados - solución de Speech to Text
Logos Dictados - solución de Speech to TextLogos Dictados - solución de Speech to Text
Logos Dictados - solución de Speech to Text
 
Logos Biblios - Gestión de Conocimientos
Logos Biblios - Gestión de ConocimientosLogos Biblios - Gestión de Conocimientos
Logos Biblios - Gestión de Conocimientos
 
Logos, Framework de Inteligencia Artificial
Logos, Framework de Inteligencia ArtificialLogos, Framework de Inteligencia Artificial
Logos, Framework de Inteligencia Artificial
 
Internet of Food
Internet of FoodInternet of Food
Internet of Food
 
Logos: Framework de Inteligencia Artificial
Logos: Framework de Inteligencia ArtificialLogos: Framework de Inteligencia Artificial
Logos: Framework de Inteligencia Artificial
 
Presentación de Logos en el Cade Digital
Presentación de Logos en el Cade DigitalPresentación de Logos en el Cade Digital
Presentación de Logos en el Cade Digital
 
Logos Codex: Plataforma de Big Data
Logos Codex: Plataforma de Big DataLogos Codex: Plataforma de Big Data
Logos Codex: Plataforma de Big Data
 
Portafolio de Productos y Servicios de EqSoft
Portafolio de Productos y Servicios de EqSoftPortafolio de Productos y Servicios de EqSoft
Portafolio de Productos y Servicios de EqSoft
 
Soluciones de RPA para automatizar procesos
Soluciones de RPA para automatizar procesosSoluciones de RPA para automatizar procesos
Soluciones de RPA para automatizar procesos
 

Último

Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfMARIAPAULAMAHECHAMOR
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docxAleParedes11
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 

Último (20)

Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdf
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 

Curso de PostgreSQL

  • 1. Curso de PostgreSQL DBA 2010 informes@eqsoft.net EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 1/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 2. ●Día 1: Instalación y Configuración ●Día 2: Objetos de la DB y Accesos ●Día 3: SQL y Tipos de datos especiales ●Día 4: Transacciones, Functions, Triggers y Rules ●Día 5: Mantenimiento y análisis de querys EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 2/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 3. Instalación y Configuración 1. Instalación: 3 forma de instalación son las más comunes: ● Instalación vía paquetes instaladores (deb ó rpm) ● Ventajas: mantenimiento prácticamente 0 ● Desventajas: ramas congeladas o sin actualizar por mucho tiempo ● 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 3/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 4. Instalación y Configuración 1. Instalación: Instalación vía paquetes instaladores (deb ó rpm) ● Consideraciones : mantener siempre actualiza 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 4/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 5. Instalación y Configuración 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 5/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 6. Instalación y Configuración 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 ● Desktop 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 6/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 7. Instalación y Configuración 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 7/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 8. Instalación y Configuración Instalando...... EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 8/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 9. Instalación y Configuración 1. Instalación: ● La mayoría de las distribuciones actuales generan los directorios necesarios para correr el cluster de la DB, el caso de Ubuntu: ● /etc/postgresql <-- archivos de configuración, separados por versión principalmente pg_hba.conf y postgresql.conf. ● /usr/lib/postgresql <-- binarios y librerías, separados por versiones, separados por versión. ● /var/lib/postgresql <-- data de la DB, separados por versión. ● El usuario administrador más común creado por los instaladores es “postgres”, alternativamente es “pgsql” (en otras distribuciones). EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 9/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 10. Instalación y Configuración 1. Instalación: ● Dentro de /var/lib/postgresql/x.y/main (reemplazar x.y con la versión de su PostgreSQL) encontrará los directorios de trabajo de la base de datos: ● Base <-- directorio de data ● global <-- directorio de data global del sistema ● pg_clog <-- directorio de resultado de transacciones ● pg_multixact <-- locks ● pg_stat_tmp <-- archivos temporales de las estadísticas de las dbs ● pg_subtrans <-- usado en control de transacciones ● pg_tblspc <-- enlaces simbólicos a los tablespaces ● pg_twophase <-- usado en control de transacciones ● pg_xlog <-- directorio de WAL (historia de movimientos de data, es la que asegura que la dbms sea ACID) 2 archivos adicionales: ● 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. EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 10/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 11. Instalación y Configuración 2. Asegurando el sistema. Por defecto PostgreSQL viene configurado para dar accesos en “localhost”, los usuarios comunes de administración son “postgres” y “pgsql”. Vamos a crear un nuevo “Super Usuario” desde consola: usuario@host: sudo su – postgres <-- ingrese su password 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 11/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 12. Instalación y Configuración 2. Asegurando el sistema 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”. usuario@host: sudo nano /etc/postgresql/8.4/main/pg_hba.conf <-- reemplace 8.4 por su DICE: versión instalada # Database administrative login by UNIX sockets local all postgres ident # "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 DEBE DECIR: # Database administrative login by UNIX sockets #local all postgres ident # "local" is for Unix domain socket connections only local all all password <-- obligamos a que todo usuario # IPv4 local connections: conecte localmente escriba host all all 127.0.0.1/32 password su password # IPv6 local connections: #host all all ::1/128 md5 <-- usamos esto solo si tenemos protocolo Ipv6. EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 12/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 13. Instalación y Configuración 2. Asegurando el sistema Reiniciamos el sistema usuario@host: sudo /etc/init.d/postgresql-X.Y restart <-- X.Y la versión Instalada. 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: pg_hba.conf, si lo pueden editar nos desasen la seguridad. EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 13/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 14. Instalación y Configuración 3. Archivo de configuración 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 14/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 15. Instalación y Configuración 3. Archivo de configuración pg_hba.conf a)Conecciones locales (x socket) ó de host seguras o inseguras (x TCP/IP) Posbles 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 15/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 16. Instalación y Configuración Configuración básica: 2. Archivo de configuración 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 detras 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 16/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 17. Instalación y Configuración 3. Archivo de configuración 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 17/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 18. Instalación y Configuración 3. Archivo de configuración 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 18/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 19. Instalación y Configuración 4. Archivo de configuración postgresql.conf El archivo “postgresql.conf” contiene los parametros 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 19/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 20. Instalación y Configuración 4. Archivo de configuración postgresql.conf El archivo “postgresql.conf” contiene los parametros de configuración del rendimiento y funcionalidad del dbms, algunos parámetros principales: 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_statement = 'none' <-- permite loggear los querys que procesa la Dbms. none, no loggea querys all, loggea todos los querys, bien o mal procesados 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 20/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 21. Instalación y Configuración 4. Archivo de configuración 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 presició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. Curso de PostgreSQL DBA Http://www.eqsoft.net 21/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 22. Instalación y Configuración Archivo de configuración pg_hba.conf y postgresql.conf Practica EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 22/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 23. Instalación y Configuración 5. Instalando PhpPgAdmin y PgAdmin3 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). 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['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 EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 23/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 24. Instalación y Configuración 5. Instalando PhpPgAdmin y 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. 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 24/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 25. Instalación y Configuración 5. Instalando PhpPgAdmin y PgAdmin3 Practica EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 25/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 26. Instalación y Configuración 5. Afinando Postgresql PostgreSQL no requiere demasiado trabajo de afinamiento, básicamente concentra toda la labor de esto en los parámetros de postgresql.conf Los valores que tiene postgresql.conf están pensados para trabajar en una configuración de hardware mínima. a)como calcular el valor de SHARED_BUFFERS Shared_buffers nos dice cuanta memoria va a consumir la dbms, se recomeinda que sea al menos 10% a 25% de la ram disponible en el sistema y hasta un 40%, el valor nunca puede ser jamas al informado en “/proc/sys/kernel/shmmax”. Para medir el valor correcto debemos contar cuantas “páginas” caben en la cantidad de ram asignada en shared_buffers, una página generalmente mide 8kb, por ejemplo si tenemos 4gb de ram asignaremos 400mb (400mb no es exacto el 10%): En postgresql.conf ponemos: shared_buffers=400mb EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 26/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 27. Instalación y Configuración 5. Afinando Postgresql a)como calcular el valor de SHARED_BUFFERS Calculamos el valor en shmmax: 400mb x 1024kb = 409600 <-- cantidad de kb a utilizar por el buffer 409600 / 8 = 51200 <-- cantidad de páginas a utilizar por el buffer 51200 x 8192b = 419430400 <-- cantidad mínima de ram en bytes que se debe configurar Debe considerarse que hay otras aplicaciones que hacen Uso de esta cantidad de ram asignada. Abrimos el archivo “/etc/sysctl.conf” y añadimos: kernel.shmmax = 421527552 <-- añadimos un par de megas más para asegurarnos que no Nos faltará ram. EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 27/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 28. Instalación y Configuración 5. Afinando Postgresql b)como calcular el valor de WORK_MEM work_mem es el espacio de memoria que se usará para los ordenamientos de los datos cuando se ejecutan consultas, no existe una formula exacta de cálculo dependerá de que tanta data se mueva en las consultas que ejecutamos y cual es la concurrencia de ejecución de las consultas. La regla dice, si las consultas se ejecutan con poca concurrencia entonces asignar entre 2% a 4% de la ram disponible será ideal, pero si la concurrencia es alta entonces debe asignarse menos memoria debido a que cada consulta consume la misma cantidad de ram. work_men = 163MB <-- 4% de 4gb (redondeado) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 28/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 29. Instalación y Configuración 5. Afinando Postgresql c)temp_buffers Es la cantidad de memoria que tendrá asignada cada conexión al dbms para manejo de tablas temporales, esta no se libera hasta que la sesión muera, cada sesión podría manejar un tamaño difereten y mayor al de default (8mb) pero solo hasta antes de generar la primera tabla temporal. d)max_locks_per_transaction Permite indicar cuantos objetos se pueden bloquear en una transacción, un registro no se considera un objeto, el default es 64 solo valdría la pena subirlo si es que tenemos transacciones que bloquean muchos más objetos únicos (tablas) que este valor, obviamente el consumo de memoria crecerá. e)max_connections Determina cuantas conexiones soportará el dbms, subirlo significará un consumo de recursos adicional en el OS (sistema operativo), y en realidad no servirá de mucho si es que el OS no soporta esta carga de trabajo. EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 29/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 30. Instalación y Configuración Configuración básica: 5. Afinando Postgresql f)random_page_cost Determina en que momento se van a utilizar índices ó búsquedas secuenciales, el valor por defecto es 4, se recomienda aumentarlo para discos lentos y bajarlo para discos rápidos. Considere que los índices son efectivos si la variedad de datos es alta, si es baja entonces es probable que aunque se mueva la configuración se ejecuten búsquedas secuenciales. g)effective_cache_size Setea el tamaño de cache en RAM que se usará en una consulta, el valor por defecto es 128Mb, un valor alto facilitará el uso de índices, un valor bajo hará que se prefiera el uso de búsquedas secuenciales, se recomienda como máximo 50% del total de la RAM. EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 30/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 31. Instalación y Configuración Configuración básica: 5. Afinando Postgresql h)statement_timeout Configura cuanto tiempo puede demorar un query en ejecutarse, evita que se lancen querys extremadamente pesados que demoren mucho tiempo en ejecutarse, por defecto es 0 (desactivado) pero se expresa en milisegundos, OjO configurarlo afectará todos los querys. EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 31/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 32. Objetos de la DB y Accesos 1. Objetos convencionales en la DB PostgreSQL permite crear objetos comunes de uan 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 32/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 33. Objetos de la DB y Accesos 1. Objetos convencionales en la DB a) 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 33/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 34. Objetos de la DB y Accesos 1. Objetos convencionales en la DB a) Base datos Teóricamente no hay problemas de recibir data en Latin1 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 34/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 35. Objetos de la DB y Accesos 1. Objetos convencionales en la DB b) Tablas 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 35/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 36. Objetos de la DB y Accesos 1. Objetos convencionales en la DB b) Tablas 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 36/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 37. Objetos de la DB y Accesos 1. Objetos convencionales en la DB b) Tablas Un campo de la tabla puede tener la estructura de un Type. 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 37/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 38. Objetos de la DB y Accesos 1. Objetos convencionales en la DB b) Tablas INHERITS nos permite heredar a la estructura de nuestra nueva tabla la estructura de otra tabla. prueba4=# create table tbl_padre (id integer, nombre varchar(100)); prueba4=# create table tbl_hijo (direccion varchar(200)) INHERITS (tbl_padre); CREATE TABLE prueba4=# select * from tbl_hijo;                                               id | nombre | direccion  ­­­­+­­­­­­­­+­­­­­­­­­­­ (0 rows) prueba4=# drop table tbl_padre cascade; NOTICE:  drop cascades to table tbl_hijo DROP TABLE LIKE genera el mismo efecto pero al borrar la tabla padre no se pierde la estructura. prueba4=# create table tbl_hijo2  (like tbl_padre); prueba4=# create table tbl_hijo3  (like tbl_padre, casa varchar(300)); EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 38/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 39. Objetos de la DB y Accesos 1. Objetos convencionales en la DB c) Vistas Una interesante funcionalidad extendida es la posibilidad de tener vistas “updatable”, es soportado solo insert y update. prueba4=# create table tbl_vista ( id integer, nombre varchar(100)); prueba4=# crea view vw_vista as select * from tbl_vista; prueba4=# create rule rul_vista as on insert to vw_vista do instead insert into tbl_vista (id,nombre) values (new.id, new.nombre); prueba4=# insert into vw_vista (id,nombre) values (1,'ernesto'); prueba4=# select * from tbl_vista; id | nombre ----+--------- 1 | ernesto EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 39/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 40. Objetos de la DB y Accesos 1. Objetos convencionales en la DB d) Schemas Los esquemas son contenedores de objetos dentro de una db, por default trabajamos en el schema PUBLIC. La principal utilidad puede estar en la administración de permisos a los objetos de la db ó simplemente la organización. prueba4=# create schema public2; prueba4=# create table public2.tbl_prueba(id integer); prueba4=# create table public.tbl_prueba(id integer); prueba4=# insert into tbl_prueba values(1); prueba4=# insert into public2.tbl_prueba(2); prueba4=# select * from public.tbl_prueba; id ---- 1 prueba4=# select * from public2.tbl_prueba; id ---- 2 EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 40/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 41. Objetos de la DB y Accesos 1. Objetos convencionales en la DB e) Domain Los domains nos dejan crear tipos de datos validados, si lo eliminamos eliminamos todos los campos de todas las tablas que lo han usado. prueba3=# create domain dmn_adulto as integer check (value > 18 and value < 60); prueba3=# create table tbl_persona(id int, edad dmn_adulto); prueba3=# insert into persona values (1,25); INSERT 0 1 prueba3=# insert into persona values (1,5); ERROR: value for domain dmn_adulto violates check constraint "dmn_adulto_check" prueba3=# drop domain dmn_adulto cascade; NOTICE: drop cascades to table persona column edad DROP DOMAIN prueba3=# select * from persona; id ---- 1 EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 41/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 42. Objetos de la DB y Accesos 1. Objetos convencionales en la DB f) Sequence Una funcionalidad interesante puede ser aplicable en entornos donde se producen muchas “insersiones” de data, y es mantener una cantidad de números en memoria para un acceso más rápido a los contadores. prueba4=# create sequence contador cache 100; <-- reserva 100 números en Cache Cycle permite reiniciar el contador con el mínimo valor especificado cuando este llega a su máximo valor declarado. prueba4=# create sequence cmin_max cycle minvalue 1 maxvalue 3; Increment permite definir cada cuantas unidades aumentará el contador, positivo ó negativo. prueba4=# create sequence salto increment -10; EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 42/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 43. Objetos de la DB y Accesos 1. Objetos convencionales en la DB Practica EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 43/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 44. Objetos de la DB y Accesos 2. Accesos a) Los roles Un rol es básicamente lo mismo que un usuario ó un grupo, no existe diferencia fundamental entre ambos, principalmente al crear un usuario tiene más permisos asignados que cuando uno crea un rol donde todo esta desactivado por defecto. CREATE ROLE name [ [ WITH ] option [ ... ] ] where option can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | VALID UNTIL 'timestamp' | IN ROLE rolename [, ...] | IN GROUP rolename [, ...] | ROLE rolename [, ...] | ADMIN rolename [, ...] | USER rolename [, ...] | SYSID uid EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 44/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 45. Objetos de la DB y Accesos 2. Accesos b) Los permisos Por defecto uno tiene permisos totales sobre los objetos que haya creado con su propio rol, ningún rol puede acceder a un objeto creado por otro rol. Se usan 2 comandos principales para asignación de permisos Grant (autoriza) y Revoke (desautoriza). prueba4=# create role usr1 password 'prueba'; prueba4=# create role usr2 password 'prueba'; Como usr1 prueba4=> create table tbl_prueba ( id integer); Como usr2 prueba4=> select * from tbl_prueba; ERROR: permission denied for relation tbl_prueba EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 45/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 46. Objetos de la DB y Accesos 2. Accesos b) Los permisos - GRANT ●GRANT ON TABLE ●GRANT ( column ) ON TABLE ●GRANT ON SEQUENCE ●GRANT ON DATABASE ●GRANT ON FOREIGN DATA WRAPPER <-- para conexiones Dlink ●GRANT ON FOREIGN SERVER <-- para conexiones Dlink ●GRANT ON FUNCTION ●GRANT ON LANGUAGE ●GRANT ON LARGE OBJECT ●GRANT ON SCHEMA ●GRANT ON TABLESPACE ●GRANT role_name TO role_name EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 46/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 47. Objetos de la DB y Accesos 2. Accesos b) Los permisos - GRANT ●GRANT ON TABLE ●GRANT ( column ) ON TABLE prueba4=# create role usr3 password 'usr3' login; prueba4=# create table tbl_acceso (id integer, nombre varchar(100)); prueba4=# grant insert on table tbl_accesos to usr3; Como usr3 prueba4=> select * from tbl_acceso; ERROR: permission denied for relation tbl_acceso prueba4=> insert into tbl_acceso values ( 1, 'ernesto'); INSERT 0 1 EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 47/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 48. Objetos de la DB y Accesos 2. Accesos b) Los permisos - GRANT ●GRANT ON TABLE ●GRANT ( column ) ON TABLE prueba4=# grant select (nombre) on tbl_acceso to usr3; GRANT Como usr3 prueba4=> select * from tbl_acceso; ERROR: permission denied for relation tbl_acceso prueba4=> select nombre from tbl_acceso; nombre --------- ernesto No existe GRANT para “vistas”, se tratan como tablas (usar ON TABLE). EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 48/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 49. Objetos de la DB y Accesos 2. Accesos b) Los permisos - GRANT ●GRANT ON DATABASE ●GRANT ON SCHEMA prueba4=# create table sin_acceso.prueba(id integer); CREATE TABLE Como usuario usr3 prueba4=> select * from sin_acceso.prueba; ERROR: permission denied for schema sin_acceso LINE 1: select * from sin_acceso.prueba; Como superusuario: prueba4=# grant usage on sin_acceso to usr3; prueba4=# grant select on table sin_acceso.prueba to usr3; EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 49/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 50. Objetos de la DB y Accesos 2. Accesos b) Los permisos - REVOKE Sigue más o menos la misma estructura de GRANT salvo que en vez de dar permisos los retira. REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 50/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 51. Objetos de la DB y Accesos 2. Accesos c) Usuarios del dbms vs Usuarios de la aplicación Muchas aplicaciones (especialmente web) siguen la lógica de conectarse a la dbms usando un solo usuario y controlan los accesos a opciones del sistema. Esto es muy práctico de mantener, no llena la dbms de usuarios, PERO, permite que todos tengan el mismo nivel de acceso a todos los objetos de la db con los problemas que esto puede tener. Para ver los accesos superiores de un rol puede utilizar este comando: prueba4=> select * from pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig -----------+----------+-------------+----------+-----------+----------+----------+----------- postgres | 10 | t | t | t | ******** | | dbadmin | 16392 | t | t | t | ******** | | pgsql | 16643 | t | t | t | ******** | | usr3 | 24410 | f | f | f | ******** | infinity | usr4 | 24414 | f | f | f | ******** | | EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 51/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 52. Objetos de la DB y Accesos 2. Accesos c) Usuarios del dbms vs Usuarios de la aplicación OjO, todas las claves por defecto se guardan encriptadas en MD5 (lo cual  es relativamente seguro, pero no totalmente) sin embargo cerciórese de no  generar claves sin encriptación ya que fácilmente se puede ver estas con el  siguiente comando: template1=# create role usr8 unencrypted password 'se_me_ve_todo' login; template1=# select usename, passwd from pg_shadow;    usename  |               passwd                 ­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  postgres  | md54abfba9c735cfbc34d97b56a593120c0  dbadmin   | md5695c0e25f6fe7c4ce633c67292190b90  pgsql     |   usr1      | md51575823e236277b188fdd5d691aa8d08  usr3      | md5f06099b5e97add7ed510d76e24146f1e  usr8      | se_me_ve_todo EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 52/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 53. Objetos de la DB y Accesos 2. Accesos PRACTICA EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 53/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 54. Objetos de la DB y Accesos 3. TableSpaces y Tablas Particionadas a) Tablespace Los tablespaces nos permite generar áreas de almacenamiento de objetos de una db en directorios ó unidades de almacenamiento diferentes a la determinada por defecto. La ventaja de esto es que podemos balancear el trabajo de nuestra DB en diversas unidades haciendo que nuestra performanse mejore notablemente. Un tablespace puede ser: ●Otro disco duro ●Un “disco” de estado solido (SSD) ●Una memoria USB ●Un “disco” virtual (en RAM) ●Otros tipos de unidades de almacenamiento EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 54/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 55. Objetos de la DB y Accesos 3. TableSpaces y Tablas Particionadas a) Tablespace CREATE TABLESPACE tablespacename [ OWNER username ] LOCATION 'directory' El owner siempre es por defecto el creador, el directorio donde se creará el tablespace debe estar VACIO y tener los permisos del usuario de Linux que ejecuta el servicio del dbms. Como root (o con sudo): root@depeche:~# mkdir /home/tablespace root@depeche:~# chown postgres:postgres /home/tablespace/ En consola de PgSQL: template1=# create tablespace ts_prueba location '/home/tablespace'; template1=# create table tbl_prueba(id serial) tablespace ts_prueba; Como root: root@depeche:/home/tablespace# ls -la total 16 drwx------ 3 postgres postgres 4096 2010-10-04 12:43 . drwxr-xr-x 4 root root 4096 2010-10-04 12:35 .. drwx------ 2 postgres postgres 4096 2010-10-04 12:43 1 <-- directorio de la data -rw------- 1 postgres postgres 4 2010-10-04 12:41 PG_VERSION EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 55/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 56. Objetos de la DB y Accesos 3. TableSpaces y Tablas Particionadas a) Tablespace Podemos usar esta funcionalidad con: ●Base de datos ●Tablas ●Indices Se recomienda que los Tablespaces creados en discos virtuales ó memorias USB solo almacenen objetos de la db de los cuales se puedo presncindir como tablas temporales, esto debido a que son muy volátiles y fácil de corromper o perder los datos (por ejemplo tener un tablespace en disco virtual desaparece si alguien reinicia el servidor). Los tablespace de índices tienen una muy buena persormanse en discos SSD. Más sobre tablespace en ram: http://wiki.postgresql.org/wiki/La_verdad_y_la_mentira_de_los_tablespaces_en_memoria EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 56/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 57. Objetos de la DB y Accesos 3. TableSpaces y Tablas Particionadas b) Tablas particionadas Las tablas particionadas nos permiten crear diferentes espacios de almacenamiento para una data en común. template1=# create table tbl_padre(cuenta char(10)); template1=# create table tbl_hija10(cuenta char(10)) inherits (tbl_padre); template1=# create table tbl_hija20(cuenta char(10)) inherits (tbl_padre); template1=# insert into tbl_hija20 values('20.01'); template1=# insert into tbl_hija10 values('10.01'); template1=# select * from tbl_padre; cuenta ------------ 10.01 20.01 template1=# select * from tbl_hija10; cuenta ------------ 10.01 EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 57/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 58. Objetos de la DB y Accesos 3. TableSpaces y Tablas Particionadas b) Tablas particionadas template1=# create table tbl_hija30(descripcion varchar(100)) inherits (tbl_padre); template1=# insert into tbl_hija30 values('30.01', 'orden'); template1=# select * from tbl_hija30; cuenta | descripcion ------------+------------- 30.01 | orden template1=# select * from tbl_padre; cuenta ------------ .. 30.01 template1=# create table tbl_hija40() inherits (tbl_padre); template1=# insert into tbl_hija40 values('40.01'); template1=# select * from tbl_padre; cuenta ------------ ... 40.01 template1=# select * from tbl_hija40; cuenta ------------ 40.01 EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 58/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 59. Objetos de la DB y Accesos 3. TableSpaces y Tablas Particionadas b) Tablas particionadas template1=# create table tbl_hija50( check (substr(cuenta,1,1) = '5' )) inherits (tbl_padre); template1=# insert into tbl_hija50 values('540.01'); template1=# insert into tbl_hija50 values('640.01'); ERROR: el nuevo registro para la relación «tbl_hija50» viola la restricción check «tbl_hija50_cuenta_check» template1=# select * from tbl_padrE; cuenta ------------ ... 540.01 template1=# drop table tbl_padre; ERROR: no se puede eliminar tabla tbl_padre porque otros objetos dependen de él DETALLE: tabla tbl_hija10 depende de tabla tbl_padre tabla tbl_hija20 depende de tabla tbl_padre tabla tbl_hija30 depende de tabla tbl_padre tabla tbl_hija40 depende de tabla tbl_padre SUGERENCIA: Use DROP ... CASCADE para eliminar además los objetos dependientes. template1=# drop table tbl_hija20; DROP TABLE EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 59/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 60. Objetos de la DB y Accesos 3. TableSpaces y Tablas Particionadas b) Tablas particionadas Supongamos que tenemos el caso de una tabla de movimientos contables, con millones de registros por mes y decidimos crear una tabla por mes, pero es tanta data que necesitamos grabarla en diferentes unidades físicas de almacenamiento, aplicamos: template1=# create table tbl_hija60( check (substr(cuenta,1,1) = '6' )) inherits (tbl_padre) tablespace ts_prueba; CREATE TABLE A cada tabla “hija” podemos aplicarle sus propios índices y relaciones, al igual que a la tabla padre. template1=# create index idx_padre on tbl_padre(cuenta); CREATE INDEX template1=# create index idx_padre2 on tbl_padre(cuenta) tablespace ts_prueba; CREATE INDEX Para retirar la herencia entre las tablas. template1=# alter table tbl_hija30 no inherit tbl_padre; template1=# select * from tbl_padre; cuenta ------------ 10.01 40.01 540.01 (3 filas) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 60/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 61. Objetos de la DB y Accesos 3. TableSpaces y Tablas Particionadas b) Tablas particionadas Podemos crear rules o triggers para manejar la correcta desviación de los datos cuando se intenta grabar en la tabla principal ó padre. template1=# CREATE RULE rl_tbl_padre10 AS template1-# ON INSERT TO tbl_padre WHERE ( substr(cuenta,1,2) = '10' ) template1-# DO INSTEAD INSERT INTO tbl_hija10 VALUES (NEW.cuenta); template1=# insert into tbl_padre values ('10.02'); template1=# select * from tbl_padre; cuenta ------------ 00.01 10.01 10.02 40.01 540.01 (5 filas) template1=# select * from tbl_hija10; cuenta ------------ 10.01 10.02 (2 filas) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 61/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 62. Objetos de la DB y Accesos 3. TableSpaces y Tablas Particionadas b) Tablas particionadas PRACTICA EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 62/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 63. SQL y Tipos de Datos Especiales 1. Creando estructuras de datos 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 63/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 64. SQL y Tipos de Datos Especiales 1. Creando estructuras de datos 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 64/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 65. SQL y Tipos de Datos Especiales 2. 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 65/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 66. SQL y Tipos de Datos Especiales 2. 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 66/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 67. SQL y Tipos de Datos Especiales 2. 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 EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 67/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 68. SQL y Tipos de Datos Especiales 2. Tipos de datos PRACTICA EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 68/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 69. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales a)Tsvector El tipo de datos Vector nos permite almacenar cadenas en lexemas para facilitar las búsquedas de cadenas específicas en textos muy largos. prueba=# create table tbl_vector ( campo1 text, campo2 tsvector); prueba=# insert into tbl_vector values ( 'esta es una pruena de un vector repitiendo la palabra vector','esta es una prueba de un vector repitiendo la palabra vector'); prueba=# insert into tbl_vector values ( 'esta es una pruena de un vector repitiendo la palabra vector','esta es una prueba de un vector repitiendo la palabra vector'); prueba=# insert into tbl_vector values ( 'árbol y vector añade acentos y eñes','árbol y vector añade acentos y eñes'); prueba=# insert into tbl_vector values ( 'las ratas y los ratones estan ratoneando un rato', 'las ratas y los ratones estan ratoneando un rato'); ^ prueba=# select * from tbl_vector; campo1 | campo2 --------------------------------------------------------------+--------------------------------------------------------------------------- esta es una pruena de un vector | 'de' 'es' 'esta' 'prueba' 'un' 'una' 'vector' esta es una pruena de un vector repitiendo la palabra vector | 'de' 'es' 'esta' 'la' 'palabra' 'prueba' 'repitiendo' 'un' 'una' 'vector' árbol y vector añade acentos y eñes | 'acentos' 'añade' 'eñes' 'vector' 'y' 'árbol' las ratas y los ratones estan ratoneando un rato | 'estan' 'las' 'los' 'ratas' 'rato' 'ratoneando' 'ratones' 'un' 'y' EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 69/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 70. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales a)Tsvector prueba=# select campo1 from tbl_vector where to_tsvector(campo1) @@ to_tsquery('añade'); campo1 ------------------------------------- árbol y vector añade acentos y eñes prueba=# select campo1 from tbl_vector where to_tsvector(campo1) @@ to_tsquery('vector & palabra'); campo1 -------------------------------------------------------------- esta es una pruena de un vector repitiendo la palabra vector Podemos acceder directamente al campo del vector. prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('pg_catalog.spanish','vector'); campo1 -------------------------------------------------------------- esta es una pruena de un vector esta es una pruena de un vector repitiendo la palabra vector árbol y vector añade acentos y eñes Pero esto no funciona, ¿porque? prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('pg_catalog.spanish','palabra'); campo1 -------- (0 filas) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 70/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 71. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales a)Tsvector Para una mejor administración de los datos debemos especificar el idioma en el cual estamos añadiendo los datos. prueba=# insert into tbl_vector values('esto añade soporte en español', to_tsvector('pg_catalog.spanish','esto añade soporte en español')); prueba=# select campo2 from tbl_vector; campo2 --------------------------------------------------------------------------- 'acentos' 'añade' 'eñes' 'vector' 'y' 'árbol' 'añad':2 'español':5 'soport':3 prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('pg_catalog.spanish','añad'); campo1 ------------------------------- esto añade soporte en español prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('pg_catalog.spanish','añada'); campo1 ------------------------------- esto añade soporte en español EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 71/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 72. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales a)Tsvector Tenemos a nuestra disposición diferentes operadores lógicos prueba=# delete from tbl_vector; prueba=# insert into tbl_vector values('esto añade soporte en español', to_tsvector('pg_catalog.spanish','esto añade soporte en español')); prueba=# insert into tbl_vector values('vamos a repetir vector 2 veces más, vector, vector', to_tsvector('pg_catalog.spanish','vamos a repetir vector 2 veces más, vector, vector')); prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('añada & vector'); campo1 -------- (0 filas) prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('añada | vector'); campo1 ---------------------------------------------------- esto añade soporte en español vamos a repetir vector 2 veces más, vector, vector (2 filas) prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('!vec'); campo1 ------------------------------- esto añade soporte en español prueba=# select campo1 from tbl_vector where campo2 @@ to_tsquery('!vec & añada'); campo1 ------------------------------- esto añade soporte en español EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 72/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 73. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales a)Tsvector Para combinar operadores lógicos entre varios campos: && <-- and ●|| <-- or ●!! <-- not Los vectores se pueden indexar, para ellos existe el tipo de índice GIN. prueba=# create index idx_vector3 on tbl_vector using gin(campo2); CREATE INDEX En caso de que los textos se actualicen demasiado seguido entonces podemos crear un trigger para que actualice la columna donde están guardados los lexemas. Para listar los lexemas más usados: prueba=# SELECT * FROM ts_stat('SELECT campo2 FROM tbl_vector') ORDER BY nentry DESC, ndoc DESC, word LIMIT 5; word | ndoc | nentry ---------+------+-------- cociner | 1 | 5 adrià | 1 | 3 gaston | 1 | 3 mund | 1 | 3 peruan | 1 | 3 EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 73/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 74. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales b)Arreglos Los arreglos en PostgreSQL son como en cualquier lenguaje de programación, su longitud y dimensión es variable. prueba4=# create table tbl_array (data int[]); prueba4=# insert into tbl_array values('{1,2,3,4,5}'); prueba4=# select * from tbl_array; data ------------- {1,2,3,4,5} prueba4=# alter table tbl_array add column data2 int[][]; prueba4=# insert into tbl_array (data2) values('{{1,2},{2,3},{3,4},{4,5},{5,6}}'); prueba4=# select * from tbl_array; data | data2 -------------+--------------------------------- {1,2,3,4,5} | | {{1,2},{2,3},{3,4},{4,5},{5,6}} EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 74/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 75. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales b)Arreglos prueba4=# select data from tbl_array where data[2]=2; data ------------- {1,2,3,4,5} (1 row) prueba4=# select data from tbl_array where data[2]=1; data ------ (0 rows) prueba4=# select data2 from tbl_array where data2[1][2]=2; data2 --------------------------------- {{1,2},{2,3},{3,4},{4,5},{5,6}} (1 row) prueba4=# select data2 from tbl_array where data2[1][3]=2; data2 ------- (0 rows) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 75/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 76. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales b)Arreglos prueba4=# alter table tbl_array add column data3 int[][3]; ALTER TABLE prueba4=# insert into tbl_array (data3) values('{{1,2,3},{2,3,4}}'); INSERT 0 1 prueba4=# select * from tbl_array; data | data2 | data3 -------------+---------------------------------+------------------- {1,2,3,4,5} | | | {{1,2},{2,3},{3,4},{4,5},{5,6}} | | | {{1,2,3},{2,3,4}} (3 rows) prueba4=# select data3 from tbl_array where data3[2][3]=4; data3 ------------------- {{1,2,3},{2,3,4}} (1 row prueba4=# select data3 from tbl_array where data3[2][5]=4; data3 ------- (0 rows) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 76/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 77. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales c)OIDs Los OIDs son identificadores únicos de los objetos en la base de datos, incluso cada registro tiene un OID propio que jamas se repite en ninguna otra tabla. prueba4=# create table tbl_oid2(id integer) with oids; prueba4=# insert into tbl_oid2 values(1); INSERT 24446 1 prueba4=# insert into tbl_oid2 values(2); INSERT 24447 1 prueba4=# select * from tbl_oid2; id ---- 1 2 (2 rows) prueba4=# select oid,* from tbl_oid2; oid | id -------+---- 24446 | 1 24447 | 2 (2 rows) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 77/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 78. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales c)OIDs Para obtener los oids de los objetos en la base de datos prueba4=# select oid,relname from pg_class where substr(relname,1,3) = 'tbl'; oid | relname -------+--------------------- ... 24440 | tbl_oid 24443 | tbl_oid2 prueba4=# SELECT attrelid,attname FROM pg_attribute where attrelid = 'tbl_oid2'::Regclass; attrelid | attname ----------+---------- 24443 | tableoid ... 24443 | oid ... 24443 | id prueba4=# SELECT attrelid,attname FROM pg_attribute where attrelid = 'vw_vista'::Regclass; attrelid | attname ----------+--------- 24380 | id 24380 | nombre EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 78/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 79. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales c)OIDs Podemos borrar data apuntando a su OID prueba4=# delete from tbl_oid2 where oid = 24447; DELETE 1 prueba4=# select * from tbl_oid2; id ---- 1 (1 row) Ahora por defecto ya no se crean OIDs para data, esto debido a que en volúmenes muy grandes de datos los OIDs podrían llegar a ser insuficientes y es por ello que se prescinde de ellos por defecto. EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 79/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 80. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales d)Very Large Objetcs PostgreSQL permite guardar binarios dentro de una tabla de muchos gigas de extensión, estos files no se guardan directamente dentro de la tabla creada sino en un ambiente especial y se apunta el oid del file para acceder a este. prueba4=# create table tbl_files( name varchar(100), file oid); prueba4=# insert into tbl_files values('primer archivo', lo_import('/home/ernesto/Descargas/Programa.pdf')); INSERT 0 1 prueba4=# select * from tbl_files; name | file ----------------+------- primer archivo | 24455 (1 row prueba4=# select lo_export(tbl_files.file,'/tmp/Programa.pdf') from tbl_files where file = '24455'; lo_export ----------- 1 (1 row) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 80/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 81. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales d)Very Large Objetcs Para retirar el binario añadido a la base de datos. prueba4=# update tbl_files set file = null; <-- borramos el link pero no la data prueba4=# insert into tbl_files values('segundo archivo', lo_import('/home/ernesto/Descargas/LAN.png')); prueba4=# select * from tbl_files; name | file -----------------+------- primer archivo | segundo archivo | 24456 prueba4=# select lo_unlink(tbl_files.file) from tbl_files where file = 24456; lo_unlink ----------- 1 prueba4=# update tbl_files set file= lo_import('/home/ernesto/Descargas/LAN.png') where name = 'segundo archivo'; prueba4=# select * from tbl_files; name | file -----------------+------- primer archivo | segundo archivo | 24457 EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 81/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 82. SQL y Tipos de Datos Especiales 3. Tipos de datos especiales PRACTICA EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 82/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 83. SQL y Tipos de Datos Especiales 4. Sentencias SQL a)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. Curso de PostgreSQL DBA Http://www.eqsoft.net 83/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 84. SQL y Tipos de Datos Especiales 4. Sentencias SQL a)Insert 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 84/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 85. SQL y Tipos de Datos Especiales 4. Sentencias SQL b)Update prueba=# select * from tbl_simple; id | nombre ----+--------- 1 | ernesto 2 | juan 3 | 111 4 | 10chars prueba=# update tbl_simple2 set nombre = '1'||nombre; UPDATE 8 prueba=# update tbl_simple set nombre = (select tbl_simple2.nombre from tbl_simple2 where tbl_simple2.id = tbl_simple.id); UPDATE 4 prueba=# select * from tbl_simple; id | nombre ----+---------- 1 | 1ernesto 2 | 1juan 3 | 1111 4 | 110chars EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 85/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 86. SQL y Tipos de Datos Especiales 4. Sentencias SQL b)Update prueba=# update tbl_simple2 set nombre = '2'||nombre; prueba=# update tbl_simple set nombre = a.nombre from ( select id, nombre from tbl_simple2) as a where tbl_simple.id = a.id; UPDATE 4 prueba=# select * from tbl_simple; id | nombre ----+----------- 1 | 21ernesto 2 | 21juan 3 | 21111 4 | 2110chars prueba=# update tbl_simple set nombre = a.nombre from ( select id, nombre from tbl_simple2) as a where tbl_simple.id = a.id returning tbl_simple.*; id | nombre ----+----------- 1 | 21ernesto 2 | 21juan 3 | 21111 4 | 2110chars EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 86/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 87. SQL y Tipos de Datos Especiales 4. Sentencias SQL b)Update prueba=# update tbl_simple set nombre = a.nombre from ( select tbl_simple2.id, tbl_simple2.nombre from tbl_simple2 join tbl_simple on tbl_simple.id = tbl_simple2.id) as a where a.id=tbl_simple.id returning tbl_simple.*; id | nombre ----+------------ 1 | 321ernesto 2 | 321juan 3 | 321111 4 | 32110chars (4 filas) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 87/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 88. SQL y Tipos de Datos Especiales 4. Sentencias SQL c)Delete prueba=# delete from tbl_simple using tbl_simple2 where tbl_simple.id=tbl_simple2.id returning tbl_simple.*; id | nombre ----+------------ 1 | 321ernesto 2 | 321juan 3 | 321111 4 | 32110chars prueba=# select * from tbl_simple; id | nombre ----+-------- (0 filas) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 88/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 89. SQL y Tipos de Datos Especiales 4. Sentencias SQL d)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 insertde un select. Copy además nos permite generar un un archivo exportado con datos. 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 89/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 90. SQL y Tipos de Datos Especiales 4. Sentencias SQL d)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. Curso de PostgreSQL DBA Http://www.eqsoft.net 90/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 91. SQL y Tipos de Datos Especiales 4. Sentencias SQL e)Select - OVER 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 91/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 92. SQL y Tipos de Datos Especiales 4. Sentencias SQL e)Select - OVER 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 92/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 93. SQL y Tipos de Datos Especiales 4. Sentencias SQL e)Select – FROM ONLY prueba=# create table ciudades ( nombre varchar(100)); prueba=# create table capitales ( capital boolean) inherits (ciudades); prueba=# insert into ciudades values ('callao'); prueba=# insert into ciudades values ('piura'); prueba=# insert into capitales values ('lima', true); prueba=# insert into capitales values ('buenos aires', true); prueba=# select * from ciudades; nombre -------------- callao piura lima buenos aires (4 filas) prueba=# select * from only ciudades; nombre -------- callao piura (2 filas) EQ Soft Consultoría y Soporte E.I.R.L. Curso de PostgreSQL DBA Http://www.eqsoft.net 93/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 94. SQL y Tipos de Datos Especiales 4. Sentencias SQL e)Select – 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 94/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 95. SQL y Tipos de Datos Especiales 4. Sentencias SQL e)Select – 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 95/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 96. SQL y Tipos de Datos Especiales 4. Sentencias SQL e)Select – 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 96/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 97. SQL y Tipos de Datos Especiales 4. Sentencias SQL e)Select – 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 97/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 98. SQL y Tipos de Datos Especiales 4. Sentencias SQL e)Select – 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. Curso de PostgreSQL DBA Http://www.eqsoft.net 98/186 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957