Вы находитесь на странице: 1из 40

http://postgresql-dbms.blogspot.mx/p/importante-sobre-el-dbms-postgresql.

html

Sobre PostgreSQL
Sb, 02/10/2010 - 22:29 rafaelma

Introduccin Caractersticas Historia Ciclo de vida (EOL) y soporte

Introduccin
PostgreSQL es un sistema de gestin de bases de datos objetorelacional, distribuido bajo licencia BSD y con su cdigo fuente disponible libremente. Es el sistema de gestin de bases de datos de cdigo abierto ms potente del mercado y en sus ltimas versiones no tiene nada que envidiarle a otras bases de datos comerciales. PostgreSQL utiliza un modelo cliente/servidor y usa multiprocesos en vez de multihilospara garantizar la estabilidad del sistema. Un fallo en uno de los procesos no afectar el resto y el sistema continuar funcionando. A continuacin teneis un grfico que ilustra de manera general los componentes ms importantes en un sistema PostgreSQL.

Aplicacin cliente: Esta es la aplicacin cliente que utiliza PostgreSQL como administrador de bases de datos. La conexin puede ocurrir via TCP/IP sockets locales.

Demonio postmaster: Este es el proceso principal de PostgreSQL. Es el encargado de escuchar por un puerto/socket por conexiones entrantes de clientes. Tambien es el encargado de crear los procesos hijos que se encargaran de autentificar estas peticiones, gestionar las consultas y mandar los resultados a las aplicaciones clientes

Ficheros de configuracion: Los 3 ficheros principales de configuracin utilizados por PostgreSQL, postgresql.conf, pg_hba.conf y pg_ident.conf Procesos hijos postgres: Procesos hijos que se encargan de autentificar a los clientes, de gestionar las consultas y mandar los resultados a las aplicaciones clientes

PostgreSQL share buffer cache: Memoria compartida usada por POstgreSQL para almacenar datos en cach. Write-Ahead Log (WAL): Componente del sistema encargado de asegurar la integridad de los datos (recuperacin de tipo REDO) Kernel disk buffer cache: Cach de disco del sistema operativo Disco: Disco fsico donde se almacenan los datos y toda la informacin necesaria para que PostgreSQL funcione

Caractersticas
La ltima serie de produccin es la 9.3. Sus caractersticas tcnicas la hacen una de las bases de datos ms potentes y robustas del mercado. Su desarrollo comenzo hace ms de 16 aos, y durante este tiempo, estabilidad, potencia, robustez, facilidad de administracin e implementacin de estndares han sido las caractersticas que ms se han tenido en cuenta durante su desarrollo. PostgreSQL funciona muy bien con grandes cantidades de datos y una alta concurrencia de usuarios accediendo a la vez a el sistema. A continuacin teneis algunas de las caractersticas ms importantes y soportadas por PostgreSQL:

Generales
Es una base de datos 100% ACID Integridad referencial Tablespaces Nested transactions (savepoints) Replicacin asincrnica/sincrnica / Streaming replication - Hot Standby Two-phase commit PITR - point in time recovery Copias de seguridad en caliente (Online/hot backups) Unicode Juegos de caracteres internacionales Regionalizacin por columna Multi-Version Concurrency Control (MVCC)

Multiples mtodos de autentificacin Acceso encriptado via SSL Actualizacin in-situ integrada (pg_upgrade) SE-postgres Completa documentacin Licencia BSD Disponible para Linux y UNIX en todas sus variantes (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) y Windows 32/64bit.

Programacin / Desarrollo
Funciones/procedimientos almacenados (stored procedures) en numerosos lenguajes de programacion, entre otros PL/pgSQL (similar al PL/SQL de oracle), PL/Perl, PL/Python y PL/Tcl Bloques annimos de cdigo de procedimientos (sentencias DO) Numerosos tipos de datos y posibilidad de definir nuevos tipos. Adems de los tipos estndares en cualquier base de datos, tenemos disponibles, entre otros, tipos geomtricos, de direcciones de red, de cadenas binarias, UUID, XML, matrices, etc Soporta el almacenamiento de objetos binarios grandes (grficos, videos, sonido, ...) APIs para programar en C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, PHP, Lisp, Scheme, Qt y muchos otros.

SQL
SQL92,SQL99,SQL2003,SQL2008 Llaves primarias (primary keys) y forneas (foreign keys) Check, Unique y Not null constraints Restricciones de unicidad postergables (deferrable constraints) Columnas auto-incrementales Indices compuestos, nicos, parciales y funcionales en cualquiera de los metodos de almacenamiento disponibles, B-tree, R-tree, hash GiST Sub-selects Consultas recursivas Funciones 'Windows' Joins Vistas (views) Disparadores (triggers) comunes, por columna, condicionales. Reglas (Rules) Herencia de tablas (Inheritance) Eventos LISTEN/NOTIFY

Podeis consultar la lista completa en ingles de caractersticas disponibles en todas las versiones en la direccin http://www.postgresql.org/about/featurematrix Algunos de los limites de PostgreSQL son:

Lmite

Valor Ilimitado (Depende de tu sistema de almacenamiento) 32 TB 1.6 TB 1 GB Ilimitado

Mximo tamao base de dato

Mximo tamao de tabla Mximo tamao de fila Mximo tamao de campo Mximo numero de filas por tabla Mximo numero de columnas por tabla Mximo numero de indices por tabla

250 - 1600 (dependiendo del tipo)

Ilimitado

Historia
El proyecto PostgreSQL tal y como lo conocemos hoy en dia empez en 1996, aunque las bases y el trabajo en la que se asienta tienen sus comienzos en la decada de los 70. A continuacin teneis una corta descripcin de la historia de PostgreSQL.

Ingres 1977-1985 - "El comienzo"

La dcada de los 70 fue una dcada de desarrollos y pruebas de nuevos conceptos en el nuevo mundo de los gestores de bases de datos. IBM habia estado trabajando desde 1973 con los primeros conceptos, ideas y teorias sobre bases de datos relacionales. Su proyecto "System R" fue entre otras cosas la primera implementacin del lenguaje SQL (Structured Query Language). Este proyecto, sus decisiones de diseo y muchos de los algoritmos usados, influenciaron muchos de los sistemas de bases de datos relacionales que aparecieron posteriormente. Por aquel entonces un profesor de la Universidad de Berkeley, Michael Stonebraker, leyo unos artculos publicados por IBM sobre "System R" que le hicieron interesarse en el tema. Utilizando el dinero de otro proyecto que ya tenia asignado, Ingres (INteractive Graphics REtrieval System), Stonebraker empezo a desarrollar sus ideas sobre bases de datos relacionales. Durante estos aos Ingres mantuvo su cdigo fuente abierto y permanecio en gran medida similar en conceptos a "System R". A principio de los 80, Ingres estuvo compitiendo con Oracle por el liderazgo en el mundo de bases de datos relacionales y su cdigo e implementacin evolucionaron y fueron el origen de otras bases de datos relacionales, entre ellas podemos citar a Informix, NonStop SQL y Sybase (Microsoft SQL Server fue una versin licenciada de Sybase hasta su version 6.0). Michael Stonebraker dejo la Universidad de Berkeley en 1982 para comercializar Ingres pero volvio a la misma en 1985 con nuevas ideas.

Postgres 1986-1994 - Despues (post) de ingres


Despues de su vuelta a Berkeley en 1985, Michael Stonebraker lider un nuevo proyecto llamado Postgres (despues de Ingres) patrocinado por la Defense Advanced Research Projects Agency (DARPA), la Army Research Office (ARO), la National Science Foundation (NSF), y ESL, Inc. Con este proyecto y basandose en la experiencia obtenida con Ingres, Stonebraker tenia como meta mejorar lo que habian conseguido y aprendido en el desarrollo de Ingres. Y aunque se baso en muchas ideas de Ingres, no se baso en el cdigo fuente del mismo. Los objetivos iniciales de este proyecto fueron: Proporcionar un mejor soporte para objetos complejos Proporcionar a los usuarios la posibilidad de extender los tipos de datos, operadores y mtodos de acceso.

Proporcionar los mecanismos necesarios para crear bases de datos activas (triggers, etc) Simplificar el cdigo encargado de la recuperacin del sistema despues de una cada del mismo Hacer cambios mnimos (preferiblemente ninguno) en el modelo relacional. Mejorar el lenguaje de consulta QUEL heredado de Ingres (POSTQUEL).

Para los interesados en el tema, teneis disponibles una serie de artculos originales y completos en ingles relacionados con el proyecto Postgres: "The design of POSTGRES": El diseo de Postgres "The POSTGRES data model": El mdelo de datos de Postgres "The design of the POSTGRES storage system": El diseo del sistema de almacenamiento de Postgres "The implementation of POSTGRES": Presentacin de la versin 1 de Postgres en la conferencia ACM-SIGMOD de 1988 "A commentary on the POSTGRES rules system": Comentarios sobre el sistema de reglas de Postgres "On Rules, Procedures, Caching and Views in Database Systems": Sobre reglas, procedimientos, cache y vistas en sistemas de bases de datos

La ltima versin de Postgres en este projecto fue la versin 4.2.

Postgres95 1994-1995 - Nueva vida en el mundo opensource


En 1994, dos estudiantes de Berkeley, Andrew Yu y Jolly Chen, empezaron a trabajar con el cdigo de Postgres (versin 4.2) y llamaron al proyecto Postgres95. Hicieron una limpieza general del cdigo, arreglaron errores en el mismo, e implementaron otras mejoras, entre las que destacan: Sustitucin de POSTQUEL por un interprete del lenguaje SQL Reimplementacin de las funciones agregadas psql fue creado para ejecutar consultas SQL El interface de objetos grandes (large-object) fue revisado Un pequeo tutorial sobre Postgres fue creado Postgres se pudo empezar a compilar con GNU make y GCC sin parchear

La versin 1.0 de Postgre95 vio la luz en 1995, el cdigo era 100% ANSI C, un 25% ms corto en relacin con la versin 4.2 y un 30-50% ms rpido. El cdigo fue publicado en la web y liberado bajo una licencia BSD, y ms y ms personas empezaron a utilizar y a colaborar en el proyecto.

PostgreSQL 1996-actualidad - Proyecto PostgreSQL


En 1996, Andrew Yu y Jolly Chen ya no tenian tanto tiempo para dirigir y desarrollar Postgres95. Algunos de los usuarios habituales de las listas de correo del proyecto decidieron hacerse cargo del mismo y crearon el llamado "PostgreSQL Global Development Team". En un principio este equipo de desarrolladores al cargo de la organizacin del proyecto estuvo formado por Marc Fournier en Ontario, Canada, Thomas Lockhart en Pasadena, California, Vadim Mikheev en Krasnoyarsk, Rusia y Bruce Momjian in Philadelphia, Pennsylvania. El nombre fue cambiado de Postgres95 a PostgreSQL y lanzaron la versin 6.0 en enero de 1997. Hoy en dia el grupo central (core team) de desarrolladores est formado por 6 personas, existen 38 desarrolladores principales y ms 21 desarrolladores habituales. En total alrededor de 65 personas activas, contribuyendo con el desarrollo de PostgreSQL. Podeis encontrar ms informacin sobre este equipo de desarrolladores enhttp://www.postgresql.org/community/contributors/ Existe tambien una gran comunidad de usuarios, programadores y administradores que colaboran actvamente en numerosos aspectos y actividades relacionadas con el proyecto. Informes y soluciones de problemas, tests, comprobacin del funcionamiento, aportaciones de nuevas ideas, discusiones sobre caractersticas y problemas, documentacin y fomento de PostgreSQL son solo algunas de las actividades que la comunidad de usuarios realiza. No tenemos que olvidar tampoco que existen muchas empresas que tambien colaboran con dinero y/ con tiempo/personas en mejorar PostgreSQL. Muchos desarrolladores y nuevas caractersticas estn muchas veces patrocinadas por empresas privadas. En los ltimos aos los trabajos de desarrollo se han concentrado mucho en la velocidad de proceso y en caractersticas demandadas en el mundo empresarial. En este grfico podeis ver cuando las diferentes versiones de PostgreSQL han visto la luz y las principales caracteristicas en las que se ha centrado el desarrollo.

Durante los aos de existencia del Proyecto PostgreSQL, el tamao del mismo, tanto en nmero de desarrolladores, como en nmeros de linea de cdigo, funciones y complejidad del mismo ha ido aumentando ao a ao. En el siguiente grfico teneis

una grfica con la evolucin del nmero de lineas de cdigo en cada versin de PostgreSQL.

Los datos de este grfico estan generados con CLOC. Contabilizamos como lineas de cdigo a todas las lineas de cdigo en diferentes lenguaje, ms comentarios, menos lineas en blanco. Los ficheros HTML y CSS no se cuentan como cdigo. Usando el modelo de estimacin de costes de software "COCOMOII" (Constructive COst MOdel) podemos obtener unos datos meramente orientativos pero que nos pueden ayudar a entender la complejidad del proyecto PostgreSQL y los recursos que se necesitarian para desarrollar un producto similar desde cero. Segn COCOMOII, obtendriamos estos nmeros para PostgreSQL 9.0.0:

Descripcin Nmeros de lineas de cdigo (PG-9.0.0) Habilidad de los programadores (alta) Complejidad del projecto (alta) Precio/hora ($100.000/ao - 1.875horas/ao)

Valor 969.562 0,6 1,24 $53,3

Programadores-ao Precio por linea de cdigo Precio Total Lineas de cdigo por persona/dia Tiempo de desarrollo del proyecto (aos) Nmero medio de programadores

618,71 $65,30 $63.316.697 7 3.6 171,4

Ref: http://www.cms4site.ru/utility.php?ecur=1.24&eafcur=0.6&utility=cocomoii...

Ciclo de vida (EOL) y soporte


El Proyecto PostgreSQL tiene como objetivo mantener y soportar cada versin de PostgreSQL durante 5 aos desde el momento de su lanzamiento. A continuacin teneis un resumen del ciclo de vida de las diferentes versiones de PostgreSQL:

Versin 9.2 9.1 9.0 8.4

Versin menor 9.2.0 9.1.5 9.0.9 8.4.13

Soportada Si Si Si Si

Lanzamiento Sep 2012 Sep 2011 Sep 2010 Jul 2009

Soporte Sep 2017 Sep 2016 Sep 2015 Jul 2014

8.3 8.2 8.1 8.0 7.4 7.3 7.2 7.1 7.0 6.5 6.4 6.3

8.3.20 8.2.23 8.1.23 8.0.26 7.4.30 7.3.21 7.2.8 7.1.3 7.0.3 6.5.3 6.4.2 6.3.2

Si No No No No No No No No No No No

Feb 2008 Dic 2006 Nov 2005 Ene 2005 Nov 2003 Nov 2002 Feb 2002 Abr 2001 May 2000 Jun 1999 Oct 1998 Mar 1998

Feb 2013 Dic 2011 Nov 2010 Oct 2010 Oct 2010 Nov 2007 Feb 2007 Abr 2006 May 2005 Jun 2004 Oct 2003 Mar 2003

Caractersticas, limitaciones y ventajas


CARACTERSTICAS
La ltima serie de produccin es la 9.1. Sus caractersticas tcnicas la hacen una de las bases de datos ms potentes y robustas del mercado. Su desarrollo comenzo hace ms de 16 aos, y durante este tiempo, estabilidad, potencia, robustez, facilidad de administracin e implementacin de estndares han sido las caractersticas que ms se han tenido en cuenta durante su desarrollo. PostgreSQL funciona muy bien con grandes cantidades de datos y una alta concurrencia de usuarios accediendo a la vez a el sistema. A continuacin teneis algunas de las caractersticas ms importantes y soportadas por PostgreSQL:

Generales
Es una base de datos 100% ACID. Soporta distintos tipos de datos: adems del soporte para los tipos base, tambin soporta datos de tipo

fecha, monetarios, elementos grficos, datos sobre redes (MAC, IP ...), cadenas de bits, etc. Tambin permite la creacin de tipos propios. Incluye herencia entre tablas, por lo que a este gestor de bases de datos se le incluye entre los Copias de seguridad en caliente (Online/hot backups) Unicode Juegos de caracteres internacionales Regionalizacin por columna Multi-Version Concurrency Control (MVCC) Multiples mtodos de autentificacin Acceso encriptado via SSL SE-postgres Completa documentacin Licencia BSD gestores objeto-relacionales.

Disponible para Linux y UNIX en todas sus variantes (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) y Windows 32/64bit.

Alta concurrencia
Mediante un sistema denominado MVCC (Acceso concurrente multiversin, por sus siglas en ingls) PostgreSQL permite que mientras un proceso escribe en una tabla, otros accedan a la misma tabla sin necesidad de bloqueos. Cada usuario obtiene una visin consistente de lo ltimo a lo que se le hizo commit.

LIMITACIONES

Puntos de recuperacin dentro de transacciones. Actualmente, las transacciones abortan completamente si se encuentra un fallo durante su ejecucin. No soporta tablespaces para definir dnde almacenar la base de datos, el esquema, los ndices, etc. (versiones antes de la 9.0) El soporte a orientacin a objetos es una simple extensin que ofrece prestaciones como la herencia, no un soporte completo.

Ventajas:

Ampliamente popular - Ideal para tecnologias Web.

Fcil de Administrar. Su sintaxis SQL es estndar y fcil de aprender. Footprint bajo de memoria, bastante poderoso con una configuracin adecuada. Multiplataforma. Capacidades de replicacin de datos. Soporte empresarial disponible.

Estabilidad y confiabilidad legendarias En contraste a muchos sistemas de bases de datos comerciales, es extremadamente comn que compaas reporten que PostgreSQL nunca ha presentado cadas en varios aos de operacin de alta actividad. Ni una sola vez. Simplemente funciona. Extensible El cdigo fuente est disponible para todos sin costo. Si su equipo necesita extender o personalizar PostgreSQL de alguna manera, pueden hacerlo con un mnimo esfuerzo, sin costos adicionales. Esto es complementado por la comunidad de profesionales y entusiastas de PostgreSQL alrededor del mundo que tambin extienden PostgreSQL todos los das. Multiplataforma PostgreSQL est disponible en casi cualquier Unix (34 plataformas en la ltima versin estable), y una versin nativa de Windows est actualmente en estado beta de pruebas. Diseado para ambientes de alto volumen PostgreSQL usa una estrategia de almacenamiento de filas llamada MVCC para conseguir una mucho mejor respuesta en ambientes de grandes volmenes. Los principales proveedores de sistemas de bases de datos comerciales usan tambin esta tecnologa, por las mismas razones.

DESVENTAJAS

En comparacin con MySQL es ms lento en inserciones y actualizaciones, ya que cuenta con cabeceras de interseccin que no tiene MySQL. Soporte en lnea: Hay foros oficiales, pero no hay una ayuda obligatoria. Consume ms recursos que MySQL. La sintaxtis de algunos de sus comandos o sentencias no es nada intuitiva.
Enviar por correo electrnico

Instalacin de PostgreSQL en windows

DESCARGA E INSTALACIN DE POSGRESQL EN WINDOWS 7

Abriremos un navegador web y accederemos a la URL: http://www.postgresql.org/download/windows

Y nos direccionar a otra pgina donde podremos descargarnos la versin correcta tanto para nuestras necesidades como para el tipo de sistema operativo que tengamos instalado.

Que en nuestro caso es la versin 9.1.3 para Windows de 64 bits. Una vez descargado el archivo de instalacin lo ejecutamos y si tenemos activado el control de cuentas de usuario nos mostrar una advertencia con el texto "Desea permitir que este programa realice cambios en el equipo?", pulsaremos "S" para continuar con la instalacin de PostgreSQL:

Se iniciar el asistente para instalar PostgreSQL, pulsaremos "Siguiente":

Indicaremos la carpeta de instalacin de PostgreSQL, donde se guardarn los ejecutables, libreras y ficheros de configuracin de PostgreSQL:

Indicaremos tambin la carpeta donde se guardarn los datos por defecto de PostgreSQL:

Introduciremos la contrasea para el sper usuario "postgres" que ser con el que iniciemos sesin para administrar la base de datos, si tenemos clave de cuenta en Windows introduciremos nuestra clave.

Introduciremos el puerto de escucha para la conexin con el servidor PostgreSQL, por defecto el 5432:

Seleccionaremos la configuracin regional:

Pulsaremos "Siguiente" para iniciar la instalacin definitiva.

Se iniciar el asistente para instalar el motor de base de datos PostgreSQL, que crear las carpetas oportunas, copiar los ficheros necesarios y crear el servicio Windows para iniciar de forma automtica el motor de base de datos:

Una vez finalizada la instalacin el asistente nos dar la posibilidad de ejecutar Stack Builder, aplicacin que nos permitir instalar otros componentes y herramientas para PostgreSQL:

Si hemos marcado la opcin de Stack Builder, se iniciar, seleccionaremos "PostgreSQL 9.0 on port 5432". Pulsaremos "Finish" (en nuestro caso cancelaremos Stack Builder pues no instalaremos ms componentes).

Creacion de una Base de Datos INTRODUCCION A LA INTERFACE

CREAR UNA BASE DE DATOS EN POSTGRES SQL


1.- Para crear una nueva base de datos, debemos situarnos en el Servidor Postgre SQL, darle clic derecho, seleccionamos conectar, nos pedira nuestra contrasea de de super ususario Postgre SQL.

2.- Una vez realizada la conexin, nos situamos en PostgreSQL, damos clic derecho y seleccionar NEW DATABASE del menu emergente

3.- En la nueva pantalla vamos a ingresar el nombre de la nueva base de datos que en nuestro caso es Pedidos, el dueo va a ser PostgreSQL, damos clic en OK

4.-

Podemos

visualizar

la

nueva

base

de

datos

que

hemos

creado.

5.- Para utilizar la nueva base de datos pedidos, vamos a dar clic derecho sobre la base de datos, seleccionamos CREATE Script

6.- Podremos visualizar una nueva pantalla donde esta nuestro scipt creado por defecto, en esta pantalla podremos trabajar y realizar la programacion adecuada para realizar las modificaciones pertinentes en la base de datos.

CREACION DE LAS TABLAS EN LA BASE DE DATOS.


1.- En la pantalla que tenemos ahora, vamos a escribir el respectivo Script para crear una nueva tabla.

2.-

Una

vez

creada

el

Script

lo

seleccionamos,

lo

mandamos

ejecutar.

3.- Para verificar que la tabla se creo, vamos a ir a la primera pagina de PostgresSQL, vamos a la base de datos PEDIDOS, seleccionamos ESQUEMAS, luego PUBLIC, y para finalizar seleccionamos TABLES, donde podemos visualizar que la tabla EMPLEADOS esta creada.

4.- Para insertar datos en la tabla que hemos creado. Vamos a nuestra tabla en este caso EMPLEADOS clic derecho y seleccionamos SCRIPTS, podemos ver que esta seleccin nos facilita varias opciones para llenar nuestra tabla.

5.- En este caso vamos a seleccionar la opcin INSERT, donde se despliega una pgina donde vamos a ingresar valores.

Script de una BD
Una vez terminada la instalacin del DBMS lo que resta es ingresar el cdigo SQL, el cual tiene una interfaz muy similar a la del SQL Sever 2008. En este artculo resolvemos los ejercicios planteados en el archivo que se muestran despues de la creacion de la BDD. descargar Script: ScriptBDD.sql Primero vamos a crear el Script para llenar la base de datos: /********** ESCUELA POLITNCICA NACIONAL *************/ BASES DE DATOS GRUPO POSTGRESQL *****************************************************/

/*CREACIN DE LA BASE DE DATOS 'PEDIDOS' */

drop database if exists PEDIDOS;

create database PEDIDOS;

CREATE TABLE EMPLEADOS( EMPLEADOID int NOT NULL, NOMBRE char(30) NULL, APELLIDO char(30) NULL, FECHA_NAC date NULL, REPORTA_A int NULL, EXTENSION int NULL, CONSTRAINT PK_EMPLEADOS PRIMARY KEY (EMPLEADOID));

CREATE TABLE PROVEEDORES(

PROVEEDORID int NOT NULL, NOMBREPROV char(50) NOT NULL, CONTACTO char(50) NOT NULL, CELUPROV char(12) NULL, FIJOPROV char(12) NULL, CONSTRAINT PK_PROVEEDORES PRIMARY KEY (PROVEEDORID ) );

CREATE TABLE CATEGORIAS( CATEGORIAID int NOT NULL, NOMBRECAT char(50) NOT NULL, CONSTRAINT PK_CATEGORIAS PRIMARY KEY (CATEGORIAID) ) ;

CREATE TABLE CLIENTES( CLIENTEID int NOT NULL, CEDULA_RUC char(10) NOT NULL, NOMBRECIA char(30) NOT NULL, NOMBRECONTACTO char(50) NOT NULL, DIRECCIONCLI char(50) NOT NULL, FAX char(12) NULL, EMAIL char(50) NULL, CELULAR char(12) NULL, FIJO char(12) NULL, CONSTRAINT PK_CLIENTES PRIMARY KEY (CLIENTEID) );

CREATE TABLE ORDENES( ORDENID int NOT NULL, EMPLEADOID int NOT NULL, CLIENTEID int NOT NULL, FECHAORDEN date NOT NULL,

DESCUENTO int NULL, CONSTRAINT PK_ORDENES PRIMARY KEY (ORDENID) );

CREATE TABLE DETALLE_ORDENES( ORDENID int NOT NULL, DETALLEID int NOT NULL, PRODUCTOID int NOT NULL, CANTIDAD int NOT NULL, CONSTRAINT PK_DETALLE_ORDENES PRIMARY KEY (ORDENID,DETALLEID ) );

CREATE TABLE PRODUCTOS( PRODUCTOID int NOT NULL, PROVEEDORID int NOT NULL, CATEGORIAID int NOT NULL, DESCRIPCION char(50) NULL, PRECIOUNIT numeric NOT NULL, EXISTENCIA int NOT NULL, CONSTRAINT PK_PRODUCTOS PRIMARY KEY (PRODUCTOID )) ;

ALTER TABLE ORDENES ADD CONSTRAINT FK_ORDENES_CLIEN_ORD_CLIENTES FOREIGNKEY(CLIENTEID) REFERENCES CLIENTES (CLIENTEID) on delete restrict on update restrict;

ALTER TABLE ORDENES ADD CONSTRAINT FK_ORDENES_EMPLE_ORD_EMPLEADOFOREIGN K EY(EMPLEADOID) REFERENCES EMPLEADOS (EMPLEADOID) on delete restrict on update restrict;

ALTER TABLE DETALLE_ORDENES ADD CONSTRAINTFK_DETALLE__ORDEN_DET_ORDENES F OREIGN KEY(ORDENID) REFERENCES ORDENES (ORDENID) on delete restrict on update restrict;

ALTER TABLE DETALLE_ORDENES ADD CONSTRAINTFK_DETALLE__PROD_DETA_PRODUCTO FOREIGN KEY(PRODUCTOID) REFERENCES PRODUCTOS (PRODUCTOID) on delete restrict on update restrict;

ALTER TABLE PRODUCTOS ADD CONSTRAINTFK_PRODUCTO_CATE_PROD_CATEGORI FOREIG N KEY(CATEGORIAID) REFERENCES CATEGORIAS (CATEGORIAID) on delete restrict on update restrict;

ALTER TABLE PRODUCTOS ADD CONSTRAINTFK_PRODUCTO_PROV_PROD_PROVEEDO FOREIG N KEY(PROVEEDORID) REFERENCES PROVEEDORES (PROVEEDORID) on delete restrict on update restrict;

ALTER TABLE EMPLEADOS ADD CONSTRAINT FK_EMPLEADO_REPORTA FOREIGNKEY(REPOR TA_A) REFERENCES EMPLEADOS (EMPLEADOID) on delete restrict on update restrict;

/*INSERCIN DE DATOS EN LA BASE

*/

insert into categorias (categoriaid, nombrecat) values (100,'CARNICOS'); insert into categorias (categoriaid, nombrecat) values (200,'LACTEOS'); insert into categorias (categoriaid, nombrecat) values (300,'LIMPIEZA'); insert into categorias (categoriaid, nombrecat) values (400,'HIGINE PERSONAL'); insert into categorias (categoriaid, nombrecat) values (500,'MEDICINAS');

insert into categorias (categoriaid, nombrecat) values (600,'COSMETICOS') ; insert into categorias (categoriaid, nombrecat) values (700,'REVISTAS');

insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (10, 'DON DIEGO', 'MANUEL ANDRADE', '099234567','2124456'); insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (20, 'PRONACA', 'JUAN PEREZ', '0923434467','2124456'); insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (30, 'TONY', 'JORGE BRITO', '099234567','2124456'); insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (40, 'MIRAFLORES', 'MARIA PAZ', '098124498','2458799'); insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (50, 'ALMAY', 'PEDRO GONZALEZ', '097654567','2507190'); insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (60, 'REVLON', 'MONICA SALAS', '099245678','2609876'); insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (70, 'YANBAL', 'BETY ARIAS', '098124458','2450887'); insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (120, 'JURIS', 'MANUEL ANDRADE', '099234567','2124456'); insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (80, 'CLEANER', 'MANUEL ANDRADE', '099234567','2124456'); insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (90, 'BAYER', 'MANUEL ANDRADE', '099234567','2124456'); insert into proveedores (proveedorid, nombreprov,contacto,celuprov,fijopr ov) values (110, 'PALMOLIVE', 'MANUEL ANDRADE', '099234567','2124456');

INSERT INTO PRODUCTOS VALUES (1,10,100,'SALCHICHAS VIENESAS',2.60,200); INSERT INTO PRODUCTOS VALUES (2,10,100,'SALAMI DE AJO',3.60,300); INSERT INTO PRODUCTOS VALUES (3,10,100,'BOTON PARA ASADO',4.70,400); INSERT INTO PRODUCTOS VALUES (4,20,100,'SALCHICHAS DE POLLO',2.90,200); INSERT INTO PRODUCTOS VALUES (5,20,100,'JAMON DE POLLO',2.80,100); INSERT INTO PRODUCTOS VALUES (6,30,200,'YOGURT NATURAL',4.30,80); INSERT INTO PRODUCTOS VALUES (7,30,200,'LECHE CHOCOLATE',1.60,90); INSERT INTO PRODUCTOS VALUES (8,40,200,'YOGURT DE SABORES',1.60,200); INSERT INTO PRODUCTOS VALUES (9,40,200,'CREMA DE LECHE',3.60,30); INSERT INTO PRODUCTOS VALUES (10,50,600,'BASE DE MAQUILLAJE',14.70,40); INSERT INTO PRODUCTOS VALUES (11,50,600,'RIMMEL',12.90,20); INSERT INTO PRODUCTOS VALUES (13,60,600,'SOMBRA DE OJOS',9.80,100); set datestyle to dmy;

INSERT INTO EMPLEADOS VALUES (1,'JUAN', 'CRUZ', '18/01/67',null,231); INSERT INTO EMPLEADOS VALUES (2,'MARIO', 'SANCHEZ','01/03/79',1,144); INSERT INTO EMPLEADOS VALUES (3,'VERONICA', 'ARIAS','23/06/77',1, 234); INSERT INTO EMPLEADOS VALUES (4,'PABLO', 'CELY', '28/01/77',2,567); INSERT INTO EMPLEADOS VALUES (5,'DIEGO', 'ANDRADE', '15/05/70',2,890); INSERT INTO EMPLEADOS VALUES (6,'JUAN', 'ANDRADE', '17/11/76',3,230); INSERT INTO EMPLEADOS VALUES (7,'MARIA', 'NOBOA', '21/12/79',3,261);

INSERT INTO CLIENTES VALUES (1,'1890786576','SUPERMERCADO ESTRELLA','JUAN ALBAN','AV.AMAZONAS',NULL,NULL,NULL,NULL); INSERT INTO CLIENTES VALUES (2,'1298765477','EL ROSADO','MARIA CORDERO','AV.AEL INCA',NULL,NULL,NULL,NULL); INSERT INTO CLIENTES VALUES (3,'1009876567','DISTRIBUIDORA PRENSA','PEDRO PINTO','EL PINAR',NULL,NULL,NULL,NULL); INSERT INTO CLIENTES VALUES (4,'1876090006','SU TIENDA','PABLO PONCE','AV.AMAZONAS',NULL,NULL,NULL,NULL); INSERT INTO CLIENTES VALUES (5,'1893456776','SUPERMERCADO DORADO','LORENA PAZ','AV.6 DICIEMBRE',NULL,NULL,NULL,NULL);

INSERT INTO CLIENTES VALUES (6,'1678999891','MI COMISARIATO','ROSARIO UTRERAS','AV.AMAZONAS',NULL,NULL,NULL,NULL); INSERT INTO CLIENTES VALUES (7,'1244567888','SUPERMERCADO DESCUENTO','LETICIA ORTEGA','AV.LA PRENSA',NULL,NULL,NULL,NULL); INSERT INTO CLIENTES VALUES (8,'1456799022','EL DESCUENTO','JUAN TORRES','AV.PATRIA',NULL,NULL,NULL,NULL); INSERT INTO CLIENTES VALUES (9,'1845677777','DE LUISE','JORGE PARRA','AV.AMAZONAS',NULL,NULL,NULL,NULL); INSERT INTO CLIENTES VALUES (10,'183445667','YARBANTRELLA','PABLO POLIT','AV.REPUBLICA',NULL,NULL,NULL,NULL);

INSERT INTO ORDENES VALUES(1,3,4,'17/06/07', 5); INSERT INTO ORDENES VALUES(2,3,4,'02/06/07', 10); INSERT INTO ORDENES VALUES(3,4,5,'05/06/07', 6); INSERT INTO ORDENES VALUES(4,2,6,'06/06/07', 2); INSERT INTO ORDENES VALUES(5,2,7,'09/06/07', NULL); INSERT INTO ORDENES VALUES(6,4,5,'12/06/07', 10); INSERT INTO ORDENES VALUES(7,2,5,'14/06/07', 10); INSERT INTO ORDENES VALUES(8,3,2,'13/06/07', 10); INSERT INTO ORDENES VALUES(9,3,2,'17/06/07', 3); INSERT INTO ORDENES VALUES(10,2,2,'18/06/07', 2);

INSERT INTO detalle_ordenes VALUES(1,1,1,2); INSERT INTO detalle_ordenes VALUES(1,2,4,1); INSERT INTO detalle_ordenes VALUES(1,3,6,1); INSERT INTO detalle_ordenes VALUES(1,4,9,1); INSERT INTO detalle_ordenes VALUES(2,1,10,10); INSERT INTO detalle_ordenes VALUES(2,2,13,20); INSERT INTO detalle_ordenes VALUES(3,1,3,10); INSERT INTO detalle_ordenes VALUES(4,1,9,12); INSERT INTO detalle_ordenes VALUES(5,1,1,14); INSERT INTO detalle_ordenes VALUES(5,2,4,20); INSERT INTO detalle_ordenes VALUES(6,1,3,12); INSERT INTO detalle_ordenes VALUES(7,1,11,10);

INSERT INTO detalle_ordenes VALUES(8,1,2,10); INSERT INTO detalle_ordenes VALUES(8,2,5,14); INSERT INTO detalle_ordenes VALUES(8,3,7,10); INSERT INTO detalle_ordenes VALUES(9,1,11,10); INSERT INTO detalle_ordenes VALUES(10,1,1,5);

Resolucin de ejercicios
/* EJERCICIOS PROPUESTOS

*********************************************************************** EJERCICIOS ************************************************************************

1. Actualizar el precio unitario de los productos de la categora CARNICOS, subindolos en un 10% (1) */

select * from productos; update productos set preciounit= (preciounit*0.1) + preciounit;

/* 2. Actualizar el telfono celular del proveedor cuyo contacto es MANUEL ANDRADE, con el valor 099010291 (2) */

select * from proveedores; update proveedores set celuprov= '0990101291' where contacto= 'MANUEL ANDRADE';

/* 3. Borrar el producto YOGURT DE SABORES */ (3)

select * from productos; delete from productos where descripcion ='YOGURT DE SABORES';

/* 4. Realizar las siguientes consultas:

4.1 Mostrar todas las rdenes: el id de la orden, el apellido y nombre del empleado que la atendi (4) el nombre de la compaa cliente y la fecha de orden */

SELECT * FROM ORDENES; select * from empleados; select * from clientes; select ord.ordenid, emp.empleadoid, emp.nombre, emp.apellido,ord.fechaord en, cli.clienteid, cli.nombrecia from ordenes ord, empleados emp, clientes cli where ord.empleadoid=emp.empleadoid andord.clienteid=cli.clienteid ;

/* 4.2 Mostrar la suma total de cada tipo de producto pedidos en todas las rdenes. (5) */

select * from detalle_ordenes; select productoid, sum(cantidad) as "Suma total" from detalle_ordenes group by productoid;

/* 4.3 Mostrar el nmero de rdenes atendidas por cada empleado, incluidos los que tienen 0 rdenes. (6) */

select * from empleados; select * from ordenes; select nombre as "Nombre" , apellido as "Apellido", count(ord.empleadoid) as "# de ordenes" from empleados emp left join ordenes ord on emp.empleadoid= ord.empleadoid group by nombre, apellido;

/* 4.4 Muestre los proveedores y la suma de dinero vendido en los productos de ese proveedor. (7) */

select * from proveedores; select * from productos; select * from detalle_ordenes;

select prov.nombreprov as "Nombre",sum(d.cantidad *prod.preciounit ) as " Suma dinero" from proveedores prov, productos prod, detalle_ordenes d where d.productoid= prod.productoid and prov.proveedorid=prod.proveedorid group by nombreprov;

/* 5. Realizar el siguiente procedimiento almacenado.

5.1 Escriba un procedimiento almacenado que reciba como parmetro un cdigo de proveedor y (8) devuelve el nmero de rdenes en las que estn incluidos productos de ese proveedor. */

DROP LANGUAGE IF EXISTS plpgsql; CREATE LANGUAGE plpgsql;

select * from productos; select * from ordenes; select * from detalle_ordenes;

create or replace function num_ordene_proveedor(idproo int)returns intege r as $$ declare num int; begin select count(p.productoid) into num from productos pjoin deta lle_ordenes dor on (p.productoid=dor.productoid)join ordenes ordon(ord.ordeni d=dor.ordenid) where proveedorid=idproo group by proveedorid; return num; end; $$ LANGUAGE plpgsql;

select num_ordene_proveedor(10)

/* 5.2 Escriba un procedimiento almacenado que reciba como parmetro un nombre de una categora y (9) devuelve el cdigo del producto de esa categora que tiene ms unidades vendidas. */

select * from categorias; select * from productos;

select * from detalle_ordenes;

create or replace function mas_vendido (nomCat character(50))returns inte ger as $$ declare num int; begin select p.productoid,sum(cantidad)INTO NUM fromproductos p joi n categorias c on (c.categoriaid=p.categoriaid) join detalle_ordenes dor on(p.productoid=dor.productoid) where c.nombrecat=nomCat group by descripcion, p.productoid order by sum DESC limit 1; return num; end; $$LANGUAGE 'plpgsql';

select mas_vendido('CARNICOS')

Segunda lista de comandos bsicos en consola psql PostgreSQL


Posted on 14 octubre, 2012 by Ramn Torres

En este post pretendo dar a conocer algunos comandos bsicos de PostgreSQL los cuales nos sern de gran ayuda, con estos comandos podremos hacer lo siguiente: listar bases de datos, selecionar una base de datos, ver la informacin de una base de datos, entre los ms sobresalientes, a continuacin la lista 1)El primer comando nos ensear como iniciar el cliente de psql en nuestra consola:
psql -U user -W -h host database

Ya hemos hablado un poco de este comando en otro post, dejo el link por si quieres ver en detalle cada parmetro: Primeros pasos en PosgreSQL 2)Nuestro segundo comando nos ayudara a saber la lista de nuestras bases de datos, el comando es:
\l

3)Seleccionar una base de datos o cambiar de base:


\c basename

4)Listar tablas de una base de datos:


\d

Si la lista es muy larga veremos que podemos movernos hacia abajo y luego para salir solo digitamos la letra q 5)Para ver la informacin de la estructura de una tabla en especifico:
\d table

6)Vaciar una tabla en especifico o el famoso TRUNCATE que conocemos:

TRUNCATE TABLE table RESTART IDENTITY

Con este comando borramos el contenido de una tabla y reiniciamos su indice sino agregamos RESTART IDENTITY nuestros indices no seran reiniciados y seguiran segn el ultimo registro. 7)Crear una base de datos:
CREATE DATABASE basename;

8)Borrar o eliminar una base de datos:


DROP DATABASE basename;

9)Borrar o eliminar una tabla en especifico:


DROP TABLE tablename;

10)Enviar resultados de una consulta a un archivo delimitado por |


COPY (SELECT * FROM tablename) TO '/home/tablename.csv' WITH DELIMITER '|';

Cabe mencionar que el archivo necesito permisos de escritura. 11)Uso de LIMIT y OFFSET
SELECT * FROM table LIMIT limit OFFSET offset;

Donde: limit: es nuestro limite de registros a mostrar offset: indica desde donde comenzaran a mostrarce los registros 12)Uso de comillas:
SELECT column FROM table WHERE column = 'value';

Generalmente podemos utilizar comillas dobles para nuestras columnas y comillas simples para nuestros valores, esto no es una regla pero a veces es necesario en casos especiales, tales como cuando ocupamos nombres reservados, por ejemplo: SELECT to FROM table; En este caso tenemos un campo llamado to, esto nos dar un error de sintaxis, por lo tanto tendremos que usar comillas dobles: SELECT to FROM table; 13)Salir del cliente psql:
\q

Bueno espero esta lista sea de ayuda para muchos como ha sido de ayuda para mi, a la ves agradezco a mi compaero Hugo Gilmar quien me di una gua de estos comandos que ahora comparto en este post
This entry was posted in postgres. Bookmark the permalink.

Вам также может понравиться