Habiendo cubierto los aspectos básicos de Postgre SQLpara acceder a los datos, discutiremos ahora aquellas características de Postgres que los distinguen de los administradores de datos convecionales. Estas características incluyen herencia, time travel (viaje en el tiempo) y valores no-atómicos de datos (atributos basados en vectores y conjuntos). Los ejemplos de esta sección pueden encontrarse también en advance.sql en el directorio del tutorial. (Consulte el Capítulo 64 para ver la forma de utilizarlo).
Creemos dos clases. La clase capitals contiene las capitales de los estados, las cuales son también ciudades. Naturalmente, la clase capitals debería heredar de cities.
CREATE TABLE cities ( name text, population float, altitude int -- (in ft) ); CREATE TABLE capitals ( state char(2) ) INHERITS (cities);En este caso, una instancia de capitals hereda todos los atributos (name, population y altitude) de su padre, cities. El tipo del atributo name (nombre) es text, un tipo nativo de Postgres para cadenas ASCII de longitud variable. El tipo del atributo population (población) es float, un tipo de datos, también nativo de Postgres , para números de punto flotante de doble precisión. Las capitales de los estados tiene un atributo extra, state, 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 jerarquía de la herencia es un gráfico acíclico dirigido.
SELECT name, altitude FROM cities WHERE altitude > 500; +----------+----------+ |name | altitude | +----------+----------+ |Las Vegas | 2174 | +----------+----------+ |Mariposa | 1953 | +----------+----------+
Por otro lado, para encontrar los nombres de todas las ciudades, incluídas las capitales estatales, que estén situadas a una altitud de 500 o más pies, la consulta es:
SELECT c.name, c.altitude FROM cities* c WHERE c.altitude > 500;which returns:
+----------+----------+ |name | altitude | +----------+----------+ |Las Vegas | 2174 | +----------+----------+ |Mariposa | 1953 | +----------+----------+ |Madison | 845 | +----------+----------+Aquí el "*" después de cities indica que la consulta debe realizarse sobre cities y todas las clases que estén por debajo de ella en la jerarquía de la herencia. Muchos de los comandos que ya hemos discutido (select, and>upand> and delete) brindan soporte a esta notación de "*" al igual que otros como alter.