Está en la página 1de 15

PostgreSQL

Taboada Prncipe, Orlando


968542497 Cdigo:051270160 8

Villanueva Len, Sergio


990767235 Cdigo:012700708

Rodriguez Rodriguez Gerson


947608149 Cdigo:022700608

Lpez Egsquiza, Charl


617677 Cdigo:042700208

Ganoza Campos, Juan


949218534 Cdigo:051270060 8

Emailorlando_3013 @hotmail.com

Emailservileo_hjc_22 5@hotmail.com

Emailgerson_ex @hotmail.com

Emailcarl_stom@hot mail.com

Emailbenjamin_7h3_ mast3r@hotmail .com

RESUMEN
En este paper, nosotros daremos a conocer la forma correcta de aprender a utilizar un nuevo gestor de base de datos, como lo es PostgreSQL. Una de las cosas que aprenderemos en este paper ser la manera de como crear una base de datos e interactuar con la misma, usando para ello, dos maneras diferentes, las cuales son: de manera consola y de manera grfica. Haremos tambin uso de un ejemplo prctico para que de esta manera podamos conocer y comprender como funciona este gestor de base de datos.

2. HISTORIA
PostgreSQL ha tenido una larga evolucin, la cual se inicia en 1982 con el proyecto Ingres en la Universidad de Berkeley. Este proyecto, liderado por Michael Stonebraker, fue uno de los primeros intentos en implementar un motor de base de datos relacional. Despus de haber trabajado un largo tiempo en Ingres y de haber tenido una experiencia comercial con l mismo, Michael decidi volver a la Universidad en 1985 para trabajar en un nuevo proyecto sobre la experiencia de Ingres, dicho proyecto fue llamado post-ingres o simplemente POSTGRES. El proyecto post-ingres pretenda resolver los problemas con el modelo de base de datos relacional que haban sido aclarados a comienzos de los aos 1980. El principal de estos problemas era la incapacidad del modelo relacional de comprender "tipos", es decir, combinaciones de datos simples que conforman una nica unidad. Actualmente estos son llamados objetos. Se esforzaron en introducir la menor cantidad posible de funcionalidades para completar el soporte de tipos. Estas funcionalidades incluan la habilidad de definir tipos, pero tambin la habilidad de describir relaciones - las cuales hasta ese momento eran ampliamente utilizadas pero mantenidas completamente por el usuario. En Postgres la base de datos comprenda las relaciones y poda obtener informacin de tablas relacionadas utilizando reglas. Postgres us muchas ideas de Ingres pero no su cdigo. La siguiente lista muestra los hitos ms importantes en la vida del proyecto Postgre: 1986: se publicaron varios papers que describan las bases del sistema. 1988: ya se contaba con una versin utilizable.

Condiciones Generales
Base de datos, Gestor de base de datos, tablas

Palabras Clave
Gestor, Usuario, Superusuario, Servidor, API, ddl dml

1. INTRODUCCIN
El sistema de gestin de bases de datos relacionales orientadas a objetos conocido como PostgreSQL, est derivado del paquete Postgres escrito en Berkeley all por los aos 80. Con cerca de una dcada de desarrollo tras l, PostgreSQL es el gestor de bases de datos de cdigo abierto ms avanzado hoy en da, ofreciendo control de concurrencia multi-versin y soportando casi toda la sintaxis SQL (incluyendo subconsultas, transacciones, y tipos y funciones definidas por el usuario). Adems cuenta tambin con un amplio conjunto de APIs para la mayora de lenguajes de programacin (incluyendo los ms usados, tales como C, C++, Java, PHP, perl, tcl y python).

1989: el grupo publicaba la versin 1 para una pequea comunidad de usuarios. 1990: se publicaba la versin 2 la cual tena prcticamente reescrito el sistema de reglas. 1991: publicacin de la versin 3, esta aada la capacidad de mltiples motores de almacenamiento. 1993: crecimiento importante de la comunidad de usuarios, la cual demandaba ms caractersticas. 1994: despus de la publicacin de la versin 4, el proyecto termin y el grupo se disolvi. Despus de que el proyecto POSTGRES terminara, dos graduados de la universidad, Andrew Yu y JollyChen, comenzaron a trabajar sobre el cdigo de POSTGRES, esto fue posible dado que POSTGRES estaba licenciado bajo la BSD, y lo primero que hicieron fue aadir soporte para el lenguaje SQL a POSTGRES, dado que anteriormente contaba con un intrprete del lenguaje de consultas QUEL (basado en Ingres), creando as el sistema al cual denominaron Postgres95. Para el ao 1996 se unieron al proyecto personas ajenas a la Universidad como Marc Fournier de Hub.Org NetworkingServices, Bruce Momjian y Vadim B. Mikheev quienes proporcionaron el primer servidor de desarrollo no universitario para el esfuerzo de desarrollo de cdigo abierto y comenzaron a trabajar para estabilizar el cdigo de Postgres95. En el ao 1996 decidieron cambiar el nombre de Postgres95 de tal modo que refleje la caracterstica del lenguaje SQL y lo terminaron llamando PostgreSQL, cuya primera versin de cdigo abierto fue lanzada el 1 de agosto de 1996. La primera versin formal de PostgreSQL (6.0) fue liberada en enero de 1997. Desde entonces, muchos desarrolladores entusiastas de los motores de base de datos se unieron al proyecto, coordinaron va Internet y entre todos comenzaron a incorporar muchas caractersticas al motor.Aunque la licencia permita la comercializacin de PostgreSQL, el cdigo no se desarroll en principio con fines comerciales, algo sorprendente considerando las ventajas que PostgreSQL ofreca. La principal derivacin se origin cuando Paula Hawthtorn (un miembro del equipo original de Ingres que se pas a Postgres) y Michael Stonebraker conformaron IllustraInformation Technologies para comercializar Postgres. En 2000, ex inversionistas de Red Hat crearon la empresa Great Bridge para comercializar PostgreSQL y competir contra proveedores comerciales de bases de datos. Great Bridge auspici a varios desarrolladores de PostgreSQL y don recursos de vuelta a la comunidad, pero a fines de 2001 cerr debido a la dura competencia de compaas como Red Hat y pobres condiciones del mercado.

En 2001, CommandPrompt, Inc. lanz Mammonth PostgreSQL, la ms antigua distribucin comercial de PostgreSQL. Contina brindando soporte a la comunidad PostgreSQL a travs del auspicio de desarrolladores y proyectos, incluyendo PL/Perl, PL/php y el alojamiento de proyectos de comunidades como PostgreSQL Build Farm.En enero de 2005, PostgreSQL recibi apoyo del proveedor de base de datos Pervasive Software, conocido por su producto Btrieve que se utilizaba en la plataforma Novell Netware. Pervasive anunci soporte comercial y participacin comunitaria y logr algo de xito. Sin embargo, en julio de 2006 dej el mercado de soporte de PostgreSQL. A mediados de 2005 otras dos compaas anunciaron planes para comercializar PostgreSQL con nfasis en nichos separados de mercados. EnterpriseDB aadi funcionalidades que le permitan a las aplicaciones escritas para trabajar con Oracle ser ms fciles de ejecutar con PostgreSQL. Greenplum contribuy mejoras directamente orientadas a aplicaciones de Data Warehouse e Inteligencia de negocios, incluyendo el proyecto BizGres.En octubre de 2005, John Loiacono, vicepresidente ejecutivo de software en Sun Microsystems coment: "No estamos yendo tras el OEM de Microsoft pero estamos viendo a PostgreSQL ahora", aunque no se dieron especificaciones en ese momento. Para noviembre de 2005, Sun Solaris 10 (lanzamiento 6/06) inclua PostgreSQL. En agosto de 2007 EnterpriseDB anunci el Postgres Resource Center y EnterpriseDB Postgres, diseados para ser una completamente configurada distribucin de PostgreSQL incluyendo muchos mdulos contribuidos y agregados. EnterpriseDB Postgres fue renombrado Postgres Plus en marzo de 2008. El proyecto PostgreSQL contina haciendo lanzamientos principales anualmente y lanzamientos menores de reparacin de bugs, todos disponibles bajo la licencia BSD, y basados en contribuciones de proveedores comerciales, empresas aportantes y programadores de cdigo abierto mayormente.

3. FUNCIONAMIENTO 3.1 Arquitectura bsica de Postgres.


Postgres usa un modelo cliente - servidor. Una sesin de postgres se basa en dos procesos, que mostramos a continuacin.

3.1.1 Un proceso servidor:


Es el que gestiona los archivos que forman la base de datos, acepta las conexiones que efectan los clientes con ella y que ejecuta acciones a peticin de los clientes.

3.1.2 La Aplicacin cliente del usuario

(frontend)
Es la que pretende ejecutar ciertas acciones sobre la base de datos. Estas aplicaciones pueden ser de naturaleza muy diversa, desde herramientas modo texto o aplicaciones grficas, hasta servidores que acceden para recuperar datos y mostrarlos en una pgina web.

4.2 Consistencia
Es la propiedad que asegura que slo se empieza aquello que se puede acabar. Por lo tanto se ejecutan aquellas operaciones que no van a romper la reglas y directrices de integridad de la base de datos.

4.3 Aislamiento:
Es la propiedad que asegura que una operacin no puede afectar a otras. Esto asegura que dos transacciones sobre la misma informacin nunca generar ningn tipo de error.

Tal como ocurre en las aplicaciones cliente servidor, el cliente puede estar en un equipo diferente al que se encuentra el servidor. En ese caso, ambos se comunican mediante una conexin de red TCP/IP. Es necesario tener esto en cuenta, ya que archivos que son accesibles desde un cliente no tienen por qu serlo desde otro. Se debe prestar especial atencin a estos temas. El servidor de postgres puede manejar diferentes conexiones concurrentes de los clientes. Dispone de un proceso padre (conocido como postmaster) que crea distintos procesos hijos que atienden las conexiones entrantes. Un planteamiento tpico del modelo cliente servidor.

4.4 Durabilidad
Es la propiedad que asegura que una vez realizada la operacin, sta persistir y no se podr deshacer aunque falle el sistema.

4.4 Sistemas Operativos


Corre en casi todos los principales sistemas operativos: Linux, Unix, BSDs, Mac OS, Beos, Windows, etc.

4.6 Documentacin
Muy bien organizada, pblica y libre, con comentarios de los propios usuarios.

4.7 Soporte Nativo


Para los lenguajes ms 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


PostgreSQL soporta un motor por defecto, el sistema de almacenamiento Postgres (Postgres Storage System). La lgica y arquitectura del gestor de almacenamiento fueron detalladas en The Postgres Storage System. Postgres ha pasado por varias revisiones importantes desde entonces, desde la versin 1, que se lanz para unos pocos usuarios, hasta la 3, se mejor el ejecutor de consultas y se aadi el soporte para mltiples gestores de almacenamiento.

4.9 Soporte De Caracteristicas


Todas las caractersticas de una base de datos profesional (triggers, storeprocedures funciones, secuencias, relaciones, reglas, tipos de datos definidos por usuarios, vistas, vistas materializadas, etc.)

4.10 Soporte de datos


Tipos de datos de SQL92 y SQL99.

4.11 Soporte De Protocolo De Comunicacin


Encriptado por SSL

4. CARACTERSTICAS DE POSTGRESQL 4.1 Atomicidad (Indivisible)


Es la propiedad que asegura que la operacin se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.

4.12 Extensiones
Para alta disponibilidad, nuevos tipos de ndices, datos espaciales, minera de datos, etc. Comunidades muy activas, varias comunidades en castellano. Altamente adaptable a las necesidades del cliente.

5. SENTENCIAS 5.1 Sentencias Para Creacin De Usuario


PostgreSQL proporciona dos mtodos para la creacin de usuarios de bases de datos. Cada uno de ellos requiere autenticacin como superusuario. Los mtodos son: A travs del uso del comando SQL CREATE USER. Un programa de lnea de comandos llamado createuser

e)

NOCREATEUSER

Explcitamente fuerza a la situacin por defecto, que deniega el privilegio.

f) IN GROUPnombre_grupo [, ...]
Aade al nuevo usuario al grupo llamado nombre_grupo. Pueden ser especificados mltiples nombres de grupo, separndolos mediante comas. El o los grupos deben existir para que funcione la condicin.

5.1.1 Create user:


La sintaxis para CREATE USER es: CREATE USER nombre_usuario [ WITH [ SYSID uid ] [ PASSWORD 'password' ] ] [ CREATEDB | NOCREATEDB ] [ CREATEUSER | NOCREATEUSER ] [ IN GROUP groupname [, ...] ] [ VALID UNTIL 'abstime' ] A continuacin se describe cada una de las partes de la sintaxis de CREATE USER:

g)

VALID UNTIL 'abstime'

Establece que la contrasea del usuario expirar el abstime, el cual debe ser un formato reconocible de fecha/hora (timestamp). Tras esa fecha, la contrasea se resetea, y la expiracin se hace efectiva.

h)

VALID UNTIL 'infinity'

Establece validez permanente para la contrasea del usuario.

a)

SYSID uid:

5.1.2

Createuser:
El script createuser es ejecutado directamente desde la lnea de comandos, y puede operar de dos formas. Si se utiliza sin argumentos, l interactivamente le pedir el nombre de usuario y cada uno de los privilegios que se le van a asignar. Alternamente, puede optar por especificar las opciones y el nombre del usuario a ser creado en la misma lnea de comandos. La sintaxis de createuser es: createuser [ opciones ] [ nombre_usuario ] El nombre_usuario en la sintaxis representa el nombre del usuario que va a crear. Reemplace opciones con una o ms de las siguientes:

Especifica que el ID que va a definirse debe establecerse al valor de uid.Si se omite, un razonable y nico valor numrico por defecto es escogido.

b)

PASSWORD 'password':

Establece la nueva contrasea del usuario. Si no se especifica, la contrasea por defecto es NULL. c) CREATEDB | NOCREATEDB: Usando la palabra clave CREATEDB se le garantiza al nuevo usuario el privilegio de crear nuevas bases de datos, as como el de destruir las de su propiedad. Usando NOCREATEDB se deniega este permiso (que es lo que ocurre por defecto).

d)

Createuser | Nocreateuser

a) -d, -createdb
Equivalente a la palabra clave CREATEDB. Permite al nuevo usuario crear bases de datos. b) -D, -no-createdb Equivalente a la palabra clave NOCREATEDB. Explcitamente indica que el nuevo usuario no puede crear bases de datos. -a, -adduser Equivalente a la palabra clave CREATEUSER Perimte al nuevo usuario la creacin de otros usuarios, y

Certifica el privilegio de crear nuevos usuarios. Si un usuario tiene los privilegios de crear a otros usuarios tendr adems todos los privilegios, en todas las bases de datos (incluyendo los permisos para crear una base de datos, aunque se haya especificado NOCREATEDB).

c)

asigna el status de superusurario al usuario.

5.2 Operadores
d) -A, -no-adduser Equivalente a la palabra clave NOCREATEUSER. Explcitamente indica que el nuevo usuario no es superusuario. -i SYSID, -sysid=SYSID Establece el nuevo ID de sistema del usuario a SYSID. -P, -pwprompt Resulta en una peticin de introduccin de contrasea, permitindole establecer la contrasea del nuevo usuario.

5.2.1 Operadores de precedencia lexical (precedencia decreciente)


Tabla 1- Operadores de precedencia lexical Elemento UNION :: [] . ; : | */% +IS izquierda izquierda derecha izquierda derecha izquierda izquierda izquierda Precedencia Descripcin izquierda constructor SQL de select conversor de tipos de Postgres delimitadores de array delimitadores de tabla/columna menos unario terminacin de declaracin, logaritmo exponenciacin comienzo de intervalo multiplicacin, divisin adicin, substraccin test para TRUE, FALSE, NULL test para NULL test para NOT NULL nativos y definidos por el usuario fijar miembro continente concordancia de patrones de strings desigualdad booleana derecha derecha izquierda izquierda igualdad negacin interseccin lgica unin lgica

e)

f)

g) -h NOMBRE_MAQUINA,
-host=NOMBRE_MAQUINA Especifica desde qu NOMBRE_MAQUINA se conectar, adems de la local (localhost), o la mquina definida por la variable de entorno PGHOST. h) -p PUERTO, -port=PUERTO Especifica que la conexin de base de datos se realizar por el puerto PUERTO, en vez de por el puerto por defecto. -U NOMBRE_USUARIO, -username=NOMBRE_USUARIO Especifica que NOMBRE_USUARIO ser el usuario que conecte a PostgreSQL (por defecto se conecta usando el nombre de usuario del sistema). -password Resulta en una peticin de contrasea para el usuario que conecta, lo cual ocurre automticamente si el archivo pg_hba.conf est configurado para no confiar en la maquina solicitante.

ISNULL NOTNULL (todos los dems operadores) IN BETWEEN LIKE <> = NOT AND OR

i)

j)

5.2.2 Operadores generales


Los operadores mostrados aqu estn definidos para un nmero de tipos de datos nativos, que van desde los tipos numricos hasta los tipos date/time.

Operador Descripcin Tabla 2- Operadores generales Operador < <= <> = > >= || !!= ~~ !~~ ~ Descripcin Menor que? Menor o igual que? No igual? Igual? Mayor que? Mayor o igual que? Concatena strings NOT IN Como No como Utilizacin 1<2 1 <= 2 1 <> 2 1=1 2>1 2 >= 1 'Postgre' || 'SQL' 3 !!= i 'scrappy,marc,hermit' ~~ '%scrappy%' 'bruce' !~~ '%al%' ||/ Raz cbica

Utilizacin ||/ 27.0

5.2.4 Operadores geomtricos


Tabla 4- Operadores geomtricos Operador + * / # # ## && &< &> <-> << <^ Utilizacin 3! >^ ?# ??-| @-@ ?| ?|| Esta encima de? Interseca o se superpone Es horizontal? 5%4 % 4.5 2*3 2+3 2-3 4/2 : 3.0 (; 5.0) @ -5.0 2.0 ^ 3.0 |/ 25.0 >> Descripcin Translacin Translacin Utilizacin '((0,0),(1,1))'::box + '(2.0,0)'::punto '((0,0),(1,1))'::box '(2.0,0)'::punto

Escalado/rotacin '((0,0),(1,1))'::box * '(2.0,0)'::punto Escalado/rotacin '((0,0),(2,2))'::box / '(2.0,0)'::punto Interseccin '((1,-1),(-1,1))' # '((1,1), (-1,-1))'

Concordancia 'thomas' ~ '.*thomas.*' (regex), sensible a mayusc/minusc Concordancia 'thomas' ~* '.*Thomas.*' (regex), sensible a mayusc/minusc No concuerda 'thomas' !~ '.*Thomas.*' (regex), sensible a mayusc/minusc No concuerda 'thomas' !~* '.*vadim.*' (regex), sensible a mayusc/minusc

Nmero de puntos # '((1,0),(0,1),(-1,0))' en polgono Punto ms prximo Se superpone a? '(0,0)'::punto ## '((2,0), (0,2))'::lseg '((0,0),(1,1))'::caja && '((0,0),(2,2))'::caja

~*

!~

!~*

Se superpone por '((0,0),(1,1))'::caja &< la izquierda? '((0,0),(2,2))'::caja Se superpone por '((0,0),(3,3))'::caja &> la derecha? '((0,0),(2,2))'::caja Distancia entre '((0,0),1)'::crculo <-> '((5,0),1)'::crculo

5.2.3 Operadores numricos


Tabla 3- Operadores numricos Operador Descripcin ! !! % % * + / : ; @ ^ |/ Factorial Mdulo Truncado Multiplicacin Suma Resta Divisin Exponenciacin natural Logaritmo natural Valor Absoluto Exponenciacin Raz cuadrada

A la izquierda de? '((0,0),1)'::crculo << '((5,0),1)'::crculo Est debajo de? A la derecha de? '((0,0),1)'::crculo <^ '((0,5),1)'::crculo '((5,0),1)'::crculo >> '((0,0),1)'::crculo '((0,5),1)'::crculo >^ '((0,0),1)'::crculo '((-1,0),(1,0))'::lseg ?# '((-2,-2),(2,2))'::caja; '(1,0)'::punto ?'(0,0)'::punto

Factorial (operador izquierdo) !! 3

Es perpendicular? '((0,0),(0,1))'::lseg ?-| '((0,0),(1,0))'::lseg Longitud de circunferencia Es vertical? Es paralelo? @-@ '((0,0), (1,0))'::path '(0,1)'::punto ?| '(0,0)'::punto '((-1,0),(1,0))'::lseg ?|| '((-1,2),(1,2))'::lseg

Operador @ @@ ~=

Descripcin Contenido en Centro de Parecido a

Utilizacin '(1,1)'::punto @ '((0,0),2)'::crculo @@ '((0,0),10)'::crculo '((0,0),(1,1))'::poligono ~= '((1,1), (0,0))'::poligono

Operador <= = >= > <>

Descripcin

Utilizacin

Menor o igual que '192.168.1.5'::cidr<= '192.168.1.5'::cidr Igual que '192.168.1.5'::cidr = '192.168.1.5'::cidr

Mayor o igual que '192.168.1.5'::cidr>= '192.168.1.5'::cidr Mayor que No igual que '192.168.1.5'::cidr> '192.168.1.4'::cidr '192.168.1.5'::cidr<> '192.168.1.4'::cidr

5.2.5 Operadores de intervalos de tiempo


El tipo de dato de intervalos de tiempo, tinterval, es un legado de los tipos date/time originales y no est tan bien soportado como los tipos ms modernos. Hay varios operadores para este tipo. Tabla 5- Operadores de intervalos de tiempo Operador Descripcin #< #<= #<> #= #> #>= <#> << | ~= <?> Intervalo menor que? Intervalo menor o igual que? Intervalo no igual que? Intervalo igual que? Intervalo mayor que? Intervalo mayor o igual que? Convertir a un intervalo de tiempo Intervalo menor que? Comienzo de intervalo Parecido a Tiempo dentro del intervalo? Utilizacin

<< <<= >> >>=

Est contenido en '192.168.1.5'::cidr<< '192.168.1/24'::cidr Est contenido en '192.168.1/24'::cidr<<= o es igual a '192.168.1/24'::cidr Contiene '192.168.1/24'::cidr>> '192.168.1.5'::cidr

Contiene o es igual '192.168.1/24'::cidr>>= que '192.168.1/24'::cidr

5.2.7 Operadores IP V4 INET


Tabla 7- Operadores ipv4 inet Operador < <= = >= > <> << <<= >> >>= Descripcin Menor que Utilizacin '192.168.1.5'::inet< '192.168.1.6'::inet

Menor o igual que '192.168.1.5'::inet<= '192.168.1.5'::inet Igual que '192.168.1.5'::inet = '192.168.1.5'::inet

Mayor o igual que '192.168.1.5'::inet>= '192.168.1.5'::inet Mayor que No igual '192.168.1.5'::inet> '192.168.1.4'::inet '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 es igual a Contiene '192.168.1/24'::inet<<= '192.168.1/24'::inet '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 cidr Operador < Descripcin Menor que Utilizacin '192.168.1.5'::cidr< '192.168.1.6'::cidr

5.3 Sentencias De Control

Podemos utilizar sentencias de control para escribir nuestros programas y permitir que sigan un algoritmo no lineal, para ello, contamos bsicamente con las siguientes estructuras : LOOP, EXIT,IF, ELSE,FOR, WHILE

ELSE RETURN false; END IF; ...resto de la funcin...

5.3.1 SENTENCIA DE CICLO LOOP :


Esta sentencia nos permite efectuar un ciclo, su estructura bsica es : ...resto de la funcin... LOOP ...sentencias a ejecutar en el ciclo... END LOOP ...resto de la funcin...

5.3.4 SENTENCIA DE CICLO FOR :


Existen dos tipos de ciclos FOR, el primero tiene que ver claramente con los ciclos numricos comunes, es decir, lo que comnmente se usa para efectuar repeticiones, y por otra parte, tenemos un ciclo FOR que nos permite recorrer tablas y procesar sus datos, esta segunda est ligada a sentencias SQL, veamos entonces como se utiliza la sentencia FOR casos:

5.3.2 SENTENCIA DE SALIDA EXIT :


Cuando usamos un ciclo LOOP, es necesario darle una salida para que este mismo termine, la sentencia EXIT nos permite finalizar el LOOP y continuar en la sentencia siguente a la salida de ste, generalmente, EXIT est acompaado con la sentencia IF, por ejemplo: LOOP ...resto de la funcion... contador := contador + 1; IF contador >= 10 THEN EXIT; -- salida del loop cuando sea mayor o igual que 10 END IF; END LOOP ...resto de la funcion...

5.3.4.1

SENTENCIA FOR DE PROCESO CICLICO NUMERICO


FOR <variable> IN <inicio>..<fin> LOOP ... SENTENCIAS A EJECUTAR DENTRO DEL CICLO FOR ... END LOOP; o bien puede usar el FOR de forma inversa FOR <variable> REVERSE <fin>..<inicio> LOOP ... SENTENCIAS A EJECUTAR DENTRO DEL CICLO FOR ... END LOOP; Ejemplo : ...resto de la funcion... FOR inc IN 1..10 LOOP factorial := factorial * inc; END LOOP; RETURN factorial; ...resto de la funcion... :

5.3.3 SENTENCIAS IF, ELSE:


Podemos efectuar operaciones de comparacin con las sentencias IF, ELSE, los operadores de comparacin son los siguientes : <menor que ... >mayor que ... <>distinto a ... <= menor o igual que ... >= mayor o igual que ... = igual que ... OR o ... AND y ...

5.3.4.2 SENTENCIA FOR APLICADA A PROCESOS DE REGISTROS SQL


FOR <registro o fila> IN <sentencia SELECT SQL> LOOP ... SENTENCIAS A EJECUTAR DENTRO DEL CICLO FOR ... END LOOP; Ejemplo : ...resto de la funcion...

Ejemplo: ...resto de la funcin... IF >= 10 or THEN RETURN true;

DECLARE registro RECORD; BEGIN FOR registro IN SELECT * FROM productos LOOP stock := registro.sock_actual + 100; ... otras sentencias ... END LOOP; ...resto de la funcion... Note que para utilizar esta sentencia FOR debemos declarar una variable de tipo RECORD o registro. RECORD es una palabra reservada para estos casos, y no posee una estructura definida pues no ha sido asignada a ninguna tabla, este tipo de dato nos permite recorrer la tabla de productos y obtener sus valores por medio de esta variable.

caractersticas especiales de Postgres; mientras esto provee compatibilidad, es menudo ms conveniente sacar provecho a aquellas definiciones adicionales del motor. A continuacin se describen los tipos de datos ms utilizados y la sugerencia de cuando es conveniente utilizarlos:

Tabla 8- Tipos cadenas Tipo char(n) Text varchar(n) Tipos String Descripcin Datos de caracteres no Unicode de longitud fija Cantidad no predefinida Datos de caracteres no Unicode de longitud variable

5.3.5 SENTENCIA DE CICLO CONDICIONAL WHILE


La sentencia WHILE se ejecuta de forma muy similar a otros lenguajes de programacin, su estructura es la siguiente : WHILE <condicion> LOOP ... SENTENCIAS A EJECUTAR DENTRO DEL CICLO WHILE ... END LOOP; Ejemplo : ...resto de la funcion... WHILE inc<= 10 LOOP factorial := factorial * inc; END LOOP; RETURN factorial; ...resto de la funcion... Este codigo funciona igual al descrito en el ejemplo del ciclo FOR.

El tipo char(n) almacena n caracteres en formato ASCII, un byte 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), guardamos el valor 'A', se almacena 'A', ocupando los cinco bytes. Por su parte varchar(n) almacena n caracteres en formato ASCII, un byte por cada letra. Cuando almacenamos datos en el tipo varchar, nicamente se utilizan los caracteres necesarios, Por ejemplo, si en un varchar(255), guardamos el valor 'A', se almacena 'A', ocupando solo un byte. El tipo de dato text permite el almacenamiento de un string en cualquier formato de largo no predefinido. Este es el tipo ms verstil de string. Considerando que hoy en da los espacios de almacenamiento son enormes, este tipo se recomienda en todo caso por sobre varchar. Cabe sealar que dado que text no tiene lmite predefinido, entonces al momento de llevar los datos a otros sistemas con largos predefinidos no hay aviso previo de que estamos sobrepasando algn largo establecido, siendo este un punto a considerar al momento de seleccionar el tipo de dato.

6. TIPOS DE DATOS
Postgres pone a disposicin del usuario una gran variedad de tipos de datos pensados en cubrir necesidades especficas. Suele suceder que al modelar una base de datos se utilizan los tipos conocidos y no se da provecho a las

Tabla 9- Tipos numericos Tipos Numricos Tipo Tamao Descripcin bool Booleano decimal variable Especificadas por el usuario

Rango true / false (t / f) no limite

float4 Float8

4 bytes 8 bytes

Bigint

8 bytes

Nmero de punto flotante con precisin Nmero de punto flotante con doble precisin Valores enteros.

6 lugares de decimales 15 lugares de decimales 9,233,372,036, 854,775,808 a +9,233,372,03 6,854,775,807 -32768 a +32767 -2147483648 a +2147483647 +/> lugares decimales no limite 0 a +2147483647 18 de

milisegundo a almacenar.

En tipos de datos para fecha y hora, Postgres conserva los tipos tradicionales. Aqu el nico parmetro interesante es aquel que se puede pasar a timestamp para indicar la cantidad de milisegundos a almacenar que por defecto son 6.

int2 Int4

2 bytes 4 bytes

Int8

8 bytes

numeric serial

variable 4 bytes

Precisin fija (entero) opcin para determinada precisin (entero) amplia gama determinada de precisin (entero) Especificadas por el usuario Identicador o referencia cruzada

7. CARACTERSTICAS AVANZADAS DE SQL EN POSTGRES


Habiendo cubierto los aspectos bsicos de PostgreSQLpara acceder a los datos, discutiremos ahora aquellas caractersticas de Postgres que los distinguen de los gestores de bases de datos convecionales. Estas caractersticas incluyen herencia, valores no-atmicos de datos (atributos basados en vectores y conjuntos) entre otros. 7.1 Herencia

Postgres contiene los tipos de datos nativos comnmente conocidos int y float, para nmeros enteros y reales respectivamente. Estos dependiendo del dgito que acompae su nombre, indica la precisin que soporta la columna. Para grandes nmeros se utiliza bigint, el cual suele ser utilizado para las columnas de identificadores. Cuando se requiere de gran precisin en nmeros, virtualmente sin limitacin (1000 dgitos), el tipo a utilizar es sin duda numeric. Este es recomendado para valores monetarios u cualquier dato donde la precisin es crucial. Este tipo adems soporta el valor NaN (Not A Number No Un Numero) para indicar tal caso, adems de NULL. El tipo de dato SERIAL es en realidad un atajo. En Postgres no existe un tipo autoincremental como es el caso de MySQL. Aqu por un lado se genera la columna con tipo BIGINT asociando al valor por defecto el siguiente valor de una secuencia (Ver punto 3.6) creada especialmente, provocndose el efecto de auto incremento Tabla 10- Tipo fecha y hora. Tipos de Fecha y Hora Tipo Descripcin date Fecha, con da, mes y ao time Hora, minuto, segundos timestamp(n) Fecha y hora con milisegundos. El parmetro n, indica la

Creemos dos clases. La clase capitals contiene las capitales de los estados, las cuales son tambin ciudades. Naturalmente, la clase capitals debera heredar de cities.

En este caso, una instancia de capitals hereda todos los atributos (name, population y altitude) de su padre, cities. El tipo del atributo name (nombre) es text, un tipo nativo de Postgres para cadenas ASCII de longitud variable. El tipo del atributo population (poblacin) es float, un tipo de datos, tambin nativo de Postgres , para nmeros de punto flotante de doble precisin. Las clase capitals tiene un atributo extra, state, que muestra a qu estado pertenecen. En Postgres, una clase puede heredar de ninguna o varias otras clases, y una consulta puede hacer referencia tanto a todas las instancias de una clase como a todas las instancias de una clase y sus descendientes. La jerarqua de la herencia es un grfico acclico dirigido. Por ejemplo, la siguiente consulta encuentra todas aquellas ciudades que estn situadas a un altura de 500 o ms pies:

cantidad

de

implementarlo a futuro pero no es de prioridad alta por eso que viene retrasndose su implementacin desde versiones antiguas.

7.2

Valores No-Atmicos

Por otro lado, para encontrar los nombres de todas las ciudades, includas las capitales estatales, que estn situadas a una altitud de 500 o ms pies, la consulta es:

Uno de los principios del modelo relacional es que los atributos de una relacin son atmicos Postgres no posee esta restriccin; los atributos pueden contener sub-valores a los que puede accederse desde el lenguaje de consulta. Por ejemplo, se pueden crear atributos que sean vectores de alguno de los tipos base. 7.3 Vectores

whichreturns:

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 tipos base.

Aqu el "*" despus de cities indica que la consulta debe realizarse sobre cities y todas las clases que estn por debajo de ella en la jerarqua de la herencia. Muchos de los comandos que ya hemos discutido (select, and>upand> and delete) brindan soporte a esta notacin de "*" al igual que otros como alter.

La consulta de arriba crear una clase llamada SAL_EMP con una cadena del tipo text (name),un vector unidimensional del tipo int4 (pay_by_quarter), el cual representa el salario trimestral del empleado y un vector bidimensional del tipo text (schedule), que representa la agenda semanal del empleado. Ahora realizamos algunos INSERTSs; note que cuando agregamos valores a un 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 reduccin en la construccin del ndice y ganaremos velocidad con ello adems de un mejor orden conceptual de nuestras tablas. No slo se puede heredar de un padre, es posible heredar de varias tablas, as teniendo la tabla hija todas las columnas de sus padres, y en caso que 2 o ms padres tengan un columna con el mismo nombre stas se fusionarn en la hija siempre y cuando sean del mismo tipo de dato. Al utilizar sta poderosa caracterstica existen algunas consideraciones que hay que tener en cuenta para evitarnos sorpresas desagradables e inesperadas. Al crear tablas heredadas, no todas las caractersticas de la tabla se heredan. Por ejemplo, las claves primarias, forneas, indices nicos. Segn el roadmap se ver para

Postgres utiliza de forma predeterminada la convencin de vectores "basados en uno" -- es decir, un vector de n elementos comienza con vector[1] y termina con vector[n]. Ahora podemos ejecutar algunas consultas sobre SAL_EMP. Primero mostramos como acceder a un solo elemento del vector por vez. Esta consulta devuelve los nombres de los empleados cuyos pagos han cambiado en el segundo trimestre:

PostgreSQL
descontinuado.

para

Windows

ha

sido

Para obtener un performance optimo, es requerido usar un sistema UNIX o un Linux optimizado para esta tarea.

La siguiente consulta recupera el pago del tercer trimestre de todos los empleados:

8.3 PostgreSQL VS MySQL


Tabla11. Cuadro comparativo

Tambin podemos acceder a cualquier porcin de un vector, o subvectores. Esta consulta recupera el primer item de la agenda de Bill para los primeros dos das de la semana.

PostgreSQL Es ms lento a la hora de resolver preguntas No tiene una buena documentacin

8. VENTAJAS Y DESVENTAJAS 8.1 Ventajas

Es software libre o sea, no hay costo asociado a la licencia del software. Estabilidad legendarias. y confiabilidad

Ofrece una garanta de integridad en los datos mucho ms fuerte. Presenta una mejor escalabilidad y rendimiento bajo grandes cargas de trabajo

MySQL Es ms rpido a la hora de resolver preguntas Tiene mejor documentacin y se ha orientado ms a facilitarle la vida al desarrollador Es fcil de vulnerar sin proteccin adecuada. Es ms ligero.

Extensible, el cdigo fuente est disponible para todos sin costo. Multiplataforma, est disponible en casi cualquier Unix.

9. INSTALACION DE POSTGRESQL 8.4.8 EN UBUNTU 10.10 9.1 Iniciando


Instalacin (Aplicaciones Accesorios Terminal): sudo apt-get install postgresql postgresql-client postgresql-contrib libpq-dev pgadmin3 Eso instala el cliente y servidor de la base de datos, algunos scripts de utilera y la aplicacin pgAdmin para administrar la base de datos disponibles en los repositorios de Ubuntu.

Herramientas grficas de diseo y administracin de bases de datos.

8.2 Desventajas

9.2 Cambiar la Contrasea del Usuario Administrador


Ahora necesitamos establecer la contrasea del usuario administrador postgres. Teclea la siguiente lnea en la terminal (cambia la palabra password por la contrasea que desees usar): sudo su postgres -c psql ALTER USER postgres WITH PASSWORD 'password'; \q Eso altera la contrasea dentro de la base de datos, ahora necesitamos hacer lo mismo para el usuario Linux postgres: sudo passwd -d postgres sudo su postgres -c passwd Te aparecer un prompt, introduce la misma contrasea que pusiste antes.

9.5

Ejemplo

Ingresando A Postgresql: Desde la terminal (Aplicaciones Accesorios Terminal): sudo /etc/init.d/postgresql start para iniciar. Luego lo primero que tenemos qu hacer es usar pgAdmin3 (Aplicaciones Programacin pgAdmin III) para crearnos un servidor donde alojaremos todas nuestras bases de datos. All hacemos clic en el men 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 deberas configurar el PostgreSQL Admin Pack, que te permite llevar un mejor registro y monitoreo de tu base de datos. Ejecuta lo siguiente desde la lnea 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 Programacin pgAdmin III

9.4 Cambiar el Esquema de Autentificacin de Postgresql


Al ejecutar algunos comandos de base de datos, es posible que te encuentres con un error que dice algo como: FATAL: la autentificacin Ident fall para el usuario x Para evitarlo necesitas editar el archivo /etc/postgresql/8.4/main/pg_hba.conf y cambiar el esquema de autentificacin. Abre el archivo con privilegios de root: sudo gedit /etc/postgresql/8.4/main/pg_hba.conf Y cambia esto: # "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

Fig ura 2. Creacin del servidor Luego accedemos al servidor al hacer doble click el nombre que le pusimos al servidor y nos va a pedir la contrasea que le dimos: Desde ah podremos crear nuestras bases de datos y posteriormente las tablas cmodamente.

Fig ura 3. Creacin de base de datos Figura 6.Creacion mediante cdigo 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; Describir la tabla: \d tabla; Insertar: insert into tabla values(0,'charl'); Ver registros de la tabla:

Figura 5. Creacin de columnas

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 desempeo ante una gran gama de volmenes de datos.

Corre en el hardware y Sistema Operativo de tu eleccin, es decir no solo en el sistema que cualquier otro vendedor recomienda para usar tu base de datos.

PostgreSQL es ms confiable q MySQL pero mas lento.

11. Agradecimientos
Agradecemos al profesor y a nuestros compaeros por ser la motivacin a la investigacin de este pequeo, pero significativo aporte, con el fin de la difusin de este gestor de base de datos como lo es PostgresSQL

12. REFERENCIAS 12.1 Bibliogrficas:

Manual PostgreSQL, Instalacin, Creacin, Mantencin, PlpgSQL,.2 Abril 2008, Versin 0.3 Jonathan Makuc, Cristian Molina, Armando Reyes

12.2 Linkograficas:
SQL http://es.wikipedia.org/wiki/Postgre

http://www.ibiblio.org/pub/linux/do cs/LuCaS/Postgresqles/web/navegable/todopostgresql/advanced.ht ml http://www.guatewireless.org/artic ulos/mysql-vs-postgresql/#postgresql

También podría gustarte