Você está na página 1de 77

Instructor: Ing.

Pedro Parra

Email: pedro.parra82@gmail.com

Documentacin:
www.postgresql.org
www.google.com

Aclarando Conceptos...

Qu es Postgresql?

Breve Historia de Postgresql

es un conjunto de datos
pertenecientes a un mismo contexto y almacenados
sistemticamente para su posterior uso. La mayora de las bases de
datos estn en formato digital (electrnico), que ofrece un amplio
rango de soluciones al problema de almacenar datos.

Bases de datos estticas.

Bases de datos dinmicas.


stas son bases de datos de slo lectura, utilizadas primordialmente


para almacenar datos histricos que posteriormente se pueden
utilizar para estudiar el comportamiento de un conjunto de datos a
travs del tiempo, realizar proyecciones y tomar decisiones.

stas son bases de datos donde la informacin almacenada se


modifica con el tiempo, permitiendo operaciones como actualizacin
y adicin de datos, adems de las operaciones fundamentales de
consulta. Un ejemplo de esto puede ser la base de datos utilizada en
un sistema de informacin de una farmacia o un supermercado.

Un modelo de datos es bsicamente una "descripcin" de algo


conocido como contenedor de datos (algo en donde se guarda la
informacin), as como de los mtodos para almacenar y recuperar
informacin de esos contenedores. Los modelos de datos no son
cosas fsicas: son abstracciones que permiten la implementacin de
un sistema eficiente de base de datos; por lo general se refieren a
algoritmos y conceptos matemticos.

Bases de datos jerrquicas.

Base de datos de red.

Base de datos relacional.

Bases de datos multidimensionales.

Bases de datos orientadas a objetos.

Bases de datos documentales.

Base de datos deductivas.


Una Base de datos jerrquica es un tipo de Sistema Gestor de Bases


de Datos que, como su nombre indica, almacenan la informacin en
una estructura jerrquica que enlaza los registros en forma de
estructura de rbol , en donde un nodo padre de informacin puede
tener varios nodos hijo.

Esta relacin jerrquica no es estrictamente obligatoria, de manera


que pueden establecerse relaciones entre nodos hermanos. En este
caso la estructura en forma de rbol se convierte en una estructura
en forma de grafo dirigido. Esta variante se denomina Bases de
datos de red.

El modelo jerrquico facilita relaciones padre-hijo, es decir,


relaciones 1:N del modelo relacional.

Las relaciones son unidireccionales. Dichas relaciones son hijo-


padre, pero no padre-hijo. Esto implica que solamente se puede
consultar la base de datos desde los nodos hoja hacia el nodo raz.
La consulta en el sentido contrario requiere una bsqueda secuencial
por todos los registros de la base de datos.

En las bases de datos jerrquicas no existen ndices que faciliten


esta tarea.

Un registro hijo contiene la direccin fsica en el medio de


almacenamiento de su registro padre. Esto tiene una ventaja
fundamental sobre las bases de datos relacionales: el rendimiento.

No se garantiza la inexistencia de registros


duplicados. Esto tambin es cierto para los campos "clave". Es decir,
no se garantiza que dos registros cualesquiera tengan diferentes
valores en un subconjunto concreto de campos.

No existe garanta de que un registro hijo


est relacionado con un registro padre vlido. Por ejemplo, es
posible borrar un nodo padre sin eliminar antes los nodos hijo, de
manera que stos ltimos estn relacionados con un registro invlido
o inexistente.

Este no es tanto un problema del modelo


jerrquico como del uso que se hace de l. Sin embargo, a diferencia
del modelo relacional, las bases de datos jerrquicas no tienen
controles que impidan la desnormalizacin de una base de datos.
Por ejemplo, no existe el concepto de campos clave o campos
nicos.

Una base de datos relacional es una base de datos que cumple con
el modelo relacional, el cual es el modelo ms utilizado en la
actualidad para modelar problemas reales y administrar datos
dinmicamente. Tras ser postuladas sus bases en 1970 por Edgar
Frank Codd, de los laboratorios IBM en San Jos (California), no
tard en consolidarse como un nuevo paradigma en los modelos de
base de datos.

Una base de datos relacional se compone de varias tablas o


relaciones.

No pueden existir dos tablas con el mismo nombre.

Cada tabla es a su vez un conjunto de registros, filas o tuplas.

Cada registro representa un objeto del mundo real.

Cada una de estos registros consta de varias columnas, campos o


atributos.

No pueden existir dos columnas con el mismo nombre en una misma


tabla.

Los valores almacenados en una columna deben ser del mismo tipo
de dato.

Todas las filas de una misma tabla poseen el mismo nmero de


columnas.

No se considera el orden en que se almacenan los registros en las


tablas.

No se considera el orden en que se almacenan las tablas en la base


de datos.

La informacin puede ser recuperada o almacenada por medio de


sentencias llamadas consultas.

Distintos tipos de dominios son: enteros, cadenas de texto, fecha,


etc...

Cada tabla puede tener uno o ms campos cuyos valores identifican


de forma nica cada registro de dicha tabla, es decir, no pueden
existir dos o ms registros diferentes cuyos valores en dichos
campos sean idnticos. Este conjunto de campos se llama clave
nica.

Pueden existir varias claves nicas en una determinada tabla, y a


cada una de stas suele llamrsele candidata a clave primaria.

Una clave primaria es una clave nica elegida entre todas las
candidatas, para especificar los datos que sern relacionados con las
dems tablas. La forma de hacer esto es por medio de claves
forneas.

Slo puede existir una clave primaria por tabla y ningn campo de
dicha clave puede contener valores NULL.

Una clave fornea es una referencia a una clave en otra tabla. Las
claves forneas no necesitan ser claves nicas.

Por ejemplo, el cdigo de departamento puede ser una clave fornea


en la tabla de empleados, pero obviamente se permite que haya
varios empleados en un mismo departamento.

Las claves ndice surgen con la necesidad de tener un acceso ms


rpido a los datos. Los ndices pueden ser creados con cualquier
combinacin de campos de una tabla. Las consultas que filtran
registros por medio de estos campos, pueden encontrar los registros
de forma no secuencial usando la clave ndice.

Un procedimiento almacenado es cdigo ejecutable que se asocia y


se almacena con la base de datos. Los procedimientos almacenados
usualmente recogen y personalizan operaciones comunes, como
insertar un registro dentro de una tabla, recopilar informacin
estadstica, o encapsular clculos complejos.

Una base de datos orientada a objetos es aquella que incorpora


todos los conceptos importantes del paradigma de objetos:

Propiedad que permite ocultar la informacin al


resto de los objetos, impidiendo as accesos incorrectos o conflictos.

Propiedad a travs de la cual los objetos heredan


comportamiento dentro de una jerarqua de clases.

Propiedad de una operacin mediante la cual puede


ser aplicada a distintos tipos de objetos.

PostgreSQL es el gestor de bases de datos de cdigo abierto ms
avanzado hoy en da, ofreciendo control de concurrencia multi-
versin, soportando casi toda la sintaxis SQL
(incluyendo subconsultas, transacciones, y tipos y funciones definidas
por el usuario),
contando tambin con un amplio conjunto de enlaces con lenguajes de
programacin
(incluyendo C, C++, Java, perl, tcl y python).

PostgreSQL es un Sistema de Gestin de Bases de Datos Objeto-


Relacionales (ORDBMS) que ha sido desarrollado de varias formas
desde 1977. Comenz como un proyecto denominado Ingres en la
Universidad Berkeley de California.

En 1986 otro equipo dirigido por Michael Stonebraker de Berkeley


continu con el desarrollo del cdigo de Ingres para crear un sistema
de bases de datos objeto-relacionales llamado Postgres. En 1996,
debido a un nuevo esfuerzo de cdigo abierto y a la incrementada
funcionalidad del software, Postgres fue renombrado a PostgreSQL,
tras un breve periplo como Postgres95

Postgres ofrece soporte para gran parte del lenguaje estandar SQL y
algunas caractersticas importantes:

Consultas Complejas

Claves Forneas (Foreign Keys)

Disparadores (triggers)

Vistas(views)

Restricciones (constraints)

Integridad transaccional

Tipos de Datos

Funciones

Operadores

Procedimientos Almacenados.

Los limites generales de PostgreSQL se muestran a continuacin:

Tamao mximo de base de datos: Ilimitada

Tamao mximo por tabla: 32 TB

Tamao mximo de una fila: 1,6 TB

Tamao mximo de un campo: 1 GB

Cantidad Mxima de Filas por Tabla: Ilimitada

Cantidad Mxima de Columnas por Tabla: 250 1600 (*Depende


Typo Columna).

Cantidad Mxima de Indices por Tabla: Ililitada


En Ubuntu, se cuenta con paquetes para varias versiones de


PostgreSQL,se instalar la versin (8.2). Los paquetes necesarios
para una instalacin completa son los de la parte cliente
( ) y los de la parte servidora ( ).

sudo aptitude install postgresql-8.2

sudo aptitude install postgresql-client-8.2


Abrir el Gestor de Paquetes Synaptic


Buscar el paquete postgresql, seleccionarlo y aceptar los otros


paquetes requeridos (libpq5, postgresql-client, postgresql-client-
common y postgresql-common)

Para asignar la contrasea del usuario postgres:
1) Llamar al usuario 'postgres'.
$sudo su postgres
2) Ejecutar la utilidad psql
$psql

En este momento se esta conectando a la base de datos usando el


usuario 'postgres', con este usuario puede cambiar contraseas de
muchos usuarios incluso del mismo 'postgres'. Ahora vamos a
cambiar la contrasea, ejecute sobre la linea de comandos actual la
siguiente secuencia donde 'passwd' es la contrasea nueva(debe
utilizarse comillas simples):
Si el programa response con el mensaje 'ALTER ROLE' la contrasea
se ha cambiado correctamente.

Entramos a postgresql:

psql -h localhost -U postgres -W ,o tambin


-------------------------------------------------------------------------------------------

$ sudo su postgres

# psql

El comportamiento de PostgreSQL en nuestro sistema se puede


controlar con los archivos de configuracin que se encuentran en el
directorio de datos donde inicializamos nuestro servidor PostgreSQL
(En nuestro caso /etc/postgresql/8.2/main/postgresql.conf. ).

Estos archivos son:

Este archivo se utiliza para definir los diferentes tipos


de accesos que un usuario tiene en el servidor.

En este archivo podemos cambiar todos los


parametros de configuracion que afectan al funcionamiento y al
comportamiento de PostgreSQL en nuestra mquina.

A continuacin vamos a ver los parmetros mas importantes que


deberiamos cambiar si empezamos a usar PostgreSQL para un uso
serio y si queremos sacarle el mximo partido a nuestra mquina.
Existen muchos mas parmetros que se pueden y con el tiempo se
deberan de ajustar, aqui nos vamos a centrar en los mas importantes
y los cuales deberiamos cambiar antes de empezar a utilizar
PostgreSQL de una manera seria.

Nmero maximo de clientes conectados a la vez


a nuestras bases de datos. Deberiamos de incrementar este valor en
proporcin al numero de clientes concurrentes en nuestro servidor
PostgreSQL. Un buen valor para empezar es el 100:

max_connections = 100

Este parmetro es importantisimo y define el


tamao del bffer de memoria utilizado por PostgreSQL. No por
aumentar este valor mucho tendremos mejor respuesta. En un
servidor dedicado podemos empezar con un 25% del total de nuestra
memoria. Nunca mas de 1/3 (33%) del total. Por ejemplo, en un
servidor con 4Gbytes de memoria, podemos usar 1024MB como
valor inicial.

shared_buffers = 1024MB

Para permitir conexiones externas se buscan las siguientes lneas que
se encuentran comentadas:
listen_addresses = 'localhost'
Y se sustituyen por la siguiente lnea:
listen_addresses = '*'

Se guardan los cambios y se reinicia el servicio para que los cambios


tengan efecto:


CREATE USER nombreUsuario
WITH
PASSWORD 'password'
CREATEDB | NOCREATEDB
CREATEUSER | NOCREATEUSER
IN GROUP groupname [, ...]

$ sudo su postgres
$ psql
postgres=# create user pedro with password 'parra' nocreatedb
nocreateuser;
CREATE ROLE

Muestra caractersticas de los usuarios.



alter user pedro with password 'pedro';

alter user pedro createdb;


Los grupos son entidades opcionales en Postgresql. Son utilizados


para simplificar el proceso de adjudicar y revocar privilegios al
administrador de la base de datos, Los usuarios no necesariamente
deben ser miembros de un grupo.
CREATE GROUP name [ [ WITH ] option [ ... ] ]
algunas de las opciones puede ser:
SUPERUSER | NOSUPERUSER
CREATEDB | NOCREATEDB
CREATEUSER | NOCREATEUSER ..................

create group fundacite with user pedro;


Muestra caractersticas de los grupos:


select * from pg_group ;

ALTER GROUP, cambia las propiedades de un grupo.
------------------------------------------------------------------------------------------------
ALTER GROUP groupname ADD USER username [, ... ]
ALTER GROUP groupname DROP USER username [, ... ]
ALTER GROUP groupname RENAME TO newname

Permite el borrado de usuarios o grupos.

drop user pedro;

drop group fundacite;



Si tenemos los privilegios para crear una base de datos podemos
hacerlo con la sentencia .
create database facturacion;

define los privilegios de acceso.

GRANT ON TO

GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES


| TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON
[ TABLE,DATABASE... ] TO { [ GROUP,USER ] rolename | PUBLIC }
[, ...] [ WITH GRANT OPTION ]

grant all privileges on database facturacion to pedro with grant option;

Intalacion de Postgresql.

Cambiar el password de usuario postgresql.

Configuracin de parmetros.

Creacin y edicin de usuarios.

Creacin y edicin de grupos.

Creacin de una base de datos.

Creacin de privilegios.

Sirve para crear una nueva tabla vaca en la base de datos actual. La
sintaxis general es la siguiente:
Create table [parmetros] nombre_tabla
(
nombre_columna [parmetros]
)



Sirve para crear una nueva tabla vaca en la base de datos actual. La
sintaxis general es la siguiente:
Create table [parmetros] nombre_tabla
(
nombre_columna tipo_columna
)

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name ( [
{ column_name data_type [ DEFAULT default_expr ] [ column_constraint [ ... ] ]
| table_constraint
| LIKE parent_table [ { INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS |
INDEXES }
[, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace ]

especifica que la tabla es temporal y ser


borrada despues de la sesin actual.

nombre de la tabla.

El nombre de la columna que ser creada en la


nueva tabla.

especifica el tipo de dato de la columna.

asigna un valor por defecto en caso que no se


especifique un valor de inicio.

La clusula opcional INHERITS especifica una lista de


tablas a partir de la cual la nueva tabla automticamente hereda
todas las columnas.

Parecido a la clausula INHERITS, pero a diferencia de sta la tabla


padre est totalmente desvinculada de la tabla hija despus de la
creacin.

la columna no puede permitir valores nulos.

la columna permite valores nulos.


Primary Key

Unique

CHECK

REFERENCES nombre_tabla

FOREIGN KEY

NO ACTION,CASCADE,RESTRICT,SET NULL

create table peliculas
(
codigo char(5) constraint clave_pelicula primary key,
titulo varchar(40) not null,
fecha_produccion date,
censura char,
tiempo interval hour to minute
);

Una vez que se crea una tabla, puede ser llenada con valores
mediante el comando .
INSERT INTO nombre_tabla (nombre_columna1, nombre_columna2,
etc) VALUES (valor1, valor2,...etc);

insert into peliculas(codigo,titulo,fecha_produccion,censura,tiempo)

values ('aaa01','pelicula1','2005-01-01','A','82 minutes');

insert into peliculas(codigo,titulo,fecha_produccion,censura,tiempo)

values ('heq79','pelicula2','2003-01-01','A','90 minutes');

El comando ms usado en SQL es la instruccin SELECT, que se
utiliza para recuperar datos. La sintaxis es:
SELECT [columnas,opciones]
FROM [tablas,opciones]
WHERE [condiciones,opciones]


codigo | titulo | fecha_produccion | censura | tiempo
-----------+-----------+--------------------------+------------+----------
aaa01 | pelicula1 | 2005-01-01 | A | 01:22:00
heq79 | pelicula2 | 2003-01-01 | A | 01:30:00

codigo | titulo
--------------------+--------------------
aaa01 | pelicula1
heq79 | pelicula2

codigo | titulo | fecha_produccion
----------+-------------+------------------------
aaa01 | pelicula1 | 2005-01-01

Você também pode gostar