Este documento describe PostgreSQL, un sistema de gestión de bases de datos relacional orientado a objetos de código abierto. Explica la historia y desarrollo de PostgreSQL, su arquitectura y funcionalidad básica, características como atomicidad, consistencia, aislamiento y durabilidad, compatibilidad con sistemas operativos y lenguajes de programación, y sentencias SQL para crear usuarios como CREATE USER y createuser.
investigación de los Avances tecnológicos del siglo XXI
PostgreSQL
1. PostgreSQL
Taboada Villanueva Rodriguez López Ganosa
Príncipe, León, Sergio Rodriguez Egúsquiza, Campos, Juan
Orlando 990767235 Gerson Charl 949218534
968542497 Código:012700708 947608149 617677 Código:051270060
Código:051270160 Email- Código:022700608 Código:042700208 8
8 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 .com
RESUMEN
En este paper, nosotros daremos a conocer la forma correcta de 2. HISTORIA
aprender a utilizar un nuevo gestor de base de datos, como lo es
PostgreSQL. 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 de
de como crear una base de datos e interactuar con la misma, los primeros intentos en implementar un motor de base de
usando para ello, dos maneras diferentes, las cuales son: de datos relacional. Después de haber trabajado un largo tiempo
manera 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 para
Haremos 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 simplemente
gestor 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 sido
Base 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 de
Palabras Clave comprender "tipos", es decir, combinaciones de datos simples
que conforman una única unidad. Actualmente estos son
Gestor, Usuario, Superusuario, Servidor, API, ddl dml llamados objetos. Se esforzaron en introducir la menor
cantidad posible de funcionalidades para completar el soporte
1. 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ó Mammonth
comunidad de usuarios. PostgreSQL, la más antigua distribución comercial de
PostgreSQL. Continúa brindando soporte a la comunidad
1990: se publicaba la versión 2 la cual tenía prácticamente PostgreSQL a través del auspicio de desarrolladores y
reescrito el sistema de reglas. proyectos, incluyendo PL/Perl, PL/php y el alojamiento de
proyectos de comunidades como PostgreSQL Build Farm.En
1991: publicación de la versión 3, esta añadía la capacidad de enero de 2005, PostgreSQL recibió apoyo del proveedor de
mú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ón
cual demandaba más características.
comunitaria y logró algo de éxito. Sin embargo, en julio de
1994: 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 planes
Después de que el proyecto POSTGRES terminara, dos graduados para comercializar PostgreSQL con énfasis en nichos
de la universidad, Andrew Yu y JollyChen, comenzaron a trabajar separados de mercados. EnterpriseDB añadió funcionalidades
sobre el código de POSTGRES, esto fue posible dado que que le permitían a las aplicaciones escritas para trabajar con
POSTGRES 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 a
dado 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, John
denominaron Postgres95. Loiacono, vicepresidente ejecutivo de software en Sun
Microsystems comentó: "No estamos yendo tras el OEM de
Para el año 1996 se unieron al proyecto personas ajenas a la Microsoft pero estamos viendo a PostgreSQL ahora", aunque
Universidad como Marc Fournier de Hub.Org no se dieron especificaciones en ese momento. Para
NetworkingServices, Bruce Momjian y Vadim B. Mikheev noviembre de 2005, Sun Solaris 10 (lanzamiento 6/06) incluía
quienes proporcionaron el primer servidor de desarrollo no PostgreSQL. En agosto de 2007 EnterpriseDB anunció el
universitario para el esfuerzo de desarrollo de código abierto y Postgres Resource Center y EnterpriseDB Postgres, diseñados
comenzaron a trabajar para estabilizar el código de Postgres95. En para ser una completamente configurada distribución de
el año 1996 decidieron cambiar el nombre de Postgres95 de tal PostgreSQL incluyendo muchos módulos contribuidos y
modo que refleje la característica del lenguaje SQL y lo agregados. EnterpriseDB Postgres fue renombrado Postgres
terminaron 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ón
formal de PostgreSQL (6.0) fue liberada en enero de 1997. El proyecto PostgreSQL continúa haciendo lanzamientos
principales anualmente y lanzamientos menores de reparación
Desde entonces, muchos desarrolladores entusiastas de los de bugs, todos disponibles bajo la licencia BSD, y basados en
motores de base de datos se unieron al proyecto, coordinaron vía contribuciones de proveedores comerciales, empresas
Internet y entre todos comenzaron a incorporar muchas aportantes y programadores de código abierto mayormente.
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. 3. FUNCIONAMIENTO
La 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) y
Michael Stonebraker conformaron IllustraInformation Postgres usa un modelo cliente - servidor. Una sesión de
postgres se basa en dos procesos, que mostramos a
Technologies 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 la
proveedores comerciales de bases de datos. Great Bridge auspició base de datos, acepta las conexiones que efectúan
a varios desarrolladores de PostgreSQL y donó recursos de vuelta los clientes con ella y que ejecuta acciones a
a 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 condiciones
del 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 SSL
4. 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 lexical
d) -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ón
e) -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 array
f) -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,
NULL
h) -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) usuario
i) -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 igualdad
j) -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 generales
Operador 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írculo
Operador 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 tiempo
Operador 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 cidr
Operador 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 escribir
nuestros programas y permitir que sigan un algoritmo ELSE
no 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 numericos
6. 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 tipos
Float8 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ón
Bigint 8 bytes Valores -9,233,372,036
enteros. ,854,775,808 a
+9,233,372,03
6,854,775,807
int2 2 bytes Precisión fija -32768 a
(entero) +32767 7. CARACTERÍSTICAS AVANZADAS
Int4 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, valores
numeric 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 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 En este caso, una instancia de capitals hereda todos los
soporta 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. El
El tipo de dato SERIAL es en realidad un atajo. En Postgres no tipo del atributo population (población) es float, un tipo de
existe 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 a
auto 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ón
date Fecha, con día, mes y año
Por ejemplo, la siguiente consulta encuentra todas
time Hora, minuto, segundos
timestamp(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 vectores
ciudades, 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 tipos
whichreturns:
base.
La consulta de arriba creará una clase llamada SAL_EMP
con una cadena del tipo text (name),un vector
Aquí el "*" después de cities indica que la consulta debe unidimensional del tipo int4 (pay_by_quarter), el cual
realizarse sobre cities y todas las clases que estén por representa el salario trimestral del empleado y un vector
debajo de ella en la jerarquía de la herencia. Muchos de bidimensional del tipo text (schedule), que representa la
los comandos que ya hemos discutido (select, agenda semanal del empleado. Ahora realizamos algunos
and>upand> and delete) brindan soporte a esta notación INSERTSs; note que cuando agregamos valores a un
de "*" 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 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 Postgres utiliza de forma predeterminada la convención de
tipo de dato. vectores "basados en uno" -- es decir, un vector de n
elementos comienza con vector[1] y termina con
Al utilizar ésta poderosa característica existen algunas
vector[n]. Ahora podemos ejecutar algunas consultas
consideraciones que hay que tener en cuenta para
sobre SAL_EMP. Primero mostramos como acceder a un
evitarnos sorpresas desagradables e inesperadas. Al crear
solo elemento del vector por vez. Esta consulta devuelve
tablas heredadas, no todas las características de la tabla se
los nombres de los empleados cuyos pagos han cambiado
heredan. 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 bajo
8. 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 III
9.4 Cambiar el Esquema de Autentificación
de 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. Fig
ura 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 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.ht
ml
http://www.guatewireless.org/articulos/mys
ql-vs-postgresql/#postgresql