history.sgml 8 KB
Newer Older
1
<!--
2
$PostgreSQL: pgsql/doc/src/sgml/history.sgml,v 1.24 2005/01/08 01:44:05 tgl Exp $
3 4
-->

5
<sect1 id="history">
6
 <title>A Brief History of <productname>PostgreSQL</productname></title>
7

Peter Eisentraut's avatar
Peter Eisentraut committed
8 9 10 11 12
 <indexterm zone="history">
  <primary>history</primary>
  <secondary>of PostgreSQL</secondary>
 </indexterm>

13
 <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
14 15 16 17 18 19
  The object-relational database management system now known as
  <productname>PostgreSQL</productname> is derived from the
  <productname>POSTGRES</productname> package written at the
  University of California at Berkeley.  With over a decade of
  development behind it, <productname>PostgreSQL</productname> is now
  the most advanced open-source database available anywhere.
20 21
 </para>

Peter Eisentraut's avatar
Peter Eisentraut committed
22
 <sect2 id="history-berkeley">
Peter Eisentraut's avatar
Peter Eisentraut committed
23
  <title>The Berkeley <productname>POSTGRES</productname> Project</title>
24

Peter Eisentraut's avatar
Peter Eisentraut committed
25 26 27 28
  <indexterm zone="history-berkeley">
   <primary>POSTGRES</primary>
  </indexterm>

29
  <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
30 31 32 33 34 35 36 37 38 39 40 41
   The <productname>POSTGRES</productname> project, led by Professor
   Michael Stonebraker, was sponsored by the Defense Advanced Research
   Projects Agency (<acronym>DARPA</acronym>), the Army Research
   Office (<acronym>ARO</acronym>), the National Science Foundation
   (<acronym>NSF</acronym>), and ESL, Inc.  The implementation of
   <productname>POSTGRES</productname> began in 1986.  The initial
   concepts for the system were presented in <xref linkend="STON86">
   and the definition of the initial data model appeared in <xref
   linkend="ROWE87">.  The design of the rule system at that time was
   described in <xref linkend="STON87a">.  The rationale and
   architecture of the storage manager were detailed in <xref
   linkend="STON87b">.
42 43 44
  </para>

  <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
45 46 47 48 49 50 51 52 53 54 55 56 57
   <productname>POSTGRES</productname> has undergone several major
   releases since then.  The first <quote>demoware</quote> system
   became operational in 1987 and was shown at the 1988
   <acronym>ACM-SIGMOD</acronym> Conference.  Version 1, described in
   <xref linkend="STON90a">, was released to a few external users in
   June 1989.  In response to a critique of the first rule system
   (<xref linkend="STON89">), the rule system was redesigned (<xref
   linkend="STON90b">) and Version 2 was released in June 1990 with
   the new rule system.  Version 3 appeared in 1991 and added support
   for multiple storage managers, an improved query executor, and a
   rewritten rule system.  For the most part, subsequent releases
   until <productname>Postgres95</productname> (see below) focused on
   portability and reliability.
58 59 60
  </para>

  <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
   <productname>POSTGRES</productname> has been used to implement many
   different research and production applications.  These include: a
   financial data analysis system, a jet engine performance monitoring
   package, an asteroid tracking database, a medical information
   database, and several geographic information systems.
   <productname>POSTGRES</productname> has also been used as an
   educational tool at several universities.  Finally, Illustra
   Information Technologies (later merged into <ulink
   url="http://www.informix.com/"><productname>Informix</productname></ulink>,
   which is now owned by <ulink
   url="http://www.ibm.com/">IBM</ulink>.)  picked up the code and
   commercialized it.  In late 1992,
   <productname>POSTGRES</productname> became the primary data manager
   for the <ulink
   url="http://meteora.ucsd.edu/s2k/s2k_home.html">Sequoia
   2000</ulink> scientific computing project.
77 78 79
  </para>

  <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
80 81 82 83 84 85 86
   The size of the external user community nearly doubled during 1993.
   It became increasingly obvious that maintenance of the prototype
   code and support was taking up large amounts of time that should
   have been devoted to database research.  In an effort to reduce
   this support burden, the Berkeley
   <productname>POSTGRES</productname> project officially ended with
   Version 4.2.
87 88 89
  </para>
 </sect2>

Peter Eisentraut's avatar
Peter Eisentraut committed
90
 <sect2 id="history-postgres95">
91 92
  <title><productname>Postgres95</productname></title>

Peter Eisentraut's avatar
Peter Eisentraut committed
93 94 95 96
  <indexterm zone="history-postgres95">
   <primary>Postgres95</primary>
  </indexterm>

97
  <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
98 99
   In 1994, Andrew Yu and Jolly Chen added a SQL language interpreter
   to <productname>POSTGRES</productname>.  Under a new name,
100
   <productname>Postgres95</productname> was subsequently released to
Peter Eisentraut's avatar
Peter Eisentraut committed
101 102
   the web to find its own way in the world as an open-source
   descendant of the original <productname>POSTGRES</productname>
103 104 105 106
   Berkeley code.
  </para>

  <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
107 108 109 110 111 112 113
   <productname>Postgres95</productname> code was completely ANSI C
   and trimmed in size by 25%. Many internal changes improved
   performance and
   maintainability. <productname>Postgres95</productname> release
   1.0.x ran about 30-50% faster on the Wisconsin Benchmark compared
   to <productname>POSTGRES</productname>, Version 4.2.  Apart from
   bug fixes, the following were the major enhancements:
114 115 116 117

   <itemizedlist>
    <listitem>
     <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
118
      The query language PostQUEL was replaced with
Peter Eisentraut's avatar
Peter Eisentraut committed
119 120 121 122 123 124 125
      <acronym>SQL</acronym> (implemented in the server).  Subqueries
      were not supported until <productname>PostgreSQL</productname>
      (see below), but they could be imitated in
      <productname>Postgres95</productname> with user-defined
      <acronym>SQL</acronym> functions. Aggregate functions were
      re-implemented.  Support for the <literal>GROUP BY</literal>
      query clause was also added.
126 127 128 129 130
     </para>
    </listitem>

    <listitem>
     <para>
131
      A new program
Peter Eisentraut's avatar
Peter Eisentraut committed
132 133
      (<application>psql</application>) was provided for interactive
      SQL queries, which used <acronym>GNU</acronym>
134 135
      <application>Readline</application>.  This largely superseded
      the old <application>monitor</> program.
136 137 138 139 140
     </para>
    </listitem>

    <listitem>
     <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
141 142 143 144 145
      A new front-end library, <filename>libpgtcl</filename>,
      supported <acronym>Tcl</acronym>-based clients.  A sample shell,
      <command>pgtclsh</command>, provided new Tcl commands to
      interface <application>Tcl</application> programs with the
      <productname>Postgres95</productname> server.
146 147 148 149 150
     </para>
    </listitem>

    <listitem>
     <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
151 152 153
      The large-object interface was overhauled. The inversion large
      objects were the only mechanism for storing large objects.  (The
      inversion file system was removed.)
154 155 156 157 158
     </para>
    </listitem>

    <listitem>
     <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
159 160
      The instance-level rule system was removed.  Rules were still
      available as rewrite rules.
161 162 163 164 165
     </para>
    </listitem>

    <listitem>
     <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
166 167 168 169
      A short tutorial introducing regular <acronym>SQL</acronym>
      features as well as those of
      <productname>Postgres95</productname> was distributed with the
      source code
170 171 172 173 174
     </para>
    </listitem>

    <listitem>
     <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
175 176 177 178 179
      <acronym>GNU</acronym> make (instead of <acronym>BSD</acronym>
      make) was used for the build.  Also,
      <productname>Postgres95</productname> could be compiled with an
      unpatched <productname>GCC</productname> (data alignment of
      doubles was fixed).
180 181 182 183 184 185 186 187 188 189
     </para>
    </listitem>
   </itemizedlist>
  </para>
 </sect2>

 <sect2>
  <title><productname>PostgreSQL</productname></title>

  <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
190 191
   By 1996, it became clear that the name <quote>Postgres95</quote>
   would not stand the test of time. We chose a new name,
192
   <productname>PostgreSQL</productname>, to reflect the relationship
Peter Eisentraut's avatar
Peter Eisentraut committed
193 194 195 196 197
   between the original <productname>POSTGRES</productname> and the
   more recent versions with <acronym>SQL</acronym> capability.  At
   the same time, we set the version numbering to start at 6.0,
   putting the numbers back into the sequence originally begun by the
   Berkeley <productname>POSTGRES</productname> project.
198 199 200
  </para>

  <para>
Peter Eisentraut's avatar
Peter Eisentraut committed
201 202 203 204 205 206
   The emphasis during development of
   <productname>Postgres95</productname> was on identifying and
   understanding existing problems in the server code.  With
   <productname>PostgreSQL</productname>, the emphasis has shifted to
   augmenting features and capabilities, although work continues in
   all areas.
207 208 209
  </para>

  <para>
210 211
   Details about what has happened in <productname>PostgreSQL</> since
   then can be found in <xref linkend="release">.
212 213
  </para>
 </sect2>
214
</sect1>