]> granicus.if.org Git - postgresql/blob - doc/src/sgml/history.sgml
8fd14b01681bb62e88a94d74f5e2bc57b4e54aaa
[postgresql] / doc / src / sgml / history.sgml
1 <!--
2 $Header: /cvsroot/pgsql/doc/src/sgml/history.sgml,v 1.8 2000/05/02 20:01:51 thomas Exp $
3 -->
4
5 <sect1>
6  <title>A Short History of <productname>Postgres</productname></title>
7
8  <para>
9   The Object-Relational Database Management System now known as 
10   <productname>PostgreSQL</productname> (and briefly called
11   <productname>Postgres95</productname>) is derived from the
12   <productname>Postgres</productname> package written at Berkeley.
13   With over a decade of
14   development behind it, <productname>PostgreSQL</productname> 
15   is the most advanced open-source database available anywhere,
16   offering multi-version concurrency control, supporting almost
17   all SQL constructs (including subselects, transactions, and
18   user-defined types and functions), and having a wide range of
19   language bindings available (including C, C++, Java, perl, tcl, and python).
20  </para>
21
22  <sect2>
23   <title>The Berkeley <productname>Postgres</productname> Project</title>
24
25   <para>
26    Implementation of the <productname>Postgres</productname> 
27    <acronym>DBMS</acronym> began in 1986.  The
28    initial  concepts  for  the  system  were  presented in
29    <xref endterm="STON86-full" linkend="STON86">
30    and the definition of the initial  data  model
31    appeared in 
32    <xref endterm="ROWE87-full" linkend="ROWE87">.
33    The design of the rule system at
34    that time was described in  
35    <xref endterm="STON87a-full" linkend="STON87a">.
36    The  rationale
37    and  architecture  of the storage manager were detailed in 
38    <xref endterm="STON87b-full" linkend="STON87b">.
39   </para>
40
41   <para>
42    <productname>Postgres</productname> has undergone  several  major  releases  since
43    then.   The  first "demoware" system became operational
44    in 1987 and was shown at the  1988  <acronym>ACM-SIGMOD</acronym>  
45    Conference.   We  released Version 1, described in 
46    <xref endterm="STON90a-full" linkend="STON90a">,
47    to a few external users in June 1989.  In response to a
48    critique  of  the  first rule system 
49    (<xref endterm="STON89-full" linkend="STON89">), 
50    the rule
51    system was  redesigned 
52    (<xref endterm="STON90b-full" linkend="STON90b">)
53    and  Version  2  was
54    released  in  June 1990 with the new rule system.  
55    Version 3 appeared in 1991 and added support for  multiple
56    storage  managers,  an  improved  query executor, and a
57    rewritten rewrite rule  system.   For  the  most  part,
58    releases  until <productname>Postgres95</productname> (see below)
59    focused on portability and reliability.
60   </para>
61
62   <para>
63    <productname>Postgres</productname> has been  used
64    to  implement  many  different
65    research and production applications.  These include: a
66    financial data analysis system, a  jet  engine  
67    performance   monitoring   package,   an   asteroid  tracking
68    database, a medical information database,  and  several
69    geographic information systems.  
70    <productname>Postgres</productname> has also been
71    used as an educational tool  at  several  universities.
72    Finally,  
73    <ulink url="http://www.illustra.com/">Illustra  Information  Technologies</ulink>
74    (since merged into
75    <ulink url="http://www.informix.com/">Informix</ulink>)
76    picked up
77    the code and commercialized it.
78    <productname>Postgres</productname>  became  the  primary  data  manager
79    for  the
80    <ulink url="http://www.sdsc.edu/0/Parts_Collabs/S2K/s2k_home.html">Sequoia 2000</ulink>
81    scientific computing project in late 1992.
82   </para>
83
84   <para>
85    The size of the  external  user  community
86    nearly  doubled  during  1993.   It became increasingly
87    obvious that maintenance of the prototype code and 
88    support  was  taking  up large amounts of time that should
89    have been devoted to database research.  In  an  effort
90    to  reduce  this support burden, the project officially
91    ended with Version 4.2.
92   </para>
93  </sect2>
94
95  <sect2>
96   <title><productname>Postgres95</productname></title>
97
98   <para>
99    In 1994,
100    <ulink url="mailto:ayu@informix.com">Andrew Yu</ulink>
101    and
102    <ulink url="http://http.cs.berkeley.edu/~jolly/">Jolly Chen</ulink>
103    added a SQL language interpreter to <productname>Postgres</productname>.
104    <productname>Postgres95</productname> was subsequently released to
105    the Web to find its own way in the world as an
106    open-source descendant of the original <productname>Postgres</productname>
107    Berkeley code.
108   </para>
109
110   <para>
111    <productname>Postgres95</productname> code was completely
112    ANSI C and trimmed in size by 25%. Many
113    internal changes improved performance and maintainability. 
114    <productname>Postgres95</productname> v1.0.x ran about  30-50%
115    faster  on  the  Wisconsin  Benchmark compared to 
116    <productname>Postgres</productname> v4.2.
117    Apart from bug fixes, these were the major enhancements:
118
119    <itemizedlist>
120     <listitem>
121      <para>
122       The query language <productname>Postquel</productname> was replaced with
123       <acronym>SQL</acronym> (implemented in the server).
124       Subqueries were not supported until
125       <productname>PostgreSQL</productname> (see below), but they
126       could be imitated in <productname>Postgres95</productname> with user-defined
127       <acronym>SQL</acronym> functions. Aggregates were
128       re-implemented.  Support for the GROUP BY query clause was also added.
129       The <filename>libpq</filename> interface remained
130       available  for  <acronym>C</acronym>  
131       programs.
132      </para>
133     </listitem>
134
135     <listitem>
136      <para>
137       In addition to the monitor program, a new program
138       (<application>psql</application>) was provided for interactive SQL queries
139       using <acronym>GNU</acronym> <filename>readline</filename>.
140      </para>
141     </listitem>
142
143     <listitem>
144      <para>
145       A new  front-end  library,  <filename>libpgtcl</filename>,
146       supported  <acronym>Tcl</acronym>-based  clients.   A sample shell, 
147       pgtclsh, provided new Tcl  commands  to  interface
148       <application>tcl</application>
149       programs with the <productname>Postgres95</productname> backend.
150      </para>
151     </listitem>
152
153     <listitem>
154      <para>
155       The  large  object interface was overhauled. The Inversion large objects were
156       the  only  mechanism for  storing  large objects.
157       (The Inversion file system was removed.)
158      </para>
159     </listitem>
160
161     <listitem>
162      <para>
163       The  instance-level  rule  system  was removed.
164       Rules were still available as rewrite rules.
165      </para>
166     </listitem>
167
168     <listitem>
169      <para>
170       A short tutorial introducing regular <acronym>SQL</acronym> features as
171       well as those of <productname>Postgres95</productname> was
172       distributed with the source code.
173      </para>
174     </listitem>
175
176     <listitem>
177      <para>
178       <acronym>GNU</acronym> make (instead of  <acronym>BSD</acronym>  make)  was  used
179       for  the build.  Also,  <productname>Postgres95</productname>  could  be
180       compiled with an unpatched <productname>gcc</productname>
181       (data alignment of  doubles  was fixed).
182      </para>
183     </listitem>
184    </itemizedlist>
185   </para>
186  </sect2>
187
188  <sect2>
189   <title><productname>PostgreSQL</productname></title>
190
191   <para>
192    By 1996, it became clear that the name "Postgres95" would
193    not stand the test of time. We chose a new name,
194    <productname>PostgreSQL</productname>, to reflect the relationship
195    between the original <productname>Postgres</productname> and the more
196    recent versions with <acronym>SQL</acronym> capability.  At the same
197    time, we set the version numbering to start at 6.0, putting the
198    numbers back into the sequence originally begun by the
199    <productname>Postgres</productname> Project.
200   </para>
201
202   <para>
203    The emphasis during development of <productname>Postgres95</productname>
204    was on identifying and understanding existing problems in the backend code.
205    With <productname>PostgreSQL</productname>, 
206    the emphasis has shifted to augmenting features and capabilities, although
207    work continues in all areas.
208   </para>
209
210   <para>
211    Major enhancements in <productname>PostgreSQL</productname> include:
212   </para>
213
214   <itemizedlist>
215    <listitem>
216     <para>
217      Table-level locking has been replaced with multi-version concurrency control,
218      which allows readers to continue reading consistent data during writer activity
219      and enables hot backups from pg_dump while the database stays available for
220      queries.
221     </para>
222    </listitem>
223
224    <listitem>
225     <para>
226      Important backend features, including subselects, defaults, 
227      constraints, and triggers, have been implemented.
228     </para>
229    </listitem>
230
231    <listitem>
232     <para>
233      Additional <acronym>SQL92</acronym>-compliant language features have been added,
234      including primary keys, quoted identifiers, literal string type coercion,
235      type casting, and binary and hexadecimal integer input.
236     </para>
237    </listitem>
238
239    <listitem>
240     <para>
241      Built-in types have been improved, including new wide-range date/time types 
242      and additional geometric type support.
243     </para>
244    </listitem>
245
246    <listitem>
247     <para>
248      Overall backend code speed has been increased by approximately 20-40%, 
249      and backend startup time has decreased 80% since v6.0 was released.
250     </para>
251    </listitem>
252   </itemizedlist>
253  </sect2>
254 </sect1>
255
256 <!-- Keep this comment at the end of the file
257 Local variables:
258 mode:sgml
259 sgml-omittag:nil
260 sgml-shorttag:t
261 sgml-minimize-attributes:nil
262 sgml-always-quote-attributes:t
263 sgml-indent-step:1
264 sgml-indent-data:t
265 sgml-parent-document:nil
266 sgml-default-dtd-file:"./reference.ced"
267 sgml-exposed-tags:nil
268 sgml-local-catalogs:("/usr/lib/sgml/catalog")
269 sgml-local-ecat-files:nil
270 End:
271 -->