]> granicus.if.org Git - postgresql/blob - doc/src/sgml/catalogs.sgml
3e098f75dedd73f0e2c505db6a8f424ddc5e8b1a
[postgresql] / doc / src / sgml / catalogs.sgml
1 <!--
2  Documentation of the system catalogs, directed toward PostgreSQL developers
3  $Header: /cvsroot/pgsql/doc/src/sgml/catalogs.sgml,v 2.29 2001/11/21 05:53:40 thomas Exp $
4  -->
5
6 <chapter id="catalogs">
7  <title>System Catalogs</title>
8
9  <sect1 id="catalogs-overview">
10   <title>Overview</title>
11
12   <para>
13    The system catalogs are the place where a relational database
14    management system stores schema metadata, such as information about
15    tables and columns, and internal bookkeeping information.
16    <productname>PostgreSQL</productname>'s system catalogs are regular
17    tables.  You can drop and recreate the tables, add columns, insert
18    and update values, and severely mess up your system that way.
19    Normally one should not change the system catalogs by hand, there
20    are always SQL commands to do that.  (For example, <command>CREATE
21    DATABASE</command> inserts a row into the
22    <structname>pg_database</structname> catalog -- and actually
23    creates the database on disk.)  There are some exceptions for
24    esoteric operations, such as adding index access methods.
25   </para>
26
27   <table>
28    <title>System Catalogs</title>
29
30    <tgroup cols="2">
31     <thead>
32      <row>
33       <entry>Catalog Name</entry>
34       <entry>Purpose</entry>
35      </row>
36     </thead>
37
38     <tbody>
39      <row>
40       <entry>pg_aggregate</entry>
41       <entry>aggregate functions</entry>
42      </row>
43
44      <row>
45       <entry>pg_am</entry>
46       <entry>index access methods</entry>
47      </row>
48
49      <row>
50       <entry>pg_amop</entry>
51       <entry>access method operators</entry>
52      </row>
53
54      <row>
55       <entry>pg_amproc</entry>
56       <entry>access method support procedures</entry>
57      </row>
58
59      <row>
60       <entry>pg_attrdef</entry>
61       <entry>column default values</entry>
62      </row>
63
64      <row>
65       <entry>pg_attribute</entry>
66       <entry>table columns (<quote>attributes</quote>, <quote>fields</quote>)</entry>
67      </row>
68
69      <row>
70       <entry>pg_class</entry>
71       <entry>tables, indexes, sequences (<quote>relations</quote>)</entry>
72      </row>
73
74      <row>
75       <entry>pg_database</entry>
76       <entry>databases within this database cluster</entry>
77      </row>
78
79      <row>
80       <entry>pg_description</entry>
81       <entry>descriptions or comments on database objects</entry>
82      </row>
83
84      <row>
85       <entry>pg_group</entry>
86       <entry>groups of database users</entry>
87      </row>
88
89      <row>
90       <entry>pg_index</entry>
91       <entry>additional index information</entry>
92      </row>
93
94      <row>
95       <entry>pg_inherits</entry>
96       <entry>table inheritance hierarchy</entry>
97      </row>
98
99      <row>
100       <entry>pg_language</entry>
101       <entry>languages for writing functions</entry>
102      </row>
103
104      <row>
105       <entry>pg_largeobject</entry>
106       <entry>large objects</entry>
107      </row>
108
109      <row>
110       <entry>pg_listener</entry>
111       <entry>asynchronous notification</entry>
112      </row>
113
114      <row>
115       <entry>pg_opclass</entry>
116       <entry>index access method operator classes</entry>
117      </row>
118
119      <row>
120       <entry>pg_operator</entry>
121       <entry>operators</entry>
122      </row>
123
124      <row>
125       <entry>pg_proc</entry>
126       <entry>functions and procedures</entry>
127      </row>
128
129      <row>
130       <entry>pg_relcheck</entry>
131       <entry>check constraints</entry>
132      </row>
133
134      <row>
135       <entry>pg_rewrite</entry>
136       <entry>query rewriter rules</entry>
137      </row>
138
139      <row>
140       <entry>pg_shadow</entry>
141       <entry>database users</entry>
142      </row>
143
144      <row>
145       <entry>pg_statistic</entry>
146       <entry>optimizer statistics</entry>
147      </row>
148
149      <row>
150       <entry>pg_trigger</entry>
151       <entry>triggers</entry>
152      </row>
153
154      <row>
155       <entry>pg_type</entry>
156       <entry>data types</entry>
157      </row>
158     </tbody>
159    </tgroup>
160   </table>
161
162   <para>
163    More detailed documentation of most catalogs follow below.  The
164    catalogs that relate to index access methods are explained in the
165    <citetitle>Programmer's Guide</citetitle>.
166   </para>
167
168  </sect1>
169
170
171  <sect1 id="catalog-pg-aggregate">
172   <title>pg_aggregate</title>
173
174   <para>
175    <structname>pg_aggregate</structname> stores information about
176    aggregate functions.  An aggregate function is a function that
177    operates on a set of values (typically one column from each row
178    that matches a query condition) and returns a single value computed
179    from all these values.  Typical aggregate functions are
180    <function>sum</function>, <function>count</function>, and
181    <function>max</function>.
182   </para>
183
184   <table>
185    <title>pg_aggregate Columns</title>
186
187    <tgroup cols=4>
188     <thead>
189      <row>
190       <entry>Name</entry>
191       <entry>Type</entry>
192       <entry>References</entry>
193       <entry>Description</entry>
194      </row>
195     </thead>
196     <tbody>
197      <row>
198       <entry>aggname</entry>
199       <entry><type>name</type></entry>
200       <entry></entry>
201       <entry>Name of the aggregate function</entry>
202      </row>
203      <row>
204       <entry>aggowner</entry>
205       <entry><type>int4</type></entry>
206       <entry>pg_shadow.usesysid</entry>
207       <entry>Owner (creator) of the aggregate function</entry>
208      </row>
209      <row>
210       <entry>aggtransfn</entry>
211       <entry><type>regproc</type> (function)</entry>
212       <entry>pg_proc.oid</entry>
213       <entry>Transition function</entry>
214      </row>
215      <row>
216       <entry>aggfinalfn</entry>
217       <entry><type>regproc</type> (function)</entry>
218       <entry>pg_proc.oid</entry>
219       <entry>Final function</entry>
220      </row>
221      <row>
222       <entry>aggbasetype</entry>
223       <entry><type>oid</type></entry>
224       <entry>pg_type.oid</entry>
225       <entry>The input datatype for this aggregate function</entry>
226      </row>
227      <row>
228       <entry>aggtranstype</entry>
229       <entry><type>oid</type></entry>
230       <entry>pg_type.oid</entry>
231       <entry>The type of the aggregate function's internal transition (state) data</entry>
232      </row>
233      <row>
234       <entry>aggfinaltype</entry>
235       <entry><type>oid</type></entry>
236       <entry>pg_type.oid</entry>
237       <entry>The type of the result</entry>
238      </row>
239      <row>
240       <entry>agginitval</entry>
241       <entry><type>text</type></entry>
242       <entry></entry>
243       <entry>
244        The initial value of the transition state.  This is a text
245        field containing the initial value in its external string
246        representation.  If the field is NULL, the transition state
247        value starts out NULL.
248       </entry>
249      </row>
250     </tbody>
251    </tgroup>
252   </table>
253
254   <para>
255    New aggregate functions are registered with the <command>CREATE
256    AGGREGATE</command> command.  See the <citetitle>Programmer's
257    Guide</citetitle> for more information about writing aggregate
258    functions and the meaning of the transition functions, etc.
259   </para>
260
261   <para>
262    An aggregate function is identified through name
263    <emphasis>and</emphasis> argument type.  Hence aggname and aggbasetype
264    are the composite primary key.
265   </para>
266
267  </sect1>
268
269
270  <sect1 id="catalog-pg-attrdef">
271   <title>pg_attrdef</title>
272
273   <para>
274    This catalog stores column default values.  The main information
275    about columns is stored in <structname>pg_attribute</structname>
276    (see below).  Only columns that explicitly specify a default value
277    (when the table is created or the column is added) will have an
278    entry here.
279   </para>
280
281   <table>
282    <title>pg_attrdef Columns</title>
283
284    <tgroup cols=4>
285     <thead>
286      <row>
287       <entry>Name</entry>
288       <entry>Type</entry>
289       <entry>References</entry>
290       <entry>Description</entry>
291      </row>
292     </thead>
293
294     <tbody>
295      <row>
296       <entry>adrelid</entry>
297       <entry><type>oid</type></entry>
298       <entry>pg_class.oid</entry>
299       <entry>The table this column belongs to</entry>
300      </row>
301
302      <row>
303       <entry>adnum</entry>
304       <entry><type>int2</type></entry>
305       <entry>pg_attribute.attnum</entry>
306       <entry>The number of the column</entry>
307      </row>
308
309      <row>
310       <entry>adbin</entry>
311       <entry><type>text</type></entry>
312       <entry></entry>
313       <entry>An internal representation of the column default value</entry>
314      </row>
315
316      <row>
317       <entry>adsrc</entry>
318       <entry><type>text</type></entry>
319       <entry></entry>
320       <entry>A human-readable representation of the default value</entry>
321      </row>
322     </tbody>
323    </tgroup>
324   </table>
325
326  </sect1>
327
328
329  <sect1 id="catalog-pg-attribute">
330   <title>pg_attribute</title>
331
332   <para>
333    <structname>pg_attribute</structname> stores information about
334    table columns.  There will be exactly one
335    <structname>pg_attribute</structname> row for every column in every
336    table in the database.  (There will also be attribute entries for
337    indexes and other objects.  See <structname>pg_class</structname>.)
338   </para>
339
340   <para>
341    The term attribute is equivalent to column and is used for
342    historical reasons.
343   </para>
344
345   <table>
346    <title>pg_attribute Columns</title>
347
348    <tgroup cols=4>
349     <thead>
350      <row>
351       <entry>Name</entry>
352       <entry>Type</entry>
353       <entry>References</entry>
354       <entry>Description</entry>
355      </row>
356     </thead>
357
358     <tbody>
359      <row>
360       <entry>attrelid</entry>
361       <entry><type>oid</type></entry>
362       <entry>pg_class.oid</entry>
363       <entry>The table this column belongs to</entry>
364      </row>
365
366      <row>
367       <entry>attname</entry>
368       <entry><type>name</type></entry>
369       <entry></entry>
370       <entry>Column name</entry>
371      </row>
372
373      <row>
374       <entry>atttypid</entry>
375       <entry><type>oid</type></entry>
376       <entry>pg_type.oid</entry>
377       <entry>The data type of this column</entry>
378      </row>
379
380      <row>
381       <entry>attstattarget</entry>
382       <entry><type>int4</type></entry>
383       <entry></entry>
384       <entry>
385        <structfield>attstattarget</structfield> controls the level of detail
386        of statistics accumulated for this column by
387        <command>ANALYZE</command>.
388        A zero value indicates that no statistics should be collected.
389        The exact meaning of positive values is datatype-dependent.
390        For scalar datatypes, <structfield>attstattarget</structfield>
391        is both the target number of <quote>most common values</quote>
392        to collect, and the target number of histogram bins to create.
393       </entry>
394      </row>
395
396      <row>
397       <entry>attlen</entry>
398       <entry><type>int2</type></entry>
399       <entry></entry>
400       <entry>
401        This is a copy of the
402        <structname>pg_type</structname>.<structfield>typlen</structfield>
403        for this column's type.
404       </entry>
405      </row>
406
407      <row>
408       <entry>attnum</entry>
409       <entry><type>int2</type></entry>
410       <entry></entry>
411       <entry>
412        The number of the column.  Ordinary columns are numbered from 1
413        up.  System columns, such as <structfield>oid</structfield>,
414        have (arbitrary) negative numbers.
415       </entry>
416      </row>
417
418      <row>
419       <entry>attndims</entry>
420       <entry><type>int4</type></entry>
421       <entry></entry>
422       <entry>
423        Number of dimensions, if the column is an array type; otherwise 0.
424        (Presently, the number of dimensions of an array is not enforced,
425        so any nonzero value effectively means <quote>it's an array</>.)
426       </entry>
427      </row>
428
429      <row>
430       <entry>attcacheoff</entry>
431       <entry><type>int4</type></entry>
432       <entry></entry>
433       <entry>
434        Always -1 in storage, but when loaded into a tuple descriptor
435        in memory this may be updated to cache the offset of the attribute
436        within the tuple.
437       </entry>
438      </row>
439
440      <row>
441       <entry>atttypmod</entry>
442       <entry><type>int4</type></entry>
443       <entry></entry>
444       <entry>
445        <structfield>atttypmod</structfield> records type-specific data
446        supplied at table creation time (for example, the maximum
447        length of a <type>varchar</type> column).  It is passed to
448        type-specific input and output functions as the third
449        argument. The value will generally be -1 for types that do not
450        need typmod.
451       </entry>
452      </row>
453
454      <row>
455       <entry>attbyval</entry>
456       <entry><type>bool</type></entry>
457       <entry></entry>
458       <entry>
459        A copy of
460        <structname>pg_type</structname>.<structfield>typbyval</structfield>
461        of this column's type
462       </entry>
463      </row>
464
465      <row>
466       <entry>attstorage</entry>
467       <entry><type>char</type></entry>
468       <entry></entry>
469       <entry>
470        A copy of
471        <structname>pg_type</structname>.<structfield>typstorage</structfield>
472        of this column's type
473       </entry>
474      </row>
475
476      <row>
477       <entry>attisset</entry>
478       <entry><type>bool</type></entry>
479       <entry></entry>
480       <entry>
481        If true, this attribute is a set.  In that case, what is really
482        stored in the attribute is the OID of a tuple in the
483        <structname>pg_proc</structname> catalog.  The
484        <structname>pg_proc</structname> tuple contains the query
485        string that defines this set - i.e., the query to run to get
486        the set.  So the <structfield>atttypid</structfield> (see
487        above) refers to the type returned by this query, but the
488        actual length of this attribute is the length (size) of an
489        <type>oid</type>.  --- At least this is the theory.  All this
490        is probably quite broken these days.
491       </entry>
492      </row>
493
494      <row>
495       <entry>attalign</entry>
496       <entry><type>char</type></entry>
497       <entry></entry>
498       <entry>
499        A copy of
500        <structname>pg_type</structname>.<structfield>typalign</structfield>
501        of this column's type
502       </entry>
503      </row>
504
505      <row>
506       <entry>attnotnull</entry>
507       <entry><type>bool</type></entry>
508       <entry></entry>
509       <entry>
510        This represents a NOT NULL constraint.  It is possible to
511        change this field to enable or disable the constraint.
512       </entry>
513      </row>
514
515      <row>
516       <entry>atthasdef</entry>
517       <entry><type>bool</type></entry>
518       <entry></entry>
519       <entry>
520        This column has a default value, in which case there will be a
521        corresponding entry in the <structname>pg_attrdef</structname>
522        catalog that actually defines the value.
523       </entry>
524      </row>
525
526     </tbody>
527    </tgroup>
528   </table>
529  </sect1>
530
531
532  <sect1 id="catalog-pg-class">
533   <title>pg_class</title>
534
535   <para>
536    <structname>pg_class</structname> catalogues tables and mostly
537    everything else that has columns or is otherwise similar to a
538    table.  This includes indexes (but see also
539    <structname>pg_index</structname>), sequences, views, and some
540    kinds of special relation.  Below, when we mean all of these
541    kinds of objects we speak of <quote>relations</quote>.  Not all
542    fields are meaningful for all relation types.
543   </para>
544
545   <table>
546    <title>pg_class Columns</title>
547
548    <tgroup cols=4>
549     <thead>
550      <row>
551       <entry>Name</entry>
552       <entry>Type</entry>
553       <entry>References</entry>
554       <entry>Description</entry>
555      </row>
556     </thead>
557
558     <tbody>
559      <row>
560       <entry>relname</entry>
561       <entry><type>name</type></entry>
562       <entry></entry>
563       <entry>Name of the table, index, view, etc.</entry>
564      </row>
565
566      <row>
567       <entry>reltype</entry>
568       <entry><type>oid</type></entry>
569       <entry>pg_type.oid</entry>
570       <entry>
571        The OID of the data type that corresponds to this table, if any
572        (zero for indexes, which have no pg_type entry)
573       </entry>
574      </row>
575
576      <row>
577       <entry>relowner</entry>
578       <entry><type>int4</type></entry>
579       <entry>pg_shadow.usesysid</entry>
580       <entry>Owner of the relation</entry>
581      </row>
582
583      <row>
584       <entry>relam</entry>
585       <entry><type>oid</type></entry>
586       <entry>pg_am.oid</entry>
587       <entry>If this is an index, the access method used (btree, hash, etc.)</entry>
588      </row>
589
590      <row>
591       <entry>relfilenode</entry>
592       <entry><type>oid</type></entry>
593       <entry></entry>
594       <entry>Name of the on-disk file of this relation</entry>
595      </row>
596
597      <row>
598       <entry>relpages</entry>
599       <entry><type>int4</type></entry>
600       <entry></entry>
601       <entry>
602        Size of the on-disk representation of this table in pages (size
603        <symbol>BLCKSZ</symbol>).
604        This is only an estimate used by the planner.
605        It is updated by <command>VACUUM</command>,
606        <command>ANALYZE</command>, and <command>CREATE INDEX</command>.
607       </entry>
608      </row>
609
610      <row>
611       <entry>reltuples</entry>
612       <entry><type>float4</type></entry>
613       <entry></entry>
614       <entry>
615        Number of tuples in the table.
616        This is only an estimate used by the planner.
617        It is updated by <command>VACUUM</command>,
618        <command>ANALYZE</command>, and <command>CREATE INDEX</command>.
619       </entry>
620      </row>
621
622      <row>
623       <entry>reltoastrelid</entry>
624       <entry><type>oid</type></entry>
625       <entry>pg_class.oid</entry>
626       <entry>
627        Oid of the TOAST table associated with this table, 0 if none.
628        The TOAST table stores large attributes <quote>out of
629        line</quote> in a secondary table.
630       </entry>
631      </row>
632
633      <row>
634       <entry>reltoastidxid</entry>
635       <entry><type>oid</type></entry>
636       <entry>pg_class.oid</entry>
637       <entry>
638        For a TOAST table, the OID of its index.  0 if not a TOAST table.
639       </entry>
640      </row>
641
642      <row>
643       <entry>relhasindex</entry>
644       <entry><type>bool</type></entry>
645       <entry></entry>
646       <entry>True if this is a table and it has (or recently had) any indexes.
647        This is set by CREATE INDEX, but not cleared immediately by DROP INDEX.
648        VACUUM clears relhasindex if it finds the table has no indexes.
649       </entry>
650      </row>
651
652      <row>
653       <entry>relisshared</entry>
654       <entry><type>bool</type></entry>
655       <entry></entry>
656       <entry>True if this table is shared across all databases in the
657       cluster.  Only certain system catalogs (such as
658       <structname>pg_database</structname>) are shared.</entry>
659      </row>
660
661      <row>
662       <entry>relkind</entry>
663       <entry><type>char</type></entry>
664       <entry></entry>
665       <entry>
666        'r' = ordinary table, 'i' = index, 'S' = sequence, 'v' = view,
667        's' = special, 't' = secondary TOAST table
668       </entry>
669      </row>
670
671      <row>
672       <entry>relnatts</entry>
673       <entry><type>int2</type></entry>
674       <entry></entry>
675       <entry>
676        Number of user columns in the relation (system columns not counted).
677        There must be this many corresponding entries in
678        <structname>pg_attribute</structname>.  See also
679        <structname>pg_attribute</structname>.<structfield>attnum</structfield>.
680       </entry>
681      </row>
682
683      <row>
684       <entry>relchecks</entry>
685       <entry><type>int2</type></entry>
686       <entry></entry>
687       <entry>
688        Number of check constraints on the table; see
689        <structname>pg_relcheck</structname> catalog
690       </entry>
691      </row>
692
693      <row>
694       <entry>reltriggers</entry>
695       <entry><type>int2</type></entry>
696       <entry></entry>
697       <entry>
698        Number of triggers on the table; see
699        <structname>pg_trigger</structname> catalog
700       </entry>
701      </row>
702
703      <row>
704       <entry>relukeys</entry>
705       <entry><type>int2</type></entry>
706       <entry></entry>
707       <entry>unused  (<emphasis>Not</emphasis> the number of unique keys)</entry>
708      </row>
709
710      <row>
711       <entry>relfkeys</entry>
712       <entry><type>int2</type></entry>
713       <entry></entry>
714       <entry>unused  (<emphasis>Not</emphasis> the number of foreign keys on the table)</entry>
715      </row>
716
717      <row>
718       <entry>relrefs</entry>
719       <entry><type>int2</type></entry>
720       <entry></entry>
721       <entry>unused</entry>
722      </row>
723
724      <row>
725       <entry>relhasoids</entry>
726       <entry><type>bool</type></entry>
727       <entry></entry>
728       <entry>
729        True if we generate an OID for each row of the relation.
730       </entry>
731      </row>
732
733      <row>
734       <entry>relhaspkey</entry>
735       <entry><type>bool</type></entry>
736       <entry></entry>
737       <entry>
738        True if the table has (or once had) a primary key.
739       </entry>
740      </row>
741
742      <row>
743       <entry>relhasrules</entry>
744       <entry><type>bool</type></entry>
745       <entry></entry>
746       <entry>Table has rules; see
747        <structname>pg_rewrite</structname> catalog
748       </entry>
749      </row>
750
751      <row>
752       <entry>relhassubclass</entry>
753       <entry><type>bool</type></entry>
754       <entry></entry>
755       <entry>At least one table inherits from this one</entry>
756      </row>
757
758      <row>
759       <entry>relacl</entry>
760       <entry><type>aclitem[]</type></entry>
761       <entry></entry>
762       <entry>
763        Access permissions.  See the descriptions of
764        <command>GRANT</command> and <command>REVOKE</command> for
765        details.
766       </entry>
767      </row>
768     </tbody>
769    </tgroup>
770   </table>
771  </sect1>
772
773
774  <sect1 id="catalog-pg-database">
775   <title>pg_database</title>
776
777   <para>
778    The <structname>pg_database</structname> catalog stores information
779    about the available databases.  Databases are created with the
780    <command>CREATE DATABASE</command> command.  Consult the
781    <citetitle>Administrator's Guide</citetitle> for details about the
782    meaning of some of the parameters.
783   </para>
784
785   <para>
786    Unlike most system catalogs, <structname>pg_database</structname>
787    is shared across all databases of a cluster: there is only one
788    copy of <structname>pg_database</structname> per cluster, not
789    one per database.
790   </para>
791
792   <table>
793    <title>pg_database Columns</title>
794
795    <tgroup cols=4>
796     <thead>
797      <row>
798       <entry>Name</entry>
799       <entry>Type</entry>
800       <entry>References</entry>
801       <entry>Description</entry>
802      </row>
803     </thead>
804
805     <tbody>
806      <row>
807       <entry>datname</entry>
808       <entry><type>name</type></entry>
809       <entry></entry>
810       <entry>Database name</entry>
811      </row>
812
813      <row>
814       <entry>datdba</entry>
815       <entry><type>int4</type></entry>
816       <entry>pg_shadow.usesysid</entry>
817       <entry>Owner of the database, initially who created it</entry>
818      </row>
819
820      <row>
821       <entry>encoding</entry>
822       <entry><type>int4</type></entry>
823       <entry></entry>
824       <entry>Character/multibyte encoding for this database</entry>
825      </row>
826
827      <row>
828       <entry>datistemplate</entry>
829       <entry><type>bool</type></entry>
830       <entry></entry>
831       <entry>
832        If true then this database can be used in the
833        <quote>TEMPLATE</quote> clause of <command>CREATE
834        DATABASE</command> to create the new database as a clone of
835        this one.
836       </entry>
837      </row>
838
839      <row>
840       <entry>datallowconn</entry>
841       <entry><type>bool</type></entry>
842       <entry></entry>
843       <entry>
844        If false then no one can connect to this database.  This is
845        used to protect the template0 database from being altered.
846       </entry>
847      </row>
848
849      <row>
850       <entry>datlastsysoid</entry>
851       <entry><type>oid</type></entry>
852       <entry></entry>
853       <entry>
854        Last system OID in the database; useful
855        particularly to <application>pg_dump</application>
856       </entry>
857      </row>
858
859      <row>
860       <entry>datvacuumxid</entry>
861       <entry><type>xid</type></entry>
862       <entry></entry>
863       <entry>
864        All tuples inserted or deleted by transaction IDs before this one
865        have been marked as known committed or known aborted in this database.
866        This is used to determine when commit-log space can be recycled.
867       </entry>
868      </row>
869
870      <row>
871       <entry>datfrozenxid</entry>
872       <entry><type>xid</type></entry>
873       <entry></entry>
874       <entry>
875        All tuples inserted by transaction IDs before this one have been
876        relabeled with a permanent (<quote>frozen</>) transaction ID in this
877        database.  This is useful to check whether a database must be vacuumed
878        soon to avoid transaction ID wraparound problems.
879       </entry>
880      </row>
881
882      <row>
883       <entry>datpath</entry>
884       <entry><type>text</type></entry>
885       <entry></entry>
886       <entry>
887        If the database is stored at an alternative location then this
888        records the location.  It's either an environment variable name
889        or an absolute path, depending how it was entered.
890       </entry>
891      </row>
892     </tbody>
893    </tgroup>
894   </table>
895  </sect1>
896
897
898  <sect1 id="catalog-pg-description">
899   <title>pg_description</title>
900
901   <para>
902    The pg_description table can store an optional description or
903    comment for each database object.  Descriptions can be manipulated
904    with the <command>COMMENT</command> command.  Client applications
905    can view the descriptions by joining with this table.  Many builtin
906    system objects have comments associated with them that are shown by
907    <application>psql</application>'s <literal>\d</literal> commands.
908   </para>
909
910   <table>
911    <title>pg_description Columns</title>
912
913    <tgroup cols=4>
914     <thead>
915      <row>
916       <entry>Name</entry>
917       <entry>Type</entry>
918       <entry>References</entry>
919       <entry>Description</entry>
920      </row>
921     </thead>
922
923     <tbody>
924      <row>
925       <entry>objoid</entry>
926       <entry><type>oid</type></entry>
927       <entry>any oid attribute</entry>
928       <entry>The oid of the object this description pertains to</entry>
929      </row>
930
931      <row>
932       <entry>classoid</entry>
933       <entry><type>oid</type></entry>
934       <entry>pg_class.oid</entry>
935       <entry>The oid of the system catalog this object appears in</entry>
936      </row>
937
938      <row>
939       <entry>objsubid</entry>
940       <entry><type>int4</type></entry>
941       <entry></entry>
942       <entry>For a comment on a table attribute, this is the attribute's
943        column number (the objoid and classoid refer to the table itself).
944        For all other object types, this field is presently zero.
945       </entry>
946      </row>
947
948      <row>
949       <entry>description</entry>
950       <entry><type>text</type></entry>
951       <entry></entry>
952       <entry>Arbitrary text that serves as the description of this object.</entry>
953      </row>
954     </tbody>
955    </tgroup>
956   </table>
957
958  </sect1>
959
960
961  <sect1 id="catalog-pg-group">
962   <title>pg_group</title>
963
964   <para>
965    This catalog defines groups and stores what users belong to what
966    groups.  Groups are created with the <command>CREATE
967    GROUP</command> command.  Consult the <citetitle>Administrator's
968    Guide</citetitle> for information about user permission management.
969   </para>
970
971   <para>
972    Because user and group identities are cluster-wide,
973    <structname>pg_group</structname>
974    is shared across all databases of a cluster: there is only one
975    copy of <structname>pg_group</structname> per cluster, not
976    one per database.
977   </para>
978
979   <table>
980    <title>pg_group Columns</title>
981
982    <tgroup cols=4>
983     <thead>
984      <row>
985       <entry>Name</entry>
986       <entry>Type</entry>
987       <entry>References</entry>
988       <entry>Description</entry>
989      </row>
990     </thead>
991
992     <tbody>
993      <row>
994       <entry>groname</entry>
995       <entry><type>name</type></entry>
996       <entry></entry>
997       <entry>Name of the group</entry>
998      </row>
999
1000      <row>
1001       <entry>grosysid</entry>
1002       <entry><type>int4</type></entry>
1003       <entry></entry>
1004       <entry>An arbitrary number to identify this group</entry>
1005      </row>
1006
1007      <row>
1008       <entry>grolist</entry>
1009       <entry><type>int4[]</type></entry>
1010       <entry>pg_shadow.usesysid</entry>
1011       <entry>An array containing the ids of the users in this group</entry>
1012      </row>
1013     </tbody>
1014    </tgroup>
1015   </table>
1016
1017  </sect1>
1018
1019
1020  <sect1 id="catalog-pg-index">
1021   <title>pg_index</title>
1022
1023   <para>
1024    <structname>pg_index</structname> contains part of the information
1025    about indexes.  The rest is mostly in
1026    <structname>pg_class</structname>.
1027   </para>
1028
1029   <table>
1030    <title>pg_index Columns</title>
1031
1032    <tgroup cols=4>
1033     <thead>
1034      <row>
1035       <entry>Name</entry>
1036       <entry>Type</entry>
1037       <entry>References</entry>
1038       <entry>Description</entry>
1039      </row>
1040     </thead>
1041
1042     <tbody>
1043      <row>
1044       <entry>indexrelid</entry>
1045       <entry><type>oid</type></entry>
1046       <entry>pg_class.oid</entry>
1047       <entry>The oid of the pg_class entry for this index</entry>
1048      </row>
1049
1050      <row>
1051       <entry>indrelid</entry>
1052       <entry><type>oid</type></entry>
1053       <entry>pg_class.oid</entry>
1054       <entry>The oid of the pg_class entry for the table this index is for</entry>
1055      </row>
1056
1057      <row>
1058       <entry>indproc</entry>
1059       <entry><type>regproc</type></entry>
1060       <entry>pg_proc.oid</entry>
1061       <entry>The registered procedure if this is a functional index</entry>
1062      </row>
1063
1064      <row>
1065       <entry>indkey</entry>
1066       <entry><type>int2vector</type></entry>
1067       <entry>pg_attribute.attnum</entry>
1068       <entry>
1069        This is a vector (array) of up to
1070        <symbol>INDEX_MAX_KEYS</symbol> values that indicate which
1071        table columns this index pertains to.  For example a value of
1072        <literal>1 3</literal> would mean that the first and the third
1073        column make up the index key.
1074       </entry>
1075      </row>
1076
1077      <row>
1078       <entry>indclass</entry>
1079       <entry><type>oidvector</type></entry>
1080       <entry>pg_opclass.oid</entry>
1081       <entry>
1082        For each column in the index key this contains a reference to
1083        the <quote>operator class</quote> to use.  See
1084        <structname>pg_opclass</structname> for details.
1085       </entry>
1086      </row>
1087
1088      <row>
1089       <entry>indisclustered</entry>
1090       <entry><type>bool</type></entry>
1091       <entry></entry>
1092       <entry>unused</entry>
1093      </row>
1094
1095      <row>
1096       <entry>indisunique</entry>
1097       <entry><type>bool</type></entry>
1098       <entry></entry>
1099       <entry>If true, this is a unique index.</entry>
1100      </row>
1101
1102      <row>
1103       <entry>indisprimary</entry>
1104       <entry><type>bool</type></entry>
1105       <entry></entry>
1106       <entry>If true, this index represents the primary key of the table.
1107       (indisunique should always be true when this is true.)</entry>
1108      </row>
1109
1110      <row>
1111       <entry>indreference</entry>
1112       <entry><type>oid</type></entry>
1113       <entry></entry>
1114       <entry>unused</entry>
1115      </row>
1116
1117      <row>
1118       <entry>indpred</entry>
1119       <entry><type>text</type></entry>
1120       <entry></entry>
1121       <entry>Expression tree (in the form of a nodeToString representation)
1122       for partial index predicate</entry>
1123      </row>
1124     </tbody>
1125    </tgroup>
1126   </table>
1127
1128  </sect1>
1129
1130
1131  <sect1 id="catalog-pg-inherits">
1132   <title>pg_inherits</title>
1133
1134   <para>
1135    This catalog records information about table inheritance hierarchies.
1136   </para>
1137
1138   <table>
1139    <title>pg_inherits Columns</title>
1140
1141    <tgroup cols=4>
1142     <thead>
1143      <row>
1144       <entry>Name</entry>
1145       <entry>Type</entry>
1146       <entry>References</entry>
1147       <entry>Description</entry>
1148      </row>
1149     </thead>
1150
1151     <tbody>
1152      <row>
1153       <entry>inhrelid</entry>
1154       <entry><type>oid</type></entry>
1155       <entry>pg_class.oid</entry>
1156       <entry>
1157        This is the reference to the subtable, that is, it records the
1158        fact that the identified table is inherited from some other
1159        table.
1160       </entry>
1161      </row>
1162
1163      <row>
1164       <entry>inhparent</entry>
1165       <entry><type>oid</type></entry>
1166       <entry>pg_class.oid</entry>
1167       <entry>
1168        This is the reference to the parent table, which the table
1169        referenced by <structfield>inhrelid</structfield> inherited
1170        from.
1171       </entry>
1172      </row>
1173
1174      <row>
1175       <entry>inhseqno</entry>
1176       <entry><type>int4</type></entry>
1177       <entry></entry>
1178       <entry>
1179        If there is more than one parent for a subtable (multiple
1180        inheritance), this number tells the order in which the
1181        inherited columns are to be arranged.  The count starts at 1.
1182       </entry>
1183      </row>
1184     </tbody>
1185    </tgroup>
1186   </table>
1187
1188  </sect1>
1189
1190
1191  <sect1 id="catalog-pg-language">
1192   <title>pg_language</title>
1193
1194   <para>
1195    <structname>pg_language</structname> registers call interfaces or
1196    languages in which you can write functions or stored procedures.
1197    See under <command>CREATE LANGUAGE</command> and in the
1198    <citetitle>Programmer's Guide</citetitle> for more information
1199    about language handlers.
1200   </para>
1201
1202   <table>
1203    <title>pg_language Columns</title>
1204
1205    <tgroup cols=4>
1206     <thead>
1207      <row>
1208       <entry>Name</entry>
1209       <entry>Type</entry>
1210       <entry>References</entry>
1211       <entry>Description</entry>
1212      </row>
1213     </thead>
1214
1215     <tbody>
1216      <row>
1217       <entry>lanname</entry>
1218       <entry><type>name</type></entry>
1219       <entry></entry>
1220       <entry>Name of the language (to be specified when creating a function)</entry>
1221      </row>
1222
1223      <row>
1224       <entry>lanispl</entry>
1225       <entry><type>bool</type></entry>
1226       <entry></entry>
1227       <entry>
1228        This is false for internal languages (such as SQL) and true for
1229        dynamically loaded language handler modules.  It essentially
1230        means that, if it is true, the language may be dropped.
1231       </entry>
1232      </row>
1233
1234      <row>
1235       <entry>lanpltrusted</entry>
1236       <entry><type>bool</type></entry>
1237       <entry></entry>
1238       <entry>
1239        This is a trusted language.  See under <command>CREATE
1240        LANGUAGE</command> what this means.  If this is an internal
1241        language (<structfield>lanispl</structfield> is false) then
1242        this field is meaningless.
1243       </entry>
1244      </row>
1245
1246      <row>
1247       <entry>lanplcallfoid</entry>
1248       <entry><type>oid</type></entry>
1249       <entry>pg_proc.oid</entry>
1250       <entry>
1251        For non-internal languages this references the language
1252        handler, which is a special function that is responsible for
1253        executing all functions that are written in the particular
1254        language.
1255       </entry>
1256      </row>
1257
1258      <row>
1259       <entry>lancompiler</entry>
1260       <entry><type>text</type></entry>
1261       <entry></entry>
1262       <entry>not currently used</entry>
1263      </row>
1264     </tbody>
1265    </tgroup>
1266   </table>
1267
1268  </sect1>
1269
1270
1271  <sect1 id="catalog-pg-largeobject">
1272   <title>pg_largeobject</title>
1273
1274   <para>
1275    <structname>pg_largeobject</structname> holds the data making up
1276    <quote>large objects</quote>.  A large object is identified by an
1277    OID assigned when it is created.  Each large object is broken into
1278    segments or <quote>pages</> small enough to be conveniently stored as rows
1279    in <structname>pg_largeobject</structname>.
1280    The amount of data per page is defined to be LOBLKSIZE (which is currently
1281    BLCKSZ/4, or typically 2Kbytes).
1282   </para>
1283
1284   <table>
1285    <title>pg_largeobject Columns</title>
1286
1287    <tgroup cols=4>
1288     <thead>
1289      <row>
1290       <entry>Name</entry>
1291       <entry>Type</entry>
1292       <entry>References</entry>
1293       <entry>Description</entry>
1294      </row>
1295     </thead>
1296
1297     <tbody>
1298      <row>
1299       <entry>loid</entry>
1300       <entry><type>oid</type></entry>
1301       <entry></entry>
1302       <entry>Identifier of the large object that includes this page</entry>
1303      </row>
1304
1305      <row>
1306       <entry>pageno</entry>
1307       <entry><type>int4</type></entry>
1308       <entry></entry>
1309       <entry>Page number of this page within its large object
1310       (counting from zero)</entry>
1311      </row>
1312
1313      <row>
1314       <entry>data</entry>
1315       <entry><type>bytea</type></entry>
1316       <entry></entry>
1317       <entry>
1318        Actual data stored in the large object.
1319        This will never be more than LOBLKSIZE bytes, and may be less.
1320       </entry>
1321      </row>
1322     </tbody>
1323    </tgroup>
1324   </table>
1325
1326   <para>
1327    Each row of <structname>pg_largeobject</structname> holds data
1328    for one page of a large object, beginning at
1329    byte offset (pageno * LOBLKSIZE) within the object.  The implementation
1330    allows sparse storage: pages may be missing, and may be shorter than
1331    LOBLKSIZE bytes even if they are not the last page of the object.
1332    Missing regions within a large object read as zeroes.
1333   </para>
1334
1335  </sect1>
1336
1337
1338  <sect1 id="catalog-pg-listener">
1339   <title>pg_listener</title>
1340
1341   <para>
1342    <structname>pg_listener</structname> supports the <command>LISTEN</>
1343    and <command>NOTIFY</> commands.  A listener creates an entry in
1344    <structname>pg_listener</structname> for each notification name
1345    it is listening for.  A notifier scans <structname>pg_listener</structname>
1346    and updates each matching entry to show that a notification has occurred.
1347    The notifier also sends a signal (using the PID recorded in the table)
1348    to awaken the listener from sleep.
1349   </para>
1350
1351   <table>
1352    <title>pg_listener Columns</title>
1353
1354    <tgroup cols=4>
1355     <thead>
1356      <row>
1357       <entry>Name</entry>
1358       <entry>Type</entry>
1359       <entry>References</entry>
1360       <entry>Description</entry>
1361      </row>
1362     </thead>
1363
1364     <tbody>
1365      <row>
1366       <entry>relname</entry>
1367       <entry><type>name</type></entry>
1368       <entry></entry>
1369       <entry>Notify condition name.  (The name need not match any actual
1370       relation in the database; the term <quote>relname</> is historical.)
1371       </entry>
1372      </row>
1373
1374      <row>
1375       <entry>listenerpid</entry>
1376       <entry><type>int4</type></entry>
1377       <entry></entry>
1378       <entry>PID of the backend process that created this entry.</entry>
1379      </row>
1380
1381      <row>
1382       <entry>notification</entry>
1383       <entry><type>int4</type></entry>
1384       <entry></entry>
1385       <entry>
1386        Zero if no event is pending for this listener.  If an event is
1387        pending, the PID of the backend that sent the notification.
1388       </entry>
1389      </row>
1390     </tbody>
1391    </tgroup>
1392   </table>
1393
1394  </sect1>
1395
1396
1397  <sect1 id="catalog-pg-operator">
1398   <title>pg_operator</title>
1399
1400   <para>
1401    See <command>CREATE OPERATOR</command> and the
1402    <citetitle>Programmer's Guide</citetitle> for details on these
1403    operator parameters.
1404   </para>
1405
1406   <table>
1407    <title>pg_operator Columns</title>
1408
1409    <tgroup cols=4>
1410     <thead>
1411      <row>
1412       <entry>Name</entry>
1413       <entry>Type</entry>
1414       <entry>References</entry>
1415       <entry>Description</entry>
1416      </row>
1417     </thead>
1418
1419     <tbody>
1420      <row>
1421       <entry>oprname</entry>
1422       <entry><type>name</type></entry>
1423       <entry></entry>
1424       <entry>Name of the operator</entry>
1425      </row>
1426
1427      <row>
1428       <entry>oprowner</entry>
1429       <entry><type>int4</type></entry>
1430       <entry>pg_shadow.usesysid</entry>
1431       <entry>Owner (creator) of the operator</entry>
1432      </row>
1433
1434      <row>
1435       <entry>oprprec</entry>
1436       <entry><type>int2</type></entry>
1437       <entry></entry>
1438       <entry>unused</entry>
1439      </row>
1440
1441      <row>
1442       <entry>oprkind</entry>
1443       <entry><type>char</type></entry>
1444       <entry></entry>
1445       <entry>
1446        'b' = infix (<quote>both</quote>), 'l' = prefix
1447        (<quote>left</quote>), 'r' = postfix (<quote>right</quote>)
1448       </entry>
1449      </row>
1450
1451      <row>
1452       <entry>oprisleft</entry>
1453       <entry><type>bool</type></entry>
1454       <entry></entry>
1455       <entry>unused</entry>
1456      </row>
1457
1458      <row>
1459       <entry>oprcanhash</entry>
1460       <entry><type>bool</type></entry>
1461       <entry></entry>
1462       <entry>This operator supports hash joins.</entry>
1463      </row>
1464
1465      <row>
1466       <entry>oprleft</entry>
1467       <entry><type>oid</type></entry>
1468       <entry>pg_type.oid</entry>
1469       <entry>Type of the left operand</entry>
1470      </row>
1471
1472      <row>
1473       <entry>oprright</entry>
1474       <entry><type>oid</type></entry>
1475       <entry>pg_type.oid</entry>
1476       <entry>Type of the right operand</entry>
1477      </row>
1478
1479      <row>
1480       <entry>oprresult</entry>
1481       <entry><type>oid</type></entry>
1482       <entry>pg_type.oid</entry>
1483       <entry>Type of the result</entry>
1484      </row>
1485
1486      <row>
1487       <entry>oprcom</entry>
1488       <entry><type>oid</type></entry>
1489       <entry>pg_operator.oid</entry>
1490       <entry>Commutator of this operator, if any</entry>
1491      </row>
1492
1493      <row>
1494       <entry>oprnegate</entry>
1495       <entry><type>oid</type></entry>
1496       <entry>pg_operator.oid</entry>
1497       <entry>Negator of this operator, if any</entry>
1498      </row>
1499
1500      <row>
1501       <entry>oprlsortop</entry>
1502       <entry><type>oid</type></entry>
1503       <entry>pg_operator.oid</entry>
1504       <entry>
1505        If this operator supports merge joins, the operator that sorts
1506        the type of the left-hand operand
1507       </entry>
1508      </row>
1509
1510      <row>
1511       <entry>oprrsortop</entry>
1512       <entry><type>oid</type></entry>
1513       <entry>pg_operator.oid</entry>
1514       <entry>
1515        If this operator supports merge joins, the operator that sorts
1516        the type of the right-hand operand
1517       </entry>
1518      </row>
1519
1520      <row>
1521       <entry>oprcode</entry>
1522       <entry><type>regproc</type></entry>
1523       <entry></entry>
1524       <entry>Function that implements this operator</entry>
1525      </row>
1526
1527      <row>
1528       <entry>oprrest</entry>
1529       <entry><type>regproc</type></entry>
1530       <entry></entry>
1531       <entry>Restriction selectivity estimation function for this operator</entry>
1532      </row>
1533
1534      <row>
1535       <entry>oprjoin</entry>
1536       <entry><type>regproc</type></entry>
1537       <entry></entry>
1538       <entry>Join selectivity estimation function for this operator</entry>
1539      </row>
1540     </tbody>
1541    </tgroup>
1542   </table>
1543
1544  </sect1>
1545
1546
1547  <sect1 id="catalog-pg-proc">
1548   <title>pg_proc</title>
1549
1550   <para>
1551    This catalog stores information about functions (or procedures).
1552    The description of <command>CREATE FUNCTION</command> and the
1553    <citetitle>Programmer's Guide</citetitle> contain more information
1554    about the meaning of some fields.
1555   </para>
1556
1557   <table>
1558    <title>pg_proc Columns</title>
1559
1560    <tgroup cols=4>
1561     <thead>
1562      <row>
1563       <entry>Name</entry>
1564       <entry>Type</entry>
1565       <entry>References</entry>
1566       <entry>Description</entry>
1567      </row>
1568     </thead>
1569
1570     <tbody>
1571      <row>
1572       <entry>proname</entry>
1573       <entry><type>name</type></entry>
1574       <entry></entry>
1575       <entry>Name of the function</entry>
1576      </row>
1577
1578      <row>
1579       <entry>proowner</entry>
1580       <entry><type>int4</type></entry>
1581       <entry>pg_shadow.usesysid</entry>
1582       <entry>Owner (creator) of the function</entry>
1583      </row>
1584
1585      <row>
1586       <entry>prolang</entry>
1587       <entry><type>oid</type></entry>
1588       <entry>pg_language.oid</entry>
1589       <entry>Implementation language or call interface of this function</entry>
1590      </row>
1591
1592      <row>
1593       <entry>proisinh</entry>
1594       <entry><type>bool</type></entry>
1595       <entry></entry>
1596       <entry>unused</entry>
1597      </row>
1598
1599      <row>
1600       <entry>proistrusted</entry>
1601       <entry><type>bool</type></entry>
1602       <entry></entry>
1603       <entry>not functional</entry>
1604      </row>
1605
1606      <row>
1607       <entry>proiscachable</entry>
1608       <entry><type>bool</type></entry>
1609       <entry></entry>
1610       <entry>Function returns same result for same input values</entry>
1611      </row>
1612
1613      <row>
1614       <entry>proisstrict</entry>
1615       <entry><type>bool</type></entry>
1616       <entry></entry>
1617       <entry>
1618        Function returns null if any call argument is null.  In that
1619        case the function won't actually be called at all.  Functions
1620        that are not <quote>strict</quote> must be prepared to handle
1621        null inputs.
1622       </entry>
1623      </row>
1624
1625      <row>
1626       <entry>pronargs</entry>
1627       <entry><type>int2</type></entry>
1628       <entry></entry>
1629       <entry>Number of arguments</entry>
1630      </row>
1631
1632      <row>
1633       <entry>proretset</entry>
1634       <entry><type>bool</type></entry>
1635       <entry></entry>
1636       <entry>Function returns a set (ie, multiple values of the specified
1637       datatype)</entry>
1638      </row>
1639
1640      <row>
1641       <entry>prorettype</entry>
1642       <entry><type>oid</type></entry>
1643       <entry>pg_type.oid</entry>
1644       <entry>Data type of the return value (0 if the function does not return a value)</entry>
1645      </row>
1646
1647      <row>
1648       <entry>proargtypes</entry>
1649       <entry><type>oidvector</type></entry>
1650       <entry>pg_type.oid</entry>
1651       <entry>A vector with the data types of the function arguments</entry>
1652      </row>
1653
1654      <row>
1655       <entry>probyte_pct</entry>
1656       <entry><type>int4</type></entry>
1657       <entry></entry>
1658       <entry>dead code</entry>
1659      </row>
1660
1661      <row>
1662       <entry>properbyte_cpu</entry>
1663       <entry><type>int4</type></entry>
1664       <entry></entry>
1665       <entry>dead code</entry>
1666      </row>
1667
1668      <row>
1669       <entry>propercall_cpu</entry>
1670       <entry><type>int4</type></entry>
1671       <entry></entry>
1672       <entry>dead code</entry>
1673      </row>
1674
1675      <row>
1676       <entry>prooutin_ratio</entry>
1677       <entry><type>int4</type></entry>
1678       <entry></entry>
1679       <entry>dead code</entry>
1680      </row>
1681
1682      <row>
1683       <entry>prosrc</entry>
1684       <entry><type>text</type></entry>
1685       <entry></entry>
1686       <entry>
1687        This tells the function handler how to invoke the function.  It
1688        might be the actual source code of the function for interpreted
1689        languages, a link symbol, a file name, or just about anything
1690        else, depending on the implementation language/call convention.
1691       </entry>
1692      </row>
1693
1694      <row>
1695       <entry>probin</entry>
1696       <entry><type>bytea</type></entry>
1697       <entry></entry>
1698       <entry>Additional information about how to invoke the function.
1699       Again, the interpretation is language-specific.
1700       </entry>
1701      </row>
1702     </tbody>
1703    </tgroup>
1704   </table>
1705
1706   <para>
1707   Currently, prosrc contains the function's C-language name (link symbol)
1708   for compiled functions, both built-in and dynamically loaded.  For all
1709   other language types, prosrc contains the function's source text.
1710   </para>
1711
1712   <para>
1713   Currently, probin is unused except for dynamically-loaded C functions,
1714   for which it gives the name of the shared library file containing the
1715   function.
1716   </para>
1717
1718  </sect1>
1719
1720
1721  <sect1 id="catalog-pg-relcheck">
1722   <title>pg_relcheck</title>
1723
1724   <para>
1725    This system catalog stores CHECK constraints on tables.  (Column
1726    constraints are not treated specially.  Every column constraint is
1727    equivalent to some table constraint.)  See under <command>CREATE
1728    TABLE</command> for more information.
1729   </para>
1730
1731   <table>
1732    <title>pg_relcheck Columns</title>
1733
1734    <tgroup cols=4>
1735     <thead>
1736      <row>
1737       <entry>Name</entry>
1738       <entry>Type</entry>
1739       <entry>References</entry>
1740       <entry>Description</entry>
1741      </row>
1742     </thead>
1743
1744     <tbody>
1745      <row>
1746       <entry>rcrelid</entry>
1747       <entry><type>oid</type></entry>
1748       <entry>pg_class.oid</entry>
1749       <entry>The table this check constraint is on</entry>
1750      </row>
1751
1752      <row>
1753       <entry>rcname</entry>
1754       <entry><type>name</type></entry>
1755       <entry></entry>
1756       <entry>Constraint name</entry>
1757      </row>
1758
1759      <row>
1760       <entry>rcbin</entry>
1761       <entry><type>text</type></entry>
1762       <entry></entry>
1763       <entry>An internal representation of the constraint expression</entry>
1764      </row>
1765
1766      <row>
1767       <entry>rcsrc</entry>
1768       <entry><type>text</type></entry>
1769       <entry></entry>
1770       <entry>A human-readable representation of the constraint expression</entry>
1771      </row>
1772     </tbody>
1773    </tgroup>
1774   </table>
1775
1776   <note>
1777    <para>
1778     <structname>pg_class</structname>.<structfield>relchecks</structfield>
1779     needs to match up with the entries in this table.
1780    </para>
1781   </note>
1782
1783  </sect1>
1784
1785
1786  <sect1 id="catalog-pg-rewrite">
1787   <title>pg_rewrite</title>
1788
1789   <para>
1790    This system catalog stores rewrite rules for tables and views.
1791   </para>
1792
1793   <table>
1794    <title>pg_rewrite Columns</title>
1795
1796    <tgroup cols=4>
1797     <thead>
1798      <row>
1799       <entry>Name</entry>
1800       <entry>Type</entry>
1801       <entry>References</entry>
1802       <entry>Description</entry>
1803      </row>
1804     </thead>
1805
1806     <tbody>
1807      <row>
1808       <entry>rulename</entry>
1809       <entry><type>name</type></entry>
1810       <entry></entry>
1811       <entry>Rule name</entry>
1812      </row>
1813
1814      <row>
1815       <entry>ev_type</entry>
1816       <entry><type>char</type></entry>
1817       <entry></entry>
1818       <entry>Event type that the rule is for: '1' = SELECT,
1819       '2' = UPDATE, '3' = INSERT, '4' = DELETE</entry>
1820      </row>
1821
1822      <row>
1823       <entry>ev_class</entry>
1824       <entry><type>oid</type></entry>
1825       <entry>pg_class.oid</entry>
1826       <entry>The table this rule is for</entry>
1827      </row>
1828
1829      <row>
1830       <entry>ev_attr</entry>
1831       <entry><type>int2</type></entry>
1832       <entry></entry>
1833       <entry>The column this rule is for (currently, always zero to
1834       indicate the whole table)</entry>
1835      </row>
1836
1837      <row>
1838       <entry>is_instead</entry>
1839       <entry><type>bool</type></entry>
1840       <entry></entry>
1841       <entry>True if the rule is an INSTEAD rule</entry>
1842      </row>
1843
1844      <row>
1845       <entry>ev_qual</entry>
1846       <entry><type>text</type></entry>
1847       <entry></entry>
1848       <entry>Expression tree (in the form of a nodeToString representation)
1849       for the rule's qualifying condition</entry>
1850      </row>
1851
1852      <row>
1853       <entry>ev_action</entry>
1854       <entry><type>text</type></entry>
1855       <entry></entry>
1856       <entry>Query tree (in the form of a nodeToString representation)
1857       for the rule's action</entry>
1858      </row>
1859     </tbody>
1860    </tgroup>
1861   </table>
1862
1863   <note>
1864    <para>
1865     <structname>pg_class</structname>.<structfield>relhasrules</structfield>
1866     must be true if a table has any rules in this catalog.
1867    </para>
1868   </note>
1869
1870  </sect1>
1871
1872
1873  <sect1 id="catalog-pg-shadow">
1874   <title>pg_shadow</title>
1875
1876   <para>
1877    <structname>pg_shadow</structname> contains information about
1878    database users.  The name stems from the fact that this table
1879    should not be readable by the public since it contains passwords.
1880    <structname>pg_user</structname> is a publicly readable view on
1881    <structname>pg_shadow</structname> that blanks out the password field.
1882   </para>
1883
1884   <para>
1885    The <citetitle>Administrator's Guide</citetitle> contains detailed
1886    information about user and permission management.
1887   </para>
1888
1889   <para>
1890    Because user identities are cluster-wide,
1891    <structname>pg_shadow</structname>
1892    is shared across all databases of a cluster: there is only one
1893    copy of <structname>pg_shadow</structname> per cluster, not
1894    one per database.
1895   </para>
1896
1897   <table>
1898    <title>pg_shadow Columns</title>
1899
1900    <tgroup cols=4>
1901     <thead>
1902      <row>
1903       <entry>Name</entry>
1904       <entry>Type</entry>
1905       <entry>References</entry>
1906       <entry>Description</entry>
1907      </row>
1908     </thead>
1909
1910     <tbody>
1911      <row>
1912       <entry>usename</entry>
1913       <entry><type>name</type></entry>
1914       <entry></entry>
1915       <entry>User name</entry>
1916      </row>
1917
1918      <row>
1919       <entry>usesysid</entry>
1920       <entry><type>int4</type></entry>
1921       <entry></entry>
1922       <entry>User id (arbitrary number used to reference this user)</entry>
1923      </row>
1924
1925      <row>
1926       <entry>usecreatedb</entry>
1927       <entry><type>bool</type></entry>
1928       <entry></entry>
1929       <entry>User may create databases</entry>
1930      </row>
1931
1932      <row>
1933       <entry>usetrace</entry>
1934       <entry><type>bool</type></entry>
1935       <entry></entry>
1936       <entry>not used</entry>
1937      </row>
1938
1939      <row>
1940       <entry>usesuper</entry>
1941       <entry><type>bool</type></entry>
1942       <entry></entry>
1943       <entry>User is a superuser</entry>
1944      </row>
1945
1946      <row>
1947       <entry>usecatupd</entry>
1948       <entry><type>bool</type></entry>
1949       <entry></entry>
1950       <entry>
1951        User may update system catalogs.  (Even a superuser may not do
1952        this unless this attribute is true.)
1953       </entry>
1954      </row>
1955
1956      <row>
1957       <entry>passwd</entry>
1958       <entry><type>text</type></entry>
1959       <entry></entry>
1960       <entry>Password</entry>
1961      </row>
1962
1963      <row>
1964       <entry>valuntil</entry>
1965       <entry><type>abstime</type></entry>
1966       <entry></entry>
1967       <entry>Account expiry time (only used for password authentication)</entry>
1968      </row>
1969     </tbody>
1970    </tgroup>
1971   </table>
1972
1973  </sect1>
1974
1975
1976  <sect1 id="catalog-pg-statistic">
1977   <title>pg_statistic</title>
1978
1979   <para>
1980    <structname>pg_statistic</structname> stores statistical data about
1981    the contents of the database.  Entries are created by
1982    <command>ANALYZE</command> and subsequently used by the query planner.
1983    There is one entry for each table column that has been analyzed.
1984    Note that all the statistical data is inherently approximate,
1985    even assuming that it is up-to-date.
1986   </para>
1987
1988   <para>
1989    Since different kinds of statistics may be appropriate for different
1990    kinds of data, <structname>pg_statistic</structname> is designed not
1991    to assume very much about what sort of statistics it stores.  Only
1992    extremely general statistics (such as NULL-ness) are given dedicated
1993    columns in <structname>pg_statistic</structname>.  Everything else
1994    is stored in <quote>slots</quote>, which are groups of associated columns whose
1995    content is identified by a code number in one of the slot's columns.
1996    For more information see
1997    <filename>src/include/catalog/pg_statistic.h</filename>.
1998   </para>
1999
2000   <para>
2001    <structname>pg_statistic</structname> should not be readable by the
2002    public, since even statistical information about a table's contents
2003    may be considered sensitive.  (Example: minimum and maximum values
2004    of a salary column might be quite interesting.)
2005    <structname>pg_stats</structname> is a publicly readable view on
2006    <structname>pg_statistic</structname> that only exposes information
2007    about those tables that are readable by the current user.
2008    <structname>pg_stats</structname> is also designed to present the
2009    information in a more readable format than the underlying
2010    <structname>pg_statistic</structname> table --- at the cost that
2011    its schema must be extended whenever new slot types are added.
2012   </para>
2013
2014   <table>
2015    <title>pg_statistic Columns</title>
2016
2017    <tgroup cols=4>
2018     <thead>
2019      <row>
2020       <entry>Name</entry>
2021       <entry>Type</entry>
2022       <entry>References</entry>
2023       <entry>Description</entry>
2024      </row>
2025     </thead>
2026
2027     <tbody>
2028      <row>
2029       <entry>starelid</entry>
2030       <entry><type>oid</type></entry>
2031       <entry>pg_class.oid</entry>
2032       <entry>The table that the described column belongs to</entry>
2033      </row>
2034
2035      <row>
2036       <entry>staattnum</entry>
2037       <entry><type>int2</type></entry>
2038       <entry>pg_attribute.attnum</entry>
2039       <entry>The number of the described column</entry>
2040      </row>
2041
2042      <row>
2043       <entry>stanullfrac</entry>
2044       <entry><type>float4</type></entry>
2045       <entry></entry>
2046       <entry>The fraction of the column's entries that are NULL</entry>
2047      </row>
2048
2049      <row>
2050       <entry>stawidth</entry>
2051       <entry><type>int4</type></entry>
2052       <entry></entry>
2053       <entry>The average stored width, in bytes, of non-NULL entries</entry>
2054      </row>
2055
2056      <row>
2057       <entry>stadistinct</entry>
2058       <entry><type>float4</type></entry>
2059       <entry></entry>
2060       <entry>The number of distinct non-NULL data values in the column.
2061       A value greater than zero is the actual number of distinct values.
2062       A value less than zero is the negative of a fraction of the number
2063       of rows in the table (for example, a column in which values appear about
2064       twice on the average could be represented by stadistinct = -0.5).
2065       A zero value means the number of distinct values is unknown.
2066       </entry>
2067      </row>
2068
2069      <row>
2070       <entry>stakindN</entry>
2071       <entry><type>int2</type></entry>
2072       <entry></entry>
2073       <entry>A code number indicating the kind of statistics stored in the Nth
2074       <quote>slot</quote> of the <structname>pg_statistic</structname> row.
2075       </entry>
2076      </row>
2077
2078      <row>
2079       <entry>staopN</entry>
2080       <entry><type>oid</type></entry>
2081       <entry>pg_operator.oid</entry>
2082       <entry>An operator used to derive the statistics stored in the
2083       Nth <quote>slot</quote>.  For example, a histogram slot would show the <literal>&lt;</literal>
2084       operator that defines the sort order of the data.
2085       </entry>
2086      </row>
2087
2088      <row>
2089       <entry>stanumbersN</entry>
2090       <entry><type>float4[]</type></entry>
2091       <entry></entry>
2092       <entry>Numerical statistics of the appropriate kind for the Nth
2093       <quote>slot</quote>, or NULL if the slot kind does not involve numerical values.
2094       </entry>
2095      </row>
2096
2097      <row>
2098       <entry>stavaluesN</entry>
2099       <entry><type>text[]</type></entry>
2100       <entry></entry>
2101       <entry>Column data values of the appropriate kind for the Nth
2102       <quote>slot</quote>, or NULL if the slot kind does not store any data values.
2103       For datatype independence, all column data values are converted
2104       to external textual form and stored as TEXT datums.
2105       </entry>
2106      </row>
2107     </tbody>
2108    </tgroup>
2109   </table>
2110
2111  </sect1>
2112
2113
2114  <sect1 id="catalog-pg-trigger">
2115   <title>pg_trigger</title>
2116
2117   <para>
2118    This system catalog stores triggers on tables.  See under
2119    <command>CREATE TRIGGER</command> for more information.
2120   </para>
2121
2122   <table>
2123    <title>pg_trigger Columns</title>
2124
2125    <tgroup cols=4>
2126     <thead>
2127      <row>
2128       <entry>Name</entry>
2129       <entry>Type</entry>
2130       <entry>References</entry>
2131       <entry>Description</entry>
2132      </row>
2133     </thead>
2134
2135     <tbody>
2136      <row>
2137       <entry>tgrelid</entry>
2138       <entry><type>oid</type></entry>
2139       <entry>pg_class.oid</entry>
2140       <entry>The table this trigger is on</entry>
2141      </row>
2142
2143      <row>
2144       <entry>tgname</entry>
2145       <entry><type>name</type></entry>
2146       <entry></entry>
2147       <entry>Trigger name (need not be unique)</entry>
2148      </row>
2149
2150      <row>
2151       <entry>tgfoid</entry>
2152       <entry><type>oid</type></entry>
2153       <entry>pg_proc.oid</entry>
2154       <entry>The function to be called</entry>
2155      </row>
2156
2157      <row>
2158       <entry>tgtype</entry>
2159       <entry><type>int2</type></entry>
2160       <entry></entry>
2161       <entry>Bitmask identifying trigger conditions</entry>
2162      </row>
2163
2164      <row>
2165       <entry>tgenabled</entry>
2166       <entry><type>bool</type></entry>
2167       <entry></entry>
2168       <entry>True if trigger is enabled (not presently checked everywhere
2169       it should be, so disabling a trigger by setting this false does not
2170       work reliably)</entry>
2171      </row>
2172
2173      <row>
2174       <entry>tgisconstraint</entry>
2175       <entry><type>bool</type></entry>
2176       <entry></entry>
2177       <entry>True if trigger is a RI constraint</entry>
2178      </row>
2179
2180      <row>
2181       <entry>tgconstrname</entry>
2182       <entry><type>name</type></entry>
2183       <entry></entry>
2184       <entry>RI constraint name</entry>
2185      </row>
2186
2187      <row>
2188       <entry>tgconstrrelid</entry>
2189       <entry><type>oid</type></entry>
2190       <entry>pg_class.oid</entry>
2191       <entry>The table referenced by an RI constraint</entry>
2192      </row>
2193
2194      <row>
2195       <entry>tgdeferrable</entry>
2196       <entry><type>bool</type></entry>
2197       <entry></entry>
2198       <entry>True if deferrable</entry>
2199      </row>
2200
2201      <row>
2202       <entry>tginitdeferred</entry>
2203       <entry><type>bool</type></entry>
2204       <entry></entry>
2205       <entry>True if initially deferred</entry>
2206      </row>
2207
2208      <row>
2209       <entry>tgnargs</entry>
2210       <entry><type>int2</type></entry>
2211       <entry></entry>
2212       <entry>Number of argument strings passed to trigger function</entry>
2213      </row>
2214
2215      <row>
2216       <entry>tgattr</entry>
2217       <entry><type>int2vector</type></entry>
2218       <entry></entry>
2219       <entry>Currently unused</entry>
2220      </row>
2221
2222      <row>
2223       <entry>tgargs</entry>
2224       <entry><type>bytea</type></entry>
2225       <entry></entry>
2226       <entry>Argument strings to pass to trigger, each null-terminated</entry>
2227      </row>
2228     </tbody>
2229    </tgroup>
2230   </table>
2231
2232   <note>
2233    <para>
2234     <structname>pg_class</structname>.<structfield>reltriggers</structfield>
2235     needs to match up with the entries in this table.
2236    </para>
2237   </note>
2238
2239  </sect1>
2240
2241
2242  <sect1 id="catalog-pg-type">
2243   <title>pg_type</title>
2244
2245   <para>
2246    This catalog stores information about datatypes.  Scalar types
2247    (<quote>base types</>) are created with <command>CREATE TYPE</command>.
2248    A complex type is also created for each table in the database, to
2249    represent the row structure of the table.
2250   </para>
2251
2252   <table>
2253    <title>pg_type Columns</title>
2254
2255    <tgroup cols=4>
2256     <thead>
2257      <row>
2258       <entry>Name</entry>
2259       <entry>Type</entry>
2260       <entry>References</entry>
2261       <entry>Description</entry>
2262      </row>
2263     </thead>
2264
2265     <tbody>
2266      <row>
2267       <entry>typname</entry>
2268       <entry><type>name</type></entry>
2269       <entry></entry>
2270       <entry>Data type name</entry>
2271      </row>
2272
2273      <row>
2274       <entry>typowner</entry>
2275       <entry><type>int4</type></entry>
2276       <entry>pg_shadow.usesysid</entry>
2277       <entry>Owner (creator) of the type</entry>
2278      </row>
2279
2280      <row>
2281       <entry>typlen</entry>
2282       <entry><type>int2</type></entry>
2283       <entry></entry>
2284       <entry>Length of the storage representation of the type, -1 if variable length</entry>
2285      </row>
2286
2287      <row>
2288       <entry>typprtlen</entry>
2289       <entry><type>int2</type></entry>
2290       <entry></entry>
2291       <entry>unused</entry>
2292      </row>
2293
2294      <row>
2295       <entry>typbyval</entry>
2296       <entry><type>bool</type></entry>
2297       <entry></entry>
2298       <entry>
2299        <structfield>typbyval</structfield> determines whether internal
2300        routines pass a value of this type by value or by reference.
2301        Only <type>char</type>, <type>short</type>, and
2302        <type>int</type> equivalent items can be passed by value, so if
2303        the type is not 1, 2, or 4 bytes long,
2304        <productname>PostgreSQL</> does not have
2305        the option of passing by value and so
2306        <structfield>typbyval</structfield> had better be false.
2307        Variable-length types are always passed by reference. Note that
2308        <structfield>typbyval</structfield> can be false even if the
2309        length would allow pass-by-value; this is currently true for
2310        type <type>float4</type>, for example.
2311       </entry>
2312      </row>
2313
2314      <row>
2315       <entry>typtype</entry>
2316       <entry><type>char</type></entry>
2317       <entry></entry>
2318       <entry>
2319        <structfield>typtype</structfield> is <literal>b</literal> for
2320        a base type and <literal>c</literal> for a complex type (i.e.,
2321        a table's row type).  If <structfield>typtype</structfield> is
2322        <literal>c</literal>, <structfield>typrelid</structfield> is
2323        the OID of the type's entry in
2324        <structname>pg_class</structname>.
2325       </entry>
2326      </row>
2327
2328      <row>
2329       <entry>typisdefined</entry>
2330       <entry><type>bool</type></entry>
2331       <entry></entry>
2332       <entry>True if the type is defined, false if this is a placeholder
2333       entry for a not-yet-defined type.  When typisdefined is false,
2334       nothing except the type name and OID can be relied on.
2335       </entry>
2336      </row>
2337
2338      <row>
2339       <entry>typdelim</entry>
2340       <entry><type>char</type></entry>
2341       <entry></entry>
2342       <entry>Character that separates two values of this type when parsing
2343       array input.  Note that the delimiter is associated with the array
2344       element datatype, not the array datatype.</entry>
2345      </row>
2346
2347      <row>
2348       <entry>typrelid</entry>
2349       <entry><type>oid</type></entry>
2350       <entry>pg_class.oid</entry>
2351       <entry>
2352        If this is a complex type (see
2353        <structfield>typtype</structfield>), then this field points to
2354        the <structfield>pg_class</structfield> entry that defines the
2355        corresponding table. A table could theoretically be used as a
2356        composite data type, but this is not fully functional.
2357       </entry>
2358      </row>
2359
2360      <row>
2361       <entry>typelem</entry>
2362       <entry><type>oid</type></entry>
2363       <entry>pg_type.oid</entry>
2364       <entry>
2365        If <structfield>typelem</structfield> is not 0 then it
2366        identifies another row in <structname>pg_type</structname>.
2367        The current type can then be subscripted like an array yielding
2368        values of type <structfield>typelem</structfield>.  A
2369        <quote>true</quote> array type is variable length
2370        (<structfield>typlen</structfield> = -1),
2371        but some fixed-length (<structfield>typlen</structfield> &gt; 0) types
2372        also have nonzero <structfield>typelem</structfield>, for example
2373        <type>name</type> and <type>oidvector</type>.
2374        If a fixed-length type has a <structfield>typelem</structfield> then
2375        its internal representation must be N values of the
2376        <structfield>typelem</structfield> datatype with no other data.
2377        Variable-length array types have a header defined by the array
2378        subroutines.
2379       </entry>
2380      </row>
2381
2382      <row>
2383       <entry>typinput</entry>
2384       <entry><type>regproc</type></entry>
2385       <entry></entry>
2386       <entry>Input function</entry>
2387      </row>
2388
2389      <row>
2390       <entry>typoutput</entry>
2391       <entry><type>regproc</type></entry>
2392       <entry></entry>
2393       <entry>Output function</entry>
2394      </row>
2395
2396      <row>
2397       <entry>typreceive</entry>
2398       <entry><type>regproc</type></entry>
2399       <entry></entry>
2400       <entry>unused</entry>
2401      </row>
2402
2403      <row>
2404       <entry>typsend</entry>
2405       <entry><type>regproc</type></entry>
2406       <entry></entry>
2407       <entry>unused</entry>
2408      </row>
2409
2410      <row>
2411       <entry>typalign</entry>
2412       <entry><type>char</type></entry>
2413       <entry></entry>
2414       <entry><para>
2415
2416        <structfield>typalign</structfield> is the alignment required
2417        when storing a value of this type.  It applies to storage on
2418        disk as well as most representations of the value inside
2419        <productname>PostgreSQL</>.
2420         When multiple values are stored consecutively, such
2421        as in the representation of a complete row on disk, padding is
2422        inserted before a datum of this type so that it begins on the
2423        specified boundary.  The alignment reference is the beginning
2424        of the first datum in the sequence.
2425       </para><para>
2426        Possible values are:
2427        <itemizedlist>
2428         <listitem>
2429          <para>'c' = CHAR alignment, i.e., no alignment needed.</para>
2430         </listitem>
2431         <listitem>
2432          <para>'s' = SHORT alignment (2 bytes on most machines).</para>
2433         </listitem>
2434         <listitem>
2435          <para>'i' = INT alignment (4 bytes on most machines).</para>
2436         </listitem>
2437         <listitem>
2438          <para>'d' = DOUBLE alignment (8 bytes on many machines, but by no means all).</para>
2439         </listitem>
2440        </itemizedlist>
2441       </para><note>
2442        <para>
2443         For types used in system tables, it is critical that the size
2444         and alignment defined in <structname>pg_type</structname>
2445         agree with the way that the compiler will lay out the field in
2446         a struct representing a table row.
2447        </para>
2448       </note></entry>
2449      </row>
2450
2451      <row>
2452       <entry>typstorage</entry>
2453       <entry><type>char</type></entry>
2454       <entry></entry>
2455       <entry><para>
2456        <structfield>typstorage</structfield> tells for variable-length
2457        types (those with <structfield>typlen</structfield> = -1) if
2458        the type is prepared for toasting and what the default strategy
2459        for attributes of this type should be.
2460        Possible values are
2461        <itemizedlist>
2462         <listitem>
2463          <para>'p': Value must always be stored plain.</para>
2464         </listitem>
2465         <listitem>
2466          <para>
2467           'e': Value can be stored in a <quote>secondary</quote>
2468           relation (if relation has one, see
2469           <structname>pg_class</structname>.<structfield>reltoastrelid</structfield>).
2470          </para>
2471         </listitem>
2472         <listitem>
2473          <para>'m': Value can be stored compressed inline.</para>
2474         </listitem>
2475         <listitem>
2476          <para>'x': Value can be stored compressed inline or in <quote>secondary</quote>.</para>
2477         </listitem>
2478        </itemizedlist>
2479        Note that 'm' fields can also be moved out to secondary
2480        storage, but only as a last resort ('e' and 'x' fields are
2481        moved first).
2482       </para></entry>
2483      </row>
2484
2485      <row>
2486       <entry>typdefault</entry>
2487       <entry><type>text</type></entry>
2488       <entry></entry>
2489       <entry><para>
2490        <structfield>typdefault</structfield> is NULL for types without a
2491        default value.  If it's not NULL, it contains the external string
2492        representation of the type's default value.
2493       </para></entry>
2494      </row>
2495     </tbody>
2496    </tgroup>
2497   </table>
2498  </sect1>
2499 </chapter>
2500
2501 <!-- Keep this comment at the end of the file
2502 Local variables:
2503 mode:sgml
2504 sgml-omittag:nil
2505 sgml-shorttag:t
2506 sgml-minimize-attributes:nil
2507 sgml-always-quote-attributes:t
2508 sgml-indent-step:1
2509 sgml-indent-tabs-mode:nil
2510 sgml-indent-data:t
2511 sgml-parent-document:nil
2512 sgml-default-dtd-file:"./reference.ced"
2513 sgml-exposed-tags:nil
2514 sgml-local-catalogs:("/usr/share/sgml/catalog")
2515 sgml-local-ecat-files:nil
2516 End:
2517 -->