Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit59bb41a

Browse files
committed
Import of PostgreSQL User Manual
1 parentf02bd93 commit59bb41a

22 files changed

+4701
-0
lines changed

‎doc/manual/admin.html

Lines changed: 539 additions & 0 deletions
Large diffs are not rendered by default.

‎doc/manual/advanced.html

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
<HTML>
2+
<HEAD>
3+
<TITLE>The POSTGRES95 User Manual - ADVANCED POSTGRES SQL FEATURES</TITLE>
4+
</HEAD>
5+
6+
<BODY>
7+
8+
<fontsize=-1>
9+
<AHREF="pg95user.html">[ TOC ]</A>
10+
<AHREF="query.html">[ Previous ]</A>
11+
<AHREF="extend.html">[ Next ]</A>
12+
</font>
13+
<HR>
14+
<H1>5. ADVANCED POSTGRES<B>SQL</B> FEATURES</H1>
15+
<HR>
16+
Having covered the basics of using POSTGRES<B>SQL</B> to
17+
access your data, we will now discuss those features of
18+
POSTGRES that distinguish it from conventional data
19+
managers. These features include inheritance, time
20+
travel and non-atomic data values (array- and
21+
set-valued attributes).
22+
Examples in this section can also be found in
23+
<CODE>advance.sql</CODE> in the tutorial directory. (Refer to the
24+
introduction of the<AHREF="query.html">previous chapter</A> for how to use
25+
it.)
26+
27+
<H2><ANAME="inheritance">5.1. Inheritance</A></H2>
28+
Let's create two classes. The capitals class contains
29+
state capitals which are also cities. Naturally, the
30+
capitals class should inherit from cities.
31+
32+
<pre> CREATE TABLE cities (
33+
name text,
34+
population float,
35+
altitude int -- (in ft)
36+
);
37+
38+
CREATE TABLE capitals (
39+
state char2
40+
) INHERITS (cities);
41+
</pre>
42+
In this case, an instance of capitals<B>inherits</B> all
43+
attributes (name, population, and altitude) from its
44+
parent, cities. The type of the attribute name is
45+
<B>text</B>, a built-in POSTGRES type for variable length
46+
ASCII strings. The type of the attribute population is
47+
<B>float4</B>, a built-in POSTGRES type for double precision
48+
floating point numbres. State capitals have an extra
49+
attribute, state, that shows their state. In POSTGRES,
50+
a class can inherit from zero or more other classes,<AHREF="#4"><fontsize=-1>[4]</font></A>
51+
and a query can reference either all instances of a
52+
class or all instances of a class plus all of its
53+
descendants. For example, the following query finds
54+
all the cities that are situated at an attitude of 500
55+
'ft or higher:
56+
57+
<pre> SELECT name, altitude
58+
FROM cities
59+
WHERE altitude &gt; 500;
60+
61+
62+
+----------+----------+
63+
|name | altitude |
64+
+----------+----------+
65+
|Las Vegas | 2174 |
66+
+----------+----------+
67+
|Mariposa | 1953 |
68+
+----------+----------+
69+
</pre>
70+
On the other hand, to find the names of all cities,
71+
including state capitals, that are located at an altitude
72+
over 500 'ft, the query is:
73+
74+
<pre> SELECT c.name, c.altitude
75+
FROM cities&#42; c
76+
WHERE c.altitude &gt; 500;
77+
</pre>
78+
which returns:
79+
80+
<pre> +----------+----------+
81+
|name | altitude |
82+
+----------+----------+
83+
|Las Vegas | 2174 |
84+
+----------+----------+
85+
|Mariposa | 1953 |
86+
+----------+----------+
87+
|Madison | 845 |
88+
+----------+----------+
89+
</pre>
90+
Here the &#42; after cities indicates that the query should
91+
be run over cities and all classes below cities in the
92+
inheritance hierarchy. Many of the commands that we
93+
have already discussed -- select, update and delete --
94+
support this &#42; notation, as do others, like alter command.
95+
96+
<H2><ANAME="time-travel">5.2. Time Travel</A></H2>
97+
POSTGRES supports the notion of time travel. This feature
98+
allows a user to run historical queries. For
99+
example, to find the current population of Mariposa
100+
city, one would query:
101+
102+
<pre> SELECT &#42; FROM cities WHERE name = 'Mariposa';
103+
104+
+---------+------------+----------+
105+
|name | population | altitude |
106+
+---------+------------+----------+
107+
|Mariposa | 1320 | 1953 |
108+
+---------+------------+----------+
109+
</pre>
110+
POSTGRES will automatically find the version of Mariposa's
111+
record valid at the current time.
112+
One can also give a time range. For example to see the
113+
past and present populations of Mariposa, one would
114+
query:
115+
116+
<pre> SELECT name, population
117+
FROM cities['epoch', 'now']
118+
WHERE name = 'Mariposa';
119+
</pre>
120+
where "epoch" indicates the beginning of the system
121+
clock.<AHREF="#5"><fontsize=-1>[5]</font></A> If you have executed all of the examples so
122+
far, then the above query returns:
123+
124+
<pre> +---------+------------+
125+
|name | population |
126+
+---------+------------+
127+
|Mariposa | 1200 |
128+
+---------+------------+
129+
|Mariposa | 1320 |
130+
+---------+------------+
131+
</pre>
132+
The default beginning of a time range is the earliest
133+
time representable by the system and the default end is
134+
the current time; thus, the above time range can be
135+
abbreviated as ``[,].''
136+
137+
<H2><ANAME="non-atomic-values">5.3. Non-Atomic Values</A></H2>
138+
One of the tenets of the relational model is that the
139+
attributes of a relation are atomic. POSTGRES does not
140+
have this restriction; attributes can themselves contain
141+
sub-values that can be accessed from the query
142+
language. For example, you can create attributes that
143+
are arrays of base types.
144+
145+
<H3><ANAME="arrays">5.3.1. Arrays</A></H3>
146+
POSTGRES allows attributes of an instance to be defined
147+
as fixed-length or variable-length multi-dimensional
148+
arrays. Arrays of any base type or user-defined type
149+
can be created. To illustrate their use, we first create a
150+
class with arrays of base types.
151+
152+
<pre> &#42; CREATE TABLE SAL_EMP (
153+
name text,
154+
pay_by_quarter int4[],
155+
schedule char16[][]
156+
);
157+
</pre>
158+
The above query will create a class named SAL_EMP with
159+
a<B>text</B> string (name), a one-dimensional array of<B>int4</B>
160+
(pay_by_quarter), which represents the employee's
161+
salary by quarter and a two-dimensional array of<B>char16</B>
162+
(schedule), which represents the employee's weekly
163+
schedule. Now we do some<B>INSERTS</B>s; note that when
164+
appending to an array, we enclose the values within
165+
braces and separate them by commas. If you know<B>C</B>,
166+
this is not unlike the syntax for initializing structures.
167+
168+
<pre> INSERT INTO SAL_EMP
169+
VALUES ('Bill',
170+
'{10000, 10000, 10000, 10000}',
171+
'{{"meeting", "lunch"}, {}}');
172+
173+
INSERT INTO SAL_EMP
174+
VALUES ('Carol',
175+
'{20000, 25000, 25000, 25000}',
176+
'{{"talk", "consult"}, {"meeting"}}');
177+
</pre>
178+
By default, POSTGRES uses the "one-based" numbering
179+
convention for arrays -- that is, an array of n elements starts with array[1] and ends with array[n].
180+
Now, we can run some queries on SAL_EMP. First, we
181+
show how to access a single element of an array at a
182+
time. This query retrieves the names of the employees
183+
whose pay changed in the second quarter:
184+
185+
<pre> &#42; SELECT name
186+
FROM SAL_EMP
187+
WHERE SAL_EMP.pay_by_quarter[1] &lt;&gt;
188+
SAL_EMP.pay_by_quarter[2];
189+
190+
+------+
191+
|name |
192+
+------+
193+
|Carol |
194+
+------+
195+
</pre>
196+
This query retrieves the third quarter pay of all
197+
employees:
198+
199+
<pre> &#42; SELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP;
200+
201+
202+
+---------------+
203+
|pay_by_quarter |
204+
+---------------+
205+
|10000 |
206+
+---------------+
207+
|25000 |
208+
+---------------+
209+
</pre>
210+
We can also access arbitrary slices of an array, or
211+
subarrays. This query retrieves the first item on
212+
Bill's schedule for the first two days of the week.
213+
214+
<pre> &#42; SELECT SAL_EMP.schedule[1:2][1:1]
215+
FROM SAL_EMP
216+
WHERE SAL_EMP.name = 'Bill';
217+
218+
+-------------------+
219+
|schedule |
220+
+-------------------+
221+
|{{"meeting"},{""}} |
222+
+-------------------+
223+
224+
</pre>
225+
<p>
226+
<HR>
227+
<ANAME="4"><B>4.</B></A> i.e., the inheritance hierarchy is a directed acyclic
228+
graph.<br>
229+
<ANAME="5"><B>5.</B></A> On UNIX systems, this is always midnight, January 1,
230+
1970 GMT.<br>
231+
<HR>
232+
<fontsize=-1>
233+
<AHREF="pg95user.html">[ TOC ]</A>
234+
<AHREF="query.html">[ Previous ]</A>
235+
<AHREF="extend.html">[ Next ]</A>
236+
</font>
237+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp