PostgreSQL (intro)
     
Introducci�n a PostgreSQL

     Paulo Nu�ez V.
     Luis Vega M.
     Julio Lobo
 
Documento desarrollado para la asignatura de Administraci�n de Sistemas operativos, realizada en el V semestre de la carrera T�cnico Universitario en Programaci�n el 17 - Junio - 2004 en la Universidad Cat�lica del Maule.

Copyright (c) 2004.Se permite la copia fiel, distribuci�n y/o modificaci�n de este documento bajo los t�rminos de la GNU Free Document License (FDL) 1.2 o alguna versi�n superior, publicada por la Fundaci�n de Software Libre. Una copia de este puedes verla [ ac� ].

    El Lenguaje SQL en PostgreSQL:

A continuaci�n vamos a explicar un poco lo que es el
Lenguaje SQL (Structured Query Language) y el Modelo Relacional.

SQL (Structured Query Language).
SQL se ha convertido en el lenguaje de consulta relacional m�s popular. El nombre "SQL" es una abreviatura de Structured Query Language (Lenguaje de consulta estructurado).

SQL es tambi�n un est�ndar oficial. En 1982, la American National Standards Institute (ANSI) encarg� a su Comit� de Bases de Datos X3H2 el desarrollo de una propuesta de lenguaje relacional est�ndar. Esta propuesta fue ratificada en 1986 y consist�a b�sicamente en el dialecto de IBM de SQL. En 1987, este est�ndar ANSI fue tambi�n aceptado por la Organizaci�n Internacional de Estandarizaci�n (ISO). Esta versi�n est�ndar original de SQL recibi� informalmente el nombre de "SQL/86". En 1989, el est�ndar original fue extendido, y recibi� el nuevo nombre, tambi�n informal, de "SQL/89". Tambi�n en 1989 se desarroll� un est�ndar relacionado llamado Database Language Embedded SQL (ESQL).

Los comit�s ISO y ANSI han estado trabajando durante muchos a�os en la definici�n de una versi�n muy ampliada del est�ndar original, llamado informalmente SQL2 o SQL/92. Esta versi�n se convirti� en un est�ndar ratificado durante 1992: International Standard ISO/IEC 9075:1992, Database Language SQL. SQL/92 es la versi�n a la que normalmente la gente se refiere cuando habla de �SQL est�ndar�. Se da una descripci�n detallada de SQL/92 en Date and Darwen, 1997.

El Modelo de Datos Relacional.
Como mencionamos antes, SQL es un lenguaje relacional. Esto quiere decir que se basa en el modelo de datos relacional publicado inicialmente por E.F.Codd en 1970. Daremos una mirada desde un punto de vista m�s intuitivo.

Una base de datos relacional es una base de datos que se percibe por los usuarios como una colecci�n de tablas (y nada m�s que tablas). Una tabla consiste en filas y columnas, en las que cada fila representa un registro, y cada columna representa un atributo del registro contenido en la tabla. La Base de Biblioteca muestra un ejemplo de base de datos consistente en tres tablas:

AUTOR: es una tabla que almacena un numero identificador (id_autor), el nombre completo del autor (nombre), la ciudad del autor (ciudad) y la nacionalidad del autor (pais).

LIBRO: es una tabla que almacena un n�mero identificador del libro (id_libro), el n�mero identificador del autor (id_autor), el id_autor se toma de la tabla AUTOR, el nombre del libro (nombre) y el a�o en que se public� (a�o).

Como podemos darnos cuenta, la tabla LIBRO, tambi�n almacena el id_autor, pero este se toma como referencia de la tabla AUTOR, as� que no podemos ingresar un libro con un autor desconocido o que no se encuadra en la tabla AUTOR.

Ejemplo de la Base de Datos Biblioteca:

 AUTOR:      

id_autor     |  nombre                    | ciudad           | nacionalidad      
----------------+-------------------------------+---------------------+------------------          
      1         |  LUIS VEGA              | CHANCO      | CHILE             
      2         |  PAULO NU�EZ        | GRANEROS  | CHILE
      3         |  JULIO LOBO            | SN. FELIPE   | CHILE 
 

LIBRO:      

id_libro      |  id_autor                 | nombre           | a�o      
---------------+------------------------------+---------------------+------------------          
     1         |  1                           | untitled           | 1995             
     2         |  2                           | sin nombre 1   | 2003
     3         |  2                           | sin nombre 2   | 2000  

Las tablas AUTOR y LIBRO se pueden ver como entidades as� como tambi�n la tabla LIBRO se puede ver como una relaci�n entre un libro y un autor en particular. 

Como veremos m�s tarde, SQL opera en las tablas tal como han sido definidas.

El Lenguaje SQL en PostgreSQL.

En los siguientes ejemplos podremos ver el Lenguaje SQL Standard y que es valido para la mayor�a de los Gestores de Base de Datos Relacionales, nosotros por supuesto no centraremos en la sintaxis de PostgreSQL.

Para iniciar una base de datos, debemos estar como usuario normal (no como root), entonces desde la l�nea de comandos escribimos: initdb nombre_bd y presionamos enter. Una vez hecho esto escribimos lo siguiente en la l�nea de comandos: /usr/bin/pg_ctl -D nombre_bd -l logfile Start y presionamos enter.

Lo anterior nos sirve para levantar el postmaster, esto se hace una sola vez, no es necesario escribir initdb para levantar nuevamente la base de datos, solo debemos escribr /usr/bin/pg_ctl -D nombre_bd -l logfile start, stop o restart para levantar el postmaster.

Luego creamos al base de datos con CREATEDB nombre_bd y presionamos enter, luego escribimos en la l�nea de comandos psql nombre_db y ya estamos dentro de la Terminal de PostgreSQL, de esta manera ya podremos crear tablas, hacer consultas, etc. Lo anterior se ver�a como lo siguiente:

[postgres@localhost root]$ psql nombre_bd

Bienvenido a psql 7.4.1, el terminal interactivo de PostgreSQL.
 
Digite:  \copyright para ver los t�rminos de distribuci�n
         \h para obtener ayuda sobre comandos SQL
         \? para obtener ayuda sobre comandos internos
         \g o termine con punto y coma (;) para ejecutar consulta
         \q para salir
nombre_bd=#

 

Comandos para inserci�n, borrado o modificaci�n de datos.

Select:

El comando m�s usado en SQL es la instrucci�n SELECT, que se utiliza para recuperar datos. La sintaxis es:   

SELECT [ALL|DISTINCT]
          { * | expr_1 [AS c_alias_1] [, ...
                [, expr_k [AS c_alias_k]]]}
   FROM table_name_1 [t_alias_1]
        [, ... [, table_name_n [t_alias_n]]]
   [WHERE condition]
   [GROUP BY name_of_attr_i
             [,... [, name_of_attr_j]] [HAVING condition]]
   [{UNION [ALL] | INTERSECT | EXCEPT} SELECT ...]
   [ORDER BY name_of_attr_i [ASC|DESC]
             [, ... [, name_of_attr_j [ASC|DESC]]]];
Las tablas utilizadas para los ejemplos se definen en: La Base de Datos Biblioteca.

Ejemplo de un Select:

Para recuperar todas las tuplas de la tabla LIBRO donde el atributo a�o es mayor que 1999, formularemos la siguiente consulta:   

SELECT * FROM LIBRO WHERE a�o > 1999;

y obtenemos la siguiente tabla:                    

 id_libro |  id_autor      | nombre          | a�o      
-----------+-------------------+---------------------+------------------          
     2     |  2                | sin nombre 1  | 2003
     3     |  2                | sin nombre 2  | 2000  

Utilizando "*" en la instrucci�n SELECT solicitaremos todos los atributos de la tabla. Si queremos recuperar s�lo los atributos nombre y a�o de la tabla LIBRO utilizaremos la instrucci�n:   

SELECT nombre, a�o  FROM LIBRO WHERE a�o > 1999;

En este caso el resultado es:  

nombre          | a�o      
--------------------+-----------
sin nombre 1  | 2003
sin nombre 2  | 2000  
             

Operadores Agregados

SQL proporciona operadores agregados (como son AVG, COUNT, SUM, MIN, MAX) que toman el nombre de un atributo como argumento. El valor del operador agregado se calcula sobre todos los valores de la columna especificada en la tabla completa. Si se especifican grupos en la consulta, el c�lculo se hace s�lo sobre los valores de cada grupo.

Si queremos conocer cuantos libros se recogen en la tabla LIBRO, utilizaremos la instrucci�n:   

SELECT COUNT (id_libro) FROM LIBRO;

y obtendremos:                           

COUNT
-----------
    3

Subconsultas

En las clausulas WHERE y HAVING se permite el uso de subconsultas (subselects) en cualquier lugar donde se espere un valor. En este caso, el valor debe derivar de la evaluaci�n previa de la subconsulta. El uso de subconsultas ampl�a el poder expresivo de SQL.

Si queremos conocer los libros que tienen una fecha de publicaci�n mayor que el libro llamado �untitled�, utilizaremos la consulta:   

SELECT * FROM LIBRO WHERE a�o > (SELECT a�o FROM LIBRO
WHERE nombre='untitled');
             
El resultado ser�:                   

Id_libro |  nombre          |  a�o
-----------+---------------------+--------
2          |  sin nombre 1 |   2003
3          |  sin nombre 2 |   2000
             

Definici�n de datos.

El lenguaje SQL incluye un conjunto de comandos para definici�n de datos.

Create Table

El comando fundamental para definir datos es el que crea una nueva relaci�n (una nueva tabla). La sintaxis del comando CREATE TABLE es:   

CREATE TABLE table_name
                (name_of_attr_1 type_of_attr_1
                 [, name_of_attr_2 type_of_attr_2
                 [, ...]]);
      

Creaci�n de una tabla

Para crear las tablas definidas en La Base Biblioteca se utilizaron las siguientes instrucciones de SQL:   

CREATE TABLE AUTOR (
                id_autor   integer not null,
                nombre varchar(40),
                ciudad varchar (20),
                nacionalidad varchar (20),
constraint pk_id_autor primary key (id_autor));

CREATE TABLE LIBRO (
                id_libro   integer not null,
                id_autor   integer not null,
                nombre varchar(40),
    a�o varchar (20),
constraint pk_id_libro primary key (id_libro),
constraint fk_id_autor foreign key (id_autor) references AUTOR (id_autor));
 

Algunos tipos de datos en PostgreSQL.

INTEGER: entero binario con signo de palabra completa (31 bits de precisi�n).

DECIMAL (p[,q]): n�mero decimal con signo de p d�gitos de precisi�n, asumiendo q a la derecha para el punto decimal. (15 = p = qq = 0). Si q se omite, se asume que vale 0.

FLOAT: num�rico con signo de doble palabra y coma flotante.

VARCHAR(n): cadena de caracteres de longitud variable, de longitud m�xima n.

Create View.

Se puede ver una vista como una tabla virtual, es decir, una tabla que no existe f�sicamente en la base de datos, pero aparece al usuario como si existiese. Por contra, cuando hablamos de una tabla base, hay realmente un equivalente almacenado para cada fila en la tabla en alg�n sitio del almacenamiento f�sico.

Las vistas no tienen datos almacenados propios, distinguibles y f�sicamente almacenados.

En PostgreSQL se utiliza el comando CREATE VIEW para definir una vista. La sintaxis es:   

CREATE VIEW view_name
   AS select_stmt

Donde select_stmt es una instrucci�n select v�lida, como se defini� en Select. Fijarse en que select_stmt no se ejecuta cuando se crea la vista. Simplemente se almacena en los cat�logos del sistema y se ejecuta cada vez que se realiza una consulta contra la vista.

Drop Table y Drop View.

Se utiliza el comando DROP TABLE para eliminar una tabla (incluyendo todas las tuplas almacenadas en ella):   

DROP TABLE table_name;

Para eliminar la tabla AUTOR, utilizaremos la instrucci�n:   

DROP TABLE AUTOR;

Finalmente, eliminaremos una vista dada utilizando el comando DROP VIEW:   

DROP VIEW view_name;

Manipulaci�n de Datos.

Insert Into

Una vez que se crea una tabla, puede ser llenada con tuplas mediante el comando INSERT INTO. La sintaxis es:   

INSERT INTO table_name (name_of_attr_1 [, name_of_attr_2 [,...]])
VALUES (val_attr_1 [, val_attr_2 [, ...]]);

Para insertar la primera tupla en la tabla LIBRO (de La Base de Datos Biblioteca) utilizamos la siguiente instrucci�n:   

INSERT INTO LIBRO VALUES (1, 1, �untitled�, �1995�);

El primer atributo es el id_libro, el cual asocia un numero a ese libro, el segundo atributo es el id_autor, este atributo es muy importante ya que si no existe el AUTOR con id_autor igual a 1, no se podr� insertar el registro en la tabla libro, lo que no indica que cada libro debe tener obligatoriamente un autor (por eso relacionamos las tablas), por ultimo el tercer atributo es el nombre del libro y luego el a�o en que se public�.

Update

Para cambiar uno o m�s valores de atributos de tuplas en una relaci�n, se utiliza el comando UPDATE. La sintaxis es:   

UPDATE table_name  SET name_of_attr_1 = value_1  [, ... [, name_of_attr_k = value_k]]
WHERE condition;

Delete

Para borrar una tupla de una tabla particular, utilizamos el comando DELETE FROM. La sintaxis es:   

DELETE FROM table_name WHERE condition;

Para borrar el autor llamado 'LUIS VEGA' de la tabla AUTOR, utilizamos la siguiente instrucci�n:   

DELETE FROM AUTOR WHERE id_autor = 1;

| Atr�s | Inicio | Siguiente |

 

1
Hosted by www.Geocities.ws