Your SlideShare is downloading. ×
PostgreSQL
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

PostgreSQL

9,053
views

Published on

paper sobre el gestor de base de datos PostgreSQL, uso e instalacion,

paper sobre el gestor de base de datos PostgreSQL, uso e instalacion,

Published in: Technology

1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
9,053
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
253
Comments
1
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. PostgreSQLTaboada Villanueva Rodriguez López GanosaPríncipe, León, Sergio Rodriguez Egúsquiza, Campos, JuanOrlando 990767235 Gerson Charl 949218534968542497 Código:012700708 947608149 617677 Código:051270060Código:051270160 Email- Código:022700608 Código:042700208 88 servileo_hjc_22 Email- Email- Email-Email- 5@hotmail.com gerson_ex carl_stom@hot benjamin_7h3_orlando_3013 @hotmail.com mail.com mast3r@hotmail@hotmail.com .comRESUMENEn este paper, nosotros daremos a conocer la forma correcta de 2. HISTORIAaprender a utilizar un nuevo gestor de base de datos, como lo esPostgreSQL. PostgreSQL ha tenido una larga evolución, la cual se inicia en 1982 con el proyecto Ingres en la Universidad de Berkeley.Una de las cosas que aprenderemos en este paper será la manera Este proyecto, liderado por Michael Stonebraker, fue uno dede como crear una base de datos e interactuar con la misma, los primeros intentos en implementar un motor de base deusando para ello, dos maneras diferentes, las cuales son: de datos relacional. Después de haber trabajado un largo tiempomanera consola y de manera gráfica. en Ingres y de haber tenido una experiencia comercial con él mismo, Michael decidió volver a la Universidad en 1985 paraHaremos también uso de un ejemplo práctico para que de esta trabajar en un nuevo proyecto sobre la experiencia de Ingres,manera podamos conocer y comprender como funciona este dicho proyecto fue llamado post-ingres o simplementegestor de base de datos. POSTGRES.Condiciones Generales El proyecto post-ingres pretendía resolver los problemas con el modelo de base de datos relacional que habían sidoBase de datos, Gestor de base de datos, tablas aclarados a comienzos de los años 1980. El principal de estos problemas era la incapacidad del modelo relacional dePalabras Clave comprender "tipos", es decir, combinaciones de datos simples que conforman una única unidad. Actualmente estos sonGestor, Usuario, Superusuario, Servidor, API, ddl dml llamados objetos. Se esforzaron en introducir la menor cantidad posible de funcionalidades para completar el soporte1. INTRODUCCIÓN de tipos. Estas funcionalidades incluían la habilidad de definir tipos, pero también la habilidad de describir relaciones - las El sistema de gestión de bases de datos relacionales orientadas cuales hasta ese momento eran ampliamente utilizadas pero a objetos conocido como PostgreSQL, está derivado del mantenidas completamente por el usuario. En Postgres la base paquete Postgres escrito en Berkeley allá por los años 80. Con de datos «comprendía» las relaciones y podía obtener cerca de una década de desarrollo tras él, PostgreSQL es el gestor de bases de datos de código abierto más avanzado hoy información de tablas relacionadas utilizando reglas. Postgres en día, ofreciendo control de concurrencia multi-versión y usó muchas ideas de Ingres pero no su código. soportando casi toda la sintaxis SQL (incluyendo subconsultas, transacciones, y tipos y funciones definidas por La siguiente lista muestra los hitos más importantes en la vida el usuario). Además cuenta también con un amplio conjunto del proyecto Postgre: de APIs para la mayoría de lenguajes de programación (incluyendo los más usados, tales como C, C++, Java, PHP, 1986: se publicaron varios papers que describían las bases del perl, tcl y python). sistema. 1988: ya se contaba con una versión utilizable.
  • 2. 1989: el grupo publicaba la versión 1 para una pequeña En 2001, CommandPrompt, Inc. lanzó Mammonthcomunidad de usuarios. PostgreSQL, la más antigua distribución comercial de PostgreSQL. Continúa brindando soporte a la comunidad1990: se publicaba la versión 2 la cual tenía prácticamente PostgreSQL a través del auspicio de desarrolladores yreescrito el sistema de reglas. proyectos, incluyendo PL/Perl, PL/php y el alojamiento de proyectos de comunidades como PostgreSQL Build Farm.En1991: publicación de la versión 3, esta añadía la capacidad de enero de 2005, PostgreSQL recibió apoyo del proveedor demúltiples motores de almacenamiento. base de datos Pervasive Software, conocido por su producto Btrieve que se utilizaba en la plataforma Novell Netware.1993: crecimiento importante de la comunidad de usuarios, la Pervasive anunció soporte comercial y participacióncual demandaba más características. comunitaria y logró algo de éxito. Sin embargo, en julio de1994: después de la publicación de la versión 4, el proyecto 2006 dejó el mercado de soporte de PostgreSQL.terminó y el grupo se disolvió. A mediados de 2005 otras dos compañías anunciaron planesDespués de que el proyecto POSTGRES terminara, dos graduados para comercializar PostgreSQL con énfasis en nichosde la universidad, Andrew Yu y JollyChen, comenzaron a trabajar separados de mercados. EnterpriseDB añadió funcionalidadessobre el código de POSTGRES, esto fue posible dado que que le permitían a las aplicaciones escritas para trabajar conPOSTGRES estaba licenciado bajo la BSD, y lo primero que Oracle ser más fáciles de ejecutar con PostgreSQL.hicieron fue añadir soporte para el lenguaje SQL a POSTGRES, Greenplum contribuyó mejoras directamente orientadas adado que anteriormente contaba con un intérprete del lenguaje de aplicaciones de Data Warehouse e Inteligencia de negocios,consultas QUEL (basado en Ingres), creando así el sistema al cual incluyendo el proyecto BizGres.En octubre de 2005, Johndenominaron Postgres95. Loiacono, vicepresidente ejecutivo de software en Sun Microsystems comentó: "No estamos yendo tras el OEM dePara el año 1996 se unieron al proyecto personas ajenas a la Microsoft pero estamos viendo a PostgreSQL ahora", aunqueUniversidad como Marc Fournier de Hub.Org no se dieron especificaciones en ese momento. ParaNetworkingServices, Bruce Momjian y Vadim B. Mikheev noviembre de 2005, Sun Solaris 10 (lanzamiento 6/06) incluíaquienes proporcionaron el primer servidor de desarrollo no PostgreSQL. En agosto de 2007 EnterpriseDB anunció eluniversitario para el esfuerzo de desarrollo de código abierto y Postgres Resource Center y EnterpriseDB Postgres, diseñadoscomenzaron a trabajar para estabilizar el código de Postgres95. En para ser una completamente configurada distribución deel año 1996 decidieron cambiar el nombre de Postgres95 de tal PostgreSQL incluyendo muchos módulos contribuidos ymodo que refleje la característica del lenguaje SQL y lo agregados. EnterpriseDB Postgres fue renombrado Postgresterminaron llamando PostgreSQL, cuya primera versión de código Plus en marzo de 2008.abierto fue lanzada el 1 de agosto de 1996. La primera versiónformal de PostgreSQL (6.0) fue liberada en enero de 1997. El proyecto PostgreSQL continúa haciendo lanzamientos principales anualmente y lanzamientos menores de reparaciónDesde entonces, muchos desarrolladores entusiastas de los de bugs, todos disponibles bajo la licencia BSD, y basados enmotores de base de datos se unieron al proyecto, coordinaron vía contribuciones de proveedores comerciales, empresasInternet y entre todos comenzaron a incorporar muchas aportantes y programadores de código abierto mayormente.características al motor.Aunque la licencia permitía lacomercialización de PostgreSQL, el código no se desarrolló enprincipio con fines comerciales, algo sorprendente considerandolas ventajas que PostgreSQL ofrecía. 3. FUNCIONAMIENTOLa principal derivación se originó cuando Paula Hawthtorn (un 3.1 Arquitectura básica de Postgres.miembro del equipo original de Ingres que se pasó a Postgres) yMichael Stonebraker conformaron IllustraInformation Postgres usa un modelo cliente - servidor. Una sesión de postgres se basa en dos procesos, que mostramos aTechnologies para comercializar Postgres. continuación.En 2000, ex inversionistas de Red Hat crearon la empresa Great 3.1.1 Un proceso servidor:Bridge para comercializar PostgreSQL y competir contra Es el que gestiona los archivos que forman laproveedores comerciales de bases de datos. Great Bridge auspició base de datos, acepta las conexiones que efectúana varios desarrolladores de PostgreSQL y donó recursos de vuelta los clientes con ella y que ejecuta acciones aa la comunidad, pero a fines de 2001 cerró debido a la dura petición de los clientes.competencia de compañías como Red Hat y pobres condicionesdel mercado.
  • 3. 3.1.2 La Aplicación cliente del usuario 4.2 Consistencia (frontend) Es la propiedad que Es la que pretende ejecutar ciertas acciones asegura que sólo se empieza aquello que se sobre la base de datos. Estas aplicaciones puede acabar. Por lo tanto se ejecutan pueden ser de naturaleza muy diversa, desde aquellas operaciones que no van a romper herramientas modo texto o aplicaciones la reglas y directrices de integridad de la gráficas, hasta servidores que acceden para base de datos. recuperar datos y mostrarlos en una página web. 4.3 Aislamiento: Es la propiedad que asegura que una operación no puede afectar a otras. Esto asegura que dos transacciones Tal como ocurre en las aplicaciones cliente sobre la misma información nunca servidor, el cliente puede estar en un equipo generará ningún tipo de error. diferente al que se encuentra el servidor. En ese caso, ambos se comunican mediante una 4.4 Durabilidad conexión de red TCP/IP. Es necesario tener Es la propiedad que esto en cuenta, ya que archivos que son asegura que una vez realizada la operación, accesibles desde un cliente no tienen por qué ésta persistirá y no se podrá deshacer serlo desde otro. Se debe prestar especial aunque falle el sistema. atención a estos temas. El servidor de postgres puede manejar 4.4 Sistemas Operativos diferentes conexiones concurrentes de los Corre en casi todos los principales clientes. Dispone de un proceso padre sistemas operativos: Linux, Unix, BSDs, (conocido como postmaster) que crea Mac OS, Beos, Windows, etc. distintos procesos hijos que atienden las conexiones entrantes. Un planteamiento típico 4.6 Documentación del modelo cliente servidor. Muy bien organizada, pública y libre, con comentarios de los propios usuarios. 4.7 Soporte Nativo Para los lenguajes más populares del medio: PHP, C, C++, Perl, Python, etc. Figura 1 Modelo cliente – servidor en postgres 4.8 Drivers Odbc, Jdbc, .Net, etc.3.2 Motor De Almacenamiento 4.9 Soporte De Caracteristicas PostgreSQL soporta un motor por defecto, el sistema de Todas las características de una base de datos profesional almacenamiento Postgres (Postgres Storage System). (triggers, storeprocedures – funciones, secuencias, La lógica y arquitectura del gestor de almacenamiento relaciones, reglas, tipos de datos definidos por usuarios, fueron detalladas en The Postgres Storage System. vistas, vistas materializadas, etc.) Postgres ha pasado por varias revisiones importantes desde entonces, desde la versión 1, que se lanzó para unos pocos 4.10 Soporte de datos usuarios, hasta la 3, se mejoró el ejecutor de consultas y Tipos de datos de SQL92 y SQL99. se añadió el soporte para múltiples gestores de almacenamiento. 4.11 Soporte De Protocolo De Comunicación Encriptado por SSL4. CARACTERÍSTICAS DE POSTGRESQL 4.12 Extensiones 4.1 Atomicidad (Indivisible) Para alta disponibilidad, nuevos tipos de índices, datos Es la propiedad espaciales, minería de datos, etc. Comunidades muy activas, que asegura que la operación se ha varias comunidades en castellano. realizado o no, y por lo tanto ante un fallo Altamente adaptable a las necesidades del cliente. del sistema no puede quedar a medias.
  • 4. 5. SENTENCIAS e) NOCREATEUSER 5.1 Sentencias Para Creación De Usuario Explícitamente fuerza a la situación por defecto, que deniega el privilegio. PostgreSQL proporciona dos métodos para la creación de usuarios de bases de datos. Cada uno de ellos f) IN GROUPnombre_grupo [, ...] requiere autenticación como superusuario. Añade al nuevo usuario al grupo llamado Los métodos son: nombre_grupo. Pueden ser • A través del uso del comando SQL CREATE USER. especificados múltiples nombres de grupo, • Un programa de línea de comandos llamado separándolos mediante createuser comas. El o los grupos deben existir para que funcione la condición. 5.1.1 Create user: g) VALID UNTIL abstime Establece que la contraseña del usuario La sintaxis para CREATE USER es: expirará el abstime, el cual debe ser un CREATE USER nombre_usuario formato reconocible de fecha/hora [ WITH [ SYSID uid ] (timestamp). Tras esa fecha, la contraseña [ PASSWORD password ] ] se resetea, y la expiración se hace efectiva. [ CREATEDB | NOCREATEDB ] [ CREATEUSER | NOCREATEUSER ] h) VALID UNTIL infinity [ IN GROUP groupname [, ...] ] Establece validez permanente para la [ VALID UNTIL abstime ] contraseña del usuario. A continuación se describe cada una de las partes de la sintaxis de CREATE USER: 5.1.2 Createuser: a) SYSID uid: El script createuser es ejecutado directamente Especifica que el ID que va a definirse debe desde la línea de comandos, y puede operar de establecerse al valor de uid.Si se omite, un dos formas. razonable y único valor numérico por Si se utiliza sin argumentos, él defecto es escogido. interactivamente le pedirá el nombre de usuario y cada uno de los privilegios que se le b) PASSWORD password: van a asignar. Establece la nueva contraseña del usuario. Alternamente, puede optar por especificar las Si no se especifica, la contraseña por defecto opciones y el nombre del usuario a ser creado es NULL. en la misma línea de comandos. c) CREATEDB | NOCREATEDB: La sintaxis de createuser es: Usando la palabra clave CREATEDB se le createuser [ opciones ] [ nombre_usuario ] garantiza al nuevo usuario el privilegio de crear nuevas bases de datos, así como el de El nombre_usuario en la sintaxis representa el destruir las de su propiedad. Usando nombre del usuario que va a crear. Reemplace NOCREATEDB se deniega este permiso opciones con una o más de las siguientes: (que es lo que ocurre por defecto). a) -d, -createdb d) Createuser | Nocreateuser Equivalente a la palabra clave CREATEDB. Permite al nuevo usuario Certifica el privilegio de crear nuevos crear bases de datos. usuarios. Si un usuario tiene los privilegios de crear a otros usuarios tendrá b) -D, -no-createdb además todos los privilegios, Equivalente a la palabra clave en todas las bases de datos (incluyendo los NOCREATEDB. Explícitamente indica permisos para crear una base que el nuevo usuario no puede crear de datos, aunque se haya especificado bases de datos. NOCREATEDB). c) -a, -adduser Equivalente a la palabra clave CREATEUSER Perimte al nuevo usuario la creación de otros usuarios, y
  • 5. asigna el status de superusurario al usuario. 5.2 Operadores 5.2.1 Operadores de precedencia lexicald) -A, -no-adduser Equivalente a la palabra clave (precedencia decreciente) NOCREATEUSER. Explícitamente indica que el nuevo usuario no es superusuario. Tabla 1- Operadores de precedencia lexical Elemento Precedencia Descripcióne) -i SYSID, -sysid=SYSID UNION izquierda constructor SQL de select Establece el nuevo ID de sistema del usuario a SYSID. :: conversor de tipos de Postgres [] izquierda delimitadores de arrayf) -P, -pwprompt . izquierda delimitadores de Resulta en una petición de introducción tabla/columna de contraseña, permitiéndole establecer la contraseña del nuevo usuario. - derecha menos unario ; izquierda terminación de declaración,g) -h NOMBRE_MAQUINA, logaritmo -host=NOMBRE_MAQUINA : derecha exponenciación Especifica desde qué NOMBRE_MAQUINA se conectará, | izquierda comienzo de intervalo además de la local (localhost), o la */% izquierda multiplicación, división máquina definida por la variable de entorno PGHOST. +- izquierda adición, substracción IS test para TRUE, FALSE, NULLh) -p PUERTO, -port=PUERTO ISNULL test para NULL Especifica que la conexión de base de datos se realizará por el puerto NOTNULL test para NOT NULL PUERTO, en vez de por el puerto por (todos los demás nativos y definidos por el defecto. operadores) usuarioi) -U NOMBRE_USUARIO, IN fijar miembro -username=NOMBRE_USUARIO BETWEEN continente Especifica que NOMBRE_USUARIO LIKE concordancia de patrones de será el usuario que conecte a strings PostgreSQL (por defecto se conecta usando el nombre de usuario del <> desigualdad booleana sistema). = derecha igualdadj) -password NOT derecha negación AND izquierda intersección lógica Resulta en una petición de contraseña OR izquierda unión lógica para el usuario que conecta, lo cual ocurre automáticamente si el archivo 5.2.2 Operadores generales pg_hba.conf está configurado para no confiar en la maquina solicitante. Los operadores mostrados aquí están definidos para un número de tipos de datos nativos, que van desde los tipos numéricos hasta los tipos date/time.
  • 6. Operador Descripción Utilización ||/ Raíz cúbica ||/ 27.0 Tabla 2- Operadores generalesOperador Descripción Utilización< Menor que? 1<2<= Menor o igual 1 <= 2 que? 5.2.4 Operadores geométricos<> No igual? 1 <> 2 Tabla 4- Operadores geométricos= Igual? 1=1 Operador Descripción Utilización> Mayor que? 2>1 + Translación ((0,0),(1,1))::box +>= Mayor o igual 2 >= 1 (2.0,0)::punto que? - Translación ((0,0),(1,1))::box -|| Concatena Postgre || SQL (2.0,0)::punto strings * Escalado/rotación ((0,0),(1,1))::box *!!= NOT IN 3 !!= i (2.0,0)::punto~~ Como scrappy,marc,hermit ~~ / Escalado/rotación ((0,0),(2,2))::box / %scrappy% (2.0,0)::punto!~~ No como bruce !~~ %al% # Intersección ((1,-1),(-1,1)) # ((1,1),~ Concordancia thomas ~ .*thomas.* (-1,-1)) (regex), sensible # Número de puntos # ((1,0),(0,1),(-1,0)) a mayusc/minusc en polígono~* Concordancia thomas ~* .*Thomas.* ## Punto más (0,0)::punto ## ((2,0), (regex), sensible próximo (0,2))::lseg a mayusc/minusc && Se superpone a? ((0,0),(1,1))::caja &&!~ No concuerda thomas !~ .*Thomas.* ((0,0),(2,2))::caja (regex), sensible a mayusc/minusc &< Se superpone por ((0,0),(1,1))::caja &< la izquierda? ((0,0),(2,2))::caja!~* No concuerda thomas !~* .*vadim.* (regex), sensible &> Se superpone por ((0,0),(3,3))::caja &> a mayusc/minusc la derecha? ((0,0),(2,2))::caja <-> Distancia entre ((0,0),1)::círculo <-> ((5,0),1)::círculo << A la izquierda de? ((0,0),1)::círculo << 5.2.3 Operadores numéricos ((5,0),1)::círculo <^ Está debajo de? ((0,0),1)::círculo <^ Tabla 3- Operadores numéricos ((0,5),1)::círculoOperador Descripción Utilización >> A la derecha de? ((5,0),1)::círculo >>! Factorial 3! ((0,0),1)::círculo!! Factorial (operador izquierdo) !! 3 >^ Esta encima de? ((0,5),1)::círculo >^ ((0,0),1)::círculo% Módulo 5%4 ?# Interseca o se ((-1,0),(1,0))::lseg ?#% Truncado % 4.5 superpone ((-2,-2),(2,2))::caja;* Multiplicación 2*3 ?- Es horizontal? (1,0)::punto ?-+ Suma 2+3 (0,0)::punto- Resta 2-3 ?-| Es perpendicular? ((0,0),(0,1))::lseg ?-|/ División 4/2 ((0,0),(1,0))::lseg: Exponenciación natural : 3.0 @-@ Longitud de @-@ ((0,0), circunferencia (1,0))::path; Logaritmo natural (; 5.0) ?| Es vertical? (0,1)::punto ?|@ Valor Absoluto @ -5.0 (0,0)::punto^ Exponenciación 2.0 ^ 3.0 ?|| Es paralelo? ((-1,0),(1,0))::lseg ?|||/ Raíz cuadrada |/ 25.0 ((-1,2),(1,2))::lseg
  • 7. Operador Descripción Utilización Operador Descripción Utilización <= Menor o igual que 192.168.1.5::cidr<=@ Contenido en (1,1)::punto @ 192.168.1.5::cidr ((0,0),2)::círculo = Igual que 192.168.1.5::cidr =@@ Centro de @@ ((0,0),10)::círculo 192.168.1.5::cidr~= Parecido a ((0,0),(1,1))::poligono >= Mayor o igual que 192.168.1.5::cidr>= ~= ((1,1), 192.168.1.5::cidr (0,0))::poligono > Mayor que 192.168.1.5::cidr> 192.168.1.4::cidr <> No igual que 192.168.1.5::cidr<> 192.168.1.4::cidr 5.2.5 Operadores de intervalos de tiempo << Está contenido en 192.168.1.5::cidr<< 192.168.1/24::cidr El tipo de dato de intervalos de <<= Está contenido en 192.168.1/24::cidr<<= tiempo, tinterval, es un legado de los tipos o es igual a 192.168.1/24::cidr date/time originales y no está tan bien soportado >> Contiene 192.168.1/24::cidr>> como los tipos más modernos. Hay varios 192.168.1.5::cidr operadores para este tipo. >>= Contiene o es igual 192.168.1/24::cidr>>= que 192.168.1/24::cidr Tabla 5- Operadores de intervalos de tiempoOperador Descripción Utilización 5.2.7 Operadores IP V4 INET#< Intervalo menor que?#<= Intervalo menor o igual que? Tabla 7- Operadores ipv4 inet#<> Intervalo no igual que? Operador Descripción Utilización#= Intervalo igual que? < Menor que 192.168.1.5::inet<#> Intervalo mayor que? 192.168.1.6::inet#>= Intervalo mayor o igual que? <= Menor o igual que 192.168.1.5::inet<= 192.168.1.5::inet<#> Convertir a un intervalo de tiempo = Igual que 192.168.1.5::inet =<< Intervalo menor que? 192.168.1.5::inet| Comienzo de intervalo >= Mayor o igual que 192.168.1.5::inet>=~= Parecido a 192.168.1.5::inet<?> Tiempo dentro del intervalo? > Mayor que 192.168.1.5::inet> 192.168.1.4::inet <> No igual 192.168.1.5::inet<> 192.168.1.4::inet << Está contenido en 192.168.1.5::inet<< 192.168.1/24::inet <<= Está contenido o 192.168.1/24::inet<<= es igual a 192.168.1/24::inet >> Contiene 192.168.1/24::inet>> 192.168.1.5::inet >>= Contiene o es igual 192.168.1/24::inet>>= a 192.168.1/24::inet 5.2.6 Operadores IP V4 CIDR Tabla 6- Operadores ipv4 cidrOperador Descripción Utilización< Menor que 192.168.1.5::cidr< 192.168.1.6::cidr 5.3 Sentencias De Control
  • 8. Podemos utilizar sentencias de control para escribirnuestros programas y permitir que sigan un algoritmo ELSEno lineal, para ello, contamos básicamente con las RETURN false;siguientes estructuras : END IF; ...resto de la función...LOOP, EXIT,IF, ELSE,FOR, WHILE 5.3.4 SENTENCIA DE CICLO FOR :5.3.1 SENTENCIA DE CICLO LOOP : Existen dos tipos de ciclos FOR, el primero tiene Esta sentencia nos permite efectuar un ciclo, que ver claramente con los ciclos numéricos su estructura básica es : comunes, es decir, lo que comúnmente se usa para efectuar repeticiones, y por otra parte, tenemos un ...resto de la función... ciclo FOR que nos permite recorrer tablas y LOOP procesar sus datos, esta segunda está ligada a ...sentencias a ejecutar en el ciclo... sentencias SQL, veamos entonces como se utiliza END LOOP la sentencia FOR ...resto de la función... casos:5.3.2 SENTENCIA DE SALIDA EXIT : 5.3.4.1 SENTENCIA FOR DE PROCESO CICLICO Cuando usamos un ciclo LOOP, es necesario darle NUMERICO una salida para que este mismo termine, la sentencia EXIT nos permite finalizar el LOOP y FOR <variable> IN <inicio>..<fin> continuar en la sentencia siguente a la salida de LOOP éste, generalmente, EXIT está acompañado con la ... SENTENCIAS A EJECUTAR sentencia IF, por ejemplo: DENTRO DEL CICLO FOR ... END LOOP; LOOP ...resto de la funcion... o bien puede usar el FOR de forma contador := contador + 1; inversa IF contador >= 10 THEN EXIT; -- salida del loop cuando sea mayor o FOR <variable> REVERSE igual que 10 <fin>..<inicio> LOOP END IF; ... SENTENCIAS A EJECUTAR END LOOP DENTRO DEL CICLO FOR ... ...resto de la funcion... END LOOP;5.3.3 SENTENCIAS IF, ELSE: Ejemplo : ...resto de la funcion... Podemos efectuar operaciones de comparación FOR inc IN 1..10 LOOP con las sentencias IF, ELSE, los operadores de factorial := factorial * inc; comparación son los siguientes : END LOOP; RETURN factorial; <menor que ... ...resto de la funcion... >mayor que ... : <>distinto a ... 5.3.4.2 SENTENCIA FOR APLICADA A <= menor o igual que ... >= mayor o igual que ... PROCESOS DE REGISTROS = igual que ... SQL OR o ... AND y ... FOR <registro o fila> IN <sentencia SELECT SQL> LOOP ... SENTENCIAS A EJECUTAR DENTRO DEL CICLO FOR ... Ejemplo: END LOOP; ...resto de la función... IF >= 10 or THEN RETURN true; Ejemplo : ...resto de la funcion...
  • 9. DECLARE características especiales de Postgres; mientras esto provee registro RECORD; compatibilidad, es menudo más conveniente sacar provecho BEGIN a aquellas definiciones adicionales del motor. A FOR registro IN SELECT * FROM continuación se describen los tipos de datos más utilizados y productos LOOP stock := registro.sock_actual + 100; la sugerencia de cuando es conveniente utilizarlos: ... otras sentencias ... END LOOP; ...resto de la funcion... Tabla 8- Tipos cadenas Note que para utilizar esta sentencia Tipos String FOR debemos declarar una variable de Tipo Descripción tipo RECORD o registro. RECORD es char(n) Datos de caracteres no Unicode de longitud fija una palabra reservada para estos Text Cantidad no predefinida casos, y no posee una estructura varchar(n) Datos de caracteres no Unicode de longitud definida pues no ha sido asignada a variable ninguna tabla, este tipo de dato nos permite recorrer la tabla de productos y obtener sus valores por medio de El tipo char(n) almacena n caracteres en formato ASCII, un byte esta variable. por cada letra. Cuando almacenamos datos en el tipo char, siempre se utilizan los n caracteres indicados, incluso si la entrada de datos es inferior. Por ejemplo, si en un char(5), 5.3.5 SENTENCIA DE CICLO guardamos el valor A, se almacena A, ocupando los cinco CONDICIONAL WHILE bytes. La sentencia WHILE se ejecuta de forma muy Por su parte varchar(n) almacena n caracteres en formato similar a otros lenguajes de programación, su ASCII, un byte por cada letra. Cuando almacenamos datos en el estructura es la siguiente : tipo varchar, únicamente se utilizan los caracteres necesarios, Por ejemplo, si en un varchar(255), guardamos el valor A, se WHILE <condicion> LOOP almacena A, ocupando solo un byte. ... SENTENCIAS A EJECUTAR DENTRO DEL CICLO WHILE ... El tipo de dato text permite el almacenamiento de un string en END LOOP; cualquier formato de largo no predefinido. Este es el tipo más versátil de string. Considerando que hoy en día los espacios de Ejemplo : almacenamiento son enormes, este tipo se recomienda en todo ...resto de la funcion... caso por sobre varchar. Cabe señalar que dado que text no tiene WHILE inc<= 10 LOOP límite predefinido, entonces al momento de llevar los datos a factorial := factorial * inc; otros sistemas con largos predefinidos no hay aviso previo de END LOOP; que estamos sobrepasando algún largo establecido, siendo este RETURN factorial; ...resto de la funcion... un punto a considerar al momento de seleccionar el tipo de dato. Este codigo funciona igual al descrito en el ejemplo del ciclo FOR. Tabla 9- Tipos numericos6. TIPOS DE DATOS Tipos Numéricos Tipo Tamaño Descripción Rango Postgres pone a disposición del usuario una gran variedad bool Booleano true / false – de tipos de datos pensados en cubrir necesidades (‘t’ / ‘f’) específicas. Suele suceder que al modelar una base de datos decimal variable Especificadas no limite se utilizan los tipos conocidos y no se da provecho a las por el usuario
  • 10. float4 4 bytes Número de 6 lugares de punto flotante decimales con precisión En tipos de datos para fecha y hora, Postgres conserva los tiposFloat8 8 bytes Número de 15 lugares de tradicionales. Aquí el único parámetro interesante es aquel que se punto flotante decimales puede pasar a timestamp para indicar la cantidad de milisegundos con doble a almacenar que por defecto son 6. precisiónBigint 8 bytes Valores -9,233,372,036 enteros. ,854,775,808 a +9,233,372,03 6,854,775,807int2 2 bytes Precisión fija -32768 a (entero) +32767 7. CARACTERÍSTICAS AVANZADASInt4 4 bytes opción para -2147483648 a determinada +2147483647 precisión DE SQL EN POSTGRES (entero)Int8 8 bytes amplia gama +/- > 18 Habiendo cubierto los aspectos básicos de PostgreSQLpara determinada lugares de acceder a los datos, discutiremos ahora aquellas características de precisión decimales de Postgres que los distinguen de los gestores de bases de datos (entero) convecionales. Estas características incluyen herencia, valoresnumeric variable Especificadas no limite no-atómicos de datos (atributos basados en vectores y por el usuario conjuntos) entre otros.serial 4 bytes Identicador o 0 a referencia +2147483647 7.1 Herencia cruzada Creemos dos clases. La clase capitals contiene las capitales de los estados, las cuales son también ciudades.Postgres contiene los tipos de datos nativos comúnmente Naturalmente, la clase capitals debería heredar de cities.conocidos int y float, para números enteros y realesrespectivamente. Estos dependiendo del dígito que acompañe sunombre, indica la precisión que soporta la columna.Para grandes números se utiliza bigint, el cual suele ser utilizadopara las columnas de identificadores.Cuando se requiere de gran precisión en números, virtualmentesin limitación (1000 dígitos), el tipo a utilizar es sin dudanumeric. Este es recomendado para valores monetarios ucualquier dato donde la precisión es crucial. Este tipo además En este caso, una instancia de capitals hereda todos lossoporta el valor ‘NaN’ (Not A Number – No Un Numero) para atributos (name, population y altitude) de su padre, cities.indicar tal caso, además de NULL. El tipo del atributo name (nombre) es text, un tipo nativo de Postgres para cadenas ASCII de longitud variable. ElEl tipo de dato SERIAL es en realidad un atajo. En Postgres no tipo del atributo population (población) es float, un tipo deexiste un tipo autoincremental como es el caso de MySQL. datos, también nativo de Postgres , para números de punto flotante de doble precisión. Las clase capitals tiene un Aquí por un lado se genera la columna con tipo BIGINT atributo extra, state, que muestra a qué estado pertenecen.asociando al valor por defecto el siguiente valor de una secuencia En Postgres, una clase puede heredar de ninguna o varias(Ver punto 3.6) creada especialmente, provocándose el efecto de otras clases, y una consulta puede hacer referencia tanto aauto incremento todas las instancias de una clase como a todas las instancias de una clase y sus descendientes.Tabla 10- Tipo fecha y hora. Tipos de Fecha y Hora La jerarquía de la herencia es un gráfico acíclico dirigido. Tipo Descripcióndate Fecha, con día, mes y año Por ejemplo, la siguiente consulta encuentra todastime Hora, minuto, segundostimestamp(n) Fecha y hora con milisegundos. aquellas ciudades que están situadas a un altura de 500 o El parámetro n, indica la cantidad de más pies: milisegundo a almacenar.
  • 11. implementarlo a futuro pero no es de prioridad alta por eso que viene retrasándose su implementación desde versiones antiguas. 7.2 Valores No-Atómicos Uno de los principios del modelo relacional es que los atributos de una relación son atómicos Postgres no posee esta restricción; los atributos pueden contener sub-valores a los que puede accederse desde el lenguaje de consulta.Por otro lado, para encontrar los nombres de todas las Por ejemplo, se pueden crear atributos que sean vectoresciudades, incluídas las capitales estatales, que estén de alguno de los tipos base.situadas a una altitud de 500 o más pies, la consulta es: 7.3 Vectores Postgres permite que los atributos de una instancia sean definidos como vectores multidimensionales de longitud fija o variable. Puede crear vectores de cualquiera de los tipos base o de tipos definidos por el usuario. Para ilustrar su uso, creemos primero una clase con vectores de tiposwhichreturns: base. La consulta de arriba creará una clase llamada SAL_EMP con una cadena del tipo text (name),un vectorAquí el "*" después de cities indica que la consulta debe unidimensional del tipo int4 (pay_by_quarter), el cualrealizarse sobre cities y todas las clases que estén por representa el salario trimestral del empleado y un vectordebajo de ella en la jerarquía de la herencia. Muchos de bidimensional del tipo text (schedule), que representa lalos comandos que ya hemos discutido (select, agenda semanal del empleado. Ahora realizamos algunosand>upand> and delete) brindan soporte a esta notación INSERTSs; note que cuando agregamos valores a unde "*" al igual que otros como alter. vector, encerramos los valores entre llaves y los separamos mediante comas. Si usted conoce C, esto no es distinto a la sintaxis para inicializar estructuras.Con esto obtenemos una reducción en la construcción delíndice y ganaremos velocidad con ello además de unmejor orden conceptual de nuestras tablas. No sólo se puede heredar de un padre, es posible heredarde varias tablas, así teniendo la tabla hija todas lascolumnas de sus padres, y en caso que 2 o más padrestengan un columna con el mismo nombre éstas sefusionarán en la hija siempre y cuando sean del mismo Postgres utiliza de forma predeterminada la convención detipo de dato. vectores "basados en uno" -- es decir, un vector de n elementos comienza con vector[1] y termina conAl utilizar ésta poderosa característica existen algunas vector[n]. Ahora podemos ejecutar algunas consultasconsideraciones que hay que tener en cuenta para sobre SAL_EMP. Primero mostramos como acceder a unevitarnos sorpresas desagradables e inesperadas. Al crear solo elemento del vector por vez. Esta consulta devuelvetablas heredadas, no todas las características de la tabla se los nombres de los empleados cuyos pagos han cambiadoheredan. Por ejemplo, las claves primarias, foráneas, en el segundo trimestre:indices únicos. Según el roadmap se verá para
  • 12.  PostgreSQL para Windows ha sido descontinuado.  Para obtener un performance optimo, es requerido usar un sistema UNIX o un Linux optimizado para esta tarea. 8.3 PostgreSQL VS MySQL La siguiente consulta recupera el pago del tercer trimestre de todos los empleados: Tabla11. Cuadro comparativo PostgreSQL MySQL Es más lento a la Es más rápido a la hora de resolver hora de resolver preguntas preguntas No tiene una Tiene mejor buena documentación y documentación se ha orientado más a facilitarle la También podemos acceder a cualquier porción de un vector, o subvectores. Esta consulta recupera el primer vida al item de la agenda de Bill para los primeros dos días de la desarrollador semana. Ofrece una Es fácil de vulnerar garantía de sin protección integridad en los adecuada. datos mucho más fuerte. Presenta una Es más ligero. mejor escalabilidad y rendimiento bajo8. VENTAJAS Y DESVENTAJAS grandes cargas de trabajo 8.1 Ventajas  Es software libre o sea, no hay costo asociado 9. INSTALACION DE POSTGRESQL 8.4.8 a la licencia del software. EN UBUNTU 10.10  Estabilidad y confiabilidad legendarias. 9.1 Iniciando Instalación (Aplicaciones → Accesorios → Terminal):  Extensible, el código fuente está disponible sudo apt-get install postgresql postgresql-client para todos sin costo. postgresql-contrib libpq-dev pgadmin3 Eso instala el cliente y servidor de la base de datos, algunos scripts de utilería y la aplicación pgAdmin para  Multiplataforma, está disponible en casi administrar la base de datos disponibles en los cualquier Unix. repositorios de Ubuntu.  Herramientas gráficas de diseño y administración de bases de datos. 8.2 Desventajas 9.2 Cambiar la Contraseña del Usuario
  • 13. Administrador 9.5 Ejemplo Ahora necesitamos establecer la contraseña del usuario administrador postgres. Teclea la siguiente línea en la Ingresando A Postgresql: terminal (cambia la palabra password por la contraseña que desees usar): Desde la terminal (Aplicaciones → Accesorios → sudo su postgres -c psql Terminal): ALTER USER postgres WITH PASSWORD password; q sudo /etc/init.d/postgresql start Eso altera la contraseña dentro de la base de datos, ahora para iniciar. necesitamos hacer lo mismo para el usuario Linux postgres: Luego lo primero que tenemos qu hacer es usar sudo passwd -d postgres pgAdmin3 (Aplicaciones → Programación → pgAdmin sudo su postgres -c passwd III) para crearnos un servidor donde alojaremos todas Te aparecerá un prompt, introduce la misma contraseña nuestras bases de datos. Allí hacemos clic en el menú que pusiste antes. File → Add server… 9.3 Configurando pgAdmin Listo, de ahora en adelante podemos usar pgAdmin o la terminal para administrar nuestra base de datos como el usuario postgres. Pero antes de que te metas a pgAdmin deberías configurar el PostgreSQL Admin Pack, que te permite llevar un mejor registro y monitoreo de tu base de datos. Ejecuta lo siguiente desde la línea de comandos en tu terminal: sudo su postgres -c psql < /usr/share/postgresql/8.4/contrib/adminpack.sql Para ejecutar pgAdmin ve a tu menú de aplicaciones: Aplicaciones → Programación → pgAdmin III9.4 Cambiar el Esquema de Autentificaciónde Postgresql Fig Al ejecutar algunos comandos de base de datos, es posible ura 2. Creación del servidor que te encuentres con un error que dice algo como: FATAL: la autentificación Ident falló para el usuario «x» Luego accedemos al servidor al hacer doble click el Para evitarlo necesitas editar el archivo nombre que le pusimos al servidor y nos va a pedir la /etc/postgresql/8.4/main/pg_hba.conf y cambiar el contraseña que le dimos: esquema de autentificación. Abre el archivo con privilegios de root: Desde ahí podremos crear nuestras bases de datos y sudo gedit /etc/postgresql/8.4/main/pg_hba.conf Y cambia esto: posteriormente las tablas cómodamente. # "local" is for Unix domain socket connections only local all all ident Por: # "local" is for Unix domain socket connections only local all all md5 Reinicia el servidor de PostgreSQL tecleando en tu terminal: sudo /etc/init.d/postgresql restart
  • 14. Figura 3. Creación de base de datos Figura 6.Creacion mediante código de tablas Fi gura 4.Creacion de tabla Figura 7. Llenado de datos de manera grafica O sino desde la terminal (Aplicaciones → Accesorios → Terminal): Sudo su postgres psql -d template1 create database baseDatos; q; psql -d baseDatos; create table tabla(id int, nombre char(10), primary key(id)); Para ver todas las tablas de mi base de datos: dt;Figura 5. Creación de columnas Describir la tabla: d tabla; Insertar: insert into tabla values(0,charl); Ver registros de la tabla:
  • 15. select * from tabla;10. Conclusiones  PostgreSQL es tan apto y conveniente como Microsoft SQL Server u Oracle, pero con una gran ventaja del costo.  El motor de interno es muy estable y hace un buen desempeño ante una gran gama de volúmenes de datos.  Corre en el hardware y Sistema Operativo de tu elección, es decir no solo en el sistema que cualquier otro vendedor recomienda para usar tu base de datos.  PostgreSQL es más confiable q MySQL pero mas lento.11. Agradecimientos Agradecemos al profesor y a nuestros compañeros por ser la motivación a la investigación de este pequeño, pero significativo aporte, con el fin de la difusión de este gestor de base de datos como lo es PostgresSQL12. REFERENCIAS 12.1 Bibliográficas:  Manual PostgreSQL, Instalación, Creación, Mantención, PlpgSQL,.2 Abril 2008, Versión 0.3  Jonathan Makuc, Cristian Molina, Armando Reyes 12.2 Linkograficas:  http://es.wikipedia.org/wiki/PostgreSQL  http://www.ibiblio.org/pub/linux/docs/LuCaS/ Postgresql- es/web/navegable/todopostgresql/advanced.ht ml  http://www.guatewireless.org/articulos/mys ql-vs-postgresql/#postgresql