paper postgresql

21
PostgreSQL Taboada Príncipe, Orlando 968542497 Código:051270 1608 Email- orlando_301 3 @hotmail.co m Villanueva León, Sergio 990767235 Código:012700 708 Email- servileo_hj c_225@hotma il.com Rodriguez Rodriguez Gerson 947608149 Código:022700 608 Email- gerson_ex @hotmail.co m López Egúsquiza, Charl 617677 Código:042700 208 Email- carl_stom@h otmail.com Ganoza Campos, Juan 949218534 Código:051270 0608 Email- benjamin_7h 3_mast3r@ho tmail.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 gráfica. Haremos también uso de un ejemplo práctico para que de esta manera podamos conocer y comprender como funciona este gestor de base de datos. Condiciones Generales Base de datos, Gestor de base de datos, tablas Palabras Clave Gestor, Usuario, Superusuario, Servidor, API, ddl dml 1. INTRODUCCIÓN El sistema de gestión de bases de datos relacionales orientadas a objetos conocido como PostgreSQL, está derivado del paquete Postgres escrito en Berkeley allá por los años 80. Con 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 en día, ofreciendo control de concurrencia multi-versión y soportando casi toda la sintaxis SQL (incluyendo subconsultas, transacciones, y tipos y funciones definidas por el usuario). Además cuenta también con un amplio conjunto de APIs para la mayoría de lenguajes de programación (incluyendo los más usados, tales como C, C++, Java, PHP, perl, tcl y python). 2. HISTORIA PostgreSQL ha tenido una larga evolución, la cual se inicia en 1982 con el proyecto Ingres en la Universidad de Berkeley. Este proyecto, liderado por Michael

Upload: charl-lopez-egusquiza

Post on 05-Jul-2015

3.470 views

Category:

Documents


0 download

DESCRIPTION

paper de PostgreSqlhttp://basededatosi.blogspot.com/

TRANSCRIPT

Page 1: Paper Postgresql

PostgreSQL

Taboada Príncipe, Orlando968542497Código:0512701608Email-orlando_3013 @hotmail.com

Villanueva León, Sergio990767235Código:[email protected]

Rodriguez Rodriguez

Gerson947608149Código:022700608Email-gerson_ex @hotmail.com

López Egúsquiza, Charl617677Código:[email protected]

Ganoza Campos, Juan949218534Código:[email protected]

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 gráfica.

Haremos también uso de un ejemplo práctico para que de esta manera podamos conocer y comprender como funciona este gestor de base de datos.

Condiciones Generales

Base de datos, Gestor de base de datos, tablas

Palabras Clave

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

1. INTRODUCCIÓN

El sistema de gestión de bases de datos relacionales orientadas a objetos conocido como PostgreSQL, está derivado del paquete Postgres escrito en Berkeley allá por los años 80. Con 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 en día, ofreciendo control de concurrencia multi-versión y soportando casi toda la sintaxis SQL (incluyendo subconsultas, transacciones, y tipos y funciones definidas por el usuario). Además cuenta también con un amplio conjunto de APIs para la mayoría de lenguajes de programación (incluyendo los más usados, tales como C, C++, Java, PHP, perl, tcl y python).

2. HISTORIA

PostgreSQL ha tenido una larga evolución, 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. Después 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 pretendía resolver los problemas con el modelo de base de datos relacional que habían sido aclarados a comienzos de los años 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 incluían la habilidad de definir tipos, pero también 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 «comprendía» las relaciones y podía obtener información de tablas relacionadas utilizando reglas. Postgres usó muchas ideas de Ingres pero no su código.

La siguiente lista muestra los hitos más importantes en la vida del proyecto Postgre:

1986: se publicaron varios papers que describían las bases del sistema.

1988: ya se contaba con una versión utilizable.

Page 2: Paper Postgresql

1989: el grupo publicaba la versión 1 para una pequeña comunidad de usuarios.

1990: se publicaba la versión 2 la cual tenía prácticamente reescrito el sistema de reglas.

1991: publicación de la versión 3, esta añadía la capacidad de múltiples motores de almacenamiento.

1993: crecimiento importante de la comunidad de usuarios, la cual demandaba más características.

1994: después de la publicación de la versión 4, el proyecto terminó y el grupo se disolvió.

Después de que el proyecto POSTGRES terminara, dos graduados de la universidad, Andrew Yu y JollyChen, comenzaron a trabajar sobre el código de POSTGRES, esto fue posible dado que POSTGRES estaba licenciado bajo la BSD, y lo primero que hicieron fue añadir soporte para el lenguaje SQL a POSTGRES, dado que anteriormente contaba con un intérprete del lenguaje de consultas QUEL (basado en Ingres), creando así el sistema al cual denominaron Postgres95.

Para el año 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 código abierto y comenzaron a trabajar para estabilizar el código de Postgres95. En el año 1996 decidieron cambiar el nombre de Postgres95 de tal modo que refleje la característica del lenguaje SQL y lo terminaron llamando PostgreSQL, cuya primera versión de código abierto fue lanzada el 1 de agosto de 1996. La primera versión 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 vía Internet y entre todos comenzaron a incorporar muchas características al motor.Aunque la licencia permitía la comercialización de PostgreSQL, el código no se desarrolló en principio con fines comerciales, algo sorprendente considerando las ventajas que PostgreSQL ofrecía.

La principal derivación 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 compañías como Red Hat y pobres condiciones del mercado.

En 2001, CommandPrompt, Inc. lanzó Mammonth PostgreSQL, la más antigua distribución comercial de PostgreSQL. Continúa brindando soporte a la comunidad PostgreSQL a través 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 participación 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 compañías anunciaron planes para comercializar PostgreSQL con énfasis en nichos separados de mercados. EnterpriseDB añadió funcionalidades que le permitían a las aplicaciones escritas para trabajar con Oracle ser más fáciles 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) incluía PostgreSQL. En agosto de 2007 EnterpriseDB anunció el Postgres Resource Center y EnterpriseDB Postgres, diseñados para ser una completamente configurada distribución de PostgreSQL incluyendo muchos módulos contribuidos y agregados. EnterpriseDB Postgres fue renombrado Postgres Plus en marzo de 2008.

El proyecto PostgreSQL continúa haciendo lanzamientos principales anualmente y lanzamientos menores de reparación de bugs, todos disponibles bajo la licencia BSD, y basados en contribuciones de proveedores comerciales, empresas aportantes y programadores de código abierto mayormente.

3. FUNCIONAMIENTO

3.1 Arquitectura básica de Postgres.

Postgres usa un modelo cliente - servidor. Una sesión de postgres se basa en dos procesos, que mostramos a continuación.

3.1.1 Un proceso servidor:Es el que gestiona los archivos que forman la base de datos, acepta las conexiones que efectúan los clientes con ella y que ejecuta acciones a petición de los clientes.

Page 3: Paper Postgresql

3.1.2 La Aplicación 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 gráficas, hasta servidores que acceden para recuperar datos y mostrarlos en una página web.

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 conexión 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 atención 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 típico del modelo cliente servidor.

Figura 1 Modelo cliente – servidor en postgres

3.2 Motor De Almacenamiento

PostgreSQL soporta un motor por defecto, el sistema de almacenamiento Postgres (Postgres Storage System). La lógica y arquitectura del gestor de almacenamiento fueron detalladas en The Postgres Storage System.Postgres ha pasado por varias revisiones importantes desde entonces, desde la versión 1, que se lanzó para unos pocos usuarios, hasta la 3, se mejoró el ejecutor de consultas y se añadió el soporte para múltiples gestores de almacenamiento.

4. CARACTERÍSTICAS DE POSTGRESQL

4.1 Atomicidad (Indivisible) Es la propiedad que asegura que la operación se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.

4.2 Consistencia Es la propiedad que asegura que sólo 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 operación no puede afectar a otras. Esto asegura que dos transacciones sobre la misma información nunca generará ningún tipo de error.

4.4 Durabilidad Es la propiedad que asegura que una vez realizada la operación, é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 Documentación 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.

4.8 Drivers Odbc, Jdbc, .Net, etc.

4.9 Soporte De Caracteristicas Todas las características 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 datosTipos de datos de SQL92 y SQL99.

4.11 Soporte De Protocolo De ComunicaciónEncriptado por SSL

4.12 ExtensionesPara alta disponibilidad, nuevos tipos de índices, datos espaciales, minería de datos, etc. Comunidades muy activas, varias comunidades en castellano.

Altamente adaptable a las necesidades del cliente.

Page 4: Paper Postgresql

5. SENTENCIAS

5.1 Sentencias Para Creación De Usuario

PostgreSQL proporciona dos métodos para la creación de usuarios de bases de datos. Cada uno de ellos requiere autenticación como superusuario.Los métodos son:

A través del uso del comando SQL CREATE USER. Un programa de línea de comandos llamado createuser

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 continuación se describe cada una de las partes de la sintaxis de CREATE USER:

a) SYSID uid: Especifica que el ID que va a definirse debe establecerse al valor de uid.Si se omite, un razonable y único valor numérico por defecto es escogido.

b) PASSWORD 'password': Establece la nueva contraseña del usuario. Si no se especifica, la contraseña 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

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

e) NOCREATEUSER Explícitamente fuerza a la situación por defecto, que deniega el privilegio.

f) IN GROUPnombre_grupo [, ...]Añade al nuevo usuario al grupo llamado nombre_grupo. Pueden serespecificados múltiples nombres de grupo, separándolos mediantecomas. El o los grupos deben existir para que funcione la condición.

g) VALID UNTIL 'abstime'Establece que la contraseña del usuario expirará el abstime, el cual debe ser un formato reconocible de fecha/hora (timestamp). Tras esa fecha, la contraseña se resetea, y la expiración se hace efectiva.

h) VALID UNTIL 'infinity' Establece validez permanente para la contraseña del usuario.

5.1.2 Createuser:

El script createuser es ejecutado directamente desde la línea de comandos, y puede operar de dos formas.Si se utiliza sin argumentos, él interactivamente le pedirá el nombre deusuario 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 línea 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 más de las siguientes:

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. Explícitamente indica que el nuevo usuario no puede crear bases de datos.

c) -a, -adduser Equivalente a la palabra clave CREATEUSER Perimte al nuevo usuario la creación de otros usuarios, y asigna el status de superusurario al usuario.

Page 5: Paper Postgresql

d) -A, -no-adduserEquivalente a la palabra clave NOCREATEUSER. Explícitamente indica que el nuevo usuario no es superusuario.

e) -i SYSID, -sysid=SYSID Establece el nuevo ID de sistema del usuario a SYSID.

f) -P, -pwprompt Resulta en una petición de introducción de contraseña, permitiéndole establecer la contraseña del nuevo usuario.

g) -h NOMBRE_MAQUINA, -host=NOMBRE_MAQUINA

Especifica desde qué NOMBRE_MAQUINA se conectará, además de la local (localhost), o la máquina definida por la variable de entorno PGHOST.

h) -p PUERTO, -port=PUERTO Especifica que la conexión de base de datos se realizará por el puerto PUERTO, en vez de por el puerto por defecto.

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

j) -password Resulta en una petición de contraseña para el usuario que conecta, lo cual ocurre automáticamente si el archivo pg_hba.conf está configurado para no confiar en la maquina solicitante.

5.2 Operadores

5.2.1 Operadores de precedencia lexical (precedencia decreciente)

Tabla 1- Operadores de precedencia lexical

Elemento Precedencia Descripción

UNION izquierda constructor SQL de select

::   conversor de tipos de Postgres

[ ] izquierda delimitadores de array

. izquierda delimitadores de tabla/columna

- derecha menos unario

; izquierda terminación de declaración, logaritmo

: derecha exponenciación

| izquierda comienzo de intervalo

* / % izquierda multiplicación, división

+ - izquierda adición, substracción

IS   test para TRUE, FALSE, NULL

ISNULL   test para NULL

NOTNULL   test para NOT NULL

(todos los demás operadores)

  nativos y definidos por el usuario

IN   fijar miembro

BETWEEN   continente

LIKE   concordancia de patrones de strings

<>   desigualdad booleana

= derecha igualdad

NOT derecha negación

AND izquierda intersección lógica

OR izquierda unión lógica

5.2.2 Operadores generales

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.

Page 6: Paper Postgresql

Tabla 2- Operadores generales

Operador Descripción Utilización

< Menor que? 1 < 2

<= Menor o igual que?

1 <= 2

<> No igual? 1 <> 2

= Igual? 1 = 1

> Mayor que? 2 > 1

>= Mayor o igual que?

2 >= 1

|| Concatena strings

'Postgre' || 'SQL'

!!= NOT IN 3 !!= i

~~ Como 'scrappy,marc,hermit' ~~ '%scrappy%'

!~~ No como 'bruce' !~~ '%al%'

~ Concordancia (regex), sensible a mayusc/minusc

'thomas' ~ '.*thomas.*'

~* Concordancia (regex), sensible a mayusc/minusc

'thomas' ~* '.*Thomas.*'

!~ No concuerda (regex), sensible a mayusc/minusc

'thomas' !~ '.*Thomas.*'

!~* No concuerda (regex), sensible a mayusc/minusc

'thomas' !~* '.*vadim.*'

5.2.3 Operadores numéricos

Tabla 3- Operadores numéricos

Operador Descripción Utilización

! Factorial 3 !

!! Factorial (operador izquierdo) !! 3

% Módulo 5 % 4

% Truncado % 4.5

* Multiplicación 2 * 3

+ Suma 2 + 3

- Resta 2 - 3

/ División 4 / 2

: Exponenciación natural : 3.0

; Logaritmo natural (; 5.0)

@ Valor Absoluto @ -5.0

^ Exponenciación 2.0 ^ 3.0

|/ Raíz cuadrada |/ 25.0

Operador Descripción Utilización

||/ Raíz cúbica ||/ 27.0

5.2.4 Operadores geométricos

Tabla 4- Operadores geométricos

Operador Descripción Utilización

+ Translación '((0,0),(1,1))'::box + '(2.0,0)'::punto

- Translación '((0,0),(1,1))'::box - '(2.0,0)'::punto

* Escalado/rotación '((0,0),(1,1))'::box * '(2.0,0)'::punto

/ Escalado/rotación '((0,0),(2,2))'::box / '(2.0,0)'::punto

# Intersección '((1,-1),(-1,1))' # '((1,1),(-1,-1))'

# Número de puntos en polígono

# '((1,0),(0,1),(-1,0))'

## Punto más próximo

'(0,0)'::punto ## '((2,0),(0,2))'::lseg

&& Se superpone a? '((0,0),(1,1))'::caja && '((0,0),(2,2))'::caja

&< Se superpone por la izquierda?

'((0,0),(1,1))'::caja &< '((0,0),(2,2))'::caja

&> Se superpone por la derecha?

'((0,0),(3,3))'::caja &> '((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,0),1)'::círculo

<^ Está debajo de? '((0,0),1)'::círculo <^ '((0,5),1)'::círculo

>> A la derecha de? '((5,0),1)'::círculo >> '((0,0),1)'::círculo

>^ Esta encima de? '((0,5),1)'::círculo >^ '((0,0),1)'::círculo

?# Interseca o se superpone

'((-1,0),(1,0))'::lseg ?# '((-2,-2),(2,2))'::caja;

?- Es horizontal? '(1,0)'::punto ?- '(0,0)'::punto

?-| Es perpendicular? '((0,0),(0,1))'::lseg ?-| '((0,0),(1,0))'::lseg

@-@ Longitud de circunferencia

@-@ '((0,0),(1,0))'::path

?| Es vertical? '(0,1)'::punto ?| '(0,0)'::punto

Page 7: Paper Postgresql

Operador Descripción Utilización

?|| Es paralelo? '((-1,0),(1,0))'::lseg ?|| '((-1,2),(1,2))'::lseg

@ Contenido en '(1,1)'::punto @ '((0,0),2)'::círculo

@@ Centro de @@ '((0,0),10)'::círculo

~= Parecido a '((0,0),(1,1))'::poligono ~= '((1,1),(0,0))'::poligono

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 más modernos. Hay varios operadores para este tipo.

Tabla 5- Operadores de intervalos de tiempo

Operador Descripción Utilización

#< 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?  

5.2.6 Operadores IP V4 CIDR

Tabla 6- Operadores ipv4 cidr

Operador Descripción Utilización

< Menor que '192.168.1.5'::cidr< '192.168.1.6'::cidr

<= 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 '192.168.1.5'::cidr> '192.168.1.4'::cidr

<> No igual que '192.168.1.5'::cidr<> '192.168.1.4'::cidr

<< Está contenido en '192.168.1.5'::cidr<< '192.168.1/24'::cidr

<<= Está contenido en o es igual a

'192.168.1/24'::cidr<<= '192.168.1/24'::cidr

>> Contiene '192.168.1/24'::cidr>> '192.168.1.5'::cidr

>>= Contiene o es igual que

'192.168.1/24'::cidr>>= '192.168.1/24'::cidr

5.2.7 Operadores IP V4 INET

Tabla 7- Operadores ipv4 inet

Operador Descripción Utilización

< Menor que '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 '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 es igual a

'192.168.1/24'::inet<<= '192.168.1/24'::inet

>> Contiene '192.168.1/24'::inet>> '192.168.1.5'::inet

>>= Contiene o es igual a

'192.168.1/24'::inet>>= '192.168.1/24'::inet

Page 8: Paper Postgresql

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 básicamente con las siguientes estructuras :

LOOP, EXIT,IF, ELSE,FOR, WHILE

5.3.1 SENTENCIA DE CICLO LOOP :

Esta sentencia nos permite efectuar un ciclo, su estructura básica es :

...resto de la función...LOOP...sentencias a ejecutar en el ciclo...END LOOP...resto de la función...

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á acompañado 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.3 SENTENCIAS IF, ELSE:

Podemos efectuar operaciones de comparación con las sentencias IF, ELSE, los operadores de comparación son los siguientes :

<menor que ...>mayor que ...<>distinto a ... <= menor o igual que ...>= mayor o igual que ...= igual que ...OR o ...AND y ...

Ejemplo:

...resto de la función...IF >= 10 or THEN RETURN true;

ELSE RETURN false;END IF;...resto de la función...

5.3.4 SENTENCIA DE CICLO FOR :

Existen dos tipos de ciclos FOR, el primero tiene que ver claramente con los ciclos numéricos comunes, es decir, lo que comúnmente 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.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 LOOPfactorial := factorial * inc;END LOOP;RETURN factorial;...resto de la funcion... :

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;

Page 9: Paper Postgresql

Ejemplo :...resto de la funcion...DECLAREregistro RECORD;BEGINFOR registro IN SELECT * FROM productos LOOPstock := 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.

5.3.5 SENTENCIA DE CICLO CONDICIONAL WHILE

La sentencia WHILE se ejecuta de forma muy similar a otros lenguajes de programación, 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 LOOPfactorial := factorial * inc;END LOOP;RETURN factorial;...resto de la funcion...

Este codigo funciona igual al descrito en el ejemplo del ciclo FOR.

6. TIPOS DE DATOS

Postgres pone a disposición del usuario una gran variedad de tipos de datos pensados en cubrir necesidades

específicas. Suele suceder que al modelar una base de datos se utilizan los tipos conocidos y no se da provecho a las características especiales de Postgres; mientras esto provee compatibilidad, es menudo más conveniente sacar provecho a aquellas definiciones adicionales del motor. A continuación se describen los tipos de datos más utilizados y la sugerencia de cuando es conveniente utilizarlos:

Tabla 8- Tipos cadenasTipos String

Tipo Descripciónchar(n) Datos de caracteres no Unicode de longitud fijaText Cantidad no predefinidavarchar(n) Datos de caracteres no Unicode de longitud

variable

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 más versátil de string. Considerando que hoy en día los espacios de almacenamiento son enormes, este tipo se recomienda en todo caso por sobre varchar. Cabe señalar que dado que text no tiene límite predefinido, entonces al momento de llevar los datos a otros sistemas con largos predefinidos no hay aviso previo de que estamos sobrepasando algún largo establecido, siendo este un punto a considerar al momento de seleccionar el tipo de dato.

Tabla 9- Tipos numericosTipos Numéricos

Tipo Tamaño Descripción Rangobool Booleano true / false –

(‘t’ / ‘f’)

Page 10: Paper Postgresql

decimal variable Especificadas por el usuario

no limite

float4 4 bytes Número de punto flotante con precisión

6 lugares de decimales

Float8 8 bytes Número de punto flotante con doble precisión

15 lugares de decimales

Bigint 8 bytes Valores enteros.

-9,233,372,036,854,775,808 a+9,233,372,036,854,775,807

int2 2 bytes Precisión fija (entero)

-32768 a +32767

Int4 4 bytes opción para determinada precisión (entero)

-2147483648 a +2147483647

Int8 8 bytes amplia gama determinada de precisión (entero)

+/- > 18 lugares de decimales

numeric variable Especificadas por el usuario

no limite

serial 4 bytes Identicador o referencia cruzada

0 a +2147483647

Postgres contiene los tipos de datos nativos comúnmente conocidos int y float, para números enteros y reales respectivamente. Estos dependiendo del dígito que acompañe su nombre, indica la precisión que soporta la columna.

Para grandes números se utiliza bigint, el cual suele ser utilizado para las columnas de identificadores.

Cuando se requiere de gran precisión en números, virtualmente sin limitación (1000 dígitos), el tipo a utilizar es sin duda numeric. Este es recomendado para valores monetarios u cualquier dato donde la precisión es crucial. Este tipo además soporta el valor ‘NaN’ (Not A Number – No Un Numero) para indicar tal caso, además 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, provocándose el efecto de auto incremento

Tabla 10- Tipo fecha y hora.Tipos de Fecha y Hora

Tipo Descripcióndate Fecha, con día, mes y año

time Hora, minuto, segundostimestamp(n) Fecha y hora con milisegundos.

El parámetro n, indica la cantidad de milisegundo a almacenar.

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

7. CARACTERÍSTICAS AVANZADAS DE SQL EN POSTGRES

Habiendo cubierto los aspectos básicos de PostgreSQLpara acceder a los datos, discutiremos ahora aquellas características de Postgres que los distinguen de los gestores de bases de datos convecionales. Estas características incluyen herencia, valores no-atómicos de datos (atributos basados en vectores y conjuntos) entre otros.

7.1 Herencia

Creemos dos clases. La clase capitals contiene las capitales de los estados, las cuales son también ciudades. Naturalmente, la clase capitals debería 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 (población) es float, un tipo de datos, también nativo de Postgres , para números de punto flotante de doble precisión. 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 jerarquía de la herencia es un gráfico acíclico dirigido.

Page 11: Paper Postgresql

Por ejemplo, la siguiente consulta encuentra todas aquellas ciudades que están situadas a un altura de 500 o más pies:

Por otro lado, para encontrar los nombres de todas las ciudades, incluídas las capitales estatales, que estén situadas a una altitud de 500 o más pies, la consulta es:

whichreturns:

Aquí el "*" después de cities indica que la consulta debe realizarse sobre cities y todas las clases que estén por debajo de ella en la jerarquía de la herencia. Muchos de los comandos que ya hemos discutido (select, and>upand> and delete) brindan soporte a esta notación de "*" al igual que otros como alter.

Con esto obtenemos una reducción en la construcción del índice y ganaremos velocidad con ello además de un mejor orden conceptual de nuestras tablas.

No sólo 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 más padres tengan un columna con el mismo nombre éstas se fusionarán en la hija siempre y cuando sean del mismo tipo de dato.

Al utilizar ésta poderosa característica existen algunas consideraciones que hay que tener en cuenta para

evitarnos sorpresas desagradables e inesperadas. Al crear tablas heredadas, no todas las características de la tabla se heredan. Por ejemplo, las claves primarias, foráneas, indices únicos. Según el roadmap se verá para 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 ejemplo, se pueden crear atributos que sean vectores de alguno de los tipos base.

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

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.

Postgres utiliza de forma predeterminada la convención 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

Page 12: Paper Postgresql

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:

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

También podemos acceder a cualquier porción de un vector, o subvectores. Esta consulta recupera el primer item de la agenda de Bill para los primeros dos días de la semana.

8. VENTAJAS Y DESVENTAJAS

8.1 Ventajas

Es software libre o sea, no hay costo asociado a la licencia del software.

Estabilidad y confiabilidad legendarias. Extensible, el código fuente está disponible

para todos sin costo. Multiplataforma, está disponible en casi

cualquier Unix. Herramientas gráficas de diseño y

administración de bases de datos.

8.2 Desventajas

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

Tabla11. Cuadro comparativoPostgreSQL MySQLEs más lento a la hora de resolver preguntas

Es más rápido a la hora de resolver preguntas

No tiene una buena documentación

Tiene mejor documentación y se ha orientado más a facilitarle la vida al desarrollador

Ofrece una garantía de integridad en los datos mucho más fuerte.

Es fácil de vulnerar sin protección adecuada.

Presenta una mejor escalabilidad y rendimiento bajo grandes cargas de trabajo

Es más ligero.

9. INSTALACION DE POSTGRESQL 8.4.8 EN UBUNTU 10.10

9.1 IniciandoInstalación (Aplicaciones → Accesorios → Terminal):sudo apt-get install postgresql postgresql-client postgresql-contrib libpq-dev pgadmin3Eso instala el cliente y servidor de la base de datos, algunos scripts de utilería y la aplicación pgAdmin para administrar la base de datos disponibles en los repositorios de Ubuntu.

9.2 Cambiar la Contraseña del Usuario Administrador

Page 13: Paper Postgresql

Ahora necesitamos establecer la contraseña del usuario administrador postgres. Teclea la siguiente línea en la terminal (cambia la palabra password por la contraseña que desees usar):sudo su postgres -c psqlALTER USER postgres WITH PASSWORD 'password';\qEso altera la contraseña dentro de la base de datos, ahora necesitamos hacer lo mismo para el usuario Linux postgres:sudo passwd -d postgressudo su postgres -c passwdTe aparecerá un prompt, introduce la misma contraseña que pusiste antes.

9.3 Configurando pgAdminListo, 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 III

9.4 Cambiar el Esquema de Autentificación de Postgresql

Al ejecutar algunos comandos de base de datos, es posible que te encuentres con un error que dice algo como:FATAL: la autentificación 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 autentificación. Abre el archivo con privilegios de root:sudo gedit /etc/postgresql/8.4/main/pg_hba.confY cambia esto:# "local" is for Unix domain socket connections onlylocal all all identPor:# "local" is for Unix domain socket connections onlylocal all all md5Reinicia el servidor de PostgreSQL tecleando en tu terminal:sudo /etc/init.d/postgresql restart

9.5 Ejemplo

Ingresando A Postgresql:Desde la terminal (Aplicaciones → Accesorios → Terminal):

sudo /etc/init.d/postgresql startpara iniciar.

Luego lo primero que tenemos qu hacer es usar pgAdmin3 (Aplicaciones → Programación → pgAdmin III) para crearnos un servidor donde alojaremos todas nuestras bases de datos. Allí hacemos clic en el menú File → Add server…

Figura 2. Creación del servidor

Luego accedemos al servidor al hacer doble click el nombre que le pusimos al servidor y nos va a pedir la contraseña que le dimos:

Desde ahí podremos crear nuestras bases de datos y posteriormente las tablas cómodamente.

Figura 3. Creación de base de datos

Page 14: Paper Postgresql

Figura 4.Creacion de tabla

Figura 5. Creación de columnas

Figura 6.Creacion mediante código de tablas

Figura 7. Llenado de datos de manera grafica

O sino desde la terminal (Aplicaciones → Accesorios → Terminal):Sudo su postgrespsql -d template1create 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: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.

Page 15: Paper Postgresql

11. AgradecimientosAgradecemos 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 PostgresSQL

12. 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.html

http://www.guatewireless.org/articulos/mysql-vs-postgresql/#postgresql