]> granicus.if.org Git - postgresql/commitdiff
New findoidjoins examines oid columns to find join relationships.
authorBruce Momjian <bruce@momjian.us>
Tue, 11 Aug 1998 02:32:00 +0000 (02:32 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 11 Aug 1998 02:32:00 +0000 (02:32 +0000)
contrib/README
contrib/findoidjoins/Makefile [new file with mode: 0644]
contrib/findoidjoins/README [new file with mode: 0644]
contrib/findoidjoins/findoidjoins.c [new file with mode: 0644]
contrib/pginterface/README
contrib/pginterface/pginterface.c
contrib/pginterface/pginterface.h
doc/src/graphics/catalogs.ps [new file with mode: 0644]

index 3a7fb56af62919c0af0e632c7067f0a740008af0..bf4d10ebc565e64b57247dd1aace2d34bf49171f 100644 (file)
@@ -18,6 +18,11 @@ earthdistance -
        Operator for computing earth distance for two points
        by Hal Snyder <hal@vailsys.com>
 
+findoidjoins -
+       Finds the joins used by oid columns by examining the actual
+       values in the oid columns and row oids.
+       by Bruce Momjian <root@candle.pha.pa.us>
+
 fulltextindex -
        Full text indexing using triggers
        by Maarten Boekhold <maartenb@dutepp0.et.tudelft.nl>
diff --git a/contrib/findoidjoins/Makefile b/contrib/findoidjoins/Makefile
new file mode 100644 (file)
index 0000000..e55b33a
--- /dev/null
@@ -0,0 +1,20 @@
+#
+# Makefile, requires pgsql/contrib/pginterface
+#
+#
+PGINTERFACE = pginterface.o halt.o # these have to be in your library search path
+TARGET = findoidjoins
+CFLAGS = -g -Wall -I. -I../../src/interfaces/libpq  -I/usr/local/pgsql/include
+LDFLAGS = -L/usr/local/pgsql/lib -lpq
+
+all : $(TARGET)
+
+findoidjoins:  $(PGINTERFACE) findoidjoins.c
+       gcc -o $@ $(CFLAGS) $@.c $(PGINTERFACE) $(LDFLAGS)
+
+clean:
+       rm -f *.o $(TARGET) log core
+
+install:
+       install -s -o bin -g bin $(TARGET) /usr/local/pgsql/bin
+
diff --git a/contrib/findoidjoins/README b/contrib/findoidjoins/README
new file mode 100644 (file)
index 0000000..7cd9abe
--- /dev/null
@@ -0,0 +1,68 @@
+
+
+                             findoidjoins
+
+This program scans the a database, and prints oid fields, and the tables
+they join to.  PostgreSQL version 6.3.2 crashes with aggregates on
+views, so I have removed the view pg_user from the list of relations to
+examine.
+
+Run on am empty database, it returns the system join relationships:
+
+---------------------------------------------------------------------------
+
+Join pg_aggregate.aggfinaltype => pg_proc.oid
+Join pg_aggregate.aggfinaltype => pg_type.oid
+Join pg_aggregate.aggowner => pg_proc.oid
+Join pg_aggregate.aggbasetype => pg_proc.oid
+Join pg_aggregate.aggbasetype => pg_type.oid
+Join pg_aggregate.aggtranstype1 => pg_proc.oid
+Join pg_aggregate.aggtranstype1 => pg_type.oid
+Join pg_aggregate.aggtranstype2 => pg_type.oid
+Join pg_am.amowner => pg_proc.oid
+Join pg_amop.amopid => pg_am.oid
+Join pg_amop.amopopr => pg_operator.oid
+Join pg_amop.amopclaid => pg_opclass.oid
+Join pg_amproc.amproc => pg_operator.oid
+Join pg_amproc.amproc => pg_proc.oid
+Join pg_amproc.amopclaid => pg_opclass.oid
+Join pg_amproc.amopclaid => pg_operator.oid
+Join pg_amproc.amopclaid => pg_proc.oid
+Join pg_amproc.amid => pg_am.oid
+Join pg_attribute.attrelid => pg_class.oid
+Join pg_attribute.atttypid => pg_type.oid
+Join pg_class.relam => pg_am.oid
+Join pg_class.reltype => pg_type.oid
+Join pg_class.relowner => pg_proc.oid
+Join pg_description.objoid => pg_proc.oid
+Join pg_description.objoid => pg_type.oid
+Join pg_index.indexrelid => pg_class.oid
+Join pg_index.indrelid => pg_class.oid
+Join pg_index.indproc => pg_proc.oid
+Join pg_opclass.opcdeftype => pg_type.oid
+Join pg_operator.oprcom => pg_operator.oid
+Join pg_operator.oprrsortop => pg_operator.oid
+Join pg_operator.oprlsortop => pg_operator.oid
+Join pg_operator.oprnegate => pg_operator.oid
+Join pg_operator.oprresult => pg_type.oid
+Join pg_operator.oprright => pg_type.oid
+Join pg_operator.oprleft => pg_type.oid
+Join pg_operator.oprowner => pg_proc.oid
+Join pg_parg.partype => pg_type.oid
+Join pg_parg.parproid => pg_operator.oid
+Join pg_parg.parproid => pg_proc.oid
+Join pg_proc.prolang => pg_language.oid
+Join pg_proc.prorettype => pg_type.oid
+Join pg_proc.proowner => pg_proc.oid
+Join pg_rewrite.ev_class => pg_class.oid
+Join pg_statistic.starelid => pg_class.oid
+Join pg_type.typrelid => pg_class.oid
+Join pg_type.typowner => pg_proc.oid
+Join pg_type.typelem => pg_operator.oid
+Join pg_type.typelem => pg_proc.oid
+Join pg_type.typelem => pg_type.oid
+
+
+---------------------------------------------------------------------------
+
+Bruce Momjian (root@candle.pha.pa.us)
diff --git a/contrib/findoidjoins/findoidjoins.c b/contrib/findoidjoins/findoidjoins.c
new file mode 100644 (file)
index 0000000..ad897c3
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * findoidjoins.c, required pgsql/contrib/pginterface
+ *
+ */
+
+#include <stdio.h>
+#include "halt.h"
+#include <libpq-fe.h>
+#include "pginterface.h"
+
+PGresult *attres, *relres;
+
+int
+main(int argc, char **argv)
+{
+       char            query[4000];
+       char            relname[256];
+       char            relname2[256];
+       char            attname[256];
+       int                     count;
+
+       if (argc != 2)
+               halt("Usage:  %s database\n", argv[0]);
+
+       connectdb(argv[1], NULL, NULL, NULL, NULL);
+       on_error_continue();
+       on_error_stop();
+
+       doquery("BEGIN WORK");
+       doquery("\
+               DECLARE c_attributes BINARY CURSOR FOR \
+               SELECT relname, a.attname \
+               FROM pg_class c, pg_attribute a, pg_type t \
+               WHERE a.attnum > 0 AND \
+                         relkind = 'r' AND \
+                         typname = 'oid' AND \
+                         a.attrelid = c.oid AND \
+                         a.atttypid = t.oid \
+               ORDER BY 1; \
+               ");
+       doquery("FETCH ALL IN c_attributes");
+       attres = get_result();
+
+       doquery("\
+               DECLARE c_relations BINARY CURSOR FOR \
+               SELECT relname \
+               FROM pg_class c \
+               WHERE relkind = 'r' AND \
+                         relname != 'pg_user' \
+               ORDER BY 1; \
+               ");
+       doquery("FETCH ALL IN c_relations");
+       relres = get_result();
+       
+       set_result(attres);
+       while (fetch(relname, attname) != END_OF_TUPLES)
+       {
+               set_result(relres);
+               reset_fetch();
+               while (fetch(relname2) != END_OF_TUPLES)
+               {
+                       unset_result(relres);
+                       sprintf(query,"\
+                               DECLARE c_matches BINARY CURSOR FOR \
+                               SELECT  count(*)
+                               FROM    %s t1, %s t2 \
+                               WHERE   t1.%s = t2.oid", relname, relname2, attname);
+
+                       doquery(query);
+                       doquery("FETCH ALL IN c_matches");
+                       fetch(&count);
+                       if (count != 0)
+                               printf("Join %s.%s => %s.oid\n", relname, attname, relname2);
+                       doquery("CLOSE c_matches");
+                       set_result(relres);
+               }
+               set_result(attres);
+       }
+
+       set_result(relres);
+       doquery("CLOSE c_relations");
+       PQclear(relres);
+
+       set_result(attres);
+       doquery("CLOSE c_attributes");
+       PQclear(attres);
+       unset_result(attres);
+       
+       doquery("COMMIT WORK");
+
+       disconnectdb();
+       return 0;
+}
index 42fd0a5dfe7e6839d400880880632ba0a34170dc..32b0957242647550471fe9251459eb08257cea8f 100644 (file)
@@ -22,6 +22,11 @@ useful if you are running the query engine on a system with a different
 architecture than the database server.  If you pass a NULL pointer, the
 column is skipped, and you can use libpq to handle it as you wish.
 
+There are two functions, get_result() and set_result, that allow you to
+handle multiple result sets at the same time.
+
+There is a reset_fetch() that starts the fetch back at the beginning.
+
 There is a demo program called pginsert that demonstrates how the
 library can be used.
 
index 3c19943c263b76fe30ae960e9a360da0e54693dd..52b1011e76ac5e0d8317194e7fa31845f584c9c2 100644 (file)
@@ -22,6 +22,9 @@ static PGresult *res = NULL;
 
 static int     on_error_state = ON_ERROR_STOP;
 
+static in_result_block = false;
+static was_get_unset_result = false;
+
 /* LOCAL VARIABLES */
 static int     tuple;
 
@@ -64,9 +67,10 @@ disconnectdb()
 PGresult   *
 doquery(char *query)
 {
-       if (res != NULL)
+       if (res != NULL && in_result_block == false && was_get_unset_result == false)
                PQclear(res);
 
+       was_get_unset_result = false;
        res = PQexec(conn, query);
 
        if (on_error_state == ON_ERROR_STOP &&
@@ -187,3 +191,69 @@ on_error_continue()
 {
        on_error_state = ON_ERROR_CONTINUE;
 }
+
+
+/*
+**
+**             get_result
+**
+*/
+PGresult   *get_result()
+{
+       was_get_unset_result = true;
+       /* we have to store the fetch location somewhere */
+       memcpy(&res->cmdStatus[CMDSTATUS_LEN-sizeof(tuple)],&tuple, sizeof(tuple));
+       return res;
+}
+       
+/*
+**
+**             set_result
+**
+*/
+void        set_result(PGresult *newres)
+{
+       if (newres == NULL)
+               halt("set_result called with null result pointer\n");
+
+       if (res != NULL && was_get_unset_result == false)
+               if (in_result_block == false)
+                       PQclear(res);
+               else
+                       memcpy(&res->cmdStatus[CMDSTATUS_LEN-sizeof(tuple)], &tuple, sizeof(tuple));
+               
+       in_result_block = true;
+       was_get_unset_result = false;
+       memcpy(&tuple, &newres->cmdStatus[CMDSTATUS_LEN-sizeof(tuple)], sizeof(tuple));
+       res = newres;
+}
+
+
+/*
+**
+**             unset_result
+**
+*/
+void       unset_result(PGresult *oldres)
+{
+       if (oldres == NULL)
+               halt("unset_result called with null result pointer\n");
+
+       if (in_result_block == false)
+               halt("Unset of result without being set.\n");
+
+       was_get_unset_result = true;
+       memcpy(&oldres->cmdStatus[CMDSTATUS_LEN-sizeof(tuple)], &tuple, sizeof(tuple));
+       in_result_block = false;
+}
+
+/*
+**
+**             reset_fetch
+**
+*/
+void        reset_fetch()
+{
+       tuple = 0;
+}
+
index ad8320aca9acd7345c040552f941bf8835203657..5f856ac016b62f5cf51aff4a3e6d3c778804a978 100644 (file)
@@ -10,5 +10,9 @@ int                   fetch(void *param,...);
 int                    fetchwithnulls(void *param,...);
 void           on_error_continue();
 void           on_error_stop();
+PGresult   *get_result();
+void        set_result(PGresult *newres);
+void        unset_result(PGresult *oldres);
+void        reset_fetch();
 
 #define END_OF_TUPLES  (-1)
diff --git a/doc/src/graphics/catalogs.ps b/doc/src/graphics/catalogs.ps
new file mode 100644 (file)
index 0000000..21ef9fd
--- /dev/null
@@ -0,0 +1,1018 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.09
+%%CreationDate: Sat Feb 24 21:37:20 1996
+%%DocumentNeededResources: font Times-Bold
+%%+ font Times-Italic
+%%+ font Times-Roman
+%%+ font Courier
+%%+ font Symbol
+%%DocumentSuppliedResources: file manual-er.eps
+%%+ file manual-files.eps
+%%+ file manual-arch.eps
+%%+ procset grops 1.09 0
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.09 0
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll 
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{ pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[] 0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{} def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Courier
+%%IncludeResource: font Symbol
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier@0 ENC0/Courier RE/Times-Roman@0 ENC0/Times-Roman RE
+/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE
+%%EndProlog
+%%Page: 23 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+.44 LW 77.5 109.2 72 109.2 DL 80.5 109.2 75 109.2 DL 86 109.2 80.5 109.2
+DL 91.5 109.2 86 109.2 DL 97 109.2 91.5 109.2 DL 102.5 109.2 97 109.2 DL
+108 109.2 102.5 109.2 DL 113.5 109.2 108 109.2 DL 119 109.2 113.5 109.2
+DL 124.5 109.2 119 109.2 DL 130 109.2 124.5 109.2 DL 135.5 109.2 130
+109.2 DL 141 109.2 135.5 109.2 DL 146.5 109.2 141 109.2 DL 152 109.2
+146.5 109.2 DL 157.5 109.2 152 109.2 DL 163 109.2 157.5 109.2 DL 168.5
+109.2 163 109.2 DL 174 109.2 168.5 109.2 DL 179.5 109.2 174 109.2 DL 185
+109.2 179.5 109.2 DL 190.5 109.2 185 109.2 DL 196 109.2 190.5 109.2 DL
+201.5 109.2 196 109.2 DL 207 109.2 201.5 109.2 DL 212.5 109.2 207 109.2
+DL 218 109.2 212.5 109.2 DL 223.5 109.2 218 109.2 DL 229 109.2 223.5
+109.2 DL 234.5 109.2 229 109.2 DL 240 109.2 234.5 109.2 DL 245.5 109.2
+240 109.2 DL 251 109.2 245.5 109.2 DL 256.5 109.2 251 109.2 DL 262 109.2
+256.5 109.2 DL 267.5 109.2 262 109.2 DL 273 109.2 267.5 109.2 DL 278.5
+109.2 273 109.2 DL 284 109.2 278.5 109.2 DL 289.5 109.2 284 109.2 DL 295
+109.2 289.5 109.2 DL 300.5 109.2 295 109.2 DL 306 109.2 300.5 109.2 DL
+311.5 109.2 306 109.2 DL 317 109.2 311.5 109.2 DL 322.5 109.2 317 109.2
+DL 328 109.2 322.5 109.2 DL 333.5 109.2 328 109.2 DL 339 109.2 333.5
+109.2 DL 344.5 109.2 339 109.2 DL 350 109.2 344.5 109.2 DL 355.5 109.2
+350 109.2 DL 361 109.2 355.5 109.2 DL 366.5 109.2 361 109.2 DL 372 109.2
+366.5 109.2 DL 377.5 109.2 372 109.2 DL 383 109.2 377.5 109.2 DL 388.5
+109.2 383 109.2 DL 394 109.2 388.5 109.2 DL 399.5 109.2 394 109.2 DL 405
+109.2 399.5 109.2 DL 410.5 109.2 405 109.2 DL 416 109.2 410.5 109.2 DL
+421.5 109.2 416 109.2 DL 427 109.2 421.5 109.2 DL 432.5 109.2 427 109.2
+DL 438 109.2 432.5 109.2 DL 443.5 109.2 438 109.2 DL 449 109.2 443.5
+109.2 DL 454.5 109.2 449 109.2 DL 460 109.2 454.5 109.2 DL 465.5 109.2
+460 109.2 DL 471 109.2 465.5 109.2 DL 476.5 109.2 471 109.2 DL 482 109.2
+476.5 109.2 DL 487.5 109.2 482 109.2 DL 493 109.2 487.5 109.2 DL 498.5
+109.2 493 109.2 DL 504 109.2 498.5 109.2 DL 0 0 432 754 -433.278 761 72
+568.878 PBEGIN
+%%BeginDocument: manual-er.eps
+%%Title: stdin
+%%Creator: fig2dev Version 3.1 Patchlevel 0
+%%CreationDate: Sat Feb 24 21:36:26 1996
+%%For: jolly@arcadia.CS.Berkeley.EDU (Jolly Chen,421 Soda,(510) 6421863,540-5955)
+%%Orientation: Portrait
+%%BoundingBox: 0 0 754 761
+%%Pages: 0
+%%BeginSetup
+%%IncludeFeature: *PageSize Letter
+%%EndSetup
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {} def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+-30.0 776.0 translate
+1 -1 scale
+
+/clp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.90000 0.90000 sc
+0.500 slw
+% Polyline
+n 194 414 m 259 414 l  259 454 l  274 454 l  gs col-1 s gr 
+% Polyline
+n 194 234 m 274 234 l  gs col-1 s gr 
+% Polyline
+n 259 134 m 239 134 l  239 394 l  199 394 l  gs col-1 s gr 
+% Polyline
+n 259 54 m 219 54 l  219 389 l  gs col-1 s gr 
+% Polyline
+n 199 389 m 219 389 l  gs col-1 s gr 
+% Polyline
+n 279 254 m 259 254 l  259 399 l  199 399 l  gs col-1 s gr 
+% Polyline
+n 179 234 m 199 234 l  gs col-1 s gr 
+% Polyline
+n 259 74 m 199 74 l  199 214 l  179 214 l  gs col-1 s gr 
+% Polyline
+n 379 294 m 399 294 l  gs col-1 s gr 
+% Polyline
+n 384 239 m 459 239 l  459 514 l  499 514 l  gs col-1 s gr 
+% Polyline
+n 459 494 m 499 494 l  gs col-1 s gr 
+% Polyline
+n 379 274 m 514 274 l  gs col-1 s gr 
+% Polyline
+n 379 474 m 439 474 l  gs col-1 s gr 
+% Polyline
+n 379 494 m 439 494 l  gs col-1 s gr 
+% Polyline
+n 379 514 m 439 514 l  gs col-1 s gr 
+% Polyline
+n 379 534 m 439 534 l  gs col-1 s gr 
+% Polyline
+n 379 554 m 439 554 l  gs col-1 s gr 
+% Polyline
+n 379 574 m 439 574 l  gs col-1 s gr 
+% Polyline
+n 379 594 m 439 594 l  gs col-1 s gr 
+% Polyline
+n 379 614 m 439 614 l  gs col-1 s gr 
+% Polyline
+n 379 634 m 439 634 l  gs col-1 s gr 
+% Polyline
+n 379 654 m 439 654 l  gs col-1 s gr 
+% Polyline
+n 439 279 m 514 279 l  gs col-1 s gr 
+% Polyline
+n 434 439 m 444 449 l  gs col-1 s gr 
+% Polyline
+n 404 269 m 414 279 l  gs col-1 s gr 
+% Polyline
+n 454 439 m 464 449 l  gs col-1 s gr 
+% Polyline
+n 619 634 m 659 634 l  gs col-1 s gr 
+% Polyline
+n 634 519 m 644 529 l  gs col-1 s gr 
+% Polyline
+n 654 579 m 664 589 l  gs col-1 s gr 
+% Polyline
+n 499 494 m 519 494 l  gs col-1 s gr 
+% Polyline
+n 499 514 m 519 514 l  gs col-1 s gr 
+% Polyline
+n 599 104 m 599 79 l  514 79 l  514 104 l  clp  gs col-1 s gr 
+% Polyline
+n 624 124 m 624 104 l  514 104 l  514 124 l  clp  gs col-1 s gr 
+% Polyline
+n 459 534 m 499 534 l  gs col-1 s gr 
+% Polyline
+n 499 534 m 519 534 l  gs col-1 s gr 
+% Polyline
+n 459 534 m 459 514 l  gs col-1 s gr 
+% Polyline
+n 384 229 m 499 229 l  499 314 l  519 314 l  gs col-1 s gr 
+% Polyline
+n 624 114 m 639 114 l  639 354 l  619 354 l  gs col-1 s gr 
+% Polyline
+n 384 454 m 419 454 l  419 414 l  739 414 l  gs col-1 s gr 
+% Polyline
+n 384 449 m 399 449 l  399 399 l  699 399 l  699 54 l  739 54 l  gs col-1 s gr 
+% Polyline
+n 624 449 m 719 449 l  719 94 l  739 94 l  gs col-1 s gr 
+% Polyline
+n 679 134 m 744 134 l  gs col-1 s gr 
+% Polyline
+n 674 159 m 684 169 l  gs col-1 s gr 
+% Polyline
+n 839 74 m 859 74 l  859 249 l  844 249 l  gs col-1 s gr 
+% Polyline
+n 844 254 m 859 254 l  859 434 l  839 434 l  gs col-1 s gr 
+% Polyline
+n 624 269 m 679 269 l  679 114 l  739 114 l  gs col-1 s gr 
+% Polyline
+n 624 274 m 679 274 l  679 474 l  739 474 l  gs col-1 s gr 
+% Polyline
+n 521 284 m 514 284 514 357 7 arcto 4 {pop} repeat 514 364 617 364 7 arcto 4 {pop} repeat 624 364 624 291 7 arcto 4 {pop} repeat 624 284 521 284 7 arcto 4 {pop} repeat clp  gs col-1 s gr 
+% Polyline
+n 179 604 m 179 579 l  74 579 l  74 604 l  clp  gs col-1 s gr 
+% Polyline
+n 184 704 m 184 679 l  74 679 l  74 704 l  clp  gs col-1 s gr 
+% Polyline
+n 81 604 m 74 604 74 617 7 arcto 4 {pop} repeat 74 624 177 624 7 arcto 4 {pop} repeat 184 624 184 611 7 arcto 4 {pop} repeat 184 604 81 604 7 arcto 4 {pop} repeat clp  gs col-1 s gr 
+% Polyline
+n 184 724 m 184 704 l  74 704 l  74 724 l  clp  gs col-1 s gr 
+% Polyline
+n 179 614 m 199 614 l  199 714 l  184 714 l  gs col-1 s gr 
+% Polyline
+n 184 764 m 184 724 l  74 724 l  74 764 l  clp  gs col-1 s gr 
+% Polyline
+n 184 784 m 184 764 l  74 764 l  74 784 l  clp  gs col-1 s gr 
+% Polyline
+n 81 724 m 74 724 74 777 7 arcto 4 {pop} repeat 74 784 177 784 7 arcto 4 {pop} repeat 184 784 184 731 7 arcto 4 {pop} repeat 184 724 81 724 7 arcto 4 {pop} repeat clp  gs col-1 s gr 
+% Polyline
+n 166 804 m 159 804 159 812 7 arcto 4 {pop} repeat 159 819 172 819 7 arcto 4 {pop} repeat 179 819 179 811 7 arcto 4 {pop} repeat 179 804 166 804 7 arcto 4 {pop} repeat clp  gs col-1 s gr 
+% Polyline
+n 439 654 m 439 279 l  gs col-1 s gr 
+% Polyline
+       [4.4] 0 setdash
+n 359 94 m 419 94 l  419 269 l  514 269 l  gs col-1 s gr       [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 384 234 m 479 234 l  479 334 l  519 334 l  gs col-1 s gr     [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 239 739 m 279 739 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+n 239 759 m 279 759 l  gs col-1 s gr 
+% Polyline
+       [4.4] 0 setdash
+n 379 314 m 399 314 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 379 334 m 399 334 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 399 294 m 399 334 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+n 399 274 m 399 294 l  gs col-1 s gr 
+% Polyline
+       [4.4] 0 setdash
+n 619 614 m 639 614 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 619 594 m 639 594 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+n 521 464 m 514 464 514 677 7 arcto 4 {pop} repeat 514 684 617 684 7 arcto 4 {pop} repeat 624 684 624 471 7 arcto 4 {pop} repeat 624 464 521 464 7 arcto 4 {pop} repeat clp  gs col-1 s gr 
+% Polyline
+       [4.4] 0 setdash
+n 639 594 m 639 614 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 619 574 m 639 574 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 619 554 m 639 554 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 624 454 m 639 454 l  639 594 l  gs col-1 s gr        [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 619 654 m 659 654 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 619 674 m 659 674 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+       [4.4] 0 setdash
+n 659 674 m 659 654 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+n 624 279 m 659 279 l  659 634 l  gs col-1 s gr 
+% Polyline
+       [4.4] 0 setdash
+n 659 634 m 659 654 l  gs col-1 s gr   [] 0 setdash
+% Polyline
+n 154 184 m 154 159 l  69 159 l  69 184 l  clp  gs col-1 s gr 
+% Polyline
+n 76 184 m 69 184 69 237 7 arcto 4 {pop} repeat 69 244 172 244 7 arcto 4 {pop} repeat 179 244 179 191 7 arcto 4 {pop} repeat 179 184 76 184 7 arcto 4 {pop} repeat clp  gs col-1 s gr 
+% Polyline
+n 69 224 m 179 224 l  gs col-1 s gr 
+% Polyline
+n 174 414 m 194 414 l  gs col-1 s gr 
+% Polyline
+n 179 399 m 199 399 l  gs col-1 s gr 
+% Polyline
+n 179 394 m 199 394 l  gs col-1 s gr 
+% Polyline
+n 179 389 m 199 389 l  gs col-1 s gr 
+% Polyline
+n 179 404 m 179 384 l  69 384 l  69 404 l  clp  gs col-1 s gr 
+% Polyline
+n 154 384 m 154 359 l  69 359 l  69 384 l  clp  gs col-1 s gr 
+% Polyline
+n 179 424 m 179 404 l  69 404 l  69 424 l  clp  gs col-1 s gr 
+% Polyline
+n 359 224 m 359 199 l  274 199 l  274 224 l  clp  gs col-1 s gr 
+% Polyline
+n 384 244 m 384 224 l  274 224 l  274 244 l  clp  gs col-1 s gr 
+% Polyline
+n 384 344 m 384 244 l  274 244 l  274 344 l  clp  gs col-1 s gr 
+% Polyline
+n 339 44 m 339 19 l  254 19 l  254 44 l  clp  gs col-1 s gr 
+% Polyline
+n 261 44 m 254 44 254 137 7 arcto 4 {pop} repeat 254 144 357 144 7 arcto 4 {pop} repeat 364 144 364 51 7 arcto 4 {pop} repeat 364 44 261 44 7 arcto 4 {pop} repeat clp  gs col-1 s gr 
+% Polyline
+n 254 124 m 364 124 l  gs col-1 s gr 
+% Polyline
+n 819 44 m 819 19 l  734 19 l  734 44 l  clp  gs col-1 s gr 
+% Polyline
+n 741 44 m 734 44 734 137 7 arcto 4 {pop} repeat 734 144 837 144 7 arcto 4 {pop} repeat 844 144 844 51 7 arcto 4 {pop} repeat 844 44 741 44 7 arcto 4 {pop} repeat clp  gs col-1 s gr 
+% Polyline
+n 734 104 m 844 104 l  gs col-1 s gr 
+% Polyline
+n 819 244 m 819 219 l  734 219 l  734 244 l  clp  gs col-1 s gr 
+% Polyline
+n 844 264 m 844 244 l  734 244 l  734 264 l  clp  gs col-1 s gr 
+% Polyline
+n 599 264 m 599 239 l  514 239 l  514 264 l  clp  gs col-1 s gr 
+% Polyline
+n 624 284 m 624 264 l  514 264 l  514 284 l  clp  gs col-1 s gr 
+% Polyline
+n 624 364 m 624 284 l  514 284 l  514 364 l  clp  gs col-1 s gr 
+% Polyline
+n 514 344 m 624 344 l  gs col-1 s gr 
+% Polyline
+n 819 404 m 819 379 l  734 379 l  734 404 l  clp  gs col-1 s gr 
+% Polyline
+n 741 404 m 734 404 734 477 7 arcto 4 {pop} repeat 734 484 837 484 7 arcto 4 {pop} repeat 844 484 844 411 7 arcto 4 {pop} repeat 844 404 741 404 7 arcto 4 {pop} repeat clp  gs col-1 s gr 
+% Polyline
+n 734 464 m 844 464 l  gs col-1 s gr 
+% Polyline
+n 599 444 m 599 419 l  514 419 l  514 444 l  clp  gs col-1 s gr 
+% Polyline
+n 624 464 m 624 444 l  514 444 l  514 464 l  clp  gs col-1 s gr 
+% Polyline
+n 624 544 m 624 464 l  514 464 l  514 544 l  clp  gs col-1 s gr 
+% Polyline
+n 624 684 m 624 544 l  514 544 l  514 684 l  clp  gs col-1 s gr 
+% Polyline
+n 384 464 m 384 444 l  274 444 l  274 464 l  clp  gs col-1 s gr 
+% Polyline
+n 359 444 m 359 419 l  274 419 l  274 444 l  clp  gs col-1 s gr 
+% Polyline
+n 384 664 m 384 464 l  274 464 l  274 664 l  clp  gs col-1 s gr 
+% Interp Spline
+n 219 799 m
+       219.84 787.54 219.84 782.54 219 779 curveto
+       217.75 773.72 212.79 763.10 209 759 curveto
+       205.29 754.99 199.04 751.24 184 744 curveto
+ gs col-1 s gr
+
+n 190.34 749.27 m 184.00 744.00 l 192.08 745.67 l gs col-1 s gr
+/Times-Roman findfont 14.00 scalefont setfont
+589 339 m
+gs 1 -1 sc ([8]) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+299 79 m
+gs 1 -1 sc ([8]) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+119 659 m
+gs 1 -1 sc (REFERS-TO) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+79 779 m
+gs 1 -1 sc (non-key) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+249 459 m
+gs 1 -1 sc (1) col-1 show gr
+% Polyline
+n 74 194 m 59 194 l  59 394 l  69 394 l  gs col-1 s gr 
+/Times-Roman findfont 14.00 scalefont setfont
+184 429 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+189 859 m
+gs 1 -1 sc (identified by the non-oid primary key in other contexts\).) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+49 399 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+34 189 m
+gs 1 -1 sc (13:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+264 229 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+184 229 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+184 209 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+229 89 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+209 379 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+229 379 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+249 379 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+229 129 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+229 49 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+389 439 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+409 439 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+389 349 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+504 264 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+489 349 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+489 329 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+389 224 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+629 369 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+629 109 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+429 669 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+504 294 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+369 89 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+469 254 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+389 254 m
+gs 1 -1 sc (0:1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+284 739 m
+gs 1 -1 sc (optional) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+284 759 m
+gs 1 -1 sc (mandatory) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+424 194 m
+gs 1 -1 sc (0:1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+709 49 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+709 89 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+629 444 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+629 469 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+629 629 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+664 639 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+649 294 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+629 264 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+669 299 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+709 489 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+689 429 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+849 449 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+849 69 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+849 244 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+849 269 m
+gs 1 -1 sc (1) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+654 134 m
+gs 1 -1 sc (0:N) col-1 show gr
+/Times-Roman findfont 18.00 scalefont setfont
+39 569 m
+gs 1 -1 sc (KEY:) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+74 239 m
+gs 1 -1 sc (atttypid) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 259 m
+gs 1 -1 sc (typrelid) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 279 m
+gs 1 -1 sc (typinput) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 299 m
+gs 1 -1 sc (typoutput) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 319 m
+gs 1 -1 sc (typreceive) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 339 m
+gs 1 -1 sc (typsend) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+259 139 m
+gs 1 -1 sc (indexrelid) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+739 119 m
+gs 1 -1 sc (amopselect) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+739 139 m
+gs 1 -1 sc (amopnpages) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+519 359 m
+gs 1 -1 sc (prolang) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+739 479 m
+gs 1 -1 sc (amproc) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+519 559 m
+gs 1 -1 sc (oprcom) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+519 579 m
+gs 1 -1 sc (oprnegate) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+519 599 m
+gs 1 -1 sc (oprlsortop) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+519 619 m
+gs 1 -1 sc (oprrsortop) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+519 639 m
+gs 1 -1 sc (oprcode) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+519 659 m
+gs 1 -1 sc (oprrest) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+519 679 m
+gs 1 -1 sc (oprjoin) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 479 m
+gs 1 -1 sc (amgettuple) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 499 m
+gs 1 -1 sc (aminsert) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 519 m
+gs 1 -1 sc (amdelete) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 539 m
+gs 1 -1 sc (amgetattr) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 559 m
+gs 1 -1 sc (ambeginscan) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 579 m
+gs 1 -1 sc (amrescan) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 599 m
+gs 1 -1 sc (amendscan) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 619 m
+gs 1 -1 sc (ammarkpos) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 639 m
+gs 1 -1 sc (amrestrpos) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+279 659 m
+gs 1 -1 sc (ambuild) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+79 599 m
+gs 1 -1 sc (DEPENDENT) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+79 699 m
+gs 1 -1 sc (INDEPENDENT) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+74 179 m
+gs 1 -1 sc (pg_attribute) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+74 379 m
+gs 1 -1 sc (pg_class) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+259 39 m
+gs 1 -1 sc (pg_index) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+279 219 m
+gs 1 -1 sc (pg_type) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+279 439 m
+gs 1 -1 sc (pg_am) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+519 259 m
+gs 1 -1 sc (pg_proc) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+519 99 m
+gs 1 -1 sc (pg_language) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+739 39 m
+gs 1 -1 sc (pg_amop) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+739 239 m
+gs 1 -1 sc (pg_opclass) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+739 399 m
+gs 1 -1 sc (pg_amproc) col-1 show gr
+/Times-Bold findfont 14.00 scalefont setfont
+519 439 m
+gs 1 -1 sc (pg_operator) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+74 199 m
+gs 1 -1 sc (attrelid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+74 219 m
+gs 1 -1 sc (attnum) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+74 419 m
+gs 1 -1 sc (relam) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+74 399 m
+gs 1 -1 sc (oid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+259 59 m
+gs 1 -1 sc (indrelid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+259 79 m
+gs 1 -1 sc (indkey) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+259 99 m
+gs 1 -1 sc (indproc) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+259 119 m
+gs 1 -1 sc (indpred) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+279 239 m
+gs 1 -1 sc (oid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+279 459 m
+gs 1 -1 sc (oid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+519 279 m
+gs 1 -1 sc (oid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+519 119 m
+gs 1 -1 sc (oid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+739 59 m
+gs 1 -1 sc (amopid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+739 79 m
+gs 1 -1 sc (amopclaid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+739 99 m
+gs 1 -1 sc (amopopr) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+739 259 m
+gs 1 -1 sc (oid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+739 419 m
+gs 1 -1 sc (amid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+739 439 m
+gs 1 -1 sc (amopclaid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+739 459 m
+gs 1 -1 sc (amprocnum) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+519 459 m
+gs 1 -1 sc (oid) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+79 719 m
+gs 1 -1 sc (primary key) col-1 show gr
+/Times-BoldItalic findfont 14.00 scalefont setfont
+79 619 m
+gs 1 -1 sc (foreign key) col-1 show gr
+/Times-Italic findfont 14.00 scalefont setfont
+79 739 m
+gs 1 -1 sc (non-oid primary) col-1 show gr
+/Times-Italic findfont 14.00 scalefont setfont
+84 759 m
+gs 1 -1 sc (key \(if any\)) col-1 show gr
+/Times-Italic findfont 14.00 scalefont setfont
+519 479 m
+gs 1 -1 sc (oprname) col-1 show gr
+/Times-Italic findfont 14.00 scalefont setfont
+519 499 m
+gs 1 -1 sc (oprleft) col-1 show gr
+/Times-Italic findfont 14.00 scalefont setfont
+519 519 m
+gs 1 -1 sc (oprright) col-1 show gr
+/Times-Italic findfont 14.00 scalefont setfont
+519 539 m
+gs 1 -1 sc (oprresult) col-1 show gr
+/Times-Italic findfont 14.00 scalefont setfont
+519 299 m
+gs 1 -1 sc (proname) col-1 show gr
+/Times-Italic findfont 14.00 scalefont setfont
+519 319 m
+gs 1 -1 sc (prorettype) col-1 show gr
+/Times-Italic findfont 14.00 scalefont setfont
+519 339 m
+gs 1 -1 sc (proargtypes) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+189 819 m
+gs 1 -1 sc (indicates these key values are alternate primary keys) col-1 show gr
+/Times-Roman findfont 14.00 scalefont setfont
+189 839 m
+gs 1 -1 sc (\(i.e., this class is generally identified by oid but may be) col-1 show gr
+$F2psEnd
+restore
+%%EndDocument
+end PEND/F0 11/Times-Bold@0 SF(Figur)177.701 595.278 Q 2.75(e3)-.198 G
+/F1 11/Times-Roman@0 SF 5.5(.T)-2.75 G(he major)-5.5 E/F2 10
+/Times-Roman@0 SF(POSTGRES)2.75 E F1(system catalogs.)2.75 E 77.5
+608.478 72 608.478 DL 80.5 608.478 75 608.478 DL 86 608.478 80.5 608.478
+DL 91.5 608.478 86 608.478 DL 97 608.478 91.5 608.478 DL 102.5 608.478
+97 608.478 DL 108 608.478 102.5 608.478 DL 113.5 608.478 108 608.478 DL
+119 608.478 113.5 608.478 DL 124.5 608.478 119 608.478 DL 130 608.478
+124.5 608.478 DL 135.5 608.478 130 608.478 DL 141 608.478 135.5 608.478
+DL 146.5 608.478 141 608.478 DL 152 608.478 146.5 608.478 DL 157.5
+608.478 152 608.478 DL 163 608.478 157.5 608.478 DL 168.5 608.478 163
+608.478 DL 174 608.478 168.5 608.478 DL 179.5 608.478 174 608.478 DL 185
+608.478 179.5 608.478 DL 190.5 608.478 185 608.478 DL 196 608.478 190.5
+608.478 DL 201.5 608.478 196 608.478 DL 207 608.478 201.5 608.478 DL
+212.5 608.478 207 608.478 DL 218 608.478 212.5 608.478 DL 223.5 608.478
+218 608.478 DL 229 608.478 223.5 608.478 DL 234.5 608.478 229 608.478 DL
+240 608.478 234.5 608.478 DL 245.5 608.478 240 608.478 DL 251 608.478
+245.5 608.478 DL 256.5 608.478 251 608.478 DL 262 608.478 256.5 608.478
+DL 267.5 608.478 262 608.478 DL 273 608.478 267.5 608.478 DL 278.5
+608.478 273 608.478 DL 284 608.478 278.5 608.478 DL 289.5 608.478 284
+608.478 DL 295 608.478 289.5 608.478 DL 300.5 608.478 295 608.478 DL 306
+608.478 300.5 608.478 DL 311.5 608.478 306 608.478 DL 317 608.478 311.5
+608.478 DL 322.5 608.478 317 608.478 DL 328 608.478 322.5 608.478 DL
+333.5 608.478 328 608.478 DL 339 608.478 333.5 608.478 DL 344.5 608.478
+339 608.478 DL 350 608.478 344.5 608.478 DL 355.5 608.478 350 608.478 DL
+361 608.478 355.5 608.478 DL 366.5 608.478 361 608.478 DL 372 608.478
+366.5 608.478 DL 377.5 608.478 372 608.478 DL 383 608.478 377.5 608.478
+DL 388.5 608.478 383 608.478 DL 394 608.478 388.5 608.478 DL 399.5
+608.478 394 608.478 DL 405 608.478 399.5 608.478 DL 410.5 608.478 405
+608.478 DL 416 608.478 410.5 608.478 DL 421.5 608.478 416 608.478 DL 427
+608.478 421.5 608.478 DL 432.5 608.478 427 608.478 DL 438 608.478 432.5
+608.478 DL 443.5 608.478 438 608.478 DL 449 608.478 443.5 608.478 DL
+454.5 608.478 449 608.478 DL 460 608.478 454.5 608.478 DL 465.5 608.478
+460 608.478 DL 471 608.478 465.5 608.478 DL 476.5 608.478 471 608.478 DL
+482 608.478 476.5 608.478 DL 487.5 608.478 482 608.478 DL 493 608.478
+487.5 608.478 DL 498.5 608.478 493 608.478 DL 504 608.478 498.5 608.478
+DL 13.75(\(3\) T)113.5 649.078 R .962(ypes and procedures)-.88 F/F3 8
+/Times-Roman@0 SF(6)-4.4 I F1 .961(are central to the schema.)3.712 4.4
+N .961(Nearly e)6.461 F -.165(ve)-.275 G .961(ry catalog contains).165 F
+.739(some reference to instances in one or both of these classes.)
+142.826 662.278 R -.165(Fo)6.239 G 3.489(re).165 G(xample,)-3.654 E F2
+(POST)3.489 E(-)-.92 E(GRES)142.826 675.478 Q F1 .182(frequently uses t\
+ype signatures \(e.g., of functions and operators\) to identify)2.933 F
+.32 LW 76 685.078 72 685.078 DL 80 685.078 76 685.078 DL 84 685.078 80
+685.078 DL 88 685.078 84 685.078 DL 92 685.078 88 685.078 DL 96 685.078
+92 685.078 DL 100 685.078 96 685.078 DL 104 685.078 100 685.078 DL 108
+685.078 104 685.078 DL 112 685.078 108 685.078 DL 116 685.078 112
+685.078 DL 120 685.078 116 685.078 DL 124 685.078 120 685.078 DL 128
+685.078 124 685.078 DL 132 685.078 128 685.078 DL 136 685.078 132
+685.078 DL 140 685.078 136 685.078 DL 144 685.078 140 685.078 DL 148
+685.078 144 685.078 DL 152 685.078 148 685.078 DL 156 685.078 152
+685.078 DL 160 685.078 156 685.078 DL 164 685.078 160 685.078 DL 168
+685.078 164 685.078 DL 172 685.078 168 685.078 DL 176 685.078 172
+685.078 DL 180 685.078 176 685.078 DL 184 685.078 180 685.078 DL 188
+685.078 184 685.078 DL 192 685.078 188 685.078 DL 196 685.078 192
+685.078 DL 200 685.078 196 685.078 DL 204 685.078 200 685.078 DL 208
+685.078 204 685.078 DL 212 685.078 208 685.078 DL 216 685.078 212
+685.078 DL/F4 5/Times-Roman@0 SF(6)93.6 695.478 Q F3 1.28 -.64(We u)2
+3.2 P(se the w).64 E(ords)-.08 E/F5 8/Times-Italic@0 SF(pr)2 E(ocedur)
+-.36 E(e)-.296 E F3(and)2 E F5(function)2 E F3(more or less interchang)2
+E(ably)-.04 E(.)-.52 E F0(23)282.5 756 Q EP
+%%Trailer
+end
+%%EOF