Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/inherit.sgml')
-rw-r--r--doc/src/sgml/inherit.sgml87
1 files changed, 87 insertions, 0 deletions
diff --git a/doc/src/sgml/inherit.sgml b/doc/src/sgml/inherit.sgml
new file mode 100644
index 00000000000..be2bcfa237f
--- /dev/null
+++ b/doc/src/sgml/inherit.sgml
@@ -0,0 +1,87 @@
+<Chapter>
+<Title>Inheritance</Title>
+
+<Para>
+ Let's create two classes. The capitals class contains
+ state capitals which are also cities. Naturally, the
+ capitals class should inherit from cities.
+
+<ProgramListing>
+CREATE TABLE cities (
+ name text,
+ population float,
+ altitude int -- (in ft)
+);
+
+CREATE TABLE capitals (
+ state char2
+) INHERITS (cities);
+</ProgramListing>
+
+ In this case, an instance of capitals <FirstTerm>inherits</FirstTerm> all
+ attributes (name, population, and altitude) from its
+ parent, cities. The type of the attribute name is
+ <Type>text</Type>, a native <ProductName>Postgres</ProductName> type for variable length
+ ASCII strings. The type of the attribute population is
+ <Type>float</Type>, a native <ProductName>Postgres</ProductName> type for double precision
+ floating point numbers. State capitals have an extra
+ attribute, state, that shows their state. In <ProductName>Postgres</ProductName>,
+ a class can inherit from zero or more other classes,
+ and a query can reference either all instances of a
+ class or all instances of a class plus all of its
+ descendants.
+<Note>
+<Para>
+The inheritance hierarchy is a actually a directed acyclic graph.
+</Para>
+</Note>
+For example, the following query finds
+ all the cities that are situated at an attitude of 500ft or higher:
+
+<ProgramListing>
+SELECT name, altitude
+ FROM cities
+ WHERE altitude &gt; 500;
+
++----------+----------+
+|name | altitude |
++----------+----------+
+|Las Vegas | 2174 |
++----------+----------+
+|Mariposa | 1953 |
++----------+----------+
+</ProgramListing>
+
+<Para>
+ On the other hand, to find the names of all cities,
+ including state capitals, that are located at an altitude
+ over 500ft, the query is:
+
+<ProgramListing>
+SELECT c.name, c.altitude
+ FROM cities* c
+ WHERE c.altitude > 500;
+</ProgramListing>
+
+ which returns:
+
+<ProgramListing>
++----------+----------+
+|name | altitude |
++----------+----------+
+|Las Vegas | 2174 |
++----------+----------+
+|Mariposa | 1953 |
++----------+----------+
+|Madison | 845 |
++----------+----------+
+</ProgramListing>
+
+ Here the <Quote>*</Quote> after cities indicates that the query should
+ be run over cities and all classes below cities in the
+ inheritance hierarchy. Many of the commands that we
+ have already discussed -- <Command>select</Command>, <Command>update</Command> and <Command>delete</Command> --
+ support this <Quote>*</Quote> notation, as do others, like <Command>alter</Command>.
+</Para>
+
+</Chapter>