Você está na página 1de 13

POSTGRESQL ORIENTADO A OBJETOS

INTRODUCCION
PostgreSQL: Sistema de gestin de base de datos relacional orientada a objetos de software libre, publicado bajo la licencia BSD. Como muchos otros proyectos open source, el desarrollo de PostgreSQL no es manejado por una sola compaa sino que es dirigido por una comunidad de desarrolladores y organizaciones comerciales las cuales trabajan en su desarrollo. Dicha comunidad es denominada el PGDG (PostgreSQL Global Development Group). Tipo de licencia: Licencia BSD: es la licencia de software otorgada principalmente para los sistemas BSD (Berkeley Software Distribution). Pertenece al grupo de licencias de software Libre. Esta licencia tiene menos restricciones en comparacin con otras como la GPL estando muy cercana al dominio pblico. La licencia BSD al contrario que la GPL permite el uso del cdigo fuente en software no libre. Bajo esta licencia, el autor mantiene la proteccin de copyright nicamente para la renuncia de garanta y para requerir la adecuada atribucin de la autora en trabajos derivados, pero permite la libre redistribucin y modificacin. Puede argumentarse que esta licencia asegura verdadero software libre, en el sentido que el usuario tiene libertad ilimitada con respecto al software, y que puede decidir incluso redistribuirlo como no libre. Principales caractersticas: 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. Integridad de los datos: claves primarias, llaves forneas con capacidad de actualizar en cascada o restringir la accin y restriccin not null. Resistencia a fallas. Escritura adelantada de registros (WAL) para evitar prdidas de datos en caso de fallos por: Energa, Sistema Operativo, Hardware. Multi Linux, Unix, BSD's, Mac OS X, Solaris, AIX, Irix, HP-UX, Windows. PITR. Puntos de recuperacin en el tiempo. Tablespaces. (Ubicaciones alternativas para los datos) Replicacin sncrona y asincrnica. Cumple con factores que determinan la calidad del software. (ISO 9126-1) Caractersticas operativas: Correccin, Fiabilidad, Eficiencia, Integridad, Facilidad de uso. Capacidad para soportar cambios: Facilidad de mantenimiento, Flexibilidad, Facilidad de prueba. Requerimientos de hardware: Realmente PostgreSQL no tiene requerimientos especficos de hardware. Se considera suficiente con satisfacer los requerimientos recomendados para instalar el sistema operativo que se vaya a utilizar. Como mismo se pude realizar todo el desarrollo con un servidor Pentium IV de 1.7 MHz y 1 GB de RAM con Red Hat Linux 8.0, para una mnima cantidad de usuarios, tambin podemos emplear recursos de hardware distribuidos para una BD considerablemente grande. Naturalmente, si se desea que el sistema ofrezca servicio a un nmero relativamente grande de usuarios concurrentes habr que tener este factor en cuenta a la hora de elegir el hardware ms apropiado de acuerdo a nuestras necesidades. Principales funcionalidades: Bloques de cdigo que se ejecutan en el servidor. Pueden ser escritos en varios lenguajes, con

la potencia que cada uno de ellos ofrece, desde las operaciones bsicas de programacin, tales como bifurcaciones y bucles, hasta las complejidades de la programacin orientada a objetos o la programacin funcional. Los disparadores (triggers en ingls) son funciones enlazadas a operaciones sobre los datos. Algunos de los lenguajes que se pueden usar son los siguientes: Un lenguaje propio llamado [PL/PgSQL (similar al PL/SQL de Oracle), C, C++, Gambas, Java, Perl, PHP, Python, Ruby PostgreSQL soporta funciones que retornan "filas", donde la salida puede tratarse como un conjunto de valores que pueden ser tratados igual a una fila retornada por una consulta (query en ingls). Las funciones pueden ser definidas para ejecutarse con los derechos del usuario ejecutor o con los derechos de un usuario previamente definido. El concepto de funciones, en otros DBMS, son muchas veces referidas como "procedimientos almacenados" (stored procedures en ingls).

VENTAJAS DE POSTGRESQL
Respecto a otros sistemas de bases de datos: Instalacin ilimitada: Es frecuente que las bases de datos comerciales sean instaladas en ms servidores de lo que permite la licencia. Algunos proveedores comerciales consideran a esto la principal fuente de incumplimiento de licencia. Con PostgreSQL, nadie puede demandarlo por violar acuerdos de licencia, puesto que no hay costo asociado a la licencia del software. Mejor soporte que los proveedores comerciales: Adems de nuestras ofertas de soporte, tenemos una importante comunidad de profesionales y entusiastas de PostgreSQL de los que su compaa puede obtener beneficios y contribuir. Ahorros considerables en costos de operacin: Nuestro software ha sido diseado y creado para tener un mantenimiento y ajuste mucho menor que los productos de los proveedores comerciales, conservando todas las caractersticas, estabilidad y rendimiento. Adems de esto, nuestros programas de entrenamiento son reconocidamente mucho ms costo-efectivos, manejables y prcticos en el mundo real que aquellos de los principales proveedores comerciales. 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 respuesta ms eficiente en

ambientes de grandes volmenes. Los principales proveedores de sistemas de bases de datos comerciales usan tambin esta tecnologa, por las mismas razones.

DESVENTAJAS DE POSTGRESQL
Consume gran cantidad de recursos. Tiene un lmite de 8K por fila, aunque se puede aumentar a 32K, con una disminucin considerable del rendimiento. 3. Es de 2 a 3 veces ms lento que MySQL. 4. Menos funciones en PHP.

BREVE COMPARACIN DE POSTGRESQL CON MYSQL


Como conclusin a la comparacin entre MySQL y PostgresSQL, podemos decir que MySQL junto con Apache y PHP forman un buen equipo para servir pginas web con contenido dinmico, discusiones, noticias, etc. En general, MySQL se considera ms eficiente para sistemas en los que la velocidad y el nmero de accesos concurrentes sea algo primordial, y la seguridad no sea muy importante. En cambio, para sistemas ms serios en las que la consistencia de la base de datos sea fundamental (BD con informacin realmente importante, bancos, agencias gubernamentales, etc.) PostgreSQL es una mejor opcin pese a su mayor lentitud. Ninguno de estos dos gestores es totalmente perfecto, por lo que no hay que obsesionarse en la eleccin nica y fantica, como se suele hacer en muchos casos. Simplemente se trata de escoger el ms conveniente en cada caso.

INICIANDO CON POSTRESQL


CREACIN DE UNA BASE DE DATOS
Digamos que quiere crear una base de datos llamada pruebas. Puede hacerlo con la siguiente orden: % createdb pruebas Si no cuenta con los privilegios requeridos para crear bases de datos, ver lo siguiente: % createdb mydb NOTICE:user "su nombre de usuario" is not allowed to create/destroy databases createdb: database creation failed on pruebas. Postgres le permite crear cualquier nmero de bases de datos en un sistema dado y automticamente ser el administrador de la base de datos que cre. Los nombres de las bases de datos deben comenzar por un carcter alfabtico y estn limitados a una longitud de 32 caracteres. No todos los usuarios estn autorizados para ser administrador de una base de datos. Si Postgres le niega la creacin de bases de datos, seguramente es debido a que el administrador del sistema ha de otorgarle permisos para hacerlo. En ese caso, consulte al administrador del sistema.

ACCEDER A UNA BASE DE DATOS


Una vez que ha construido una base de datos, puede acceder a ella: Ejecutando los programas de monitorizacin de Postgres (por ejemplo psql) los cuales le permiten introducir, editar y ejecutar rdenes SQL interactivamente. Escribiendo un programa en C usando la librera de subrutinas LIBPQ, la cual le permite enviar rdenes SQL desde C y obtener mensajes de respuesta en su programa. Esta interfaz es discutida ms adelante en la Gua de Programadores de PostgreSQL. Puede que desee ejecutar psql, para probar los ejemplos en este manual. Lo puede activar para la base de datos pruebas escribiendo la orden: % psql pruebas Se le dar la bienvenida con el siguiente mensaje: Welcome to the POSTGRESQL interactive sql monitor: Please read the file COPYRIGHT for copyright terms of POSTGRESQL type \? for help on slash commands type \q to quit type \g or terminate with semicolon to execute query You are currently connected to the database: template1 mydb=> Este prompt indica que el monitor est listo y puede escribir sus consultas SQL dentro de un espacio de trabajo mantenido por el monitor. El programa psql responde a los cdigos de escape que empiezan por el carcter \. Por ejemplo, puede obtener la ayuda acerca de la sintaxis de varias rdenes SQL Postgres escribiendo: mydb=> \h

ELIMINANDO BASES DE DATOS


Si es el administrador de la base de datos mydb, puede eliminarla utilizando la siguiente orden Unix: % dropdb mydb Esta accin elimina fsicamente todos los archivos Unix asociados a la base de datos y no pueden recuperarse, as que deber hacerse con precaucin.

EL LENGUAJE SQL
Tenga en cuenta que las palabras clave y los identificadores son sensibles a las maysculas y minsculas. Los identificadores pueden llegar a ser sensibles a maysculas o minsculas si se les pone entre dobles comillas, tal como lo permite SQL92. Postgres SQL soporta los tipos habituales de SQL como: int, float, real, smallint, char(N), varchar(N), date, time, y timestamp, as como otros de tipo general y otros con un rico conjunto de tipos geomtricos. Tal como veremos ms tarde, Postgres puede ser configurado con un nmero arbitrario de tipos de datos definidos por el usuario. Consecuentemente, los nombres de tipo no son sintcticamente palabras clave, excepto donde se requiera para soportar casos especiales en el estndar SQL92.

Yendo ms lejos, el comando Postgres CREATE es idntico al comando usado para crear una tabla en el sistema relacional de siempre. Sin embargo, veremos que las clases tienen propiedades que son extensiones del modelo relacional.

LLENANDO UNA CLASE CON INSTANCIAS


La declaracin insert se usa para llenar una clase con instancias: INSERT INTO clima VALUES (Oaxaca, 46, 50, 0.25, 11/27/1994); Tambin puede usar el comando copy para cargar grandes cantidades de datos desde ficheros (ASCII) . Generalmente esto suele ser ms rpido porque los datos son ledos (o escritos) como una nica transaccin directamente a o desde la tabla destino. Un ejemplo sera: COPY clima FROM /home/user/clima.txt USING DELIMITERS |; donde el path del fichero origen debe ser accesible al servidor backend , no al cliente, ya que el servidor lee el fichero directamente Como en el caso de los ms modernos lenguajes relacionales, SQL est basado en el clculo relacional de tuplas. Como resultado, toda consulta formulada utilizando el clculo relacional de tuplas ( o su equivalente, el lgebra relacional) se pude formular tambin utilizando SQL. Hay, sin embargo, capacidades que van ms all del clculo o del lgebra relaciona. Aqu tenemos una lista de algunas caractersticas proporcionadas por SQL que no forman parte del lgebra y del clculo relacionales: Comandos para insercin, borrado o modificacin de datos. (SELECT, INSERT, DROP, DELETE, UPDATE). Capacidades aritmticas: En SQL es posible incluir operaciones aritmticas as como comparaciones, por ejemplo A < B + 3. Ntese que ni + ni otros operadores aritmticos aparecan en el lgebra relacional ni en clculo relacional. Asignacin y comandos de impresin: es posible imprimir una relacin construida por una consulta y asignar una relacin calculada a un nombre de relacin. Funciones agregadas: Operaciones tales como promedio (average), suma (sum), mximo (max), etc. se pueden aplicar a las columnas de una relacin para obtener una cantidad nica.

CONCEPTOS ORIENTADO A OBJETOS


La nocin fundamental en Postgres es la de clase, que es una coleccin de instancias de un objeto. Cada instancia tiene la misma coleccin de atributos y cada atributo es de un tipo especfico. Ms an, cada instancia tiene un identificador de objeto (OID) permanente, que es nico a lo largo de toda la instalacin. Ya que la sintaxis SQL hace referencia a tablas, usaremos los trminos tabla y clase indistintamente. Asimismo, una fila SQL es una instancia y las columnas SQL son atributos. Como ya se dijo anteriormente, las clases se agrupan en bases de datos y una coleccin de bases de datos gestionada por un nico proceso postmaster constituye una instalacin o sitio.

CREACIN DE UNA NUEVA CLASE


Puede crear una nueva clase especificando el nombre de la clase, adems de todos los nombres de atributo y sus tipos: CREATE TABLE clima ( ciudad varchar(80), temp_min int, - temperatura mnima temp_max int, - temperatura mxima prcp real, - precipitacin fecha date );

CONSULTAR A UNA CLASE


La clase clima puede ser consultada con una seleccin relacional normal y consultas de proyeccin. La declaracin SQL SELECT se usa para hacer esto. La declaracin se divide en una lista destino (la parte que lista los atributos que han de ser devueltos) y una cualificacin (la parte que especifica cualquier restriccin). Por ejemplo, para recuperar todas las filas de clima, escriba: SELECT * FROM clima; Y la salida debera ser: +---------+------+------+----+--------+ |ciudad | temp_min | temp_max | prcp | fecha | +---------+------+------+----+--------+ |Oaxaca| 6 | 25 | 0.25 | 11-27-2000 | +---------+------+------+----+--------+ |Oaxaca | 15 | 35 | 0 | 11-29-2000 | +---------+------+------+----+--------+ |Puebla | 3 | 14 | | 11-29-2000 | +---------+------+------+----+--------+ Puede especificar cualquier expresin en la lista de destino. Por ejemplo, puede hacer: SELECT ciudad, (temp_max+temp_min)/2 AS temp_prom, date FROM clima; Los operadores booleanos (and, or and not) ) se pueden usar en la cualificacin de cualquier consulta. Por ejemplo, SELECT * FROM clima WHERE ciudad = Oaxaca AND prcp > 0.0; da como resultado: +---------+------+------+----+--------+ |ciudad | temp_min | temp_max | prcp | fecha | +---------+------+------+----+--------+ |Oaxaca | 6 | 25 | 0.25 | 11-27-2000 | +---------+------+------+----+--------+ Como apunte final, puede especificar que los resultados de un select puedan ser devueltos de manera ordenada o quitando las instancias duplicadas. SELECT DISTINCT ciudad FROM clima ORDER BY ciudad;

REDIRECCIONAMIENTO DE CONSULTAS SELECT


Cualquier consulta select puede ser redireccionada a una nueva clase: SELECT * INTO TABLE temp FROM clima; Esto forma de manera implcita un comando create, crendose una nueva clase temp con el atributo nombres y tipos especificados en la lista destino del comando select into. Entonces podremos, por supuesto, realizar cualquier operacin sobre la clase resultante como lo haramos sobre cualquier otra clase.

JOINS (UNIONES) ENTRE CLASES


Hasta ahora, nuestras consultas slo accedan a una clase a la vez. Las consultas pueden acceder a mltiples clases a la vez, o acceder a la misma clase de tal modo que mltiples instancias de la clase sean procesadas al mismo tiempo. Una consulta que acceda a mltiples instancias de las mismas o diferentes clases a la vez se conoce como una consulta join. Como ejemplo, digamos que queremos encontrar todos los registros que estn en el rango de temperaturas de otros registros. En efecto, necesitamos comparar los atributos temp_min y temp_max de cada instancia EMP con los atributos temp_min y temp_max de todas las dems instancias EMP. Nota: Esto es slo un modelo conceptual. El verdadero join puede hacerse de una manera ms eficaz, pero esto es invisible para el usuario. Podemos hacer esto con la siguiente consulta: SELECT W1.ciudad, W1.temp_min AS baja, W1.temp_max AS alta, W2.ciudad, W2.temp_min AS baja, W2.temp_max AS alta FROM clima W1, clima W2 WHERE W1.temp_min < W2.temp_min AND W1.temp_max > W2.temp_max; +---------+---+----+----------+---+----+ |ciudad | baja | alta | ciudad | baja | alta | +---------+---+----+----------+---+----+ |Oaxaca | 43 | 57 | Oaxaca | 46 | 50 | +---------+---+----+----------+---+----+ |Oaxaca | 37 | 54 | Oaxaca | 46 | 50 | +---------+---+----+----------+---+----+ Nota: Los matices de este join estn en que la cualificacin es una expresin verdadera definida por el producto cartesiano de las clases indicadas en la consulta. Para estas instancias en el producto cartesiano cuya cualificacin sea verdadera, Postgres calcula y devuelve los valores especificados en la lista de destino. Postgres SQL no da ningn significado a los valores duplicados en este tipo de expresiones. Esto significa que Postgres en ocasiones recalcula la misma lista de destino varias veces. Esto ocurre frecuentemente cuando las expresiones booleanas se conectan con un "or". Para eliminar estos duplicados, debe usar la declaracin select distinct. En este caso, tanto W1 como W2 son sustituidos por una instancia de la clase clima y se extienden por todas las instancias de la clase. (En la terminologa de la mayora de los sistemas

de bases de datos W1 y W2 se conocen como range variables (variables de rango). Una consulta puede contener un nmero arbitrario de nombres de clases y sustituciones.

ACTUALIZACIONES
Puede actualizar instancias existentes usando el comando update. Suponga que descubre que la lectura de las temperaturas el 28 de Noviembre fue 2 grados superior a la temperatura real. Puede actualizar los datos de esta manera: UPDATE clima SET temp_max = temp_max - 2, temp_min = temp_min - 2 WHERE fecha > 11/28/1994;

BORRADOS
Los borrados se hacen usando el comando delete: DELETE FROM clima WHERE ciudad = Puebla; Todos los registros de clima pertenecientes a Puebla son borrados. Debera ser precavido con las consultas de la forma DELETE FROM classname; Sin una cualificacin, delete simplemente borrar todas las instancias de la clase dada, dejndola vaca. El sistema no pedir confirmacin antes de hacer esto.

USO DE FUNCIONES DE CONJUNTO


Como otros lenguajes de consulta, PostgreSQL soporta funciones de conjunto. Una funcin de conjunto calcula un nico resultado a partir de mltiples filas de entrada. Por ejemplo, existen funciones globales para calcular count(contar) ,sum (sumar), avg (media), max (mximo) and min (mnimo) sobre un conjunto de instancias. Es importante comprender la relacin entre las funciones de conjunto y las clusulas SQL where y having. La diferencia fundamental entre where y having es que: where selecciona las columnas de entrada antes de los grupos y entonces se computan las funciones de conjunto (de este modo controla qu filas van a la funcin de conjunto), mientras que having selecciona grupos de filas despus de los grupos y entonces se computan las funciones de conjunto. De este modo la clusula where puede no contener funciones de conjunto puesto que no tiene sentido intentar usar una funcin de conjunto para determinar qu fila ser la entrada de la funcin. Por otra parte, las clusulas having siempre contienen funciones de conjunto. (Estrictamente hablando, usted puede escribir una clusula having que no use funciones de grupo, pero no merece la pena. La misma condicin podra ser usada de un modo ms eficaz con where). Como ejemplo podemos buscar la mnima temperatura en cualquier parte con SELECT max(temp_min) FROM clima; Si queremos saber qu ciudad o ciudades donde se dieron estas temperaturas, podemos probar SELECT ciudad FROM clima WHERE temp_min = max(temp_min);

pero no funcionar debido a que la funcin max() no puede ser usada en where. Sin embargo, podemos replantar la consulta para llevar a cabo lo que buscamos. En este caso usando una subseleccion: SELECT ciudad FROM clima WHERE temp_min = (SELECT max(temp_min) FROM clima); Lo que ya es correcto, ya que la subseleccin es una operacin independiente que calcula su propia funcin de grupo sin importar lo que pase en el select exterior. Las funciones de grupo son tambin muy tiles combinndolas con clusulas group by. Por ejemplo, podemos obtener la temperatura mnima tomada en cada ciudad con: SELECT ciudad, max(temp_min) FROM clima GROUP BY ciudad; que nos devuelve una fila por ciudad. Podemos filtrar estas filas agrupadas usando having: SELECT ciudad, max(temp_min) FROM clima GROUP BY ciudad HAVING min(temp_min) < 0; que nos da los mismos resultados, pero de ciudades con temperaturas bajo cero. Finalmente, si slo nos interesan las ciudades cuyos nombres empiecen por P, deberamos hacer : SELECT ciudad, max(temp_min) FROM clima WHERE ciudad like P% GROUP BY ciudad HAVING min(temp_min) < 0; Tenga en cuenta que podemos aplicar la restriccin del nombre de ciudad en where, ya que no necesita funciones de conjunto. Esto es ms eficaz que aadir la restriccin a having, debido a que evitamos hacer los clculos de grupo para todas las filas que no pasan el filtro de where .

CARACTERSTICAS AVANZADAS DE SQL EN POSTGRES


Habiendo cubierto los aspectos bsicos de Postgre SQL para acceder a los datos, discutiremos ahora aquellas caractersticas de Postgres que los distinguen de los gestores de bases de datos convencionales. Estas caractersticas incluyen herencia, time travel (viaje en el tiempo) y valores no-atmicos de datos (atributos basados en vectores y conjuntos).

HERENCIA
Creemos dos clases. La clase capitales contiene las capitales de los estados, las cuales son tambin ciudades. Naturalmente, la clase capitales debera heredar de ciudades. CREATE TABLE ciudades ( nombre text, poblacion float, altitud int - (in ft) );

CREATE TABLE capitales ( estado char(2) ) INHERITS (ciudades); En este caso, una instancia de capitales hereda todos los atributos (nombre, poblacion y altitud) de su padre, ciudades. El tipo del atributo nombre es text, un tipo nativo de Postgres para cadenas ASCII de longitud variable. El tipo del atributo poblacin es float, un tipo de datos, tambin nativo de Postgres , para nmeros de punto flotante de doble precisin. La clase capitales tiene un atributo extra, estado, que muestra a qu estado pertenecen. En Postgres, una clase puede heredar de ninguna o varias otras clases, y una consulta puede hacer referencia tanto a todas las instancias de una clase como a todas las instancias de una clase y sus descendientes. Nota: La jerarqua de la herencia es un grfico acclico dirigido. Por ejemplo, la siguiente consulta encuentra todas aquellas ciudades que estn situadas a un altura de 500 o ms pies: SELECT nombre, altitud FROM ciudades WHERE altitud > 500; +-------+-------+ |nombre | altitud | +-------+-------+ |Las Vegas | 2174 | +-------+-------+ |Mariposa | 1953 | +-------+-------+ Por otro lado, para encontrar los nombres de todas las ciudades, includas las capitales estatales, que estn situadas a una altitud de 500 o ms pies, la consulta es: SELECT c.nombre, c.altitud FROM ciudades* c WHERE c.altitud > 500; which returns: +-------+-------+ |nombre | altitud | +-------+-------+ |Las Vegas | 2174 | +-------+-------+ |Mariposa | 1953 | +-------+-------+ |Madison | 845 | +-------+-------+ Aqu el * despus de ciudades indica que la consulta debe realizarse sobre ciudades y todas las clases que estn por debajo de ella en la jerarqua de la herencia. Muchos de los comandos que ya hemos discutido (select, and>up and> and delete) brindan soporte a esta notacin de * al igual que otros como alter.

VALORES NO-ATMICOS
Uno de los principios del modelo relacional es que los atributos de una relacin son atmicos Postgres no posee esta restriccin; los atributos pueden contener sub-valores a los que puede

accederse desde el lenguaje de consulta. Por ejemplo, se pueden crear atributos que sean vectores de alguno de los tipos base.

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 base. CREATE TABLE SAL_EMP ( nombre text, pago_por_quincena int4[], agenda text[][] ); La consulta de arriba crear una clase llamada SAL_EMP con una cadena del tipo text (nombre),un vector unidimensional del tipo int4 (pago_por_quincena), el cual representa el salario trimestral del empleado y un vector bidimensional del tipo text (agenda), que representa la agenda semanal del empleado. Ahora realizamos algunos INSERT; note que cuando agregamos valores a un 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. INSERT INTO SAL_EMP VALUES (Bill, {10000, 10000, 10000, 10000}, {{"entrevista", "lunch"}, {}}); INSERT INTO SAL_EMP VALUES (Carol, {20000, 25000, 25000, 25000}, {{"platica", "consulta"}, {"entrevista"}}); Postgres utiliza de forma predeterminada la convencin de vectores "basados en uno" es decir, un vector de n elementos comienza con vector[1] y termina con vector[n]. Ahora podemos ejecutar algunas consultas sobre SAL_EMP. Primero mostramos como acceder a un solo elemento del vector por vez. Esta consulta devuelve los nombres de los empleados cuyos pagos han cambiado en el segundo trimestre: SELECT name FROM SAL_EMP WHERE SAL_EMP.pago_por_quincena[1] <> SAL_EMP.pago_por_quincena[2]; +----+ |nombre | +----+ |Carol | +----+ La siguiente consulta recupera el pago del tercer trimestre de todos los empleados: SELECT SAL_EMP.pago_por_quincena[3] FROM SAL_EMP; +----------+ |pago_por_quincena | +----------+

|10000 | +----------+ |25000 | +----------+ Tambin podemos acceder a cualquier porcin de un vector, o subvectores. Esta consulta recupera el primer item de la agenda de Bill para los primeros dos das de la semana. SELECT SAL_EMP.agenda[1:2][1:1] FROM SAL_EMP WHERE SAL_EMP.nombre = Bill; +-------------+ |agenda | +-------------+ |{{"entrevista"},{""}} | +-------------+

MS CARACTERSTICAS AVANZADAS
Postgres posee muchas caractersticas que no se han visto en este tutorial, el cual ha sido orientado hacia usuarios nuevos de SQL. Las mencionadas caractersticas se discuten tanto en la Gua del Usuario como en la del Programador.

BIBLIOGRAFIA
http://www.postgresql.org/docs/books/awbook.html http://www.commandprompt.com/ppbook/ http://www.postgresql.org/docs/books/ http://wiki.postgresql.org/wiki/Database_Administration_and_Maintenance http://wiki.postgresql.org/wiki/Development_Articles http://wiki.postgresql.org/wiki/PostgreSQL_for_Enterprise_Business_Applications http://www.archonet.com/pgdocs/pgnotes.html The PostgreSQL Tutorial Introduction , The Tutorial , Editado por Thomas Lockhart, 1998-10-01, The PostgreSQL Global Development Group. The PostgreSQL Users Guide , The Users Guide , Editado por Thomas Lockhart, 1998-10-01, The PostgreSQL Global Development Group.

Você também pode gostar