Sunteți pe pagina 1din 26

PostgreSQL

Parte I

Creacin y
manipulacin de tablas

Creacin de tablas
Una

vez conectados a una base de datos y despus de abrir una base de datos, la
sentencia SQL create table permite crear las tablas que necesitemos
El comando drop table permite eliminar tablas

ngel Lpez

Creacin de tablas
Podemos

consultar su descripcin mediante el comando \d tabla

La

tabla est lista para insertar en ella algunos registros. El nmero con el que
responde el comando insert se refiere al OID del registro insertado.

ngel Lpez

Creacin de tablas
Las

consultas se realizan con la sentencia SQL select. En este caso solicitamos que nos
muestre todas las columnas de los registros en la tabla persona:
Para observar las columnas ocultas, debemos hacer referencia a ellas especficamente
en el comando select:

Estas columnas se implementan para


servir de identificadores en la realizacin
de enlaces desde otras tablas.

ngel Lpez

Creacin de tablas
Las

tablas creadas en PostgreSQL incluyen, por defecto, varias columnas ocultas


que almacenan informacin acerca del identificador de transaccin en que pueden
estar implicadas, la localizacin fsica del registro dentro de la tabla (para
localizarla muy rpidamente) y, los ms importantes, el OID y el TABLEOID. Estas
ltimas columnas estn definidas con un tipo de datos especial llamado
identificador de objeto (OID) que se implementa como un entero positivo de 32
bits. Cuando se inserta un nuevo registro en una tabla se le asigna un nmero
consecutivo como OID, y el TABLEOID de la tabla que le corresponde.
En la programacin orientada a objetos, el concepto de OID se refiere a la
identidad propia del objeto, lo que lo diferencia de los dems objetos.

ngel Lpez

Creacin de tablas
Ejemplo de la utilizacin de OID para enlazar dos tablas
La

tabla telfono incluye la columna propietario


de tipo OID, que almacenar la referencia a los
registros de la tabla persona. Agreguemos dos
telfonos a Alejandro Magno, para ello
utilizamos su OID que es 17242:

Las

dos tablas estn vinculadas por el OID de


persona.

ngel Lpez

Creacin de tablas
Los OID de PostgreSQL presentan algunas deficiencias
Todos

los OID de una base de datos se generan a partir de una nica secuencia
centralizada, lo que provoca que en bases de datos con mucha actividad de insercin y
eliminacin de registros, el contador de 4 bytes se desborde y pueda entregar OID ya
entregados. Esto sucede, por supuesto, con bases de datos muy grandes.
Los OID no mejoran el rendimiento. Son, en realidad, una columna con un nmero
entero como valor.
No tiene ningn tipo de eficiencia con respecto a la clave primaria

ngel Lpez

Creacin de tablas
Los desarrolladores de PostgreSQL proponen la siguiente alternativa
para usar OID de forma absolutamente segura:
Crear

una restriccin de tabla para que el OID sea nico, al menos en cada tabla. El
SGBD ir incrementando secuencialmente el OID hasta encontrar uno sin usar.
Usar la combinacin OID - TABLEOID si se necesita un identificador nico para un
registro vlido en toda la base de datos.
Es posible crear tablas que no incluyan la columna
OID mediante la siguiente notacin:

ngel Lpez

Herencia
PostgreSQL

ofrece como caracterstica particular la herencia entre tablas, que


permite definir una tabla que herede de otra previamente definida, segn la
definicin de herencia que hemos visto en captulos anteriores.

ngel Lpez

Herencia

El ltimo registro mostrado es el que


fue insertado en tabla estudiante, sin
embargo la herencia define una
relacin conceptual en la que un
estudiante es-una persona. Por lo
tanto, al consultar cuntas personas
estn registradas en la base de datos,
se incluye en el resultado a todos los
estudiantes.
ngel Lpez

Herencia
Para

consultar a las personas que no sean estudiantes, podemos utilizar el ONLY:

ngel Lpez

Herencia y OID
Los

OID permiten que se diferencien los registros de todas las tablas, aunque sean
heredadas: nuestro estudiante tendr el mismo OID en las dos tablas, ya que se
trata de nica instancia de la clase estudiante.
Dado que no se recomienda el uso de OID en bases muy grandes, y debe incluirse
explcitamente en las consultas para examinar su valor, es conveniente utilizar
una secuencia compartida para padres y todos sus descendientes si se requiere un
identificador.

ngel Lpez

Herencia y OID
En

PostgreSQL, una alternativa para no utilizar los OID es crear una columna de
tipo serial en la tabla padre, as ser heredada en la hija. El tipo serial define una
secuencia de valores que se ir incrementando de forma automtica, y por lo
tanto constituye una buena forma de crear claves primarias.

ngel Lpez

Herencia y OID

Restricciones
Como ya sabemos, las restricciones permiten especificar condiciones que debern
cumplir tablas o columnas para mantener la integridad de sus datos. Algunas de las
restricciones vendrn impuestas por el modelo concreto que se est
implementando, mientras que otras tendrn su origen en las reglas de negocio del
cliente, los valores que pueden tomar algunos campos, etc.
PostgreSQL ofrece las restricciones siguientes:
null y not null. En mltiples ocasiones el valor de una columna es desconocido, no
es aplicable o no existe. En estos casos, los valores cero, cadena vaca o falso son
inadecuados, por lo que utilizamos null para especificar la ausencia de valor. Al
definir una tabla podemos indicar qu columnas podrn contener valores nulos y
cules no.
unique. Esta restriccin se utiliza cuando no queremos que los valores contenidos
en una columna puedan duplicarse.

ngel Lpez

Restricciones
primary

key. Esta restriccin especifica la columna o columnas que


elegimos como clave primaria. Puede haber mltiples columnas
unique, pero slo debe haber una clave primaria.
references y foreign key. En el modelo relacional, establecemos las
relaciones entre entidades mediante la inclusin de claves forneas en
otras relaciones.
Podra darse el caso de que la clave primaria de la tabla referenciada
tuviera ms de una columna, en ese caso, la clave fornea tambin
tendra que estar formada por el mismo nmero de columnas:

ngel Lpez

Restricciones
Si

no se especifica otra accin, por omisin la persona que tenga una


mascota no puede ser eliminada, porque la mascota se quedara sin
dueo. Para poder eliminar una persona, antes se deben eliminar las
mascotas que tenga. Este comportamiento no parece ser el ms
adecuado para el caso.
Para modificar este comportamiento disponemos de las reglas de
integridad referencial del lenguaje SQL, que PostgreSQL tambin
soporta. En el siguiente ejemplo se permite que al eliminar una
persona, las mascotas simplemente se queden sin dueo.

ngel Lpez

Restricciones
En clusula on delete se pueden especificar las siguientes acciones:
set null. La referencia toma el valor NULL: si se elimina Persona su
Mascota se quedar sin dueo.
set default. La referencia toma el valor por omisin.
cascade. La accin se efecta en cascada: si se elimina Persona
automticamente se elimina su Mascota.
restrict. No permite el borrado del registro: no se puede eliminar una
Persona que tenga Mascota. sta es la accin que se toma por omisin.

ngel Lpez

Restricciones
check.

Esta restriccin realiza la evaluacin previa de una expresin


lgica cuando se intenta realizar una asignacin. Si el resultado es
verdadero, acepta el valor para la columna, en caso contrario, emitir
un mensaje de error y rechazar el valor.
Se han restringido los valores que se aceptarn en la columna de la
manera siguiente.
Edad debe estar entre 11 y 79 aos.
Ciudad no debe una cadena vaca.
Correo debe tener una arroba.

ngel Lpez

Consulta de informacin de bases de


datos y tablas
Como

ya sabemos, el cliente psql ofrece varias alternativas para


obtener informacin sobre la estructura de nuestra base de datos. En
la siguiente tabla se muestran algunos comandos de mucha utilidad.

ngel Lpez

Tipos de Datos
Datos

Lgicos:

ngel Lpez

Tipos de Datos
Datos

Lgicos:

ngel Lpez

Manipulacin de Datos
Las consultas a la base de datos se realizan con el comando select, que
se implementa en PostgreSQL cumpliendo en gran parte con el estndar
SQL:

ngel Lpez

Manipulacin de Datos
Actualizacin de Datos:
PostgreSQL cumple con el estndar SQL en todos los sentidos para las
sentencias de actualizacin, insercin y borrado. No define
modificadores ni otros mecanismos para estas sentencias.
Transacciones
Definimos transaccin como un conjunto de operaciones que tienen
significado solamente al actuar juntas.
PostgreSQL ofrece soporte a transacciones, garantizando que ambas
operaciones se realicen o que no se realice ninguna.

ngel Lpez

Manipulacin de Datos
Ejemplo de Actualizacin de Datos:

ngel Lpez

S-ar putea să vă placă și