From 957ff1a0b5ed8db496b7c5e7e8a71a27576d15ac Mon Sep 17 00:00:00 2001 From: "Thomas G. Lockhart" Date: Wed, 29 Jul 1998 15:23:57 +0000 Subject: [PATCH] Removed from distribution. Completely converted to SGML. This was the Postgres95 documentation written by Jolly and Chu... --- doc/userguide.ps | 7346 ---------------------------------------------- 1 file changed, 7346 deletions(-) delete mode 100644 doc/userguide.ps diff --git a/doc/userguide.ps b/doc/userguide.ps deleted file mode 100644 index d7100d55a9..0000000000 --- a/doc/userguide.ps +++ /dev/null @@ -1,7346 +0,0 @@ -%!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: 84 -%%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: 1 1 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 20/Times-Bold@0 SF(The)167.817 255.4 Q/F1 19/Times-Bold@0 SF -(POSTGRES)5 E F0(95 User Manual)A/F2 11/Times-Bold@0 SF -1.1(Ve)231.7 -268.6 S(rsion 1.0 \(September 5, 1995\))1.1 E/F3 11/Times-Italic@0 SF -(Andr)247.958 308.2 Q .33 -.165(ew Y)-.407 H 2.75(ua)-.847 G(nd J)-2.75 -E(olly Chen)-.275 E(\(with the)243.736 321.4 Q/F4 10/Times-Italic@0 SF -(POSTGRES)2.75 E F3(Gr)2.75 E(oup\))-.495 E(Computer Science Div)220.557 -334.6 Q(., Dept. of EECS)-.814 E(Univer)227.141 347.8 Q -(sity of California at Berk)-.11 E(ele)-.11 E(y)-.33 E .32 LW 76 493.2 -72 493.2 DL 80 493.2 76 493.2 DL 84 493.2 80 493.2 DL 88 493.2 84 493.2 -DL 92 493.2 88 493.2 DL 96 493.2 92 493.2 DL 100 493.2 96 493.2 DL 104 -493.2 100 493.2 DL 108 493.2 104 493.2 DL 112 493.2 108 493.2 DL 116 -493.2 112 493.2 DL 120 493.2 116 493.2 DL 124 493.2 120 493.2 DL 128 -493.2 124 493.2 DL 132 493.2 128 493.2 DL 136 493.2 132 493.2 DL 140 -493.2 136 493.2 DL 144 493.2 140 493.2 DL 148 493.2 144 493.2 DL 152 -493.2 148 493.2 DL 156 493.2 152 493.2 DL 160 493.2 156 493.2 DL 164 -493.2 160 493.2 DL 168 493.2 164 493.2 DL 172 493.2 168 493.2 DL 176 -493.2 172 493.2 DL 180 493.2 176 493.2 DL 184 493.2 180 493.2 DL 188 -493.2 184 493.2 DL 192 493.2 188 493.2 DL 196 493.2 192 493.2 DL 200 -493.2 196 493.2 DL 204 493.2 200 493.2 DL 208 493.2 204 493.2 DL 212 -493.2 208 493.2 DL 216 493.2 212 493.2 DL/F5 7/Times-Roman@0 SF -(POSTGRES)93.6 505.2 Q/F6 8/Times-Roman@0 SF .461(95 is cop)B .461 -(yright \251 1994-5 by the Re)-.08 F .461(gents of the Uni)-.12 F -.12 -(ve)-.2 G .461(rsity of California.).12 F .46(Permission to use, cop) -4.461 F 1.5 -.52(y, m)-.08 H(odify).52 E 2.46(,a)-.52 G .46(nd dis-) --2.46 F(trib)72 514.8 Q .333(ute this softw)-.16 F .333 -(are and its documentation for an)-.08 F 2.333(yp)-.12 G .333(urpose, w\ -ithout fee, and without a written agreement is hereby granted, pro) --2.333 F(vided)-.12 E(that the abo)72 524.4 Q .24 -.12(ve c)-.12 H(op) -.12 E(yright notice and this paragraph and the follo)-.08 E(wing tw)-.2 -E 2(op)-.08 G(aragraphs appear in all copies.)-2 E/F7 11/Times-Roman@0 -SF .886(IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE T)133 -541.5 R(O)-.198 E 3.598(ANY P)108 554.7 R(AR)-1.012 E 3.598 -(TY FOR DIRECT)-.66 F 6.348(,I)-.814 G(NDIRECT)-6.348 E 6.348(,S)-.814 G -3.599(PECIAL, INCIDENT)-6.348 F 3.599(AL, OR CONSE-)-1.023 F -.11(QU)108 -567.9 S .13(ENTIAL D).11 F(AMA)-.44 E .13(GES, INCLUDING LOST PR)-.44 F -.129(OFITS, ARISING OUT OF THE USE)-.44 F 1.216(OF THIS SOFTW)108 581.1 -R 1.216(ARE AND ITS DOCUMENT)-1.32 F -1.221(AT)-1.023 G 1.216 -(ION, EVEN IF THE UNIVERSITY)1.221 F 1.557(OF CALIFORNIA HAS BEEN AD)108 -594.3 R 1.556(VISED OF THE POSSIBILITY OF SUCH D)-.44 F(AM-)-.44 E -.44 -(AG)108 607.5 S(E.).44 E 4.677(THE UNIVERSITY OF CALIFORNIA SPECIFICALL) -133 624.6 R 7.428(YD)-1.1 G 4.678(ISCLAIMS ANY)-7.428 F -1.32(WA)108 -637.8 S 4.519(RRANTIES, INCLUDING, B)1.32 F 4.518(UT NO)-.11 F 7.268(TL) --.44 G 4.518(IMITED T)-7.268 F 4.518(O, THE IMPLIED W)-.198 F(AR-)-1.32 -E 2.476(RANTIES OF MERCHANT)108 651 R 2.476(ABILITY AND FITNESS FOR A P) --1.023 F(AR)-1.012 E 2.477(TICULAR PUR-)-.66 F 2.847(POSE. THE)108 664.2 -R(SOFTW)2.847 E .097(ARE PR)-1.32 F -.55(OV)-.44 G .097 -(IDED HEREUNDER IS ON AN "AS IS" B).55 F .097(ASIS, AND)-.385 F 4.279 -(THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGA)108 677.4 R 4.279(TIONS T) --1.221 F 7.029(OP)-.198 G -.44(RO)-7.029 G(VIDE)-.11 E(MAINTEN)108 690.6 -Q .586(ANCE, SUPPOR)-.385 F 2.213 -.814(T, U)-.66 H(PD).814 E -1.221(AT) --.44 G .585(ES, ENHANCEMENTS, OR MODIFICA)1.221 F(TIONS.)-1.221 E F2(1) -285.25 756 Q EP -%%Page: 2 2 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(1. INTR)72 165.4 R(ODUCTION)-.57 E -77.5 178.6 72 178.6 DL 80.5 178.6 75 178.6 DL 86 178.6 80.5 178.6 DL -91.5 178.6 86 178.6 DL 97 178.6 91.5 178.6 DL 102.5 178.6 97 178.6 DL -108 178.6 102.5 178.6 DL 113.5 178.6 108 178.6 DL 119 178.6 113.5 178.6 -DL 124.5 178.6 119 178.6 DL 130 178.6 124.5 178.6 DL 135.5 178.6 130 -178.6 DL 141 178.6 135.5 178.6 DL 146.5 178.6 141 178.6 DL 152 178.6 -146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 178.6 157.5 178.6 DL 168.5 -178.6 163 178.6 DL 174 178.6 168.5 178.6 DL 179.5 178.6 174 178.6 DL 185 -178.6 179.5 178.6 DL 190.5 178.6 185 178.6 DL 196 178.6 190.5 178.6 DL -201.5 178.6 196 178.6 DL 207 178.6 201.5 178.6 DL 212.5 178.6 207 178.6 -DL 218 178.6 212.5 178.6 DL 223.5 178.6 218 178.6 DL 229 178.6 223.5 -178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 234.5 178.6 DL 245.5 178.6 -240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 178.6 251 178.6 DL 262 178.6 -256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 178.6 267.5 178.6 DL 278.5 -178.6 273 178.6 DL 284 178.6 278.5 178.6 DL 289.5 178.6 284 178.6 DL 295 -178.6 289.5 178.6 DL 300.5 178.6 295 178.6 DL 306 178.6 300.5 178.6 DL -311.5 178.6 306 178.6 DL 317 178.6 311.5 178.6 DL 322.5 178.6 317 178.6 -DL 328 178.6 322.5 178.6 DL 333.5 178.6 328 178.6 DL 339 178.6 333.5 -178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 344.5 178.6 DL 355.5 178.6 -350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 178.6 361 178.6 DL 372 178.6 -366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 178.6 377.5 178.6 DL 388.5 -178.6 383 178.6 DL 394 178.6 388.5 178.6 DL 399.5 178.6 394 178.6 DL 405 -178.6 399.5 178.6 DL 410.5 178.6 405 178.6 DL 416 178.6 410.5 178.6 DL -421.5 178.6 416 178.6 DL 427 178.6 421.5 178.6 DL 432.5 178.6 427 178.6 -DL 438 178.6 432.5 178.6 DL 443.5 178.6 438 178.6 DL 449 178.6 443.5 -178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 454.5 178.6 DL 465.5 178.6 -460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 178.6 471 178.6 DL 482 178.6 -476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 178.6 487.5 178.6 DL 498.5 -178.6 493 178.6 DL 504 178.6 498.5 178.6 DL/F1 11/Times-Roman@0 SF 1.763 -(This document is the user manual for the)108 208.9 R/F2 10 -/Times-Roman@0 SF(POSTGRES)4.514 E F1 1.764 -(95 database management system)B(de)108 222.1 Q -.165(ve)-.275 G 1.139 -(loped at the Uni).165 F -.165(ve)-.275 G 1.138 -(rsity of California at Berk).165 F(ele)-.11 E -.715(y.)-.165 G F2 -(POSTGRES)7.353 E F1 1.138(95 is based on)B F2(POST)3.888 E(-)-.92 E -(GRES)108 235.3 Q F1 1.881(release 4.2. The)4.631 F F2(POSTGRES)4.631 E -F1 1.881(project, led by Professor Michael Stonebrak)4.631 F(er)-.11 E -4.631(,h)-.44 G(as)-4.631 E .07(been sponsored by the Defense Adv)108 -248.5 R .07(anced Research Projects Agenc)-.275 F 2.82(y\()-.165 G -.44 -(DA)-2.82 G(RP).44 E .07(A\), the Army)-1.012 F(Research Of)108 261.7 Q -(\214ce \(AR)-.275 E(O\), the National Science F)-.44 E -(oundation \(NSF\), and ESL, Inc.)-.165 E/F3 12/Times-Bold@0 SF 3 -(1.1. What)72 287.9 R(is)3 E/F4 11/Times-Bold@0 SF(POSTGRES)3 E F3(?)A -F1 -.385(Tr)108 305 S .35(aditional relational database management syst\ -ems \(DBMSs\) support a data model con-).385 F .45 -(sisting of a collection of named relations, containing attrib)108 318.2 -R .45(utes of a speci\214c type.)-.22 F .45(In cur)5.95 F(-)-.22 E .357 -(rent commercial systems, possible types include \215oating point numbe\ -rs, inte)108 331.4 R .358(gers, charac-)-.165 F .066(ter strings, mone) -108 344.6 R 1.496 -.715(y, a)-.165 H .066(nd dates.).715 F .066 -(It is commonly recognized that this model is inadequate for)5.566 F -(future data processing applications.)108 357.8 Q .659 -(The relational model successfully replaced pre)108 374.9 R .659 -(vious models in part because of its \231Spar)-.275 F(-)-.22 E .74 -(tan simplicity\232.)108 388.1 R(Ho)6.24 E(we)-.275 E -.165(ve)-.275 G -1.619 -.44(r, a).165 H 3.489(sm).44 G .739 -(entioned, this simplicity often mak)-3.489 F .739 -(es the implementation)-.11 F 1.613(of certain applications v)108 401.3 -R 1.613(ery dif)-.165 F 1.613(\214cult to implement.)-.275 F F2 -(POSTGRES)7.113 E F1(of)4.364 E 1.614(fers substantial addi-)-.275 F -.032(tional po)108 414.5 R .032(wer by incorporating the follo)-.275 F -.031(wing four additional basic constructs in such a w)-.275 F(ay)-.11 E -(that users can easily e)108 427.7 Q(xtend the system:)-.165 E(classes) -148 453.9 Q(inheritance)148 467.1 Q(types)148 480.3 Q(functions)148 -493.5 Q(In addition,)108 519.7 Q F2(POSTGRES)2.75 E F1(supports a po) -2.75 E(werful production rule system.)-.275 E F3 3(1.2. A)72 545.9 R -(Short History of the)3 E F4(POSTGRES)3 E F3(Pr)3 E(oject)-.216 E F1 -1.658(Implementation of the)108 563 R F2(POSTGRES)4.409 E F1 1.659 -(DBMS be)4.409 F -.055(ga)-.165 G 4.409(ni).055 G 4.409(n1)-4.409 G -4.409(986. The)-4.409 F 1.659(initial concepts for the)4.409 F .42 -(system were presented in [ST)108 576.2 R .42 -(ON86] and the de\214nition of the initial data model appeared)-.198 F -.805(in [R)108 589.4 R -.385(OW)-.44 G 3.555(E87]. The).385 F .805 -(design of the rule system at that time w)3.555 F .806 -(as described in [ST)-.11 F(ON87a].)-.198 E(The rationale and architect\ -ure of the storage manager were detailed in [ST)108 602.6 Q(ON87b].) --.198 E F2(POSTGRES)108 619.7 Q F1 .861(has under)3.611 F .861(gone se) --.198 F -.165(ve)-.275 G .861(ral major releases since then.).165 F .86 -(The \214rst \231demo)6.36 F -.11(wa)-.275 G .86(re\232 sys-).11 F .253 -(tem became operational in 1987 and w)108 632.9 R .253(as sho)-.11 F -.253(wn at the 1988 A)-.275 F .253(CM-SIGMOD Conference.)-.44 F 2.052 --.88(We r)108 646.1 T .292(eleased V).88 F .291 -(ersion 1, described in [ST)-1.221 F .291(ON90a], to a fe)-.198 F 3.041 -(we)-.275 G .291(xternal users in June 1989.)-3.206 F(In)5.791 E .659 -(response to a critique of the \214rst rule system [ST)108 659.3 R .659 -(ON89], the rule system w)-.198 F .66(as redesigned)-.11 F([ST)108 672.5 -Q .023(ON90b] and V)-.198 F .023(ersion 2 w)-1.221 F .023 -(as released in June 1990 with the ne)-.11 F 2.772(wr)-.275 G .022 -(ule system.)-2.772 F -1.221(Ve)5.522 G .022(rsion 3)1.221 F 1.18(appea\ -red in 1991 and added support for multiple storage managers, an impro) -108 685.7 R -.165(ve)-.165 G 3.93(dq).165 G(uery)-3.93 E -.165(exe)108 -698.9 S(cutor).165 E 3.24(,a)-.44 G .49(nd a re)-3.24 F .49(written re) --.275 F .49(write rule system.)-.275 F -.165(Fo)5.99 G 3.239(rt).165 G -.489(he most part, releases since then ha)-3.239 F -.165(ve)-.22 G -(focused on portability and reliability)108 712.1 Q(.)-.715 E F4(2) -285.25 756 Q EP -%%Page: 3 3 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(POSTGRES)108 97.2 Q/F1 11/Times-Roman@0 SF .639 -(has been used to implement man)3.389 F 3.39(yd)-.165 G(if)-3.39 E .64 -(ferent research and production applica-)-.275 F 3.207(tions. These)108 -110.4 R .456(include: a \214nancial data analysis system, a jet engine \ -performance monitor)3.207 F(-)-.22 E 1.105(ing package, an asteroid tra\ -cking database, a medical information database, and se)108 123.6 R -.165 -(ve)-.275 G(ral).165 E .268(geographic information systems.)108 136.8 R -F0(POSTGRES)5.768 E F1 .267 -(has also been used as an educational tool at)3.018 F(se)108 150 Q -.165 -(ve)-.275 G 1.628(ral uni).165 F -.165(ve)-.275 G 4.378 -(rsities. Finally).165 F 4.378(,I)-.715 G 1.628(llustra Information T) --4.378 F 1.628(echnologies pick)-.77 F 1.628(ed up the code and)-.11 F -(commercialized it.)108 163.2 Q F0(POSTGRES)108 180.3 Q F1 .654(became \ -the primary data manager for the Sequoia 2000 scienti\214c computing) -3.404 F .017(project in late 1992.)108 193.5 R .018 -(Furthermore, the size of the e)5.518 F .018 -(xternal user community nearly doubled)-.165 F .376(during 1993.)108 -206.7 R .376(It became increasingly ob)5.876 F .376 -(vious that maintenance of the prototype code and)-.165 F .961 -(support w)108 219.9 R .961(as taking up lar)-.11 F .962 -(ge amounts of time that should ha)-.198 F 1.292 -.165(ve b)-.22 H .962 -(een de).165 F -.22(vo)-.275 G .962(ted to database).22 F 3.025 -(research. In)108 233.1 R .275(an ef)3.025 F .274 -(fort to reduce this support b)-.275 F .274(urden, the project of)-.22 F -.274(\214cially ended with V)-.275 F(er)-1.221 E(-)-.22 E(sion 4.2.)108 -246.3 Q/F2 12/Times-Bold@0 SF 3(1.3. What)72 272.5 R(is)3 E/F3 11 -/Times-Bold@0 SF(POSTGRES)3 E F2(95?)A F0(POSTGRES)108 289.6 Q F1 .953 -(95 is a deri)B -.275(va)-.275 G(ti).275 E 1.283 -.165(ve o)-.275 H -3.703(ft).165 G .953(he last of)-3.703 F .953(\214cial release of)-.275 -F F0(POSTGRES)3.703 E F1(\(v)3.703 E .953(ersion 4.2\). The)-.165 F .165 -(code is no)108 302.8 R 2.915(wc)-.275 G .165(ompletely ANSI C and the \ -code size has been trimmed by 25%. There are a)-2.915 F .395 -(lot of internal changes that impro)108 316 R .726 -.165(ve p)-.165 H -.396(erformance and code maintainability).165 F(.)-.715 E F0(POSTGRES) -3.146 E F1(95)A 1.58(runs about 30-50% f)108 329.2 R 1.58 -(aster on the W)-.11 F 1.579 -(isconsin Benchmark compared to v4.2. Apart from)-.44 F -.22(bu)108 -342.4 S 2.75<678c>.22 G -.165(xe)-2.75 G -(s, these are the major enhancements:).165 E 5.5<8354>113.5 359.5 S -1.527(he query language POSTQ)-5.5 F 1.527 -(UEL has been replaced with SQL \(implemented in the)-.11 F(serv)122.85 -372.7 Q .73(er\). W)-.165 F 3.48(ed)-.88 G 3.48(on)-3.48 G .729 -(ot support subqueries \(which can be imitated with user de\214ned SQL) --3.48 F .487(functions\) at the moment. Aggre)122.85 385.9 R -.055(ga) --.165 G .487(tes ha).055 F .817 -.165(ve b)-.22 H .487 -(een re-implemented. W).165 F 3.237(ea)-.88 G .487(lso added sup-)-3.237 -F(port for GR)122.85 399.1 Q(OUP BY)-.44 E 2.75(.T)-1.419 G -(he libpq interf)-2.75 E(ace is still a)-.11 E -.275(va)-.22 G -(ilable for C programs.).275 E 5.5<8349>113.5 412.3 S 3.291(na)-5.5 G -.541(ddition to the monitor program, we pro)-3.291 F .541(vide a ne) --.165 F 3.29(wp)-.275 G .54(rogram \(psql\) which supports)-3.29 F -(GNU readline.)122.85 425.5 Q 5.5<8357>113.5 438.7 S 3.201(ea)-6.38 G -.452(dded a ne)-3.201 F 3.202(wf)-.275 G .452(ront-end library)-3.202 F -3.202(,l)-.715 G .452(ibpgtcl, that supports Tcl-based clients.)-3.202 F -3.202(As)5.952 G(ample)-3.202 E 1.056(shell, pgtclsh, pro)122.85 451.9 R -1.056(vides ne)-.165 F 3.805(wT)-.275 G 1.055(cl commands to interf) --3.805 F 1.055(ace tcl programs with the)-.11 F F0(POST)3.805 E(-)-.92 E -(GRES)122.85 465.1 Q F1(95 back)A(end.)-.11 E 5.5<8354>113.5 478.3 S -.369(he lar)-5.5 F .369(ge object interf)-.198 F .37(ace has been o)-.11 -F -.165(ve)-.165 G .37(rhauled. W).165 F 3.12(ek)-.88 G .37(ept In)-3.23 -F -.165(ve)-.44 G .37(rsion lar).165 F .37(ge objects as the)-.198 F -.828(only mechanism for storing lar)122.85 491.5 R .827 -(ge objects. \(This is not to be confused with the In)-.198 F -.165(ve) --.44 G -.22(r-).165 G(sion \214le system which has been remo)122.85 -504.7 Q -.165(ve)-.165 G(d.\)).165 E 5.5<8354>113.5 517.9 S 1.011 -(he instance-le)-5.5 F -.165(ve)-.275 G 3.761(lr).165 G 1.011 -(ule system has been remo)-3.761 F -.165(ve)-.165 G 1.011 -(d. Rules are still a).165 F -.275(va)-.22 G 1.011(ilable as re).275 F -(write)-.275 E(rules.)122.85 531.1 Q 5.5<8341>113.5 544.3 S .062 -(short tutorial introducing re)-2.688 F .061 -(gular SQL features as well as those of ours is distrib)-.165 F(uted) --.22 E(with the source code.)122.85 557.5 Q 5.5<8347>113.5 570.7 S .945 -(NU mak)-5.5 F 3.695(e\()-.11 G .945(instead of BSD mak)-3.695 F .946 -(e\) is used for the b)-.11 F .946(uild. Also,)-.22 F F0(POSTGRES)3.696 -E F1 .946(95 can be)B(compiled with an unpatched gcc \(data alignment o\ -f doubles has been \214x)122.85 583.9 Q(ed\).)-.165 E F2 3(1.4. About)72 -610.1 R(This Release)3 E F0(POSTGRES)108 627.2 Q F1 1.871(95 is a)B --.275(va)-.22 G 1.871(ilable free of char).275 F 1.871 -(ge. This manual describes v)-.198 F 1.87(ersion 1.0 of)-.165 F F0(POST) -4.62 E(-)-.92 E(GRES)108 640.4 Q F1 4.86(95. The)B 2.11(authors ha)4.86 -F 2.44 -.165(ve c)-.22 H 2.11(ompiled and tested).165 F F0(POSTGRES)4.86 -E F1 2.11(95 on the follo)B 2.11(wing plat-)-.275 F(forms:)108 653.6 Q -F3(3)285.25 756 Q EP -%%Page: 4 4 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 481.389 88.75 130.61 88.75 DL/F0 11/Times-Roman@0 SF 42.488 -(architecture processor)160.106 99.2 R(operating system)61.429 E 481.389 -103.95 130.61 103.95 DL 481.389 105.95 130.61 105.95 DL(DECstation 3000) -136.11 116.4 Q(Alpha AXP)40.326 E(OSF/1 2.1, 3.0, 3.2)16.5 E -(DECstation 5000)136.11 129.6 Q 39.71(MIPS UL)40.326 F(TRIX 4.4)-1.012 E -91.047(Sun4 SP)136.11 142.8 R 31.548(ARC SunOS)-1.012 F -(4.1.3, 4.1.3_U1; Solaris 2.4)2.75 E(H-P 9000/700 and 800)136.11 156 Q --1.012(PA)16.5 G 24.222(-RISC HP-UX)1.012 F(9.00, 9.01, 9.03)2.75 E 93.5 -(Intel X86)136.11 169.2 R(Linux 1.2.8, ELF)49.192 E 481.389 173.95 -130.61 173.95 DL 312.407 88.75 312.407 173.95 DL 244.273 88.75 244.273 -173.95 DL 481.389 88.75 481.389 173.95 DL 130.61 88.75 130.61 173.95 DL -/F1 12/Times-Bold@0 SF 3(1.5. Outline)72 208.4 R(of This Manual)3 E F0 -.296(From no)108 225.5 R 3.046(wo)-.275 G .296(n, W)-3.046 F 3.046(ew) --.88 G .296(ill use)-3.046 F/F2 10/Times-Roman@0 SF(POSTGRES)3.046 E F0 -.296(to mean)3.046 F F2(POSTGRES)3.046 E F0 3.046(95. The)B .295 -(\214rst part of this man-)3.046 F .108(ual goes o)108 238.7 R -.165(ve) --.165 G 2.859(rs).165 G .109 -(ome basic system concepts and procedures for starting the)-2.859 F F2 -(POSTGRES)2.859 E F0(sys-)2.859 E 3.817(tem. W)108 251.9 R 3.817(et)-.88 -G 1.067(hen turn to a tutorial o)-3.817 F -.165(ve)-.165 G(rvie).165 E -3.817(wo)-.275 G 3.817(ft)-3.817 G(he)-3.817 E F2(POSTGRES)3.817 E F0 -1.066(data model and SQL query)3.817 F 1.26(language, introducing a fe) -108 265.1 R 4.01(wo)-.275 G 4.01(fi)-4.01 G 1.26(ts adv)-4.01 F 1.26 -(anced features.)-.275 F(Ne)6.76 E 1.26(xt, we e)-.165 F 1.26 -(xplain the)-.165 F F2(POSTGRES)4.011 E F0 .745(approach to e)108 278.3 -R .745(xtensibility and describe ho)-.165 F 3.495(wu)-.275 G .745 -(sers can e)-3.495 F(xtend)-.165 E F2(POSTGRES)3.495 E F0 .745 -(by adding user)3.495 F(-)-.22 E .122(de\214ned types, operators, aggre) -108 291.5 R -.055(ga)-.165 G .122 -(tes, and both query language and programming language).055 F 3.516 -(functions. After)108 304.7 R .766(an e)3.516 F .766(xtremely brief o) --.165 F -.165(ve)-.165 G(rvie).165 E 3.516(wo)-.275 G 3.516(ft)-3.516 G -(he)-3.516 E F2(POSTGRES)3.516 E F0 .766(rule system, the manual)3.516 F -.468 -(concludes with a detailed appendix that discusses some of the more in) -108 317.9 R -.22(vo)-.44 G(lv).22 E .468(ed and operat-)-.165 F -(ing system-speci\214c procedures in)108 331.1 Q -.22(vo)-.44 G(lv).22 E -(ed in e)-.165 E(xtending the system.)-.165 E 1.76 -.88(We a)108 357.5 T -(ssume pro\214cienc).88 E 2.75(yw)-.165 G(ith UNIX and C programming.) --2.75 E .32 LW 76 659.4 72 659.4 DL 80 659.4 76 659.4 DL 84 659.4 80 -659.4 DL 88 659.4 84 659.4 DL 92 659.4 88 659.4 DL 96 659.4 92 659.4 DL -100 659.4 96 659.4 DL 104 659.4 100 659.4 DL 108 659.4 104 659.4 DL 112 -659.4 108 659.4 DL 116 659.4 112 659.4 DL 120 659.4 116 659.4 DL 124 -659.4 120 659.4 DL 128 659.4 124 659.4 DL 132 659.4 128 659.4 DL 136 -659.4 132 659.4 DL 140 659.4 136 659.4 DL 144 659.4 140 659.4 DL 148 -659.4 144 659.4 DL 152 659.4 148 659.4 DL 156 659.4 152 659.4 DL 160 -659.4 156 659.4 DL 164 659.4 160 659.4 DL 168 659.4 164 659.4 DL 172 -659.4 168 659.4 DL 176 659.4 172 659.4 DL 180 659.4 176 659.4 DL 184 -659.4 180 659.4 DL 188 659.4 184 659.4 DL 192 659.4 188 659.4 DL 196 -659.4 192 659.4 DL 200 659.4 196 659.4 DL 204 659.4 200 659.4 DL 208 -659.4 204 659.4 DL 212 659.4 208 659.4 DL 216 659.4 212 659.4 DL/F3 7 -/Times-Roman@0 SF(UNIX)93.6 671.4 Q/F4 8/Times-Roman@0 SF .042 -(is a trademark of X/Open, Ltd.)2.042 F .042(Sun4, SP)4.042 F .041 -(ARC, SunOS and Solaris are trademarks of Sun Microsystems, Inc.)-.736 F -.041(DEC, DEC-)4.041 F 1.409(station, Alpha AXP and UL)72 681 R 1.409 -(TRIX are trademarks of Digital Equipment Corp.)-.736 F -.736(PA)5.41 G -1.41(-RISC and HP-UX are trademarks of He).736 F(wlett-)-.2 E -.12(Pa)72 -690.6 S(ckard Co.).12 E(OSF/1 is a trademark of the Open Softw)4 E -(are F)-.08 E(oundation.)-.12 E/F5 11/Times-Bold@0 SF(4)285.25 756 Q EP -%%Page: 5 5 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(2. POSTGRES)72 165.4 R -(ARCHITECTURE CONCEPTS)4.75 E 77.5 178.6 72 178.6 DL 80.5 178.6 75 178.6 -DL 86 178.6 80.5 178.6 DL 91.5 178.6 86 178.6 DL 97 178.6 91.5 178.6 DL -102.5 178.6 97 178.6 DL 108 178.6 102.5 178.6 DL 113.5 178.6 108 178.6 -DL 119 178.6 113.5 178.6 DL 124.5 178.6 119 178.6 DL 130 178.6 124.5 -178.6 DL 135.5 178.6 130 178.6 DL 141 178.6 135.5 178.6 DL 146.5 178.6 -141 178.6 DL 152 178.6 146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 178.6 -157.5 178.6 DL 168.5 178.6 163 178.6 DL 174 178.6 168.5 178.6 DL 179.5 -178.6 174 178.6 DL 185 178.6 179.5 178.6 DL 190.5 178.6 185 178.6 DL 196 -178.6 190.5 178.6 DL 201.5 178.6 196 178.6 DL 207 178.6 201.5 178.6 DL -212.5 178.6 207 178.6 DL 218 178.6 212.5 178.6 DL 223.5 178.6 218 178.6 -DL 229 178.6 223.5 178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 234.5 -178.6 DL 245.5 178.6 240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 178.6 -251 178.6 DL 262 178.6 256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 178.6 -267.5 178.6 DL 278.5 178.6 273 178.6 DL 284 178.6 278.5 178.6 DL 289.5 -178.6 284 178.6 DL 295 178.6 289.5 178.6 DL 300.5 178.6 295 178.6 DL 306 -178.6 300.5 178.6 DL 311.5 178.6 306 178.6 DL 317 178.6 311.5 178.6 DL -322.5 178.6 317 178.6 DL 328 178.6 322.5 178.6 DL 333.5 178.6 328 178.6 -DL 339 178.6 333.5 178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 344.5 -178.6 DL 355.5 178.6 350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 178.6 -361 178.6 DL 372 178.6 366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 178.6 -377.5 178.6 DL 388.5 178.6 383 178.6 DL 394 178.6 388.5 178.6 DL 399.5 -178.6 394 178.6 DL 405 178.6 399.5 178.6 DL 410.5 178.6 405 178.6 DL 416 -178.6 410.5 178.6 DL 421.5 178.6 416 178.6 DL 427 178.6 421.5 178.6 DL -432.5 178.6 427 178.6 DL 438 178.6 432.5 178.6 DL 443.5 178.6 438 178.6 -DL 449 178.6 443.5 178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 454.5 -178.6 DL 465.5 178.6 460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 178.6 -471 178.6 DL 482 178.6 476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 178.6 -487.5 178.6 DL 498.5 178.6 493 178.6 DL 504 178.6 498.5 178.6 DL/F1 11 -/Times-Roman@0 SF 1.972 -(Before we continue, you should understand the basic)108 208.9 R/F2 10 -/Times-Roman@0 SF(POSTGRES)4.722 E F1 1.971(system architecture.)4.722 F -.235(Understanding ho)108 222.1 R 2.985(wt)-.275 G .235(he parts of) --2.985 F F2(POSTGRES)2.985 E F1 .235(interact will mak)2.985 F 2.985(et) --.11 G .236(he ne)-2.985 F .236(xt chapter some)-.165 F(what)-.275 E -77.5 247.3 72 247.3 DL 80.5 247.3 75 247.3 DL 86 247.3 80.5 247.3 DL -91.5 247.3 86 247.3 DL 97 247.3 91.5 247.3 DL 102.5 247.3 97 247.3 DL -108 247.3 102.5 247.3 DL 113.5 247.3 108 247.3 DL 119 247.3 113.5 247.3 -DL 124.5 247.3 119 247.3 DL 130 247.3 124.5 247.3 DL 135.5 247.3 130 -247.3 DL 141 247.3 135.5 247.3 DL 146.5 247.3 141 247.3 DL 152 247.3 -146.5 247.3 DL 157.5 247.3 152 247.3 DL 163 247.3 157.5 247.3 DL 168.5 -247.3 163 247.3 DL 174 247.3 168.5 247.3 DL 179.5 247.3 174 247.3 DL 185 -247.3 179.5 247.3 DL 190.5 247.3 185 247.3 DL 196 247.3 190.5 247.3 DL -201.5 247.3 196 247.3 DL 207 247.3 201.5 247.3 DL 212.5 247.3 207 247.3 -DL 218 247.3 212.5 247.3 DL 223.5 247.3 218 247.3 DL 229 247.3 223.5 -247.3 DL 234.5 247.3 229 247.3 DL 240 247.3 234.5 247.3 DL 245.5 247.3 -240 247.3 DL 251 247.3 245.5 247.3 DL 256.5 247.3 251 247.3 DL 262 247.3 -256.5 247.3 DL 267.5 247.3 262 247.3 DL 273 247.3 267.5 247.3 DL 278.5 -247.3 273 247.3 DL 284 247.3 278.5 247.3 DL 289.5 247.3 284 247.3 DL 295 -247.3 289.5 247.3 DL 300.5 247.3 295 247.3 DL 306 247.3 300.5 247.3 DL -311.5 247.3 306 247.3 DL 317 247.3 311.5 247.3 DL 322.5 247.3 317 247.3 -DL 328 247.3 322.5 247.3 DL 333.5 247.3 328 247.3 DL 339 247.3 333.5 -247.3 DL 344.5 247.3 339 247.3 DL 350 247.3 344.5 247.3 DL 355.5 247.3 -350 247.3 DL 361 247.3 355.5 247.3 DL 366.5 247.3 361 247.3 DL 372 247.3 -366.5 247.3 DL 377.5 247.3 372 247.3 DL 383 247.3 377.5 247.3 DL 388.5 -247.3 383 247.3 DL 394 247.3 388.5 247.3 DL 399.5 247.3 394 247.3 DL 405 -247.3 399.5 247.3 DL 410.5 247.3 405 247.3 DL 416 247.3 410.5 247.3 DL -421.5 247.3 416 247.3 DL 427 247.3 421.5 247.3 DL 432.5 247.3 427 247.3 -DL 438 247.3 432.5 247.3 DL 443.5 247.3 438 247.3 DL 449 247.3 443.5 -247.3 DL 454.5 247.3 449 247.3 DL 460 247.3 454.5 247.3 DL 465.5 247.3 -460 247.3 DL 471 247.3 465.5 247.3 DL 476.5 247.3 471 247.3 DL 482 247.3 -476.5 247.3 DL 487.5 247.3 482 247.3 DL 493 247.3 487.5 247.3 DL 498.5 -247.3 493 247.3 DL 504 247.3 498.5 247.3 DL 0 0 288 470 -360 649 144 -633.7 PBEGIN -%%BeginDocument: manual-arch.eps -%%Title: stdin -%%Creator: fig2dev Version 3.1 Patchlevel 0 -%%CreationDate: Sat Feb 24 21:36:25 1996 -%%For: jolly@arcadia.CS.Berkeley.EDU (Jolly Chen,421 Soda,(510) 6421863,540-5955) -%%Orientation: Portrait -%%BoundingBox: 0 0 470 649 -%%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 --17.0 662.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 - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit - 0.06000 0.06000 sc -/Times-Roman findfont 240.00 scalefont setfont -5550 1350 m -gs 1 -1 sc (POSTMASTER) col-1 show gr -7.500 slw -% Polyline -n 405 600 m 300 600 300 1320 105 arcto 4 {pop} repeat 300 1425 3270 1425 105 arcto 4 {pop} repeat 3375 1425 3375 705 105 arcto 4 {pop} repeat 3375 600 405 600 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 2325 600 m 2325 1425 l gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -375 1275 m -gs 1 -1 sc (APPLICATION) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -2475 1125 m -gs 1 -1 sc (LIBPQ) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -900 975 m -gs 1 -1 sc (USER) col-1 show gr -% Polyline -n 405 3225 m 300 3225 300 3945 105 arcto 4 {pop} repeat 300 4050 3270 4050 105 arcto 4 {pop} repeat 3375 4050 3375 3330 105 arcto 4 {pop} repeat 3375 3225 405 3225 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 2325 3225 m 2325 4050 l gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -375 3900 m -gs 1 -1 sc (APPLICATION) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -2475 3750 m -gs 1 -1 sc (LIBPQ) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -900 3600 m -gs 1 -1 sc (USER) col-1 show gr -% Polyline -n 5280 3075 m 5175 3075 5175 3495 105 arcto 4 {pop} repeat 5175 3600 7245 3600 105 arcto 4 {pop} repeat 7350 3600 7350 3180 105 arcto 4 {pop} repeat 7350 3075 5280 3075 105 arcto 4 {pop} repeat clp gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -5325 3450 m -gs 1 -1 sc (POSTMASTER) col-1 show gr -% Polyline -n 5655 3900 m 5550 3900 5550 4320 105 arcto 4 {pop} repeat 5550 4425 6795 4425 105 arcto 4 {pop} repeat 6900 4425 6900 4005 105 arcto 4 {pop} repeat 6900 3900 5655 3900 105 arcto 4 {pop} repeat clp gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -5700 4275 m -gs 1 -1 sc (SERVER) col-1 show gr -/Times-Bold findfont 240.00 scalefont setfont -300 2100 m -gs 1 -1 sc (\(a\) frontend sends request to) col-1 show gr -/Times-Bold findfont 240.00 scalefont setfont -675 2400 m -gs 1 -1 sc (postmaster via well-known) col-1 show gr -/Times-Bold findfont 240.00 scalefont setfont -675 2700 m -gs 1 -1 sc (network socket) col-1 show gr -% Polyline -n 406 8251 m 301 8251 301 8971 105 arcto 4 {pop} repeat 301 9076 3271 9076 105 arcto 4 {pop} repeat 3376 9076 3376 8356 105 arcto 4 {pop} repeat 3376 8251 406 8251 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 2326 8251 m 2326 9076 l gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -376 8926 m -gs 1 -1 sc (APPLICATION) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -2476 8776 m -gs 1 -1 sc (LIBPQ) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -901 8626 m -gs 1 -1 sc (USER) col-1 show gr -% Polyline -n 5431 8476 m 5326 8476 5326 8896 105 arcto 4 {pop} repeat 5326 9001 7396 9001 105 arcto 4 {pop} repeat 7501 9001 7501 8581 105 arcto 4 {pop} repeat 7501 8476 5431 8476 105 arcto 4 {pop} repeat clp gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -5476 8851 m -gs 1 -1 sc (POSTMASTER) col-1 show gr -% Polyline -n 405 5625 m 300 5625 300 6345 105 arcto 4 {pop} repeat 300 6450 3270 6450 105 arcto 4 {pop} repeat 3375 6450 3375 5730 105 arcto 4 {pop} repeat 3375 5625 405 5625 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 2325 5625 m 2325 6450 l gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -375 6300 m -gs 1 -1 sc (APPLICATION) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -2475 6150 m -gs 1 -1 sc (LIBPQ) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -900 6000 m -gs 1 -1 sc (USER) col-1 show gr -% Polyline -n 5655 6675 m 5550 6675 5550 7095 105 arcto 4 {pop} repeat 5550 7200 6795 7200 105 arcto 4 {pop} repeat 6900 7200 6900 6780 105 arcto 4 {pop} repeat 6900 6675 5655 6675 105 arcto 4 {pop} repeat clp gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -5700 7050 m -gs 1 -1 sc (SERVER) col-1 show gr -% Polyline -n 5430 5850 m 5325 5850 5325 6270 105 arcto 4 {pop} repeat 5325 6375 7395 6375 105 arcto 4 {pop} repeat 7500 6375 7500 5955 105 arcto 4 {pop} repeat 7500 5850 5430 5850 105 arcto 4 {pop} repeat clp gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -5475 6225 m -gs 1 -1 sc (POSTMASTER) col-1 show gr -/Times-Bold findfont 240.00 scalefont setfont -300 7200 m -gs 1 -1 sc (\(c\) frontend connected) col-1 show gr -/Times-Bold findfont 240.00 scalefont setfont -675 7500 m -gs 1 -1 sc (to backend server) col-1 show gr -% Polyline -n 5505 975 m 5400 975 5400 1395 105 arcto 4 {pop} repeat 5400 1500 7470 1500 105 arcto 4 {pop} repeat 7575 1500 7575 1080 105 arcto 4 {pop} repeat 7575 975 5505 975 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Ellipse -n 4425 1200 105 105 0 360 DrawEllipse gs col-1 s gr - -/Times-Roman findfont 240.00 scalefont setfont -5701 9676 m -gs 1 -1 sc (SERVER1) col-1 show gr -% Ellipse -n 4425 3825 105 105 0 360 DrawEllipse gs col-1 s gr - -% Ellipse -n 6105 3705 1680 1080 0 360 DrawEllipse gs col-1 s gr - -% Ellipse -n 6105 1305 1680 1080 0 360 DrawEllipse gs col-1 s gr - -% Ellipse -n 4471 8716 105 105 0 360 DrawEllipse gs col-1 s gr - -% Ellipse -n 6105 6405 1680 1080 0 360 DrawEllipse gs col-1 s gr - -% Ellipse -n 4470 6090 105 105 0 360 DrawEllipse gs col-1 s gr - -% Ellipse -n 6225 9375 1875 1650 0 360 DrawEllipse gs col-1 s gr - -% Polyline - [66.7] 0 setdash -n 4500 1200 m 5400 1200 l gs col-1 s gr [] 0 setdash -% Polyline -n 6225 3600 m 6225 3900 l gs col-1 s gr -n 6262.50 3765.00 m 6225.00 3900.00 l 6187.50 3765.00 l gs col-1 s gr -% Polyline - [66.7] 0 setdash -n 4576 8701 m 5326 8701 l gs col-1 s gr [] 0 setdash -% Polyline - [66.7] 0 setdash -n 4575 6075 m 5325 6075 l gs col-1 s gr [] 0 setdash -% Polyline -n 3450 9525 m 3000 9075 l gs col-1 s gr -% Polyline -n 5656 9301 m 5551 9301 5551 9721 105 arcto 4 {pop} repeat 5551 9826 6796 9826 105 arcto 4 {pop} repeat 6901 9826 6901 9406 105 arcto 4 {pop} repeat 6901 9301 5656 9301 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 5730 10125 m 5625 10125 5625 10545 105 arcto 4 {pop} repeat 5625 10650 6870 10650 105 arcto 4 {pop} repeat 6975 10650 6975 10230 105 arcto 4 {pop} repeat 6975 10125 5730 10125 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Interp Spline -n 3375 1050 m - 3503.93 1040.59 3560.18 1040.59 3600 1050 curveto - 3679.17 1068.69 3820.83 1181.31 3900 1200 curveto - 3966.39 1215.67 4060.14 1215.67 4275 1200 curveto - gs col-1 s gr - -n 4137.63 1172.42 m 4275.00 1200.00 l 4143.09 1247.22 l gs col-1 s gr -% Interp Spline -n 3375 3675 m - 3679.71 3639.77 3810.96 3621.02 3900 3600 curveto - 4059.28 3562.40 4415.07 3411.27 4575 3375 curveto - 4676.94 3351.89 4826.94 3333.14 5175 3300 curveto - gs col-1 s gr - -n 5037.05 3275.46 m 5175.00 3300.00 l 5044.16 3350.13 l gs col-1 s gr -% Interp Spline -n 3376 8701 m - 3679.72 8719.96 3810.97 8738.71 3901 8776 curveto - 4070.77 8846.32 4347.49 9141.91 4501 9226 curveto - 4632.16 9297.85 4958.41 9412.76 5101 9451 curveto - 5177.14 9471.42 5289.64 9490.17 5551 9526 curveto - gs col-1 s gr - -n 5422.34 9470.51 m 5551.00 9526.00 l 5412.16 9544.82 l gs col-1 s gr -% Interp Spline -n 3375 6075 m - 3678.72 6093.96 3809.97 6112.71 3900 6150 curveto - 4069.77 6220.32 4346.49 6515.91 4500 6600 curveto - 4631.16 6671.85 4957.41 6786.76 5100 6825 curveto - 5176.14 6845.42 5288.64 6864.17 5550 6900 curveto - gs col-1 s gr - -n 5421.34 6844.51 m 5550.00 6900.00 l 5411.16 6918.82 l gs col-1 s gr -% Interp Spline -n 3450 9525 m - 3753.72 9543.96 3884.97 9562.71 3975 9600 curveto - 4144.77 9670.32 4421.49 9965.91 4575 10050 curveto - 4706.16 10121.85 5032.41 10236.76 5175 10275 curveto - 5251.14 10295.42 5363.64 10314.17 5625 10350 curveto - gs col-1 s gr - -n 5496.34 10294.51 m 5625.00 10350.00 l 5486.16 10368.82 l gs col-1 s gr -/Times-Roman findfont 210.00 scalefont setfont -5775 2100 m -gs 1 -1 sc (server host) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -4650 1425 m -gs 1 -1 sc (listening) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -4125 1050 m -gs 1 -1 sc (TCP port) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -3450 3375 m -gs 1 -1 sc (connection) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -3450 3150 m -gs 1 -1 sc (initial) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -6300 3825 m -gs 1 -1 sc (forks child ) col-1 show gr -/Times-Bold findfont 240.00 scalefont setfont -300 4800 m -gs 1 -1 sc (\(b\) postmaster creates backend server) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -3601 9226 m -gs 1 -1 sc (queries/) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -3601 9451 m -gs 1 -1 sc (data) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -4576 9001 m -gs 1 -1 sc (listening) col-1 show gr -/Times-Bold findfont 240.00 scalefont setfont -301 9826 m -gs 1 -1 sc (\(d\) frontend connected) col-1 show gr -/Times-Bold findfont 240.00 scalefont setfont -676 10126 m -gs 1 -1 sc (to multiple backend servers) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -3600 6600 m -gs 1 -1 sc (queries/) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -3600 6825 m -gs 1 -1 sc (data) col-1 show gr -/Times-Roman findfont 210.00 scalefont setfont -4575 6375 m -gs 1 -1 sc (listening) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -5775 10500 m -gs 1 -1 sc (SERVER2) col-1 show gr -$F2psEnd -restore -%%EndDocument -end PEND/F3 11/Times-Bold@0 SF(Figur)192.151 660.1 Q 2.75(e1)-.198 G F1 -5.5(.H)-2.75 G .55 -.275(ow a c)-5.5 H(onnection is established.).275 E -77.5 673.3 72 673.3 DL 80.5 673.3 75 673.3 DL 86 673.3 80.5 673.3 DL -91.5 673.3 86 673.3 DL 97 673.3 91.5 673.3 DL 102.5 673.3 97 673.3 DL -108 673.3 102.5 673.3 DL 113.5 673.3 108 673.3 DL 119 673.3 113.5 673.3 -DL 124.5 673.3 119 673.3 DL 130 673.3 124.5 673.3 DL 135.5 673.3 130 -673.3 DL 141 673.3 135.5 673.3 DL 146.5 673.3 141 673.3 DL 152 673.3 -146.5 673.3 DL 157.5 673.3 152 673.3 DL 163 673.3 157.5 673.3 DL 168.5 -673.3 163 673.3 DL 174 673.3 168.5 673.3 DL 179.5 673.3 174 673.3 DL 185 -673.3 179.5 673.3 DL 190.5 673.3 185 673.3 DL 196 673.3 190.5 673.3 DL -201.5 673.3 196 673.3 DL 207 673.3 201.5 673.3 DL 212.5 673.3 207 673.3 -DL 218 673.3 212.5 673.3 DL 223.5 673.3 218 673.3 DL 229 673.3 223.5 -673.3 DL 234.5 673.3 229 673.3 DL 240 673.3 234.5 673.3 DL 245.5 673.3 -240 673.3 DL 251 673.3 245.5 673.3 DL 256.5 673.3 251 673.3 DL 262 673.3 -256.5 673.3 DL 267.5 673.3 262 673.3 DL 273 673.3 267.5 673.3 DL 278.5 -673.3 273 673.3 DL 284 673.3 278.5 673.3 DL 289.5 673.3 284 673.3 DL 295 -673.3 289.5 673.3 DL 300.5 673.3 295 673.3 DL 306 673.3 300.5 673.3 DL -311.5 673.3 306 673.3 DL 317 673.3 311.5 673.3 DL 322.5 673.3 317 673.3 -DL 328 673.3 322.5 673.3 DL 333.5 673.3 328 673.3 DL 339 673.3 333.5 -673.3 DL 344.5 673.3 339 673.3 DL 350 673.3 344.5 673.3 DL 355.5 673.3 -350 673.3 DL 361 673.3 355.5 673.3 DL 366.5 673.3 361 673.3 DL 372 673.3 -366.5 673.3 DL 377.5 673.3 372 673.3 DL 383 673.3 377.5 673.3 DL 388.5 -673.3 383 673.3 DL 394 673.3 388.5 673.3 DL 399.5 673.3 394 673.3 DL 405 -673.3 399.5 673.3 DL 410.5 673.3 405 673.3 DL 416 673.3 410.5 673.3 DL -421.5 673.3 416 673.3 DL 427 673.3 421.5 673.3 DL 432.5 673.3 427 673.3 -DL 438 673.3 432.5 673.3 DL 443.5 673.3 438 673.3 DL 449 673.3 443.5 -673.3 DL 454.5 673.3 449 673.3 DL 460 673.3 454.5 673.3 DL 465.5 673.3 -460 673.3 DL 471 673.3 465.5 673.3 DL 476.5 673.3 471 673.3 DL 482 673.3 -476.5 673.3 DL 487.5 673.3 482 673.3 DL 493 673.3 487.5 673.3 DL 498.5 -673.3 493 673.3 DL 504 673.3 498.5 673.3 DL F3(5)285.25 756 Q EP -%%Page: 6 6 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF(clearer)108 97.2 Q(.)-.605 E 1.025 -(In database jar)108 114.3 R(gon,)-.198 E/F1 10/Times-Roman@0 SF -(POSTGRES)3.775 E F0 1.025(uses a simple \231process-per)3.775 F 1.025 -(-user\232 client/serv)-.22 F 1.024(er model.)-.165 F(A)6.524 E F1 -(POSTGRES)108 127.5 Q F0(session consists of the follo)2.75 E -(wing cooperating)-.275 E F1(UNIX)2.75 E F0(processes \(programs\):)2.75 -E 5.5<8341>113.5 144.6 S(supervisory daemon process \(the)-2.75 E/F2 11 -/Courier@0 SF(postmaster)2.75 E F0(\),)A 5.5<8374>113.5 157.8 S -(he user')-5.5 E 2.75(sf)-.605 G(rontend application \(e.g., the)-2.75 E -F2(psql)2.75 E F0(program\), and)2.75 E 5.5<8374>113.5 171 S -(he one or more back)-5.5 E(end database serv)-.11 E(ers \(the)-.165 E -F2(postgres)2.75 E F0(process itself\).)2.75 E 2.783(As)108 188.1 S -(ingle)-2.783 E F2(postmaster)2.783 E F0 .034(manages a gi)2.783 F -.165 -(ve)-.275 G 2.784(nc).165 G .034(ollection of)-2.784 F/F3 11 -/Times-Italic@0 SF(databases)2.784 E F0 .034(on a single host.)2.784 F -.034(Such a)5.534 F .214(collection of databases is called an)108 201.3 -R F3(installation)2.963 E F0(or)2.963 E F3(site)2.963 E F0 5.713(.F)C -.213(rontend applications that wish to)-5.713 F 2.462(access a gi)108 -214.5 R -.165(ve)-.275 G 5.213(nd).165 G 2.463 -(atabase within an installation mak)-5.213 F 5.213(ec)-.11 G 2.463 -(alls to the)-5.213 F F1(LIBPQ)5.213 E F0(library)5.213 E 7.963(.T)-.715 -G(he)-7.963 E .275(library sends user requests o)108 227.7 R -.165(ve) --.165 G 3.024(rt).165 G .274(he netw)-3.024 F .274(ork to the)-.11 F F2 -(postmaster)3.024 E F0 .274(\(Figure 1\(a\)\), which in)3.024 F .591 -(turn starts a ne)108 240.9 R 3.341(wb)-.275 G(ack)-3.341 E .591 -(end serv)-.11 F .592 -(er process \(Figure 1\(b\)\) and connects the frontend process)-.165 F -.165(to the ne)108 254.1 R 2.915(ws)-.275 G(erv)-2.915 E .165 -(er \(Figure 1\(c\)\).)-.165 F .164 -(From that point on, the frontend process and the back)5.664 F(end)-.11 -E(serv)108 267.3 Q .625(er communicate without interv)-.165 F .626 -(ention by the)-.165 F F2(postmaster)3.376 E F0 6.126(.H)C .626 -(ence, the)-6.126 F F2(postmas-)3.376 E(ter)108 280.5 Q F0 1.72(is al) -4.47 F -.11(wa)-.11 G 1.72(ys running, w).11 F 1.72 -(aiting for requests, whereas frontend and back)-.11 F 1.72 -(end processes)-.11 F .795(come and go.)108 293.7 R(The)6.296 E F1 -(LIBPQ)3.546 E F0 .796(library allo)3.546 F .796 -(ws a single frontend to mak)-.275 F 3.546(em)-.11 G .796 -(ultiple connections)-3.546 F 1.511(to back)108 306.9 R 1.511 -(end processes.)-.11 F(Ho)7.011 E(we)-.275 E -.165(ve)-.275 G 2.391 -.44 -(r, t).165 H 1.511 -(he frontend application is still a single-threaded pro-).44 F 3.294 -(cess. Multithreaded)108 320.1 R(frontend/back)3.294 E .545 -(end connections are not currently supported in)-.11 F F1(LIBPQ)3.295 E -F0(.)A .054(One implication of this architecture is that the)108 337.2 R -F2(postmaster)2.803 E F0 .053(and the back)2.803 F .053(end al)-.11 F --.11(wa)-.11 G .053(ys run).11 F .831 -(on the same machine \(the database serv)108 350.4 R .832 -(er\), while the frontend application may run an)-.165 F(y-)-.165 E -3.659(where. Y)108 363.6 R .909(ou should k)-1.21 F .908 -(eep this in mind, because the \214les that can be accessed on a client) --.11 F .943 -(machine may not be accessible \(or may only be accessed using a dif)108 -376.8 R .943(ferent \214lename\) on)-.275 F(the database serv)108 390 Q -(er machine.)-.165 E -1.21(Yo)108 407.1 S 3.967(us)1.21 G 1.217 -(hould also be a)-3.967 F -.11(wa)-.165 G 1.217(re that the).11 F F2 -(postmaster)3.967 E F0(and)3.967 E F2(postgres)3.967 E F0(serv)3.967 E -1.216(ers run with the)-.165 F(user)108 420.3 Q .493(-id of the)-.22 F -F1(POSTGRES)3.243 E F0(\231superuser)3.243 E 4.783 -.77(.\232 N)-.605 H -.493(ote that the).77 F F1(POSTGRES)3.244 E F0 .494 -(superuser does not ha)3.244 F -.165(ve)-.22 G .931 -(to be a special user \(e.g., a user named \231postgres\232\).)108 433.5 -R .931(Furthermore, the)6.431 F F1(POSTGRES)3.681 E F0(supe-)3.681 E -.171(ruser should de\214nitely not be the)108 446.7 R F1(UNIX)2.921 E F0 -(superuser)2.921 E 2.921<2c99>-.44 G 2.921(root\232! In)-2.921 F(an) -2.921 E 2.921(yc)-.165 G .171(ase, all \214les relating to)-2.921 F 2.75 -(ad)108 459.9 S(atabase should belong to this)-2.75 E F1(POSTGRES)2.75 E -F0(superuser)2.75 E(.)-.605 E/F4 11/Times-Bold@0 SF(6)285.25 756 Q EP -%%Page: 7 7 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(3. GETTING)72 165.4 R(ST)4.75 E(AR) --1.71 E(TED WITH POSTGRES)-.76 E 77.5 178.6 72 178.6 DL 80.5 178.6 75 -178.6 DL 86 178.6 80.5 178.6 DL 91.5 178.6 86 178.6 DL 97 178.6 91.5 -178.6 DL 102.5 178.6 97 178.6 DL 108 178.6 102.5 178.6 DL 113.5 178.6 -108 178.6 DL 119 178.6 113.5 178.6 DL 124.5 178.6 119 178.6 DL 130 178.6 -124.5 178.6 DL 135.5 178.6 130 178.6 DL 141 178.6 135.5 178.6 DL 146.5 -178.6 141 178.6 DL 152 178.6 146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 -178.6 157.5 178.6 DL 168.5 178.6 163 178.6 DL 174 178.6 168.5 178.6 DL -179.5 178.6 174 178.6 DL 185 178.6 179.5 178.6 DL 190.5 178.6 185 178.6 -DL 196 178.6 190.5 178.6 DL 201.5 178.6 196 178.6 DL 207 178.6 201.5 -178.6 DL 212.5 178.6 207 178.6 DL 218 178.6 212.5 178.6 DL 223.5 178.6 -218 178.6 DL 229 178.6 223.5 178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 -234.5 178.6 DL 245.5 178.6 240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 -178.6 251 178.6 DL 262 178.6 256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 -178.6 267.5 178.6 DL 278.5 178.6 273 178.6 DL 284 178.6 278.5 178.6 DL -289.5 178.6 284 178.6 DL 295 178.6 289.5 178.6 DL 300.5 178.6 295 178.6 -DL 306 178.6 300.5 178.6 DL 311.5 178.6 306 178.6 DL 317 178.6 311.5 -178.6 DL 322.5 178.6 317 178.6 DL 328 178.6 322.5 178.6 DL 333.5 178.6 -328 178.6 DL 339 178.6 333.5 178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 -344.5 178.6 DL 355.5 178.6 350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 -178.6 361 178.6 DL 372 178.6 366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 -178.6 377.5 178.6 DL 388.5 178.6 383 178.6 DL 394 178.6 388.5 178.6 DL -399.5 178.6 394 178.6 DL 405 178.6 399.5 178.6 DL 410.5 178.6 405 178.6 -DL 416 178.6 410.5 178.6 DL 421.5 178.6 416 178.6 DL 427 178.6 421.5 -178.6 DL 432.5 178.6 427 178.6 DL 438 178.6 432.5 178.6 DL 443.5 178.6 -438 178.6 DL 449 178.6 443.5 178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 -454.5 178.6 DL 465.5 178.6 460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 -178.6 471 178.6 DL 482 178.6 476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 -178.6 487.5 178.6 DL 498.5 178.6 493 178.6 DL 504 178.6 498.5 178.6 DL -/F1 11/Times-Roman@0 SF .735(This section discusses ho)108 208.9 R 3.485 -(wt)-.275 G 3.485(os)-3.485 G(tart)-3.485 E/F2 10/Times-Roman@0 SF -(POSTGRES)3.484 E F1 .734(and set up your o)3.484 F .734(wn en)-.275 F -.734(vironment so that)-.44 F .707(you can use frontend applications. W) -108 222.1 R 3.458(ea)-.88 G(ssume)-3.458 E F2(POSTGRES)3.458 E F1 .708 -(has already been successfully)3.458 F -(installed. \(Refer to the installation notes for ho)108 235.3 Q 2.75 -(wt)-.275 G 2.75(oi)-2.75 G(nstall)-2.75 E F2(POSTGRES)2.75 E F1(.\))A -.637(Some of the steps listed in this section will apply to all)108 -261.7 R F2(POSTGRES)3.386 E F1 .636(users, and some will)3.386 F 1.135 -(apply primarily to the site database administrator)108 274.9 R 6.635 -(.T)-.605 G(his)-6.635 E/F3 11/Times-Italic@0 SF 1.135(site administr) -3.885 F(ator)-.165 E F1 1.135(is the person)3.885 F .129 -(who installed the softw)108 288.1 R .129 -(are, created the database directories and started the)-.11 F/F4 11 -/Courier@0 SF(postmaster)2.879 E F1 4.183(process. This)108 301.3 R -1.433(person does not ha)4.183 F 1.763 -.165(ve t)-.22 H 4.183(ob).165 G -4.183(et)-4.183 G(he)-4.183 E F2(UNIX)4.183 E F1(superuser)4.183 E 4.184 -<2c99>-.44 G(root,)-4.184 E 4.184<9a6f>-.77 G 4.184(rt)-4.184 G 1.434 -(he computer)-4.184 F(system administrator)108 314.5 Q(.)-.605 E 1.512(\ -In this section, items for end users are labelled \231User\232 and item\ -s intended for the site)108 331.6 R(administrator are labelled \231)108 -344.8 Q(Admin.)-.88 E<9a>-.77 E .677(Throughout this manual, an)108 -361.9 R 3.427(ye)-.165 G .677(xamples that be)-3.592 F .678 -(gin with the character `)-.165 F(`)-.814 E F4(%)A F1 2.306 -.814('' a)D -.678(re commands).814 F 1.067(that should be typed at the)108 375.1 R F2 -(UNIX)3.817 E F1 1.067(shell prompt.)3.817 F 1.067(Examples that be) -6.567 F 1.067(gin with the character)-.165 F -.814(``)108 388.3 S F4(*) -.814 E F1 1.628 -.814('' a)D(re commands in the).814 E F2(POSTGRES)2.75 -E F1(query language,)2.75 E F2(POSTGRES)2.75 E F1(SQL.)2.75 E/F5 12 -/Times-Bold@0 SF 3(3.1. Admin/User:)72 414.5 R(Setting Up Y)3 E(our En) --1.332 E(vir)-.48 E(onment)-.216 E 77.5 439.7 72 439.7 DL 80.5 439.7 75 -439.7 DL 86 439.7 80.5 439.7 DL 91.5 439.7 86 439.7 DL 97 439.7 91.5 -439.7 DL 102.5 439.7 97 439.7 DL 108 439.7 102.5 439.7 DL 113.5 439.7 -108 439.7 DL 119 439.7 113.5 439.7 DL 124.5 439.7 119 439.7 DL 130 439.7 -124.5 439.7 DL 135.5 439.7 130 439.7 DL 141 439.7 135.5 439.7 DL 146.5 -439.7 141 439.7 DL 152 439.7 146.5 439.7 DL 157.5 439.7 152 439.7 DL 163 -439.7 157.5 439.7 DL 168.5 439.7 163 439.7 DL 174 439.7 168.5 439.7 DL -179.5 439.7 174 439.7 DL 185 439.7 179.5 439.7 DL 190.5 439.7 185 439.7 -DL 196 439.7 190.5 439.7 DL 201.5 439.7 196 439.7 DL 207 439.7 201.5 -439.7 DL 212.5 439.7 207 439.7 DL 218 439.7 212.5 439.7 DL 223.5 439.7 -218 439.7 DL 229 439.7 223.5 439.7 DL 234.5 439.7 229 439.7 DL 240 439.7 -234.5 439.7 DL 245.5 439.7 240 439.7 DL 251 439.7 245.5 439.7 DL 256.5 -439.7 251 439.7 DL 262 439.7 256.5 439.7 DL 267.5 439.7 262 439.7 DL 273 -439.7 267.5 439.7 DL 278.5 439.7 273 439.7 DL 284 439.7 278.5 439.7 DL -289.5 439.7 284 439.7 DL 295 439.7 289.5 439.7 DL 300.5 439.7 295 439.7 -DL 306 439.7 300.5 439.7 DL 311.5 439.7 306 439.7 DL 317 439.7 311.5 -439.7 DL 322.5 439.7 317 439.7 DL 328 439.7 322.5 439.7 DL 333.5 439.7 -328 439.7 DL 339 439.7 333.5 439.7 DL 344.5 439.7 339 439.7 DL 350 439.7 -344.5 439.7 DL 355.5 439.7 350 439.7 DL 361 439.7 355.5 439.7 DL 366.5 -439.7 361 439.7 DL 372 439.7 366.5 439.7 DL 377.5 439.7 372 439.7 DL 383 -439.7 377.5 439.7 DL 388.5 439.7 383 439.7 DL 394 439.7 388.5 439.7 DL -399.5 439.7 394 439.7 DL 405 439.7 399.5 439.7 DL 410.5 439.7 405 439.7 -DL 416 439.7 410.5 439.7 DL 421.5 439.7 416 439.7 DL 427 439.7 421.5 -439.7 DL 432.5 439.7 427 439.7 DL 438 439.7 432.5 439.7 DL 443.5 439.7 -438 439.7 DL 449 439.7 443.5 439.7 DL 454.5 439.7 449 439.7 DL 460 439.7 -454.5 439.7 DL 465.5 439.7 460 439.7 DL 471 439.7 465.5 439.7 DL 476.5 -439.7 471 439.7 DL 482 439.7 476.5 439.7 DL 487.5 439.7 482 439.7 DL 493 -439.7 487.5 439.7 DL 498.5 439.7 493 439.7 DL 504 439.7 498.5 439.7 DL 0 -0 432 826 -170.061 317 72 636.161 PBEGIN -%%BeginDocument: manual-files.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 826 317 -%%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 --17.0 331.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.06000 0.06000 sc -/Times-Roman findfont 240.00 scalefont setfont -1650 3990 m -gs 1 -1 sc (pg_class ....) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -3750 2415 m -gs 1 -1 sc ([shared classes]) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -3750 2115 m -gs 1 -1 sc (pg_log) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -3750 4215 m -gs 1 -1 sc ([private classes]) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -3750 3990 m -gs 1 -1 sc (pg_class ....) col-1 show gr -7.500 slw -% Polyline -n 2850 1665 m 1575 1890 l gs col-1 s gr -% Polyline -n 2850 1665 m 2475 1890 l gs col-1 s gr -% Polyline -n 1500 2265 m 1050 2790 l gs col-1 s gr -% Polyline -n 2475 2265 m 2475 2790 l gs col-1 s gr -% Polyline -n 2850 1680 m 4050 1905 l gs col-1 s gr -% Polyline -n 2475 2265 m 4500 2790 l gs col-1 s gr -% Polyline -n 4575 3165 m 4575 3690 l gs col-1 s gr -% Polyline -n 2475 3165 m 2475 3690 l gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -1350 2190 m -gs 1 -1 sc (files) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -2250 2190 m -gs 1 -1 sc (base) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -1950 3090 m -gs 1 -1 sc (template1) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -2625 1590 m -gs 1 -1 sc (data) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -450 3090 m -gs 1 -1 sc ([.bki files]) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -3225 3090 m -gs 1 -1 sc ( ) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -4500 2190 m -gs 1 -1 sc (....) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -4275 3090 m -gs 1 -1 sc (mydb ....) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -6600 4875 m -gs 1 -1 sc (EXECUTABLE) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -6600 5175 m -gs 1 -1 sc (PROGRAMS) col-1 show gr -% Polyline -n 7800 465 m 10125 1290 l gs col-1 s gr -% Polyline -n 10125 1665 m 10125 1890 l gs col-1 s gr -% Polyline -n 7800 465 m 11475 1290 l gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -1650 4215 m -gs 1 -1 sc ([private classes]) col-1 show gr -% Polyline -n 11475 1665 m 11475 1890 l gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -11100 2190 m -gs 1 -1 sc (libpq-fe.h ....) col-1 show gr -% Polyline -n 7800 465 m 12675 1290 l gs col-1 s gr -% Polyline -n 7800 465 m 13650 1290 l gs col-1 s gr -% Polyline -n 7800 450 m 2850 1275 l gs col-1 s gr -% Polyline -n 7800 450 m 7350 1275 l gs col-1 s gr -% Polyline -n 300 4500 m 5550 4500 l gs col-1 s gr -% Polyline -n 300 4575 m 5550 4575 l gs col-1 s gr -% Polyline -n 5775 4500 m 9600 4500 l gs col-1 s gr -% Polyline -n 5775 4575 m 9600 4575 l gs col-1 s gr -% Polyline -n 9825 4500 m 14025 4500 l gs col-1 s gr -% Polyline -n 9825 4575 m 14025 4575 l gs col-1 s gr -% Polyline -n 7350 1665 m 6225 1890 l gs col-1 s gr -% Polyline -n 7350 1665 m 7275 1890 l gs col-1 s gr -% Polyline -n 7350 1665 m 8475 1890 l gs col-1 s gr -/Times-Roman findfont 240.00 scalefont setfont -9825 2190 m -gs 1 -1 sc (libpq.a) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -9975 1590 m -gs 1 -1 sc (lib) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -11100 1590 m -gs 1 -1 sc (include) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -12600 1590 m -gs 1 -1 sc (src) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -13500 1590 m -gs 1 -1 sc (doc) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -7350 390 m -gs 1 -1 sc (postgres) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -2400 4950 m -gs 1 -1 sc (DATA) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -10950 5175 m -gs 1 -1 sc (DEVELOPMENT) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -10950 4875 m -gs 1 -1 sc (APPLICATION ) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -10950 5475 m -gs 1 -1 sc (ENVIRONMENT) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -7200 1590 m -gs 1 -1 sc (bin) col-1 show gr -/Times-Roman findfont 240.00 scalefont setfont -5775 2190 m -gs 1 -1 sc ( psql postgres postmaster....) col-1 show gr -$F2psEnd -restore -%%EndDocument -end PEND/F6 11/Times-Bold@0 SF(Figur)214.358 662.561 Q 2.75(e2)-.198 G -F1(.)-2.75 E F2(POSTGRES)5.5 E F1(\214le layout.)2.75 E 77.5 675.761 72 -675.761 DL 80.5 675.761 75 675.761 DL 86 675.761 80.5 675.761 DL 91.5 -675.761 86 675.761 DL 97 675.761 91.5 675.761 DL 102.5 675.761 97 -675.761 DL 108 675.761 102.5 675.761 DL 113.5 675.761 108 675.761 DL 119 -675.761 113.5 675.761 DL 124.5 675.761 119 675.761 DL 130 675.761 124.5 -675.761 DL 135.5 675.761 130 675.761 DL 141 675.761 135.5 675.761 DL -146.5 675.761 141 675.761 DL 152 675.761 146.5 675.761 DL 157.5 675.761 -152 675.761 DL 163 675.761 157.5 675.761 DL 168.5 675.761 163 675.761 DL -174 675.761 168.5 675.761 DL 179.5 675.761 174 675.761 DL 185 675.761 -179.5 675.761 DL 190.5 675.761 185 675.761 DL 196 675.761 190.5 675.761 -DL 201.5 675.761 196 675.761 DL 207 675.761 201.5 675.761 DL 212.5 -675.761 207 675.761 DL 218 675.761 212.5 675.761 DL 223.5 675.761 218 -675.761 DL 229 675.761 223.5 675.761 DL 234.5 675.761 229 675.761 DL 240 -675.761 234.5 675.761 DL 245.5 675.761 240 675.761 DL 251 675.761 245.5 -675.761 DL 256.5 675.761 251 675.761 DL 262 675.761 256.5 675.761 DL -267.5 675.761 262 675.761 DL 273 675.761 267.5 675.761 DL 278.5 675.761 -273 675.761 DL 284 675.761 278.5 675.761 DL 289.5 675.761 284 675.761 DL -295 675.761 289.5 675.761 DL 300.5 675.761 295 675.761 DL 306 675.761 -300.5 675.761 DL 311.5 675.761 306 675.761 DL 317 675.761 311.5 675.761 -DL 322.5 675.761 317 675.761 DL 328 675.761 322.5 675.761 DL 333.5 -675.761 328 675.761 DL 339 675.761 333.5 675.761 DL 344.5 675.761 339 -675.761 DL 350 675.761 344.5 675.761 DL 355.5 675.761 350 675.761 DL 361 -675.761 355.5 675.761 DL 366.5 675.761 361 675.761 DL 372 675.761 366.5 -675.761 DL 377.5 675.761 372 675.761 DL 383 675.761 377.5 675.761 DL -388.5 675.761 383 675.761 DL 394 675.761 388.5 675.761 DL 399.5 675.761 -394 675.761 DL 405 675.761 399.5 675.761 DL 410.5 675.761 405 675.761 DL -416 675.761 410.5 675.761 DL 421.5 675.761 416 675.761 DL 427 675.761 -421.5 675.761 DL 432.5 675.761 427 675.761 DL 438 675.761 432.5 675.761 -DL 443.5 675.761 438 675.761 DL 449 675.761 443.5 675.761 DL 454.5 -675.761 449 675.761 DL 460 675.761 454.5 675.761 DL 465.5 675.761 460 -675.761 DL 471 675.761 465.5 675.761 DL 476.5 675.761 471 675.761 DL 482 -675.761 476.5 675.761 DL 487.5 675.761 482 675.761 DL 493 675.761 487.5 -675.761 DL 498.5 675.761 493 675.761 DL 504 675.761 498.5 675.761 DL F6 -(7)285.25 756 Q EP -%%Page: 8 8 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF .856(Figure 2 sho)108 97.2 R .856(ws ho)-.275 F -3.606(wt)-.275 G(he)-3.606 E/F1 10/Times-Roman@0 SF(POSTGRES)3.606 E F0 -(distrib)3.606 E .856(ution is laid out when installed in the def)-.22 F -(ault)-.11 E -.11(wa)108 110.4 S 2.629 -.715(y. F).11 H 1.199 -(or simplicity).55 F 3.949(,w)-.715 G 3.949(ew)-3.949 G 1.199 -(ill assume that)-3.949 F F1(POSTGRES)3.949 E F0 1.198 -(has been installed in the directory)3.949 F/F2 11/Courier@0 SF -(/usr/local/postgres95)108 123.6 Q F0 16.351(.T)C 10.851 -(herefore, where)-16.351 F -.165(ve)-.275 G 13.601(ry).165 G 10.852 -(ou see the directory)-13.601 F F2(/usr/local/postgres95)108 136.8 Q F0 -2.02(you should substitute the name of the directory where)4.771 F F1 -(POSTGRES)108 150 Q F0(is actually installed.)2.75 E(All)108 167.1 Q F1 -(POSTGRES)24.549 E F0 21.8(commands are installed in the directory)24.55 -F F2(/usr/local/postgres95/bin)108 180.3 Q F0 6.918(.T)C 1.418 -(herefore, you should add this directory to your)-6.918 F(shell)108 -193.5 Q/F3 11/Times-Italic@0 SF .391(command path)3.141 F F0 5.891(.I)C -3.141(fy)-5.891 G .391(ou use a v)-3.141 F .391(ariant of the Berk)-.275 -F(ele)-.11 E 3.142(yCs)-.165 G .392(hell, such as)-3.142 F F2(csh)3.142 -E F0(or)3.142 E F2(tcsh)3.142 E F0(,)A(you w)108 206.7 Q(ould add)-.11 E -/F4 10/Courier@0 SF 6(%s)148 231.9 S -(et path = \( /usr/local/postgres95/bin $path \))-6 E F0 .213(in the)108 -258.1 R F2(.login)2.963 E F0 .212(\214le in your home directory)2.963 F -5.712(.I)-.715 G 2.962(fy)-5.712 G .212(ou use a v)-2.962 F .212 -(ariant of the Bourne shell, such)-.275 F(as)108 271.3 Q F2(sh)2.75 E F0 -(,)A F2(ksh)2.75 E F0 2.75(,o)C(r)-2.75 E F2(bash)2.75 E F0 2.75(,t)C -(hen you w)-2.75 E(ould add)-.11 E F4 6(%P)148 296.5 S -(ATH=/usr/local/postgres95/bin:$PATH)-6 E 6(%e)148 308.7 S(xport PATH)-6 -E F0(to the)108 334.9 Q F2(.profile)2.75 E F0 -(\214le in your home directory)2.75 E(.)-.715 E .322(From no)108 352 R -3.072(wo)-.275 G .322(n, we will assume that you ha)-3.072 F .652 -.165 -(ve a)-.22 H .323(dded the).165 F F1(POSTGRES)3.073 E F2(bin)3.073 E F0 -.323(directory to your)3.073 F 2.893(path. In)108 365.2 R .143 -(addition, we will mak)2.893 F 2.893(ef)-.11 G .143 -(requent reference to \231setting a shell v)-2.893 F .143 -(ariable\232 or \231setting)-.275 F .826(an en)108 378.4 R .826 -(vironment v)-.44 F .827(ariable\232 throughout this document.)-.275 F -.827(If you did not fully understand the)6.327 F .056 -(last paragraph on modifying your search path, you should consult the) -108 391.6 R F1(UNIX)2.806 E F0 .056(manual pages)2.806 F -(that describe your shell before going an)108 404.8 Q 2.75(yf)-.165 G -(urther)-2.75 E(.)-.605 E/F5 12/Times-Bold@0 SF 3(3.2. Admin:)72 431 R -(Starting the P)3 E(ostmaster)-.24 E F0 1.227(It should be clear from t\ -he preceding discussion that nothing can happen to a database)108 448.1 -R .602(unless the)108 461.3 R F2(postmaster)3.352 E F0 .602 -(process is running.)3.352 F .602(As the site administrator)6.102 F -3.351(,t)-.44 G .601(here are a num-)-3.351 F 1.686 -(ber of things you should remember before starting the)108 474.5 R F2 -(postmaster)4.436 E F0 7.186(.T)C 1.686(hese are dis-)-7.186 F 2.24 -(cussed in the section of this manual titled, \231)108 487.7 R -(Administering)-.88 E F1(POSTGRES)4.989 E F0 6.529 -.77(.\232 H)D -.275 -(ow).77 G -2.365 -.275(ev e).275 H 3.119 -.44(r, i).275 H(f).44 E F1 -(POSTGRES)108 500.9 Q F0 .106(has been installed by follo)2.856 F .107 -(wing the installation instructions e)-.275 F .107(xactly as written,) --.165 F(the follo)108 514.1 Q -(wing simple command is all you should need to start the)-.275 E F2 -(postmaster)2.75 E F0(:)A F4 6(%p)148 539.3 S(ostmaster &)-6 E F0(The) -108 569.4 Q F2(postmaster)3.005 E F0 .255 -(occasionally prints out messages which are often helpful during trou-) -3.005 F 3.201(bleshooting. If)108 582.6 R .451(you wish to vie)3.201 F -3.201(wd)-.275 G(eb)-3.201 E .451(ugging messages from the postmaster) --.22 F 3.201(,y)-.44 G .451(ou can start)-3.201 F -(it with the -d option and redirect the output to the log \214le:)108 -595.8 Q F4 6(%p)148 621 S(ostmaster -d >& pm.log &)-6 E F0 -(If you do not wish to see these messages, you can type)108 647.2 Q F4 6 -(%p)148 672.4 S(ostmaster -S)-6 E F0 .921(and the)108 698.6 R F2 -(postmaster)3.671 E F0 .921(will be \231S\232ilent.)3.671 F .921 -(Notice that there is no ampersand \(\231&\232\) at the)6.421 F -(end of the last e)108 711.8 Q(xample.)-.165 E/F6 11/Times-Bold@0 SF(8) -285.25 756 Q EP -%%Page: 9 9 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 3(3.3. Admin:)72 97.2 R -(Adding and Deleting Users)3 E/F1 11/Times-Roman@0 SF(The)108 114.3 Q/F2 -11/Courier@0 SF(createuser)7.893 E F1 5.144 -(command enables speci\214c users to access)7.894 F/F3 10/Times-Roman@0 -SF(POSTGRES)7.894 E F1 10.644(.T)C(he)-10.644 E F2(destroyuser)108 127.5 -Q F1 .524(command remo)3.274 F -.165(ve)-.165 G 3.274(su).165 G .524 -(sers and pre)-3.274 F -.165(ve)-.275 G .524(nts them from accessing) -.165 F F3(POSTGRES)3.273 E F1(.)A 1.744 -(Note that these commands only af)108 140.7 R 1.744 -(fect users with respect to)-.275 F F3(POSTGRES)4.495 E F1 4.495(;t)C -(he)-4.495 E 4.495(yh)-.165 G -2.475 -.22(av e)-4.495 H(no)4.715 E(ef) -108 153.9 Q -(fect administration of users that the operating system manages.)-.275 E -F0 3(3.4. User:)72 180.1 R(Starting A)3 E(pplications)-.3 E F1 .087 -(Assuming that your site administrator has properly started the)108 -197.2 R F2(postmaster)2.837 E F1 .087(process and)2.837 F .186 -(authorized you to use the database, you \(as a user\) may be)108 210.4 -R .187(gin to start up applications.)-.165 F(As)5.687 E(pre)108 223.6 Q -.303(viously mentioned, you should add)-.275 F F2 -(/usr/local/postgres95/bin)3.052 E F1 .302(to your shell)3.052 F -(search path.)108 239 Q(In most cases, this is all you should ha)5.5 E -.33 -.165(ve t)-.22 H 2.75(od).165 G 2.75(oi)-2.75 G 2.75(nt)-2.75 G -(erms of preparation.)-2.75 E/F4 8/Times-Roman@0 SF(1)-4.4 I F1 1.245 -(If you get the follo)108 256.1 R 1.245(wing error message from a)-.275 -F F3(POSTGRES)3.995 E F1 1.245(command \(such as)3.995 F F2(psql)3.995 E -F1(or)3.996 E F2(createdb)108 269.3 Q F1(\):)A/F5 10/Courier@0 SF(conne\ -ctDB\(\) failed: Is the postmaster running at 'localhost' on port '4322\ -'?)148 294.5 Q F1 1.103(it is usually because \(1\) the)108 320.7 R F2 -(postmaster)3.852 E F1 1.102 -(is not running, or \(2\) you are attempting to)3.852 F -(connect to the wrong serv)108 333.9 Q(er host.)-.165 E -(If you get the follo)108 351 Q(wing error message:)-.275 E F5 -(FATAL 1:Feb 17 23:19:55:process userid \(2360\) !=)148 376.2 Q -(database owner \(268\))160 388.4 Q F1 .188 -(it means that the site administrator started the)108 414.6 R F2 -(postmaster)2.938 E F1 .188(as the wrong user)2.938 F 5.688(.T)-.605 G -.188(ell him)-6.458 F(to restart it as the)108 427.8 Q F3(POSTGRES)2.75 -E F1(superuser)2.75 E(.)-.605 E F0 3(3.5. User:)72 454 R -(Managing a Database)3 E F1(No)108 471.1 Q 2.859(wt)-.275 G(hat)-2.859 E -F3(POSTGRES)2.859 E F1 .109 -(is up and running we can create some databases to e)2.859 F .108 -(xperiment with.)-.165 F -(Here, we describe the basic commands for managing a database.)108 484.3 -Q F0 3(3.5.1. Cr)72 510.5 R(eating a Database)-.216 E F1(Let')108 527.6 -Q 2.96(ss)-.605 G .21(ay you w)-2.96 F .21 -(ant to create a database named)-.11 F F2(mydb)2.96 E F1 5.71(.Y)C .211 -(ou can do this with the follo)-6.92 F(wing)-.275 E(command:)108 540.8 Q -F5 6(%c)148 566 S(reatedb mydb)-6 E F3(POSTGRES)108 592.2 Q F1(allo)2.8 -E .05(ws you to create an)-.275 F 2.8(yn)-.165 G .05 -(umber of databases at a gi)-2.8 F -.165(ve)-.275 G 2.799(ns).165 G .049 -(ite and you automat-)-2.799 F 2.104(ically become the)108 605.4 R/F6 11 -/Times-Italic@0 SF 2.104(database administr)4.854 F(ator)-.165 E F1 -2.104(of the database you just created.)4.854 F(Database)7.604 E -(names must ha)108 618.6 Q .33 -.165(ve a)-.22 H 2.75(na).165 G(lphabet\ -ic \214rst character and are limited to 16 characters in length.)-2.75 E -.32 LW 76 638.6 72 638.6 DL 80 638.6 76 638.6 DL 84 638.6 80 638.6 DL 88 -638.6 84 638.6 DL 92 638.6 88 638.6 DL 96 638.6 92 638.6 DL 100 638.6 96 -638.6 DL 104 638.6 100 638.6 DL 108 638.6 104 638.6 DL 112 638.6 108 -638.6 DL 116 638.6 112 638.6 DL 120 638.6 116 638.6 DL 124 638.6 120 -638.6 DL 128 638.6 124 638.6 DL 132 638.6 128 638.6 DL 136 638.6 132 -638.6 DL 140 638.6 136 638.6 DL 144 638.6 140 638.6 DL 148 638.6 144 -638.6 DL 152 638.6 148 638.6 DL 156 638.6 152 638.6 DL 160 638.6 156 -638.6 DL 164 638.6 160 638.6 DL 168 638.6 164 638.6 DL 172 638.6 168 -638.6 DL 176 638.6 172 638.6 DL 180 638.6 176 638.6 DL 184 638.6 180 -638.6 DL 188 638.6 184 638.6 DL 192 638.6 188 638.6 DL 196 638.6 192 -638.6 DL 200 638.6 196 638.6 DL 204 638.6 200 638.6 DL 208 638.6 204 -638.6 DL 212 638.6 208 638.6 DL 216 638.6 212 638.6 DL/F7 5 -/Times-Roman@0 SF(1)93.6 649 Q F4 .431 -(If your site administrator has not set things up in the def)2.431 3.2 N -.431(ault w)-.08 F(ay)-.08 E 2.431(,y)-.52 G .431(ou may ha)-2.431 F -.671 -.12(ve s)-.16 H .431(ome more w).12 F .431(ork to do.)-.08 F -.12 -(Fo)4.432 G 2.432(re).12 G .432(xample, if the)-2.552 F .068 -(database serv)72 661.8 R .068 -(er machine is a remote machine, you will need to set the)-.12 F/F8 8 -/Courier@0 SF(PGHOST)2.068 E F4(en)2.068 E .067(vironment v)-.32 F .067 -(ariable to the name of the database serv-)-.2 F .131(er machine.)72 -671.4 R .131(The en)4.131 F .131(vironment v)-.32 F(ariable)-.2 E F8 -(PGPORT)2.131 E F4 .131(may also ha)2.131 F .372 -.12(ve t)-.16 H 2.132 -(ob).12 G 2.132(es)-2.132 G 2.132(et. The)-2.132 F .132 -(bottom line is this: if you try to start an application pro-)2.132 F -.614(gram and it complains that it cannot connect to the)72 681 R F8 -(postmaster)2.613 E F4 2.613(,y)C .613 -(ou should immediately consult your site administrator to mak)-2.613 F -(e)-.08 E(sure that your en)72 690.6 Q(vironment is properly set up.) --.32 E/F9 11/Times-Bold@0 SF(9)285.25 756 Q EP -%%Page: 10 10 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF 2.528(Not e)108 97.2 R -.165(ve)-.275 G 2.528 -(ry user has authorization to become a database administrator).165 F -8.027(.I)-.605 G(f)-8.027 E/F1 10/Times-Roman@0 SF(POSTGRES)5.277 E F0 -.333(refuses to create databases for you, then the site administrator n\ -eeds to grant you permis-)108 110.4 R(sion to create databases.)108 -123.6 Q(Consult your site administrator if this occurs.)5.5 E/F2 12 -/Times-Bold@0 SF 3(3.5.2. Accessing)72 149.8 R 3(aD)3 G(atabase)-3 E F0 -(Once you ha)108 166.9 Q .33 -.165(ve c)-.22 H -(onstructed a database, you can access it by:).165 E 5.5<8372>113.5 184 -S 2.696(unning the)-5.5 F F1(POSTGRES)5.446 E F0 2.696 -(terminal monitor programs \()5.446 F/F3 11/Courier@0 SF(monitor)5.446 E -F0(or)5.445 E F3(psql)5.445 E F0 5.445(\)w)C(hich)-5.445 E(allo)122.85 -197.2 Q(ws you to interacti)-.275 E -.165(ve)-.275 G(ly enter).165 E -2.75(,e)-.44 G(dit, and e)-2.75 E -.165(xe)-.165 G(cute SQL commands.) -.165 E 5.5<8377>113.5 210.4 S 1.107(riting a C program using the)-5.5 F -F1(LIBPQ)3.857 E F0 1.107(subroutine library)3.857 F 6.607(.T)-.715 G -1.108(his allo)-6.607 F 1.108(ws you to submit)-.275 F .883(SQL command\ -s from C and get answers and status messages back to your program.) -122.85 223.6 R(This interf)122.85 236.8 Q -(ace is discussed further in section ??.)-.11 E -1.21(Yo)108 253.9 S -3.472(um)1.21 G .722(ight w)-3.472 F .722(ant to start up)-.11 F F3 -(psql)3.472 E F0 3.472(,t)C 3.472(ot)-3.472 G .722(ry out the e)-3.472 F -.723(xamples in this manual. It can be acti-)-.165 F -.275(va)108 267.1 -S(ted for the).275 E F3(mydb)2.75 E F0(database by typing the command:) -2.75 E/F4 10/Courier@0 SF 6(%p)148 292.3 S(sql mydb)-6 E F0 -1.21(Yo)108 -318.5 S 2.75(uw)1.21 G(ill be greeted with the follo)-2.75 E -(wing message:)-.275 E F4 -(Welcome to the POSTGRES95 interactive sql monitor:)148 343.7 Q -(type \\? for help on slash commands)166 368.1 Q(type \\q to quit)166 -380.3 Q(type \\g or terminate with semicolon to execute query)166 392.5 -Q(You are currently connected to the database: mydb)154 404.7 Q(mydb=>) -148 429.1 Q F0 .632(This prompt indicates that the terminal monitor is \ -listening to you and that you can type)108 455.3 R(SQL queries into a w) -108 468.5 Q(orkspace maintained by the terminal monitor)-.11 E(.)-.605 E -(The)108 485.6 Q F3(psql)2.959 E F0 .209 -(program responds to escape codes that be)2.959 F .209 -(gin with the backslash character)-.165 F 2.959<2c99>-.44 G<5c9a2e> --2.959 E -.165(Fo)108 498.8 S 3.786(re).165 G 1.035 -(xample, you can get help on the syntax of v)-3.951 F(arious)-.275 E F1 -(POSTGRES)3.785 E F0 1.035(SQL commands by)3.785 F(typing:)108 512 Q F4 -(mydb=> \\h)148 537.2 Q F0 .761(Once you ha)108 563.4 R 1.091 -.165 -(ve \214)-.22 H .761(nished entering your queries into the w).165 F .762 -(orkspace, you can pass the con-)-.11 F(tents of the w)108 576.6 Q -(orkspace to the)-.11 E F1(POSTGRES)2.75 E F0(serv)2.75 E(er by typing:) --.165 E F4(mydb=> \\g)148 601.8 Q F0 .593(This tells the serv)108 628 R -.593(er to process the query)-.165 F 6.093(.I)-.715 G 3.342(fy)-6.093 G -.592(ou terminate your query with a semicolon,)-3.342 F -(the \\g is not necessary)108 641.2 Q 5.5(.P)-.715 G -(sql will automatically process semicolon-terminated queries.)-5.5 E -1.76 -.88(To r)108 658.3 T(ead queries from a \214le, say).88 E F3 -(myFile,)2.75 E F0(instead of entering them interacti)2.75 E -.165(ve) --.275 G(ly).165 E 2.75(,t)-.715 G(ype:)-2.75 E F4(mydb=> \\i fileName) -148 683.5 Q F0 1.76 -.88(To g)108 709.7 T(et out of psql and return to) -.88 E F1(UNIX)2.75 E F0 2.75(,t)C(ype)-2.75 E/F5 11/Times-Bold@0 SF(10) -282.5 756 Q EP -%%Page: 11 11 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(mydb=> \\q)148 96.2 Q/F1 11/Times-Roman@0 SF(and)108 -122.4 Q/F2 11/Courier@0 SF(psql)3.184 E F1 .434 -(will quit and return you to your command shell. \(F)3.184 F .434 -(or more escape codes, type)-.165 F F2(\\h)108 135.6 Q F1(at the)2.75 E -F2(monitor)2.75 E F1(prompt.\))2.75 E .855 -(White space \(i.e., spaces, tabs and ne)108 152.7 R .855 -(wlines\) may be used freely in SQL queries.)-.275 F(Com-)6.354 E .099 -(ments are denoted by)108 165.9 R F2(--)2.849 E F1 5.599(.E)C -.165(ve) --5.599 G .1 -(rything after the dashes up to the end of the line is ignored.).165 F -/F3 12/Times-Bold@0 SF 3(3.5.3. Destr)72 183 R(oying a Database)-.216 E -F1 .453(If you are the database administrator for the database)108 200.1 -R F2(mydb)3.202 E F1 3.202(,y)C .452(ou can destro)-3.202 F 3.202(yi) --.11 G 3.202(tu)-3.202 G .452(sing the)-3.202 F(follo)108 213.3 Q(wing) --.275 E/F4 10/Times-Roman@0 SF(UNIX)2.75 E F1(command:)2.75 E F0 6(%d) -148 238.5 S(estroydb mydb)-6 E F1 .08(This action ph)108 264.7 R .08 -(ysically remo)-.055 F -.165(ve)-.165 G 2.83(sa).165 G .08(ll of the) --2.83 F F4(UNIX)2.83 E F1 .081 -(\214les associated with the database and can-)2.83 F(not be undone, so\ - this should only be done with a great deal of forethought.)108 277.9 Q -/F5 11/Times-Bold@0 SF(11)282.5 756 Q EP -%%Page: 12 12 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(4. THE)72 165.4 R -.19(QU)4.75 G(ER) -.19 E 4.75(YL)-.665 G(ANGU)-4.75 E -1.045(AG)-1.14 G(E)1.045 E 77.5 -178.6 72 178.6 DL 80.5 178.6 75 178.6 DL 86 178.6 80.5 178.6 DL 91.5 -178.6 86 178.6 DL 97 178.6 91.5 178.6 DL 102.5 178.6 97 178.6 DL 108 -178.6 102.5 178.6 DL 113.5 178.6 108 178.6 DL 119 178.6 113.5 178.6 DL -124.5 178.6 119 178.6 DL 130 178.6 124.5 178.6 DL 135.5 178.6 130 178.6 -DL 141 178.6 135.5 178.6 DL 146.5 178.6 141 178.6 DL 152 178.6 146.5 -178.6 DL 157.5 178.6 152 178.6 DL 163 178.6 157.5 178.6 DL 168.5 178.6 -163 178.6 DL 174 178.6 168.5 178.6 DL 179.5 178.6 174 178.6 DL 185 178.6 -179.5 178.6 DL 190.5 178.6 185 178.6 DL 196 178.6 190.5 178.6 DL 201.5 -178.6 196 178.6 DL 207 178.6 201.5 178.6 DL 212.5 178.6 207 178.6 DL 218 -178.6 212.5 178.6 DL 223.5 178.6 218 178.6 DL 229 178.6 223.5 178.6 DL -234.5 178.6 229 178.6 DL 240 178.6 234.5 178.6 DL 245.5 178.6 240 178.6 -DL 251 178.6 245.5 178.6 DL 256.5 178.6 251 178.6 DL 262 178.6 256.5 -178.6 DL 267.5 178.6 262 178.6 DL 273 178.6 267.5 178.6 DL 278.5 178.6 -273 178.6 DL 284 178.6 278.5 178.6 DL 289.5 178.6 284 178.6 DL 295 178.6 -289.5 178.6 DL 300.5 178.6 295 178.6 DL 306 178.6 300.5 178.6 DL 311.5 -178.6 306 178.6 DL 317 178.6 311.5 178.6 DL 322.5 178.6 317 178.6 DL 328 -178.6 322.5 178.6 DL 333.5 178.6 328 178.6 DL 339 178.6 333.5 178.6 DL -344.5 178.6 339 178.6 DL 350 178.6 344.5 178.6 DL 355.5 178.6 350 178.6 -DL 361 178.6 355.5 178.6 DL 366.5 178.6 361 178.6 DL 372 178.6 366.5 -178.6 DL 377.5 178.6 372 178.6 DL 383 178.6 377.5 178.6 DL 388.5 178.6 -383 178.6 DL 394 178.6 388.5 178.6 DL 399.5 178.6 394 178.6 DL 405 178.6 -399.5 178.6 DL 410.5 178.6 405 178.6 DL 416 178.6 410.5 178.6 DL 421.5 -178.6 416 178.6 DL 427 178.6 421.5 178.6 DL 432.5 178.6 427 178.6 DL 438 -178.6 432.5 178.6 DL 443.5 178.6 438 178.6 DL 449 178.6 443.5 178.6 DL -454.5 178.6 449 178.6 DL 460 178.6 454.5 178.6 DL 465.5 178.6 460 178.6 -DL 471 178.6 465.5 178.6 DL 476.5 178.6 471 178.6 DL 482 178.6 476.5 -178.6 DL 487.5 178.6 482 178.6 DL 493 178.6 487.5 178.6 DL 498.5 178.6 -493 178.6 DL 504 178.6 498.5 178.6 DL/F1 11/Times-Roman@0 SF(The)108 -208.9 Q/F2 10/Times-Roman@0 SF(POSTGRES)3.209 E F1 .459 -(query language is a v)3.209 F .459(ariant of SQL-3. It has man)-.275 F -3.209(ye)-.165 G .458(xtensions such as an)-3.374 F -.165(ex)108 222.1 S -1.643(tensible type system, inheritance, functions and production rules\ -. Those are features).165 F .139(carried o)108 235.3 R -.165(ve)-.165 G -2.889(rf).165 G .139(rom the original)-2.889 F F2(POSTGRES)2.889 E F1 -.139(query language, POSTQ)2.889 F .138(UEL. This section pro-)-.11 F -(vides an o)108 248.5 Q -.165(ve)-.165 G(rvie).165 E 2.75(wo)-.275 G -2.75(fh)-2.75 G .55 -.275(ow t)-2.75 H 2.75(ou).275 G(se)-2.75 E F2 -(POSTGRES)2.75 E F1(SQL to perform simple operations.)2.75 E .357 -(This manual is only intended to gi)108 265.6 R .687 -.165(ve y)-.275 H -.357(ou an idea of our \215a).165 F -.22(vo)-.22 G 3.107(ro).22 G 3.107 -(fS)-3.107 G .357(QL and is in no w)-3.107 F .357(ay a)-.11 F .093 -(complete tutorial on SQL. Numerous books ha)108 278.8 R .423 -.165 -(ve b)-.22 H .093(een written on SQL. F).165 F .093(or instance, con-) --.165 F .283(sult [MEL)108 292 R .283(T93] or [D)-1.012 F -1.221(AT)-.44 -G .283(E93]. Y)1.221 F .283(ou should also be a)-1.21 F -.11(wa)-.165 G -.283(re that some features are not part of).11 F(the ANSI standard.)108 -305.2 Q 2.094(In the e)108 322.3 R 2.093(xamples that follo)-.165 F -3.523 -.715(w, w)-.275 H 4.843(ea).715 G 2.093(ssume that you ha)-4.843 -F 2.423 -.165(ve c)-.22 H 2.093(reated the).165 F/F3 11/Courier@0 SF -(mydb)4.843 E F1 2.093(database as)4.843 F(described in the pre)108 -335.5 Q(vious subsection and ha)-.275 E .33 -.165(ve s)-.22 H -(tarted psql.).165 E 24.523 -(Examples in this manual can also be found in)108 352.6 R F3 -(/usr/local/postgres95/src/tutorial)108 365.8 Q F1 7.623(.R)C 2.123 -(efer to the README \214le in that)-7.623 F(directory for ho)108 379 Q -2.75(wt)-.275 G 2.75(ou)-2.75 G(se them.)-2.75 E 1.76 -.88(To s)5.5 H -(tart the tutorial, do the follo).88 E(wing:)-.275 E/F4 10/Courier@0 SF -6(%c)148 404.2 S 6(d/)-6 G(usr/local/postgres95/src/tutorial)-6 E 6(%p) -148 416.4 S(sql -s mydb)-6 E -(Welcome to the POSTGRES95 interactive sql monitor:)148 428.6 Q -(type \\? for help on slash commands)166 453 Q(type \\q to quit)166 -465.2 Q(type \\g or terminate with semicolon to execute query)166 477.4 -Q(You are currently connected to the database: jolly)154 489.6 Q -(mydb=> \\i basics.sql)148 526.2 Q F1(The)108 556.3 Q F3(\\i)3.107 E F1 -.357(command read in queries from the speci\214ed \214les. The)3.107 F -F3(-s)3.108 E F1 .358(option puts you in sin-)3.108 F .868 -(gle step mode which pauses before sending a query to the back)108 569.5 -R .868(end. Queries in this sec-)-.11 F(tion are in the \214le)108 582.7 -Q F3(basics.sql)2.75 E F1(.)A/F5 12/Times-Bold@0 SF 3(4.1. Concepts)72 -608.9 R F1 .824(The fundamental notion in)108 626 R F2(POSTGRES)3.574 E -F1 .824(is that of a)3.574 F/F6 11/Times-Italic@0 SF(class,)3.574 E F1 -.824(which is a named collection of)3.574 F(object)108 639.2 Q F6 -(instances)4.277 E F1 7.027(.E)C 1.526 -(ach instance has the same collection of named)-7.027 F F6(attrib)4.276 -E(utes)-.22 E F1 4.276(,a)C 1.526(nd each)-4.276 F(attrib)108 652.4 Q -.728(ute is of a speci\214c)-.22 F F6(type)3.478 E F1 6.228(.F)C .729 -(urthermore, each instance has a permanent)-6.228 F F6 .729 -(object identi-)3.479 F(\214er)108 665.6 Q F1 .004 -(\(OID\) that is unique throughout the installation.)2.754 F .003 -(Because SQL syntax refers to)5.503 F F6(tables,)2.753 E F1 .191 -(we will use the terms)108 678.8 R F6(table)2.941 E F1(and)2.941 E F6 -(class)2.941 E F1(interchangeably)2.941 E 5.691(.L)-.715 G(ik)-5.691 E --.275(ew)-.11 G .192(ise, a).275 F F6 -.495(ro)2.942 G(w).495 E F1 .192 -(is an)2.942 F F6(instance)2.942 E F1(and)2.942 E F6(columns)108 692 Q -F1(are)2.75 E F6(attrib)2.75 E(utes.)-.22 E F1 .183(As pre)108 709.1 R -.182(viously discussed, classes are grouped into databases, and a colle\ -ction of databases)-.275 F(managed by a single)108 722.3 Q F3 -(postmaster)2.75 E F1(process constitutes an installation or site.)2.75 -E/F7 11/Times-Bold@0 SF(12)282.5 756 Q EP -%%Page: 13 13 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 3(4.2. Cr)72 97.2 R(eating a New Class)-.216 E/F1 -11/Times-Roman@0 SF -1.21(Yo)108 114.3 S 3.643(uc)1.21 G .893 -(an create a ne)-3.643 F 3.643(wc)-.275 G .893 -(lass by specifying the class name, along with all attrib)-3.643 F .894 -(ute names)-.22 F(and their types:)108 127.5 Q/F2 10/Courier@0 SF -(CREATE TABLE weather \()148 152.7 Q 66(city varchar\(80\),)196 164.9 R -48(temp_lo int,)196 177.1 R(-- low temperature)66 E 48(temp_hi int,)196 -189.3 R(-- high temperature)66 E 66(prcp real,)196 201.5 R -(-- precipitation)54 E 66(date date)196 213.7 R(\);)160 225.9 Q F1 2.323 -(Note that k)108 256 R -.165(ey)-.11 G -.11(wo).165 G 2.323 -(rds are case-insensiti).11 F 2.653 -.165(ve b)-.275 H 2.323 -(ut identi\214ers are case-sensiti)-.055 F -.165(ve)-.275 G(.).165 E/F3 -10/Times-Roman@0 SF(POSTGRES)7.823 E F1 .214(SQL supports the usual SQL\ - types int, \215oat, real, smallint, char\(N\), v)108 269.2 R .214 -(archar\(N\), date, and)-.275 F 4.038(time. As)108 282.4 R 1.288 -(we will see later)4.038 F(,)-.44 E F3(POSTGRES)4.038 E F1 1.287 -(can be customized with an arbitrary number of)4.038 F(user)108 295.6 Q -(-de\214ned data types.)-.22 E(Consequently)5.5 E 2.75(,t)-.715 G -(ype names are not k)-2.75 E -.165(ey)-.11 G -.11(wo).165 G(rds.).11 E -.544(So f)108 312.7 R(ar)-.11 E 3.294(,t)-.44 G(he)-3.294 E F3(POSTGRES) -3.294 E/F4 11/Times-Bold@0 SF(cr)3.294 E(eate)-.198 E F1 .544 -(command looks e)3.294 F .544(xactly lik)-.165 F 3.294(et)-.11 G .545 -(he command used to create a)-3.294 F .688 -(table in a traditional relational system.)108 325.9 R(Ho)6.188 E(we) --.275 E -.165(ve)-.275 G 1.568 -.44(r, w).165 H 3.438(ew).44 G .688 -(ill presently see that classes ha)-3.438 F -.165(ve)-.22 G -(properties that are e)108 339.1 Q(xtensions of the relational model.) --.165 E F0 3(4.3. P)72 365.3 R(opulating a Class with Instances)-.24 E -F1(The)108 382.4 Q F4(insert)2.75 E F1 -(statement is used to populate a class with instances:)2.75 E F2 -(INSERT INTO weather)148 407.6 Q -(VALUES \('San Francisco', 46, 50, 0.25, '11/27/1994'\))166 419.8 Q F1 --1.21(Yo)108 449.9 S 4.457(uc)1.21 G 1.707(an also use the)-4.457 F F4 -(copy)4.457 E F1 1.707(command to perform load lar)4.457 F 1.708 -(ge amounts of data from \215at)-.198 F(\(ASCII\) \214les.)108 463.1 Q -F0 3(4.4. Querying)72 489.3 R 3(aC)3 G(lass)-3 E F1(The)108 506.4 Q/F5 -11/Courier@0 SF(weather)5.528 E F1 2.778 -(class can be queried with normal relational selection and projection) -5.528 F 3.033(queries. A)108 519.6 R F3(SQL)3.033 E F4(select)3.033 E F1 -.284(statement is used to do this.)3.033 F .284(The statement is di) -5.784 F .284(vided into a)-.275 F/F6 11/Times-Italic@0 SF(tar)3.034 E --.11(ge)-.407 G(t).11 E(list)108 532.8 Q F1 .208 -(\(the part that lists the attrib)2.958 F .208 -(utes to be returned\) and a)-.22 F F6(quali\214cation)2.957 E F1 .207 -(\(the part that speci-)2.957 F(\214es an)108 546 Q 2.75(yr)-.165 G 2.75 -(estrictions\). F)-2.75 F(or e)-.165 E(xample, to retrie)-.165 E .33 --.165(ve a)-.275 H(ll the ro).165 E(ws of)-.275 E F5(weather)2.75 E F1 -2.75(,t)C(ype:)-2.75 E F2(SELECT * FROM WEATHER;)148 571.2 Q F1 -(and the output should be:)108 596.4 Q .4 LW 464 613.9 148 613.9 DL F2 -63(city temp_lo)153 623.6 R 9(temp_hi prcp date)15 F 464 628.1 148 628.1 -DL(San Francisco)153 637.8 Q 39(46 50 0.25)15 F(11-27-1994)15 E 464 -642.3 148 642.3 DL(San Francisco)153 652 Q 39(43 57 0)15 F(11-29-1994)33 -E 464 656.5 148 656.5 DL 45(Hayward 37)153 666.2 R 78(54 11-29-1994)45 F -464 670.7 148 670.7 DL 464 613.9 464 670.7 DL 148 613.9 148 670.7 DL -391.5 613.9 391.5 670.7 DL 352.5 613.9 352.5 670.7 DL 295.5 613.9 295.5 -670.7 DL 238.5 613.9 238.5 670.7 DL F1 -1.21(Yo)108 696.3 S 2.75(um)1.21 -G(ay specify an)-2.75 E 2.75(ya)-.165 G(ribitrary e)-2.75 E -(xpressions in the tar)-.165 E(get list. F)-.198 E(or e)-.165 E -(xample, you can do:)-.165 E F4(13)282.5 756 Q EP -%%Page: 14 14 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF 6(*S)148 96.2 S -(ELECT city, \(temp_hi+temp_lo\)/2 AS temp_avg, date FROM weather;)-6 E -/F1 11/Times-Roman@0 SF 1.411(Arbitrary Boolean operators \()108 126.3 R -/F2 11/Times-Bold@0 SF(and)4.161 E F1(,)A F2(or)4.161 E F1(and)4.161 E -F2(not)4.161 E F1 4.161(\)a)C 1.411(re allo)-4.161 F 1.411 -(wed in the quali\214cation of an)-.275 F(y)-.165 E(query)108 139.5 Q -5.5(.F)-.715 G(or e)-5.665 E(xample,)-.165 E F0(SELECT *)148 164.7 Q -(FROM weather)160 176.9 Q(WHERE city = 'San Francisco')160 189.1 Q -(and prcp > 0.0;)178 201.3 Q .4 LW 464 231.8 148 231.8 DL 63 -(city temp_lo)153 241.5 R 9(temp_hi prcp date)15 F 464 246 148 246 DL -(San Francisco)153 255.7 Q 39(46 50 0.25)15 F(11-27-1994)15 E 464 260.2 -148 260.2 DL 464 231.8 464 260.2 DL 148 231.8 148 260.2 DL 391.5 231.8 -391.5 260.2 DL 352.5 231.8 352.5 260.2 DL 295.5 231.8 295.5 260.2 DL -238.5 231.8 238.5 260.2 DL F1 1.312 -(As a \214nal note, you can specify that the results of a)108 285.8 R F2 -(select)4.062 E F1 1.312(can be returned in a sorted)4.062 F -(order or with duplicate instances remo)108 299 Q -.165(ve)-.165 G(d.) -.165 E F0(SELECT DISTINCT city)148 324.2 Q(FROM weather)160 336.4 Q -(ORDER BY city;)160 348.6 Q/F3 12/Times-Bold@0 SF 3(4.5. Redir)72 387.8 -R(ecting SELECT Queries)-.216 E F1(An)108 404.9 Q(y)-.165 E F2(select) -2.75 E F1(query can be redirected to a ne)2.75 E 2.75(wc)-.275 G(lass) --2.75 E F0(SELECT * INTO temp from weather;)148 430.1 Q F1 1.177 -(This creates an implicit)108 460.2 R F2(cr)3.928 E(eate)-.198 E F1 -1.178(command, creating a ne)3.928 F 3.928(wc)-.275 G(lass)-3.928 E/F4 -11/Courier@0 SF(temp)3.928 E F1 1.178(with the attrib)3.928 F(ute)-.22 E -1.316(names and types speci\214ed in the tar)108 473.4 R 1.315 -(get list of the)-.198 F F2 1.315(SELECT INT)4.065 F(O)-.198 E F1 4.065 -(command. W)4.065 F 4.065(ec)-.88 G(an)-4.065 E 1.632 -(then, of course, perform an)108 486.6 R 4.383(yo)-.165 G 1.633 -(perations on the resulting class that we can perform on)-4.383 F -(other classes.)108 499.8 Q F3 3(4.6. J)72 526 R(oins Between Classes) --.18 E F1 .273(Thus f)108 543.1 R(ar)-.11 E 3.023(,o)-.44 G .273 -(ur queries ha)-3.023 F .603 -.165(ve o)-.22 H .273 -(nly accessed one class at a time.).165 F .272 -(Queries can access multiple)5.773 F .191 -(classes at once, or access the same class in such a w)108 556.3 R .191 -(ay that multiple instances of the class)-.11 F 1.49 -(are being processed at the same time.)108 569.5 R 4.24(Aq)6.99 G 1.489 -(uery that accesses multiple instances of the)-4.24 F(same or dif)108 -582.7 Q(ferent classes at one time is called a)-.275 E/F5 11 -/Times-Italic@0 SF(join query)2.75 E F1(.)A 1.057(As an e)108 599.8 R -1.057(xample, say we wish to \214nd all the records that are in the tem\ -perature range of)-.165 F 1.094(other records. In ef)108 613 R 1.093 -(fect, we need to compare the)-.275 F F4(temp_lo)3.843 E F1(and)3.843 E -F4(temp_hi)3.843 E F1(attrib)3.843 E 1.093(utes of)-.22 F(each)108 628.4 -Q F4(EMP)3.027 E F1 .277(instance to the)3.027 F F4(temp_lo)3.027 E F1 -(and)3.027 E F4(temp_hi)3.027 E F1(attrib)3.027 E .277 -(utes of all other)-.22 F F4(EMP)3.027 E F1(instances.)3.027 E/F6 8 -/Times-Roman@0 SF(2)-4.4 I F1 1.76 -.88(We c)108 641.6 T -(an do this with the follo).88 E(wing query:)-.275 E F0 -(SELECT W1.city, W1.temp_lo, W1.temp_hi,)148 666.8 Q -(W2.city, W2.temp_lo, W2.temp_hi)202 679 Q .32 LW 76 688.6 72 688.6 DL -80 688.6 76 688.6 DL 84 688.6 80 688.6 DL 88 688.6 84 688.6 DL 92 688.6 -88 688.6 DL 96 688.6 92 688.6 DL 100 688.6 96 688.6 DL 104 688.6 100 -688.6 DL 108 688.6 104 688.6 DL 112 688.6 108 688.6 DL 116 688.6 112 -688.6 DL 120 688.6 116 688.6 DL 124 688.6 120 688.6 DL 128 688.6 124 -688.6 DL 132 688.6 128 688.6 DL 136 688.6 132 688.6 DL 140 688.6 136 -688.6 DL 144 688.6 140 688.6 DL 148 688.6 144 688.6 DL 152 688.6 148 -688.6 DL 156 688.6 152 688.6 DL 160 688.6 156 688.6 DL 164 688.6 160 -688.6 DL 168 688.6 164 688.6 DL 172 688.6 168 688.6 DL 176 688.6 172 -688.6 DL 180 688.6 176 688.6 DL 184 688.6 180 688.6 DL 188 688.6 184 -688.6 DL 192 688.6 188 688.6 DL 196 688.6 192 688.6 DL 200 688.6 196 -688.6 DL 204 688.6 200 688.6 DL 208 688.6 204 688.6 DL 212 688.6 208 -688.6 DL 216 688.6 212 688.6 DL/F7 5/Times-Roman@0 SF(2)93.6 699 Q F6 -.094(This is only a conceptual model.)2.094 3.2 N .095 -(The actual join may be performed in a more ef)4.095 F .095 -(\214cient manner)-.2 F 2.095(,b)-.32 G .095(ut this is in)-2.255 F .095 -(visible to the user)-.32 F(.)-.44 E F2(14)282.5 756 Q EP -%%Page: 15 15 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(FROM weather W1, weather W2)148 96.2 Q -(WHERE W1.temp_lo < W2.temp_lo)148 108.4 Q(and W1.temp_hi > W2.temp_hi;) -178 120.6 Q .4 LW 557 151.1 148 151.1 DL 63(city temp_lo)153 160.8 R 9 -(temp_hi city)15 F 9(temp_lo temp_hi)69 F 557 165.3 148 165.3 DL -(San Francisco)153 175 Q 39(43 57 San)15 F 9(Francisco 46)6 F(50)45 E -557 179.5 148 179.5 DL(San Francisco)153 189.2 Q 39(37 54 San)15 F 9 -(Francisco 46)6 F(50)45 E 557 193.7 148 193.7 DL 557 151.1 557 193.7 DL -148 151.1 148 193.7 DL 502.5 151.1 502.5 193.7 DL 445.5 151.1 445.5 -193.7 DL 352.5 151.1 352.5 193.7 DL 295.5 151.1 295.5 193.7 DL 238.5 -151.1 238.5 193.7 DL/F1 11/Times-Roman@0 SF .966(In this case, both)108 -215.4 R/F2 11/Courier@0 SF(W1)3.716 E F1(and)3.716 E F2(W2)3.716 E F1 -(are)3.716 E/F3 11/Times-Italic@0 SF(surr)3.716 E -.11(og)-.495 G(ates) -.11 E F1 .966(for an instance of the class)3.716 F F2(weather)3.716 E F1 -3.716(,a)C(nd)-3.716 E .53(both range o)108 228.6 R -.165(ve)-.165 G -3.28(ra).165 G .53(ll instances of the class.)-3.28 F .529 -(\(In the terminology of most database systems,)6.03 F F2(W1)108 241.8 Q -F1(and)3.184 E F2(W2)3.184 E F1 .434(are kno)3.184 F .434 -(wn as \231range v)-.275 F(ariables.)-.275 E 3.184(\232\) A)-.77 F .434 -(query can contain an arbitrary number of)3.184 F -(class names and surrog)108 257.2 Q(ates.)-.055 E/F4 8/Times-Roman@0 SF -(3)-4.4 I/F5 12/Times-Bold@0 SF 3(4.7. Updates)72 283.4 R F1 -1.21(Yo) -108 300.5 S 3.226(uc)1.21 G .476(an update e)-3.226 F .476 -(xisting instances using the)-.165 F/F6 11/Times-Bold@0 SF(update)3.226 -E F1 .475(command. Suppose you disco)3.226 F -.165(ve)-.165 G 3.225(rt) -.165 G(he)-3.225 E .94(temperature readings are all of)108 313.7 R 3.69 -(fb)-.275 G 3.69(y2d)-3.69 G -.165(eg)-3.69 G .94(rees as of No).165 F -3.69(v2)-.165 G .94(8, you may update the data as)-3.69 F(follo)108 -326.9 Q(w:)-.275 E F0 6(*U)148 352.1 S(PDATE weather)-6 E -(SET temp_hi = temp_hi - 2,)160 364.3 Q(temp_lo = temp_lo - 2)12 E -(WHERE date > '11/28/1994;)160 376.5 Q F5 3(4.8. Deletions)72 415.7 R F1 -(Deletions are performed using the)108 432.8 Q F6(delete)2.75 E F1 -(command:)2.75 E F0 6(*D)148 458 S -(ELETE FROM weather WHERE city = 'Hayward';)-6 E F1 -(All weather recording belongs to Hayw)108 484.2 Q(ard is remo)-.11 E --.165(ve)-.165 G(d.).165 E(One should be w)108 501.3 Q -(ary of queries of the form)-.11 E F0(DELETE FROM)148 526.5 Q/F7 10 -/Times-Italic@0 SF(classname;)6 E F1 -.44(Wi)108 552.7 S .494 -(thout a quali\214cation, the).44 F F6(delete)3.244 E F1 .493 -(command will simply delete all instances of the gi)3.243 F -.165(ve) --.275 G(n).165 E(class, lea)108 565.9 Q(ving it empty)-.22 E 5.5(.T) --.715 G(he system)-5.5 E F6(will not r)2.75 E(equest con\214rmation) --.198 E F1(before doing this.)2.75 E F5 3(4.9. Using)72 592.1 R(Aggr)3 E -(egate Functions)-.216 E F1(Lik)108 609.2 Q 2.854(em)-.11 G .104 -(ost other query languages,)-2.854 F/F8 10/Times-Roman@0 SF(POSTGRES) -2.854 E F1 .104(supports aggre)2.854 F -.055(ga)-.165 G .104 -(te functions.).055 F(Ho)5.604 E(we)-.275 E -.165(ve)-.275 G .985 -.44 -(r, t).165 H(he).44 E 1.225(current implementation of)108 622.4 R F8 -(POSTGRES)3.974 E F1(aggre)3.974 E -.055(ga)-.165 G 1.224 -(te functions is v).055 F 1.224(ery limited.)-.165 F(Speci\214cally) -6.724 E(,)-.715 E 3.444(while there are aggre)108 635.6 R -.055(ga)-.165 -G 3.444(tes to compute such functions as the count, sum, a).055 F -.165 -(ve)-.22 G(rage,).165 E .32 LW 76 645.2 72 645.2 DL 80 645.2 76 645.2 DL -84 645.2 80 645.2 DL 88 645.2 84 645.2 DL 92 645.2 88 645.2 DL 96 645.2 -92 645.2 DL 100 645.2 96 645.2 DL 104 645.2 100 645.2 DL 108 645.2 104 -645.2 DL 112 645.2 108 645.2 DL 116 645.2 112 645.2 DL 120 645.2 116 -645.2 DL 124 645.2 120 645.2 DL 128 645.2 124 645.2 DL 132 645.2 128 -645.2 DL 136 645.2 132 645.2 DL 140 645.2 136 645.2 DL 144 645.2 140 -645.2 DL 148 645.2 144 645.2 DL 152 645.2 148 645.2 DL 156 645.2 152 -645.2 DL 160 645.2 156 645.2 DL 164 645.2 160 645.2 DL 168 645.2 164 -645.2 DL 172 645.2 168 645.2 DL 176 645.2 172 645.2 DL 180 645.2 176 -645.2 DL 184 645.2 180 645.2 DL 188 645.2 184 645.2 DL 192 645.2 188 -645.2 DL 196 645.2 192 645.2 DL 200 645.2 196 645.2 DL 204 645.2 200 -645.2 DL 208 645.2 204 645.2 DL 212 645.2 208 645.2 DL 216 645.2 212 -645.2 DL/F9 5/Times-Roman@0 SF(3)93.6 655.6 Q F4 .265 -(The semantics of such a join are that the quali\214cation is a truth e) -2.265 3.2 N .264 -(xpression de\214ned for the Cartesian product of the classes in-)-.12 F -.273(dicated in the query)72 668.4 R 4.273(.F)-.52 G .273(or those inst\ -ances in the Cartesian product for which the quali\214cation is true,) --4.393 F/F10 7/Times-Roman@0 SF(POSTGRES)2.274 E F4 .274 -(computes and returns)2.274 F .98(the v)72 678 R .98 -(alues speci\214ed in the tar)-.2 F .979(get list.)-.144 F F10(POSTGRES) -4.979 E F4 .979(SQL does not assign an)2.979 F 2.979(ym)-.12 G .979 -(eaning to duplicate v)-2.979 F .979(alues in such e)-.2 F 2.979 -(xpressions. This)-.12 F .344(means that)72 687.6 R F10(POSTGRES)2.344 E -F4 .344(sometimes recomputes the same tar)2.344 F .344(get list se)-.144 -F -.12(ve)-.2 G .344 -(ral times \212 this frequently happens when Boolean e).12 F(xpressions) --.12 E(are connected with an)72 697.2 Q/F11 8/Times-Bold@0 SF(or)2 E F4 -4(.T)C 2(or)-4.64 G(emo)-2 E .24 -.12(ve s)-.12 H -(uch duplicates, you must use the).12 E F11(select distinct)2 E F4 -(statement.)2 E F6(15)282.5 756 Q EP -%%Page: 16 16 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF .561(maximum and minimum o)108 97.2 R -.165(ve) --.165 G 3.31(ras).165 G .56(et of instances, aggre)-3.31 F -.055(ga) --.165 G .56(tes can only appear in the tar).055 F(get)-.198 E -(list of a query and not in the quali\214cation \()108 110.4 Q/F1 11 -/Courier@0 SF(where)2.75 E F0(clause\) As an e)2.75 E(xample,)-.165 E/F2 -10/Courier@0 SF(SELECT max\(temp_lo\))148 135.6 Q(FROM weather;)148 -147.8 Q F0(Aggre)108 174 Q -.055(ga)-.165 G(tes may also ha).055 E .33 --.165(ve G)-.22 H -.44(RO).165 G(UP BY clauses:).44 E F2 -(SELECT city, max\(temp_lo\))148 199.2 Q(FROM weather)148 211.4 Q -(GROUP BY city;)148 223.6 Q/F3 11/Times-Bold@0 SF(16)282.5 756 Q EP -%%Page: 17 17 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(5. AD)72 165.4 R -2.565(VA)-.76 G -(NCED POSTGRES SQL FEA)2.565 E(TURES)-1.805 E 77.5 178.6 72 178.6 DL -80.5 178.6 75 178.6 DL 86 178.6 80.5 178.6 DL 91.5 178.6 86 178.6 DL 97 -178.6 91.5 178.6 DL 102.5 178.6 97 178.6 DL 108 178.6 102.5 178.6 DL -113.5 178.6 108 178.6 DL 119 178.6 113.5 178.6 DL 124.5 178.6 119 178.6 -DL 130 178.6 124.5 178.6 DL 135.5 178.6 130 178.6 DL 141 178.6 135.5 -178.6 DL 146.5 178.6 141 178.6 DL 152 178.6 146.5 178.6 DL 157.5 178.6 -152 178.6 DL 163 178.6 157.5 178.6 DL 168.5 178.6 163 178.6 DL 174 178.6 -168.5 178.6 DL 179.5 178.6 174 178.6 DL 185 178.6 179.5 178.6 DL 190.5 -178.6 185 178.6 DL 196 178.6 190.5 178.6 DL 201.5 178.6 196 178.6 DL 207 -178.6 201.5 178.6 DL 212.5 178.6 207 178.6 DL 218 178.6 212.5 178.6 DL -223.5 178.6 218 178.6 DL 229 178.6 223.5 178.6 DL 234.5 178.6 229 178.6 -DL 240 178.6 234.5 178.6 DL 245.5 178.6 240 178.6 DL 251 178.6 245.5 -178.6 DL 256.5 178.6 251 178.6 DL 262 178.6 256.5 178.6 DL 267.5 178.6 -262 178.6 DL 273 178.6 267.5 178.6 DL 278.5 178.6 273 178.6 DL 284 178.6 -278.5 178.6 DL 289.5 178.6 284 178.6 DL 295 178.6 289.5 178.6 DL 300.5 -178.6 295 178.6 DL 306 178.6 300.5 178.6 DL 311.5 178.6 306 178.6 DL 317 -178.6 311.5 178.6 DL 322.5 178.6 317 178.6 DL 328 178.6 322.5 178.6 DL -333.5 178.6 328 178.6 DL 339 178.6 333.5 178.6 DL 344.5 178.6 339 178.6 -DL 350 178.6 344.5 178.6 DL 355.5 178.6 350 178.6 DL 361 178.6 355.5 -178.6 DL 366.5 178.6 361 178.6 DL 372 178.6 366.5 178.6 DL 377.5 178.6 -372 178.6 DL 383 178.6 377.5 178.6 DL 388.5 178.6 383 178.6 DL 394 178.6 -388.5 178.6 DL 399.5 178.6 394 178.6 DL 405 178.6 399.5 178.6 DL 410.5 -178.6 405 178.6 DL 416 178.6 410.5 178.6 DL 421.5 178.6 416 178.6 DL 427 -178.6 421.5 178.6 DL 432.5 178.6 427 178.6 DL 438 178.6 432.5 178.6 DL -443.5 178.6 438 178.6 DL 449 178.6 443.5 178.6 DL 454.5 178.6 449 178.6 -DL 460 178.6 454.5 178.6 DL 465.5 178.6 460 178.6 DL 471 178.6 465.5 -178.6 DL 476.5 178.6 471 178.6 DL 482 178.6 476.5 178.6 DL 487.5 178.6 -482 178.6 DL 493 178.6 487.5 178.6 DL 498.5 178.6 493 178.6 DL 504 178.6 -498.5 178.6 DL/F1 11/Times-Roman@0 SF(Ha)108 208.9 Q .065(ving co)-.22 F --.165(ve)-.165 G .065(red the basics of using).165 F/F2 10/Times-Roman@0 -SF(POSTGRES)2.816 E F1 .066(SQL to access your data, we will no)2.816 F -2.816(wd)-.275 G(is-)-2.816 E 1.624(cuss those features of)108 222.1 R -F2(POSTGRES)4.374 E F1 1.624(that distinguish it from con)4.374 F -.165 -(ve)-.44 G 1.623(ntional data managers.).165 F 1.681 -(These features include inheritance, time tra)108 235.3 R -.165(ve)-.22 -G 4.431(la).165 G 1.681(nd non-atomic data v)-4.431 F 1.681 -(alues \(array- and)-.275 F(set-v)108 248.5 Q(alued attrib)-.275 E -(utes\).)-.22 E 1.195(Examples in this section can also be found in)108 -265.6 R/F3 11/Courier@0 SF(advance.sql)3.945 E F1 1.194 -(in the tutorial directory)3.945 F(.)-.715 E -(\(Refer to the introduction of the pre)108 278.8 Q -(vious chapter for ho)-.275 E 2.75(wt)-.275 G 2.75(ou)-2.75 G(se it.\)) --2.75 E/F4 12/Times-Bold@0 SF 3(5.1. Inheritance)72 305 R F1(Let')108 -322.1 Q 4.858(sc)-.605 G 2.108(reate tw)-4.858 F 4.858(oc)-.11 G 2.108 -(lasses. The)-4.858 F F3(capitals)4.858 E F1 2.109 -(class contains state capitals which are also)4.858 F(cities. Naturally) -108 335.3 Q 2.75(,t)-.715 G(he)-2.75 E F3(capitals)2.75 E F1 -(class should)2.75 E/F5 11/Times-Italic@0 SF(inherit)2.75 E F1(from)2.75 -E F3(cities)2.75 E F1(.)A/F6 10/Courier@0 SF(CREATE TABLE cities \()148 -360.5 Q 66(name text,)196 372.7 R 30(population float,)196 384.9 R 42 -(altitude int)196 397.1 R(-- \(in ft\))72 E(\);)148 409.3 Q -(CREATE TABLE capitals \()148 433.7 Q 60(state char2)196 445.9 R 6(\)I) -148 458.1 S(NHERITS \(cities\);)-6 E F1 .424 -(In this case, an instance of)108 488.2 R F3(capitals)3.174 E F5 -(inherits)3.173 E F1 .423(all attrib)3.173 F .423(utes \()-.22 F F3 -(name)A F1(,)A F3(population)3.173 E F1 3.173(,a)C(nd)-3.173 E F3 -(altitude)108 501.4 Q F1 3.006(\)f)C .256(rom its parent,)-3.006 F F3 -(cities)3.006 E F1 5.756(.T)C .256(he type of the attrib)-5.756 F(ute) --.22 E F3(name)3.006 E F1(is)3.006 E F3(text,)3.006 E F1 3.007(ab)3.007 -G(uilt-)-3.227 E(in)108 514.6 Q F2(POSTGRES)2.935 E F1 .185(type for v) -2.935 F .185(ariable length ASCII strings.)-.275 F .185 -(The type of the attrib)5.685 F(ute)-.22 E F3(popula-)2.935 E(tion)108 -527.8 Q F1(is)3.958 E F3(float4,)3.958 E F1 3.959(ab)3.958 G(uilt-in) --4.179 E F2(POSTGRES)3.959 E F1 1.209 -(type for double precision \215oating point num-)3.959 F 2.89 -(bres. State)108 541 R .14(capitals ha)2.89 F .47 -.165(ve a)-.22 H -2.889(ne).165 G .139(xtra attrib)-3.054 F(ute,)-.22 E F3(state)2.889 E -F1 2.889(,t)C .139(hat sho)-2.889 F .139(ws their state.)-.275 F(In) -5.639 E F2(POSTGRES)2.889 E F1(,)A 3.482(ac)108 556.4 S .732 -(lass can inherit from zero or more other classes,)-3.482 F/F7 8 -/Times-Roman@0 SF(4)-4.4 I F1 .733(and a query can reference either all) -3.483 4.4 N .095(instances of a class or all instances of a class plus \ -all of its descendants.)108 569.6 R -.165(Fo)5.595 G 2.845(re).165 G -.095(xample, the)-3.01 F(follo)108 582.8 Q(wing query \214nds all the c\ -ities that are situated at an attitude of 500 'ft or higher:)-.275 E F6 -(SELECT name, altitude)148 608 Q(FROM cities)148 620.2 Q -(WHERE altitude > 500;)148 632.4 Q .32 LW 76 668.001 72 668.001 DL 80 -668.001 76 668.001 DL 84 668.001 80 668.001 DL 88 668.001 84 668.001 DL -92 668.001 88 668.001 DL 96 668.001 92 668.001 DL 100 668.001 96 668.001 -DL 104 668.001 100 668.001 DL 108 668.001 104 668.001 DL 112 668.001 108 -668.001 DL 116 668.001 112 668.001 DL 120 668.001 116 668.001 DL 124 -668.001 120 668.001 DL 128 668.001 124 668.001 DL 132 668.001 128 -668.001 DL 136 668.001 132 668.001 DL 140 668.001 136 668.001 DL 144 -668.001 140 668.001 DL 148 668.001 144 668.001 DL 152 668.001 148 -668.001 DL 156 668.001 152 668.001 DL 160 668.001 156 668.001 DL 164 -668.001 160 668.001 DL 168 668.001 164 668.001 DL 172 668.001 168 -668.001 DL 176 668.001 172 668.001 DL 180 668.001 176 668.001 DL 184 -668.001 180 668.001 DL 188 668.001 184 668.001 DL 192 668.001 188 -668.001 DL 196 668.001 192 668.001 DL 200 668.001 196 668.001 DL 204 -668.001 200 668.001 DL 208 668.001 204 668.001 DL 212 668.001 208 -668.001 DL 216 668.001 212 668.001 DL/F8 5/Times-Roman@0 SF(4)93.6 -678.401 Q F7(I.e., the inheritance hierarch)2 3.2 M 2(yi)-.04 G 2(sad)-2 -G(irected ac)-2 E(yclic graph.)-.12 E/F9 11/Times-Bold@0 SF(17)282.5 756 -Q EP -%%Page: 18 18 -%%BeginPageSetup -BP -%%EndPageSetup -.4 LW 275 88.5 148 88.5 DL/F0 10/Courier@0 SF 39(name altitude)153 98.2 -R 275 102.7 148 102.7 DL(Las Vegas)153 112.4 Q(2174)15 E 275 116.9 148 -116.9 DL 15(Mariposa 1953)153 126.6 R 275 131.1 148 131.1 DL 275 88.5 -275 131.1 DL 148 88.5 148 131.1 DL 214.5 88.5 214.5 131.1 DL/F1 11 -/Times-Roman@0 SF .328(On the other hand, to \214nd the names of all ci\ -ties, including state capitals, that are located)108 152.8 R -(at an altitude o)108 166 Q -.165(ve)-.165 G 2.75(r5).165 G -(00 'ft, the query is:)-2.75 E F0(SELECT c.name, c.altitude)148 191.2 Q -(FROM cities* c)148 203.4 Q(WHERE c.altitude > 500;)148 215.6 Q F1 -(which returns:)108 240.8 Q 275 258.3 148 258.3 DL F0 39(name altitude) -153 268 R 275 272.5 148 272.5 DL(Las Vegas)153 282.2 Q(2174)15 E 275 -286.7 148 286.7 DL 15(Mariposa 1953)153 296.4 R 275 300.9 148 300.9 DL -21(Madison 845)153 310.6 R 275 315.1 148 315.1 DL 275 258.3 275 315.1 DL -148 258.3 148 315.1 DL 214.5 258.3 214.5 315.1 DL F1 1.294(Here the)108 -336.8 R/F2 11/Courier@0 SF(*)4.044 E F1(after)4.044 E F2(cities)4.044 E -F1 1.294(indicates that the query should be run o)4.044 F -.165(ve)-.165 -G(r).165 E F2(cities)4.043 E F1 1.293(and all)4.043 F .067(classes belo) -108 350 R(w)-.275 E F2(cities)2.817 E F1 .068 -(in the inheritance hierarch)2.817 F 4.248 -.715(y. M)-.055 H(an).715 E -2.818(yo)-.165 G 2.818(ft)-2.818 G .068(he commands that we ha)-2.818 F --.165(ve)-.22 G .907(already discussed \212)108 363.2 R/F3 11 -/Times-Bold@0 SF(select)3.657 E F1(,)A F3(update)3.657 E F1(and)3.657 E -F3(delete)3.657 E F1 3.657<8a73>3.657 G .907(upport this)-3.657 F F2(*) -3.657 E F1 .906(notation, as do others,)3.656 F(lik)108 376.4 Q(e)-.11 E -F3(alter)2.75 E F1(command.)2.75 E/F4 12/Times-Bold@0 SF 3(5.2. T)72 -402.6 R(ime T)-.216 E(ra)-.888 E -.12(ve)-.3 G(l).12 E/F5 10 -/Times-Roman@0 SF(POSTGRES)108 419.7 Q F1 .259(supports the notion of) -3.009 F/F6 11/Times-Italic@0 SF .26(time tr)3.01 F(avel)-.165 E F1 5.76 -(.T)C .26(his feature allo)-5.76 F .26(ws a user to run historical)-.275 -F 2.75(queries. F)108 432.9 R(or e)-.165 E -(xample, to \214nd the current population of Mariposa city)-.165 E 2.75 -(,o)-.715 G(ne w)-2.75 E(ould query:)-.11 E F0 -(SELECT * FROM cities WHERE name = 'Mariposa';)148 458.1 Q 344 488.6 148 -488.6 DL 33(name population)153 498.3 R(altitude)15 E 344 502.8 148 -502.8 DL 9(Mariposa 1320)153 512.5 R(1953)51 E 344 517 148 517 DL 344 -488.6 344 517 DL 148 488.6 148 517 DL 283.5 488.6 283.5 517 DL 208.5 -488.6 208.5 517 DL F5(POSTGRES)108 538.7 Q F1 1.068 -(will automatically \214nd the v)3.818 F 1.068(ersion of Mariposa')-.165 -F 3.817(sr)-.605 G 1.067(ecord v)-3.817 F 1.067(alid at the current) --.275 F(time.)108 551.9 Q .794(One can also gi)108 569 R 1.124 -.165 -(ve a t)-.275 H(ime).165 E F6 -.165(ra)3.545 G(ng).165 E(e)-.11 E F1 -6.295(.F)C .795(or e)-6.46 F .795 -(xample to see the past and present populations of)-.165 F -(Mariposa, one w)108 582.2 Q(ould query:)-.11 E F0 -(SELECT name, population)148 607.4 Q(FROM cities['epoch', 'now'])148 -619.6 Q(WHERE name = 'Mariposa';)148 631.8 Q F1 .81 -(where \231epoch\232 indicates the be)108 660.2 R .81 -(ginning of the system clock.)-.165 F/F7 8/Times-Roman@0 SF(5)-4.4 I F1 -.809(If you ha)3.559 4.4 N 1.139 -.165(ve exe)-.22 H .809(cuted all of) -.165 F(the e)108 672.4 Q(xamples so f)-.165 E(ar)-.11 E 2.75(,t)-.44 G -(hen the abo)-2.75 E .33 -.165(ve q)-.165 H(uery returns:).165 E .32 LW -76 682 72 682 DL 80 682 76 682 DL 84 682 80 682 DL 88 682 84 682 DL 92 -682 88 682 DL 96 682 92 682 DL 100 682 96 682 DL 104 682 100 682 DL 108 -682 104 682 DL 112 682 108 682 DL 116 682 112 682 DL 120 682 116 682 DL -124 682 120 682 DL 128 682 124 682 DL 132 682 128 682 DL 136 682 132 682 -DL 140 682 136 682 DL 144 682 140 682 DL 148 682 144 682 DL 152 682 148 -682 DL 156 682 152 682 DL 160 682 156 682 DL 164 682 160 682 DL 168 682 -164 682 DL 172 682 168 682 DL 176 682 172 682 DL 180 682 176 682 DL 184 -682 180 682 DL 188 682 184 682 DL 192 682 188 682 DL 196 682 192 682 DL -200 682 196 682 DL 204 682 200 682 DL 208 682 204 682 DL 212 682 208 682 -DL 216 682 212 682 DL/F8 5/Times-Roman@0 SF(5)93.6 692.4 Q F7(On)2 3.2 M -/F9 7/Times-Roman@0 SF(UNIX)2 E F7(systems, this is al)2 E -.08(wa)-.08 -G(ys midnight, January 1, 1970 GMT).08 E(.)-.592 E F3(18)282.5 756 Q EP -%%Page: 19 19 -%%BeginPageSetup -BP -%%EndPageSetup -.4 LW 281 88.5 148 88.5 DL/F0 10/Courier@0 SF 33(name population)153 -98.2 R 281 102.7 148 102.7 DL 9(Mariposa 1200)153 112.4 R 281 116.9 148 -116.9 DL 9(Mariposa 1320)153 126.6 R 281 131.1 148 131.1 DL 281 88.5 281 -131.1 DL 148 88.5 148 131.1 DL 208.5 88.5 208.5 131.1 DL/F1 11 -/Times-Roman@0 SF .247(The def)108 156.7 R .247(ault be)-.11 F .247(gin\ -ning of a time range is the earliest time representable by the system a\ -nd)-.165 F 2.009(the def)108 169.9 R 2.009 -(ault end is the current time; thus, the abo)-.11 F 2.338 -.165(ve t) --.165 H 2.008(ime range can be abbre).165 F 2.008(viated as)-.275 F --.814(``)108 183.1 S/F2 11/Courier@0 SF([,]).814 E F1 -.77(.')C(')-.044 -E/F3 12/Times-Bold@0 SF 3(5.3. Non-Atomic)72 209.3 R -1.104(Va)3 G(lues) -1.104 E F1 1.373 -(One of the tenets of the relational model is that the attrib)108 226.4 -R 1.374(utes of a relation are)-.22 F/F4 11/Times-Italic@0 SF(atomic) -4.124 E F1(.)A/F5 10/Times-Roman@0 SF(POSTGRES)108 239.6 Q F1 1.647 -(does not ha)4.397 F 1.976 -.165(ve t)-.22 H 1.646 -(his restriction; attrib).165 F 1.646(utes can themselv)-.22 F 1.646 -(es contain sub-v)-.165 F(alues)-.275 E .112 -(that can be accessed from the query language.)108 252.8 R -.165(Fo) -5.612 G 2.862(re).165 G .113(xample, you can create attrib)-3.027 F .113 -(utes that)-.22 F(are)108 266 Q F4(arr)2.75 E(ays)-.165 E F1 -(of base types.)2.75 E F3 3(5.3.1. Arrays)72 292.2 R F5(POSTGRES)108 -309.3 Q F1(allo)4.98 E 2.23(ws attrib)-.275 F 2.23 -(utes of an instance to be de\214ned as \214x)-.22 F 2.23 -(ed-length or v)-.165 F(ariable-)-.275 E .319 -(length multi-dimensional arrays. Arrays of an)108 322.5 R 3.069(yb) --.165 G .319(ase type or user)-3.069 F .319(-de\214ned type can be cre-) --.22 F(ated. T)108 335.7 Q 2.75(oi)-.88 G(llustrate their use, we \214r\ -st create a class with arrays of base types.)-2.75 E F0 6(*C)148 360.9 S -(REATE TABLE SAL_EMP \()-6 E 66(name text,)196 373.1 R 6 -(pay_by_quarter int4[],)196 385.3 R 42(schedule char16[][])196 397.5 R -(\);)148 409.7 Q F1 .313(The abo)108 435.9 R .643 -.165(ve q)-.165 H -.313(uery will create a class named).165 F F2(SAL_EMP)3.062 E F1 .312 -(with a)3.062 F F2(text)3.062 E F1 .312(string \()3.062 F F2(name)A F1 -.312(\), a one-)B 3.084(dimensional array of)108 449.1 R F2(int4)5.834 E -F1(\()5.834 E F2(pay_by_quarter)A F1 3.084 -(\), which represents the emplo)B(yee')-.11 E(s)-.605 E 1.396 -(salary by quarter and a tw)108 462.3 R 1.396(o-dimensional array of) --.11 F F2(char16)4.146 E F1(\()4.146 E F2(schedule)A F1 1.396 -(\), which repre-)B 1.737(sents the emplo)108 475.5 R(yee')-.11 E 4.487 -(sw)-.605 G 1.737(eekly schedule.)-4.487 F(No)7.237 E 4.487(ww)-.275 G -4.487(ed)-4.487 G 4.487(os)-4.487 G(ome)-4.487 E F2(INSERTS)4.487 E F1 -1.737(s; note that when)B .034(appending to an array)108 488.7 R 2.784 -(,w)-.715 G 2.784(ee)-2.784 G .034(nclose the v)-2.784 F .034 -(alues within braces and separate them by commas.)-.275 F(If you kno)108 -501.9 Q 2.75(wC)-.275 G 2.75(,t)-2.75 G(his is not unlik)-2.75 E 2.75 -(et)-.11 G(he syntax for initializing structures.)-2.75 E F0 -(INSERT INTO SAL_EMP)148 527.1 Q(VALUES \('Bill',)178 539.3 Q -('{10000, 10000, 10000, 10000}',)226 551.5 Q -('{{"meeting", "lunch"}, {}}'\);)226 563.7 Q(INSERT INTO SAL_EMP)148 -588.1 Q(VALUES \('Carol',)178 600.3 Q('{20000, 25000, 25000, 25000}',) -226 612.5 Q('{{"talk", "consult"}, {"meeting"}}'\);)226 624.7 Q F1 .582 -(By def)108 650.9 R(ault,)-.11 E F5(POSTGRES)3.332 E F1 .583 -(uses the \231one-based\232 numbering con)3.332 F -.165(ve)-.44 G .583 -(ntion for arrays \212 that is,).165 F(an array of)108 664.1 Q F4(n) -3.146 E F1(elements starts with array[1] and ends with array[)3.014 E F4 -(n).396 E F1(].).264 E(No)108 681.2 Q 1.852 -.715(w, w)-.275 H 3.172(ec) -.715 G .422(an run some queries on)-3.172 F F2(SAL_EMP)3.172 E F1 5.921 -(.F)C .421(irst, we sho)-5.921 F 3.171(wh)-.275 G .971 -.275(ow t)-3.171 -H 3.171(oa).275 G .421(ccess a single ele-)-3.171 F .803 -(ment of an array at a time.)108 694.4 R .804(This query retrie)6.304 F --.165(ve)-.275 G 3.554(st).165 G .804(he names of the emplo)-3.554 F -.804(yees whose pay)-.11 F(changed in the second quarter:)108 707.6 Q/F6 -11/Times-Bold@0 SF(19)282.5 756 Q EP -%%Page: 20 20 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF 6(*S)148 96.2 S(ELECT name)-6 E(FROM SAL_EMP)160 -108.4 Q(WHERE SAL_EMP.pay_by_quarter[1] <>)160 120.6 Q -(SAL_EMP.pay_by_quarter[2];)208 132.8 Q .4 LW 188 163.3 148 163.3 DL -(name)153 173 Q 188 177.5 148 177.5 DL(Carol)153 187.2 Q 188 191.7 148 -191.7 DL 188 163.3 188 191.7 DL 148 163.3 148 191.7 DL/F1 11 -/Times-Roman@0 SF(This query retrie)108 213.4 Q -.165(ve)-.275 G 2.75 -(st).165 G(he third quarter pay of all emplo)-2.75 E(yees:)-.11 E F0 6 -(*S)148 238.6 S(ELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP;)-6 E 242 -269.1 148 269.1 DL(pay_by_quarter)153 278.8 Q 242 283.3 148 283.3 DL -(10000)153 293 Q 242 297.5 148 297.5 DL(25000)153 307.2 Q 242 311.7 148 -311.7 DL 242 269.1 242 311.7 DL 148 269.1 148 311.7 DL F1 1.873 -.88 -(We c)108 333.4 T .113(an also access arbitrary).88 F/F2 11 -/Times-Italic@0 SF(slices)2.863 E F1 .113(of an array)2.863 F 2.863(,o) --.715 G(r)-2.863 E F2(subarr)2.863 E(ays)-.165 E F1 5.613(.T)C .113 -(his query retrie)-5.613 F -.165(ve)-.275 G 2.863(st).165 G .112 -(he \214rst)-2.863 F(item on Bill')108 346.6 Q 2.75(ss)-.605 G -(chedule for the \214rst tw)-2.75 E 2.75(od)-.11 G(ays of the week.) --2.75 E F0 6(*S)148 371.8 S(ELECT SAL_EMP.schedule[1:2][1:1])-6 E -(FROM SAL_EMP)160 384 Q(WHERE SAL_EMP.name = 'Bill';)160 396.2 Q 266 -426.7 148 426.7 DL(schedule)153 436.4 Q 266 440.9 148 440.9 DL -({{"meeting"},{""}})153 450.6 Q 266 455.1 148 455.1 DL 266 426.7 266 -455.1 DL 148 426.7 148 455.1 DL/F3 11/Times-Bold@0 SF(20)282.5 756 Q EP -%%Page: 21 21 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(6. EXTENDING)72 165.4 R(SQL: AN O) -4.75 E(VER)-.95 E(VIEW)-1.045 E 77.5 178.6 72 178.6 DL 80.5 178.6 75 -178.6 DL 86 178.6 80.5 178.6 DL 91.5 178.6 86 178.6 DL 97 178.6 91.5 -178.6 DL 102.5 178.6 97 178.6 DL 108 178.6 102.5 178.6 DL 113.5 178.6 -108 178.6 DL 119 178.6 113.5 178.6 DL 124.5 178.6 119 178.6 DL 130 178.6 -124.5 178.6 DL 135.5 178.6 130 178.6 DL 141 178.6 135.5 178.6 DL 146.5 -178.6 141 178.6 DL 152 178.6 146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 -178.6 157.5 178.6 DL 168.5 178.6 163 178.6 DL 174 178.6 168.5 178.6 DL -179.5 178.6 174 178.6 DL 185 178.6 179.5 178.6 DL 190.5 178.6 185 178.6 -DL 196 178.6 190.5 178.6 DL 201.5 178.6 196 178.6 DL 207 178.6 201.5 -178.6 DL 212.5 178.6 207 178.6 DL 218 178.6 212.5 178.6 DL 223.5 178.6 -218 178.6 DL 229 178.6 223.5 178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 -234.5 178.6 DL 245.5 178.6 240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 -178.6 251 178.6 DL 262 178.6 256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 -178.6 267.5 178.6 DL 278.5 178.6 273 178.6 DL 284 178.6 278.5 178.6 DL -289.5 178.6 284 178.6 DL 295 178.6 289.5 178.6 DL 300.5 178.6 295 178.6 -DL 306 178.6 300.5 178.6 DL 311.5 178.6 306 178.6 DL 317 178.6 311.5 -178.6 DL 322.5 178.6 317 178.6 DL 328 178.6 322.5 178.6 DL 333.5 178.6 -328 178.6 DL 339 178.6 333.5 178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 -344.5 178.6 DL 355.5 178.6 350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 -178.6 361 178.6 DL 372 178.6 366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 -178.6 377.5 178.6 DL 388.5 178.6 383 178.6 DL 394 178.6 388.5 178.6 DL -399.5 178.6 394 178.6 DL 405 178.6 399.5 178.6 DL 410.5 178.6 405 178.6 -DL 416 178.6 410.5 178.6 DL 421.5 178.6 416 178.6 DL 427 178.6 421.5 -178.6 DL 432.5 178.6 427 178.6 DL 438 178.6 432.5 178.6 DL 443.5 178.6 -438 178.6 DL 449 178.6 443.5 178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 -454.5 178.6 DL 465.5 178.6 460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 -178.6 471 178.6 DL 482 178.6 476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 -178.6 487.5 178.6 DL 498.5 178.6 493 178.6 DL 504 178.6 498.5 178.6 DL -/F1 11/Times-Roman@0 SF 1.923(In the sections that follo)108 208.9 R -3.353 -.715(w, w)-.275 H 4.673(ew).715 G 1.923(ill discuss ho)-4.673 F -4.673(wy)-.275 G 1.923(ou can e)-4.673 F 1.923(xtend the)-.165 F/F2 10 -/Times-Roman@0 SF(POSTGRES)4.674 E F1(SQL)4.674 E -(query language by adding:)108 222.1 Q 5.5<8366>113.5 239.2 S(unctions) --5.5 E 5.5<8374>113.5 252.4 S(ypes)-5.5 E 5.5<836f>113.5 265.6 S -(perators)-5.5 E 5.5<8361>113.5 278.8 S(ggre)-5.5 E -.055(ga)-.165 G -(tes).055 E/F3 12/Times-Bold@0 SF 3(6.1. Ho)72 305 R 3(wE)-.12 G -(xtensibility W)-3 E(orks)-.9 E F2(POSTGRES)108 322.1 Q F1 .453(is e) -3.203 F .453(xtensible because its operation is)-.165 F/F4 11 -/Times-Italic@0 SF(catalo)3.202 E(g-driven)-.11 E F1 5.952(.I)C 3.202 -(fy)-5.952 G .452(ou are f)-3.202 F .452(amiliar with)-.11 F .211 -(standard relational systems, you kno)108 335.3 R 2.961(wt)-.275 G .211 -(hat the)-2.961 F 2.961(ys)-.165 G .211 -(tore information about databases, tables,)-2.961 F .408 -(columns, etc., in what are commonly kno)108 348.5 R .408(wn as)-.275 F -F4 .408(system catalo)3.158 F(gs)-.11 E F1 5.908(.\()C .407 -(Some systems call this)-5.908 F(the)108 361.7 Q F4 1.187 -(data dictionary)3.937 F F1 3.937(\). The)B 1.187 -(catalogs appear to the user as classes, lik)3.937 F 3.938(ea)-.11 G -1.518 -.165(ny o)-3.938 H(ther).165 E 3.938(,b)-.44 G 1.188(ut the) --4.158 F .658(DBMS stores its internal bookk)108 374.9 R .658 -(eeping in them.)-.11 F .657(One k)6.158 F .987 -.165(ey d)-.11 H(if) -.165 E .657(ference between)-.275 F F2(POSTGRES)3.407 E F1 1.334 -(and standard relational systems is that)108 388.1 R F2(POSTGRES)4.084 E -F1 1.335(stores much more information in its)4.084 F .253 -(catalogs \212 not only information about tables and columns, b)108 -401.3 R .253(ut also information about its)-.22 F .778 -(types, functions, access methods, and so on.)108 414.5 R .778 -(These classes can be modi\214ed by the user)6.278 F(,)-.44 E .625 -(and since)108 427.7 R F2(POSTGRES)3.375 E F1 .624 -(bases its internal operation on these classes, this means that)3.375 F -F2(POST)3.374 E(-)-.92 E(GRES)108 440.9 Q F1 .205(can be e)2.955 F .205 -(xtended by users.)-.165 F .206(By comparison, con)5.706 F -.165(ve)-.44 -G .206(ntional database systems can only).165 F .07(be e)108 454.1 R .07 -(xtended by changing hard-coded procedures within the DBMS or by loadin\ -g modules)-.165 F(specially-written by the DBMS v)108 467.3 Q(endor) --.165 E(.)-.605 E F2(POSTGRES)108 484.4 Q F1 1.749(is also unlik)4.499 F -4.499(em)-.11 G 1.75(ost other data managers in that the serv)-4.499 F -1.75(er can incorporate)-.165 F(user)108 497.6 Q 1.338 -(-written code into itself through)-.22 F F4 1.338(dynamic loading)4.088 -F F1 6.838(.T)C 1.338(hat is, the user can specify an)-6.838 F .323 -(object code \214le \(e.g., a compiled)108 510.8 R/F5 11/Courier@0 SF -(.o)3.073 E F1 .323(\214le or shared library\) that implements a ne) -3.073 F 3.074(wt)-.275 G .324(ype or)-3.074 F 1.527(function and)108 524 -R F2(POSTGRES)4.277 E F1 1.527(will load it as required.)4.277 F 1.526 -(Code written in SQL are e)7.026 F -.165(ve)-.275 G 4.276(nm).165 G(ore) --4.276 E(tri)108 537.2 Q(vial to add to the serv)-.275 E(er)-.165 E(.) --.605 E 1.451 -(This ability to modify its operation \231on the \215y\232 mak)108 554.3 -R(es)-.11 E F2(POSTGRES)4.201 E F1 1.451(uniquely suited for)4.201 F -(rapid prototyping of ne)108 567.5 Q 2.75(wa)-.275 G -(pplications and storage structures.)-2.75 E F3 3(6.2. The)72 593.7 R/F6 -11/Times-Bold@0 SF(POSTGRES)3 E F3 -.888(Ty)3 G(pe System).888 E F1(The) -108 610.8 Q F2(POSTGRES)2.75 E F1(type system can be brok)2.75 E(en do) --.11 E(wn in se)-.275 E -.165(ve)-.275 G(ral w).165 E(ays.)-.11 E -.88 -(Ty)108 627.9 S .435(pes are di).88 F .435(vided into)-.275 F F4(base) -3.185 E F1 .435(types and)3.185 F F4(composite)3.185 E F1 3.184 -(types. Base)3.184 F .434(types are those, lik)3.184 F(e)-.11 E F5(int4) -3.184 E F1(,)A 1.371(that are implemented in a language such as C.)108 -641.1 R(The)6.871 E 4.121(yg)-.165 G 1.371 -(enerally correspond to what are)-4.121 F .34(often kno)108 654.3 R .34 -(wn as \231abstract data types\232;)-.275 F F2(POSTGRES)3.09 E F1 .34 -(can only operate on such types through)3.09 F 1.733(methods pro)108 -667.5 R 1.733(vided by the user and only understands the beha)-.165 F -1.734(vior of such types to the)-.22 F -.165(ex)108 680.7 S .736 -(tent that the user describes them.).165 F .736 -(Composite types are created whene)6.236 F -.165(ve)-.275 G 3.486(rt) -.165 G .736(he user cre-)-3.486 F 1.165(ates a class.)108 693.9 R F5 -(EMP)6.665 E F1 1.166(is an e)3.915 F 1.166(xample of a composite type.) --.165 F F2(POSTGRES)6.666 E F1 1.166(stores these types in)3.916 F .58 -(only one w)108 707.1 R .58 -(ay \(within the \214le that stores all instances of the class\) b)-.11 -F .579(ut the user can \231look)-.22 F 2.912(inside\232 at the attrib) -108 720.3 R 2.913 -(utes of these types from the query language and optimize their)-.22 F -F6(21)282.5 756 Q EP -%%Page: 22 22 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF(retrie)108 97.2 Q -.275(va)-.275 G 2.75(lb).275 -G 2.75(y\()-2.75 G(for e)-2.75 E -(xample\) de\214ning indices on the attrib)-.165 E(utes.)-.22 E/F1 10 -/Times-Roman@0 SF(POSTGRES)108 114.3 Q F0 2.579 -(base types are further di)5.329 F 2.579(vided into)-.275 F/F2 11 -/Times-Italic@0 SF -.22(bu)5.329 G(ilt-in).22 E F0 2.578(types and)5.328 -F F2(user)5.328 E(-de\214ned)-.22 E F0(types.)5.328 E 2.057 -(Built-in types \(lik)108 127.5 R(e)-.11 E/F3 11/Courier@0 SF(int4)4.808 -E F0 4.808(\)a)C 2.058(re those that are compiled into the system.) --4.808 F(User)7.558 E(-de\214ned)-.22 E -(types are those created by the user in the manner to be described belo) -108 140.7 Q -.715(w.)-.275 G/F4 12/Times-Bold@0 SF 3(6.3. About)72 166.9 -R(the)3 E/F5 11/Times-Bold@0 SF(POSTGRES)3 E F4(System Catalogs)3 E F0 -(Ha)108 184 Q 1.236(ving introduced the basic e)-.22 F 1.236 -(xtensibility concepts, we can no)-.165 F 3.986(wt)-.275 G(ak)-3.986 E -3.986(eal)-.11 G 1.236(ook at ho)-3.986 F 3.985(wt)-.275 G(he)-3.985 E -.694(catalogs are actually laid out.)108 197.2 R -1.21(Yo)6.194 G 3.444 -(uc)1.21 G .695(an skip this section for no)-3.444 F 2.125 -.715(w, b) --.275 H .695(ut some later sections).495 F .649 -(will be incomprehensible without the information gi)108 210.4 R -.165 -(ve)-.275 G 3.399(nh).165 G .649(ere, so mark this page for later)-3.399 -F(reference.)108 223.6 Q 2.139(All system catalogs ha)108 240.7 R 2.469 --.165(ve n)-.22 H 2.139(ames that be).165 F 2.14(gin with)-.165 F F3 -(pg_)4.89 E F0 7.64(.T)C 2.14(he follo)-7.64 F 2.14 -(wing classes contain)-.275 F .912 -(information that may be useful to the end user)108 253.9 R 6.411(.\() --.605 G .911(There are man)-6.411 F 3.661(yo)-.165 G .911 -(ther system catalogs,)-3.661 F -.22(bu)108 267.1 S 2.75(tt).22 G -(here should rarely be a reason to query them directly)-2.75 E(.\))-.715 -E .44 LW 436.564 284.85 175.435 284.85 DL(catalog name)191.363 295.3 Q -(description)79.7 E 436.564 300.05 175.435 300.05 DL 436.564 302.05 -175.435 302.05 DL F3(pg_database)180.935 312.5 Q F0(databases)23.1 E F3 -(pg_class)180.935 325.7 Q F0(classes)42.9 E F3(pg_attribute)180.935 -338.9 Q F0(class attrib)16.5 E(utes)-.22 E F3(pg_index)180.935 352.1 Q -F0(secondary indices)42.9 E F3(pg_proc)180.935 378.5 Q F0 -(procedures \(both C and SQL\))49.5 E F3(pg_type)180.935 391.7 Q F0 -(types \(both base and comple)49.5 E(x\))-.165 E F3(pg_operator)180.935 -404.9 Q F0(operators)23.1 E F3(pg_aggregate)180.935 418.1 Q F0(aggre) -16.5 E -.055(ga)-.165 G(tes and aggre).055 E -.055(ga)-.165 G -(te functions).055 E F3(pg_am)180.935 444.5 Q F0(access methods)62.7 E -F3(pg_amop)180.935 457.7 Q F0(access method operators)49.5 E F3 -(pg_amproc)180.935 470.9 Q F0(access method support functions)36.3 E F3 -(pg_opclass)180.935 484.1 Q F0(access method operator classes)29.7 E -436.564 488.85 175.435 488.85 DL 268.385 284.85 268.385 488.85 DL -436.564 284.85 436.564 488.85 DL 175.435 284.85 175.435 488.85 DL 2.299 -(The Reference Manual gi)108 510.3 R -.165(ve)-.275 G 5.049(sam).165 G -2.299(ore detailed e)-5.049 F 2.299 -(xplanation of these catalogs and their)-.165 F(attrib)108 523.5 Q 3.35 -(utes. Ho)-.22 F(we)-.275 E -.165(ve)-.275 G 1.48 -.44(r, F).165 H .6 -(igure 3 sho).44 F .6 -(ws the major entities and their relationships in the sys-)-.275 F .557 -(tem catalogs.)108 536.7 R(\(Attrib)6.057 E .557 -(utes that do not refer to other entities are not sho)-.22 F .558 -(wn unless the)-.275 F 3.308(ya)-.165 G(re)-3.308 E(part of a primary k) -108 549.9 Q -.165(ey)-.11 G(.\))-.55 E .221(This diagram is more or les\ -s incomprehensible until you actually start looking at the con-)108 567 -R .887(tents of the catalogs and see ho)108 580.2 R 3.638(wt)-.275 G(he) --3.638 E 3.638(yr)-.165 G .888(elate to each other)-3.638 F 6.388(.F) --.605 G .888(or no)-6.553 F 2.318 -.715(w, t)-.275 H .888 -(he main things to).715 F(tak)108 593.4 Q 2.75(ea)-.11 G -.11(wa)-2.915 -G 2.75(yf).11 G(rom this diagram are as follo)-2.75 E(ws:)-.275 E 13.75 -(\(1\) In)113.5 610.5 R(se)3.509 E -.165(ve)-.275 G .759 -(ral of the sections that follo).165 F 2.189 -.715(w, w)-.275 H 3.509 -(ew).715 G .759(ill present v)-3.509 F .759(arious join queries on the) --.275 F .546(system catalogs that display information we need to e) -142.826 623.7 R .546(xtend the system.)-.165 F(Looking)6.046 E .319 -(at this diagram should mak)142.826 636.9 R 3.069(es)-.11 G .319 -(ome of these join queries \(which are often three- or)-3.069 F(four) -142.826 650.1 Q(-w)-.22 E 1.791(ay joins\) more understandable, because\ - you will be able to see that the)-.11 F(attrib)142.826 663.3 Q -(utes used in the queries form foreign k)-.22 E -.165(ey)-.11 G 2.75(si) -.165 G 2.75(no)-2.75 G(ther classes.)-2.75 E 13.75(\(2\) Man)113.5 680.4 -R 2.868(yd)-.165 G(if)-2.868 E .118(ferent features \(classes, attrib) --.275 F .117(utes, functions, types, access methods, etc.\))-.22 F 2.01 -(are tightly inte)142.826 693.6 R 2.01(grated in this schema.)-.165 F -4.76(As)7.51 G(imple)-4.76 E F5(cr)4.76 E(eate)-.198 E F0 2.01 -(command may modify)4.76 F(man)142.826 706.8 Q 2.75(yo)-.165 G 2.75(ft) --2.75 G(hese catalogs.)-2.75 E F5(22)282.5 756 Q EP -%%Page: 23 23 -%%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 -%%Page: 24 24 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF(unique instances of other catalogs.)142.826 97.2 -Q 13.75(\(4\) There)113.5 114.3 R .222(are man)2.972 F 2.972(ya)-.165 G -(ttrib)-2.972 E .222(utes and relationships that ha)-.22 F .552 -.165 -(ve o)-.22 H -.165(bv).165 G .222(ious meanings, b).165 F .222(ut there) --.22 F 1.599(are man)142.826 127.5 R 4.349(y\()-.165 G 1.599 -(particularly those that ha)-4.349 F 1.928 -.165(ve t)-.22 H 4.348(od) -.165 G 4.348(ow)-4.348 G 1.598(ith access methods\) that do not.)-4.348 -F 1.899(The relationships between)142.826 140.7 R/F1 11/Courier@0 SF -(pg_am)4.649 E F0(,)A F1(pg_amop)4.649 E F0(,)A F1 -1.95 -(pg_amproc, pg_operator)4.65 F F0(and)142.826 153.9 Q F1(pg_opclass) -4.062 E F0 1.312 -(are particularly hard to understand and will be described in)4.062 F -.679(depth \(in the section on interf)142.826 167.1 R .68 -(acing types and operators to indices\) after we ha)-.11 F -.165(ve)-.22 -G(discussed basic e)142.826 180.3 Q(xtensions.)-.165 E/F2 11 -/Times-Bold@0 SF(24)282.5 756 Q EP -%%Page: 25 25 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(7. EXTENDING)72 165.4 R -(SQL: FUNCTIONS)4.75 E 77.5 178.6 72 178.6 DL 80.5 178.6 75 178.6 DL 86 -178.6 80.5 178.6 DL 91.5 178.6 86 178.6 DL 97 178.6 91.5 178.6 DL 102.5 -178.6 97 178.6 DL 108 178.6 102.5 178.6 DL 113.5 178.6 108 178.6 DL 119 -178.6 113.5 178.6 DL 124.5 178.6 119 178.6 DL 130 178.6 124.5 178.6 DL -135.5 178.6 130 178.6 DL 141 178.6 135.5 178.6 DL 146.5 178.6 141 178.6 -DL 152 178.6 146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 178.6 157.5 -178.6 DL 168.5 178.6 163 178.6 DL 174 178.6 168.5 178.6 DL 179.5 178.6 -174 178.6 DL 185 178.6 179.5 178.6 DL 190.5 178.6 185 178.6 DL 196 178.6 -190.5 178.6 DL 201.5 178.6 196 178.6 DL 207 178.6 201.5 178.6 DL 212.5 -178.6 207 178.6 DL 218 178.6 212.5 178.6 DL 223.5 178.6 218 178.6 DL 229 -178.6 223.5 178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 234.5 178.6 DL -245.5 178.6 240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 178.6 251 178.6 -DL 262 178.6 256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 178.6 267.5 -178.6 DL 278.5 178.6 273 178.6 DL 284 178.6 278.5 178.6 DL 289.5 178.6 -284 178.6 DL 295 178.6 289.5 178.6 DL 300.5 178.6 295 178.6 DL 306 178.6 -300.5 178.6 DL 311.5 178.6 306 178.6 DL 317 178.6 311.5 178.6 DL 322.5 -178.6 317 178.6 DL 328 178.6 322.5 178.6 DL 333.5 178.6 328 178.6 DL 339 -178.6 333.5 178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 344.5 178.6 DL -355.5 178.6 350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 178.6 361 178.6 -DL 372 178.6 366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 178.6 377.5 -178.6 DL 388.5 178.6 383 178.6 DL 394 178.6 388.5 178.6 DL 399.5 178.6 -394 178.6 DL 405 178.6 399.5 178.6 DL 410.5 178.6 405 178.6 DL 416 178.6 -410.5 178.6 DL 421.5 178.6 416 178.6 DL 427 178.6 421.5 178.6 DL 432.5 -178.6 427 178.6 DL 438 178.6 432.5 178.6 DL 443.5 178.6 438 178.6 DL 449 -178.6 443.5 178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 454.5 178.6 DL -465.5 178.6 460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 178.6 471 178.6 -DL 482 178.6 476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 178.6 487.5 -178.6 DL 498.5 178.6 493 178.6 DL 504 178.6 498.5 178.6 DL/F1 11 -/Times-Roman@0 SF .665(As it turns out, part of de\214ning a ne)108 -208.9 R 3.415(wt)-.275 G .664 -(ype is the de\214nition of functions that describe its)-3.415 F(beha) -108 222.1 Q(vior)-.22 E 6.346(.C)-.605 G(onsequently)-6.346 E 3.596(,w) --.715 G .846(hile it is possible to de\214ne a ne)-3.596 F 3.596(wf) --.275 G .847(unction without de\214ning a)-3.596 F(ne)108 235.3 Q 4.407 -(wt)-.275 G 1.657(ype, the re)-4.407 F -.165(ve)-.275 G 1.657 -(rse is not true.).165 F 3.417 -.88(We t)7.157 H 1.657 -(herefore describe ho).88 F 4.406(wt)-.275 G 4.406(oa)-4.406 G 1.656 -(dd ne)-4.406 F 4.406(wf)-.275 G 1.656(unctions to)-4.406 F/F2 10 -/Times-Roman@0 SF(POSTGRES)108 248.5 Q F1(before describing ho)2.75 E -2.75(wt)-.275 G 2.75(oa)-2.75 G(dd ne)-2.75 E 2.75(wt)-.275 G(ypes.) --2.75 E F2(POSTGRES)108 265.6 Q F1 1.65(SQL pro)4.4 F 1.65(vides tw) --.165 F 4.401(ot)-.11 G 1.651(ypes of functions:)-4.401 F/F3 11 -/Times-Italic@0 SF 1.651(query langua)4.401 F 1.871 -.11(ge f)-.11 H -(unctions).11 E F1(\(functions)4.401 E 1.675(written in SQL and)108 -278.8 R F3(pr)4.425 E -.11(og)-.495 G -.165(ra).11 G 1.675(mming langua) -.165 F 1.895 -.11(ge f)-.11 H(unctions).11 E F1 1.675 -(\(functions written in a compiled)4.425 F .664 -(programming language such as C.\))108 292 R .664 -(Either kind of function can tak)6.164 F 3.415(eab)-.11 G .665 -(ase type, a com-)-3.415 F 1.166(posite type or some combination as ar) -108 305.2 R 1.166(guments \(parameters\).)-.198 F 1.166 -(In addition, both kinds of)6.666 F .371 -(functions can return a base type or a composite type.)108 318.4 R(It') -5.871 E 3.121(se)-.605 G .371(asier to de\214ne SQL functions,)-3.121 F -(so we')108 331.6 Q(ll start with those.)-.11 E -(Examples in this section can also be found in)108 348.7 Q/F4 11 -/Courier@0 SF(funcs.sql)2.75 E F1(and)2.75 E F4(C-code/funcs.c)2.75 E F1 -(.)A/F5 12/Times-Bold@0 SF 3(7.1. Query)72 374.9 R -(Language \(SQL\) Functions)3 E 77.5 388.1 72 388.1 DL 80.5 388.1 75 -388.1 DL 86 388.1 80.5 388.1 DL 91.5 388.1 86 388.1 DL 97 388.1 91.5 -388.1 DL 102.5 388.1 97 388.1 DL 108 388.1 102.5 388.1 DL 113.5 388.1 -108 388.1 DL 119 388.1 113.5 388.1 DL 124.5 388.1 119 388.1 DL 130 388.1 -124.5 388.1 DL 135.5 388.1 130 388.1 DL 141 388.1 135.5 388.1 DL 146.5 -388.1 141 388.1 DL 152 388.1 146.5 388.1 DL 157.5 388.1 152 388.1 DL 163 -388.1 157.5 388.1 DL 168.5 388.1 163 388.1 DL 174 388.1 168.5 388.1 DL -179.5 388.1 174 388.1 DL 185 388.1 179.5 388.1 DL 190.5 388.1 185 388.1 -DL 196 388.1 190.5 388.1 DL 201.5 388.1 196 388.1 DL 207 388.1 201.5 -388.1 DL 212.5 388.1 207 388.1 DL 218 388.1 212.5 388.1 DL 223.5 388.1 -218 388.1 DL 229 388.1 223.5 388.1 DL 234.5 388.1 229 388.1 DL 240 388.1 -234.5 388.1 DL 245.5 388.1 240 388.1 DL 251 388.1 245.5 388.1 DL 256.5 -388.1 251 388.1 DL 262 388.1 256.5 388.1 DL 267.5 388.1 262 388.1 DL 273 -388.1 267.5 388.1 DL 278.5 388.1 273 388.1 DL 284 388.1 278.5 388.1 DL -289.5 388.1 284 388.1 DL 295 388.1 289.5 388.1 DL 300.5 388.1 295 388.1 -DL 306 388.1 300.5 388.1 DL 311.5 388.1 306 388.1 DL 317 388.1 311.5 -388.1 DL 322.5 388.1 317 388.1 DL 328 388.1 322.5 388.1 DL 333.5 388.1 -328 388.1 DL 339 388.1 333.5 388.1 DL 344.5 388.1 339 388.1 DL 350 388.1 -344.5 388.1 DL 355.5 388.1 350 388.1 DL 361 388.1 355.5 388.1 DL 366.5 -388.1 361 388.1 DL 372 388.1 366.5 388.1 DL 377.5 388.1 372 388.1 DL 383 -388.1 377.5 388.1 DL 388.5 388.1 383 388.1 DL 394 388.1 388.5 388.1 DL -399.5 388.1 394 388.1 DL 405 388.1 399.5 388.1 DL 410.5 388.1 405 388.1 -DL 416 388.1 410.5 388.1 DL 421.5 388.1 416 388.1 DL 427 388.1 421.5 -388.1 DL 432.5 388.1 427 388.1 DL 438 388.1 432.5 388.1 DL 443.5 388.1 -438 388.1 DL 449 388.1 443.5 388.1 DL 454.5 388.1 449 388.1 DL 460 388.1 -454.5 388.1 DL 465.5 388.1 460 388.1 DL 471 388.1 465.5 388.1 DL 476.5 -388.1 471 388.1 DL 482 388.1 476.5 388.1 DL 487.5 388.1 482 388.1 DL 493 -388.1 487.5 388.1 DL 498.5 388.1 493 388.1 DL 504 388.1 498.5 388.1 DL 3 -(7.1.1. SQL)72 418.4 R(Functions on Base T)3 E(ypes)-.888 E F1 1.475 -(The simplest possible SQL function has no ar)108 435.5 R 1.475 -(guments and simply returns a base type,)-.198 F(such as)108 448.7 Q F4 -(int4)2.75 E F1(:)A/F6 10/Courier@0 SF -(CREATE FUNCTION one\(\) RETURNS int4)148 473.9 Q -(AS 'SELECT 1 as RESULT' LANGUAGE 'sql';)178 486.1 Q -(SELECT one\(\) AS answer;)148 524.3 Q .4 LW 194 554.8 148 554.8 DL -(answer)153 564.5 Q 194 569 148 569 DL(1)153 578.7 Q 194 583.2 148 583.2 -DL 194 554.8 194 583.2 DL 148 554.8 148 583.2 DL F1 .376 -(Notice that we de\214ned a tar)108 604.9 R .376 -(get list for the function \(with the name)-.198 F F4(RESULT)3.126 E F1 -.376(\), b)B .376(ut the tar)-.22 F(-)-.22 E .773 -(get list of the query that in)108 618.1 R -.22(vo)-.44 G -.11(ke).22 G -3.523(dt).11 G .773(he function o)-3.523 F -.165(ve)-.165 G .773 -(rrode the function').165 F 3.523(st)-.605 G(ar)-3.523 E .774(get list.) --.198 F(Hence,)6.274 E(the result is labelled)108 631.3 Q F4(answer)2.75 -E F1(instead of)2.75 E F4(one)2.75 E F1(.)A(It')108 648.4 Q 4.424(sa) --.605 G 1.674(lmost as easy to de\214ne SQL functions that tak)-4.424 F -4.423(eb)-.11 G 1.673(ase types as ar)-4.423 F 4.423(guments. In)-.198 F -(the)4.423 E -.165(ex)108 661.6 S(ample belo).165 E 1.43 -.715(w, n) --.275 H(otice ho).715 E 2.75(ww)-.275 G 2.75(er)-2.75 G(efer to the ar) --2.75 E(guments within the function as)-.198 E F4($1)2.75 E F1(and)2.75 -E F4($2)2.75 E F1(.)A F6 -(CREATE FUNCTION add_em\(int4, int4\) RETURNS int4)148 686.8 Q -(AS 'SELECT $1 + $2;' LANGUAGE 'sql';)178 699 Q/F7 11/Times-Bold@0 SF -(25)282.5 756 Q EP -%%Page: 26 26 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(SELECT add_em\(1, 2\) AS answer;)148 96.2 Q .4 LW -194 126.7 148 126.7 DL(answer)153 136.4 Q 194 140.9 148 140.9 DL(3)153 -150.6 Q 194 155.1 148 155.1 DL 194 126.7 194 155.1 DL 148 126.7 148 -155.1 DL/F1 12/Times-Bold@0 SF 3(7.1.2. SQL)72 189.8 R -(Functions on Composite T)3 E(ypes)-.888 E/F2 11/Times-Roman@0 SF 1.145 -(When specifying functions with ar)108 206.9 R 1.146 -(guments of composite types \(such as)-.198 F/F3 11/Courier@0 SF(EMP) -3.896 E F2 1.146(\), we must)B .317(not only specify which ar)108 220.1 -R .317(gument we w)-.198 F .316(ant \(as we did abo)-.11 F .646 -.165 -(ve w)-.165 H(ith).165 E F3($1)3.066 E F2(and)3.066 E F3($2)3.066 E F2 -3.066(\)b)C .316(ut also the)-3.286 F(attrib)108 233.3 Q .393 -(utes of that ar)-.22 F 3.143(gument. F)-.198 F .393(or e)-.165 F .393 -(xample, tak)-.165 F 3.143(et)-.11 G .393(he function)-3.143 F F3 -(double_salary)3.143 E F2 .393(that com-)3.143 F -(putes what your salary w)108 246.5 Q(ould be if it were doubled.)-.11 E -F0(CREATE FUNCTION double_salary\(EMP\) RETURNS int4)148 271.7 Q -(AS 'SELECT $1.salary * 2 AS salary;' LANGUAGE 'sql';)178 283.9 Q -(SELECT name, double_salary\(EMP\) AS dream)148 308.3 Q(FROM EMP)160 -320.5 Q(WHERE EMP.dept = 'toy';)160 332.7 Q 227 363.2 148 363.2 DL 9 -(name dream)153 372.9 R 227 377.4 148 377.4 DL 15(Sam 2400)153 387.1 R -227 391.6 148 391.6 DL 227 363.2 227 391.6 DL 148 363.2 148 391.6 DL -184.5 363.2 184.5 391.6 DL F2(Notice the use of the syntax)108 413.3 Q -F3($1.salary)2.75 E F2(.)A .755(Before launching into the subject of fu\ -nctions that return composite types, we must \214rst)108 430.4 R .063 -(introduce the)108 443.6 R/F4 11/Times-Italic@0 SF(function)2.813 E F2 -.063(notation for projecting attrib)2.813 F 2.813(utes. The)-.22 F .064 -(simple w)2.814 F .064(ay to e)-.11 F .064(xplain this is)-.165 F 1.137 -(that we can usually use the notation)108 456.8 R F3(attribute\(class\)) -3.886 E F2(and)3.886 E F3(class.attribute)3.886 E F2(interchang)108 470 -Q(ably)-.055 E(.)-.715 E F0(--)148 495.2 Q(-- this is the same as:)148 -507.4 Q 11(-- SELECT)148 519.6 R -(EMP.name AS youngster FROM EMP WHERE EMP.age < 30)6 E(--)148 531.8 Q -(SELECT name\(EMP\) AS youngster)148 544 Q(FROM EMP)148 556.2 Q -(WHERE age\(EMP\) < 30;)148 568.4 Q 212 598.9 148 598.9 DL(youngster)153 -608.6 Q 212 613.1 148 613.1 DL(Sam)153 622.8 Q 212 627.3 148 627.3 DL -212 598.9 212 627.3 DL 148 598.9 148 627.3 DL F2(As we shall see, ho)108 -649 Q(we)-.275 E -.165(ve)-.275 G .88 -.44(r, t).165 H(his is not al).44 -E -.11(wa)-.11 G(ys the case.).11 E .763 -(This function notation is important when we w)108 666.1 R .764 -(ant to use a function that returns a single)-.11 F 3.825(instance. W) -108 679.3 R 3.825(ed)-.88 G 3.825(ot)-3.825 G 1.075 -(his by assembling the entire instance within the function, attrib) --3.825 F 1.074(ute by)-.22 F(attrib)108 692.5 Q 2.75(ute. This)-.22 F -(is an e)2.75 E(xample of a function that returns a single)-.165 E F3 -(EMP)2.75 E F2(instance:)2.75 E/F5 11/Times-Bold@0 SF(26)282.5 756 Q EP -%%Page: 27 27 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(CREATE FUNCTION new_emp\(\) RETURNS EMP)148 96.2 Q -(AS 'SELECT \\'None\\'::text AS name,)166 108.4 Q(1000 AS salary,)232 -120.6 Q(25 AS age,)232 132.8 Q(\\'none\\'::char16 AS dept;')232 145 Q -(LANGUAGE 'sql';)166 157.2 Q/F1 11/Times-Roman@0 SF .103 -(In this case we ha)108 183.4 R .433 -.165(ve s)-.22 H .103 -(peci\214ed each of the attrib).165 F .103(utes with a constant v)-.22 F -.103(alue, b)-.275 F .104(ut an)-.22 F 2.854(yc)-.165 G(ompu-)-2.854 E -(tation or e)108 196.6 Q(xpression could ha)-.165 E .33 -.165(ve b)-.22 -H(een substituted for these constants.).165 E .014 -(De\214ning a function lik)108 213.7 R 2.764(et)-.11 G .014 -(his can be trick)-2.764 F 4.194 -.715(y. S)-.165 H .014 -(ome of the more important ca).715 F -.165(ve)-.22 G .013 -(ats are as fol-).165 F(lo)108 226.9 Q(ws:)-.275 E 5.5<8354>113.5 244 S -.286(he tar)-5.5 F .286(get list order must be)-.198 F/F2 11 -/Times-Bold@0 SF(exactly)3.036 E F1 .286 -(the same as that in which the attrib)3.036 F .286(utes appear in)-.22 F -(the)122.85 257.2 Q F2(CREA)2.75 E(TE T)-1.045 E(ABLE)-.99 E F1 -(statement \(or when you e)2.75 E -.165(xe)-.165 G(cute a).165 E/F3 11 -/Courier@0 SF(.*)2.75 E F1(query\).)5.5 E 5.5<8359>113.5 270.4 S .556 -(ou must be careful to typecast the e)-6.71 F .555(xpressions \(using) --.165 F F3(::)3.305 E F1 3.305(\)v)C .555(ery carefully or you will) --3.47 F(see the follo)122.85 283.6 Q(wing error:)-.275 E F0 -(WARN::function declared to return type EMP does not retrieve \(EMP.*\)) -162.85 308.8 Q F1 5.5<8357>113.5 338.9 S 3.364 -(hen calling a function that returns an instance, we cannot retrie)-5.5 -F 3.695 -.165(ve t)-.275 H 3.365(he entire).165 F 4.436(instance. W) -122.85 352.1 R 4.436(em)-.88 G 1.686(ust either project an attrib)-4.436 -F 1.685(ute out of the instance or pass the entire)-.22 F -(instance into another function.)122.85 365.3 Q F0 -(SELECT name\(new_emp\(\)\) AS nobody;)162.85 390.5 Q .4 LW 208.85 421 -162.85 421 DL(nobody)167.85 430.7 Q 208.85 435.2 162.85 435.2 DL(None) -167.85 444.9 Q 208.85 449.4 162.85 449.4 DL 208.85 421 208.85 449.4 DL -162.85 421 162.85 449.4 DL F1 5.5<8354>113.5 471.1 S .701(he reason wh) --5.5 F 2.131 -.715(y, i)-.055 H 3.451(ng).715 G .702 -(eneral, we must use the function syntax for projecting attrib)-3.451 F -(utes)-.22 E .418(of function return v)122.85 484.3 R .418 -(alues is that the parser just doesn')-.275 F 3.168(tu)-.198 G .418 -(nderstand the other \(dot\) syn-)-3.168 F -(tax for projection when combined with function calls.)122.85 497.5 Q F0 -(SELECT new_emp\(\).name AS nobody;)162.85 522.7 Q -(WARN:parser: syntax error at or near ".")162.85 534.9 Q F1(An)108 565 Q -3.873(yc)-.165 G 1.124(ollection of commands in the SQL query language \ -can be packaged together and)-3.873 F 2.551(de\214ned as a function.)108 -578.2 R 2.551(The commands can include updates \(i.e.,)8.051 F F2 -(insert)5.301 E F1(,)A F2(update)5.301 E F1(and)5.301 E F2(delete)108 -591.4 Q F1 4.825(\)a)C 4.825(sw)-4.825 G 2.075(ell as)-4.825 F F2 -(select)4.825 E F1 4.825(queries. Ho)4.825 F(we)-.275 E -.165(ve)-.275 G -2.955 -.44(r, t).165 H 2.075(he \214nal command must be a).44 F F2 -(select)4.825 E F1(that)4.826 E(returns whate)108 604.6 Q -.165(ve)-.275 -G 2.75(ri).165 G 2.75(ss)-2.75 G(peci\214ed as the function')-2.75 E(s) --.605 E F3(returntype)2.75 E F1(.)A F0 -(CREATE FUNCTION clean_EMP \(\) RETURNS int4)148 629.8 Q -(AS 'DELETE FROM EMP WHERE EMP.salary <= 0;)166 642 Q -(SELECT 1 AS ignore_this')190 654.2 Q(LANGUAGE 'sql';)166 666.4 Q -(SELECT clean_EMP\(\);)148 690.8 Q F2(27)282.5 756 Q EP -%%Page: 28 28 -%%BeginPageSetup -BP -%%EndPageSetup -.4 LW 164 88.5 148 88.5 DL/F0 10/Courier@0 SF(x)153 98.2 Q 164 102.7 148 -102.7 DL(1)153 112.4 Q 164 116.9 148 116.9 DL 164 88.5 164 116.9 DL 148 -88.5 148 116.9 DL/F1 12/Times-Bold@0 SF 3(7.2. Pr)72 151.6 R -(ogramming Language Functions)-.216 E .44 LW 77.5 164.8 72 164.8 DL 80.5 -164.8 75 164.8 DL 86 164.8 80.5 164.8 DL 91.5 164.8 86 164.8 DL 97 164.8 -91.5 164.8 DL 102.5 164.8 97 164.8 DL 108 164.8 102.5 164.8 DL 113.5 -164.8 108 164.8 DL 119 164.8 113.5 164.8 DL 124.5 164.8 119 164.8 DL 130 -164.8 124.5 164.8 DL 135.5 164.8 130 164.8 DL 141 164.8 135.5 164.8 DL -146.5 164.8 141 164.8 DL 152 164.8 146.5 164.8 DL 157.5 164.8 152 164.8 -DL 163 164.8 157.5 164.8 DL 168.5 164.8 163 164.8 DL 174 164.8 168.5 -164.8 DL 179.5 164.8 174 164.8 DL 185 164.8 179.5 164.8 DL 190.5 164.8 -185 164.8 DL 196 164.8 190.5 164.8 DL 201.5 164.8 196 164.8 DL 207 164.8 -201.5 164.8 DL 212.5 164.8 207 164.8 DL 218 164.8 212.5 164.8 DL 223.5 -164.8 218 164.8 DL 229 164.8 223.5 164.8 DL 234.5 164.8 229 164.8 DL 240 -164.8 234.5 164.8 DL 245.5 164.8 240 164.8 DL 251 164.8 245.5 164.8 DL -256.5 164.8 251 164.8 DL 262 164.8 256.5 164.8 DL 267.5 164.8 262 164.8 -DL 273 164.8 267.5 164.8 DL 278.5 164.8 273 164.8 DL 284 164.8 278.5 -164.8 DL 289.5 164.8 284 164.8 DL 295 164.8 289.5 164.8 DL 300.5 164.8 -295 164.8 DL 306 164.8 300.5 164.8 DL 311.5 164.8 306 164.8 DL 317 164.8 -311.5 164.8 DL 322.5 164.8 317 164.8 DL 328 164.8 322.5 164.8 DL 333.5 -164.8 328 164.8 DL 339 164.8 333.5 164.8 DL 344.5 164.8 339 164.8 DL 350 -164.8 344.5 164.8 DL 355.5 164.8 350 164.8 DL 361 164.8 355.5 164.8 DL -366.5 164.8 361 164.8 DL 372 164.8 366.5 164.8 DL 377.5 164.8 372 164.8 -DL 383 164.8 377.5 164.8 DL 388.5 164.8 383 164.8 DL 394 164.8 388.5 -164.8 DL 399.5 164.8 394 164.8 DL 405 164.8 399.5 164.8 DL 410.5 164.8 -405 164.8 DL 416 164.8 410.5 164.8 DL 421.5 164.8 416 164.8 DL 427 164.8 -421.5 164.8 DL 432.5 164.8 427 164.8 DL 438 164.8 432.5 164.8 DL 443.5 -164.8 438 164.8 DL 449 164.8 443.5 164.8 DL 454.5 164.8 449 164.8 DL 460 -164.8 454.5 164.8 DL 465.5 164.8 460 164.8 DL 471 164.8 465.5 164.8 DL -476.5 164.8 471 164.8 DL 482 164.8 476.5 164.8 DL 487.5 164.8 482 164.8 -DL 493 164.8 487.5 164.8 DL 498.5 164.8 493 164.8 DL 504 164.8 498.5 -164.8 DL 3(7.2.1. Pr)72 204.2 R(ogramming Language Functions on Base T) --.216 E(ypes)-.888 E/F2 11/Times-Roman@0 SF(Internally)108 221.3 Q(,) --.715 E/F3 10/Times-Roman@0 SF(POSTGRES)2.921 E F2(re)2.921 E -.055(ga) --.165 G .171(rds a base type as a \231blob of memory).055 F 4.462 -.77 -(.\232 T)-.715 H .172(he user).77 F .172(-de\214ned func-)-.22 F .359 -(tions that you de\214ne o)108 234.5 R -.165(ve)-.165 G 3.108(rat).165 G -.358(ype in turn de\214ne the w)-3.108 F .358(ay that)-.11 F F3 -(POSTGRES)3.108 E F2 .358(can operate on it.)3.108 F 1.561(That is,)108 -247.7 R F3(POSTGRES)4.311 E F2 1.562(will only store and retrie)4.311 F -1.892 -.165(ve t)-.275 H 1.562(he data from disk and use your user).165 -F(-)-.22 E(de\214ned functions to input, process, and output the data.) -108 260.9 Q(Base types can ha)108 278 Q .33 -.165(ve o)-.22 H -(ne of three internal formats:).165 E 5.5<8370>113.5 295.1 S(ass by v) --5.5 E(alue, \214x)-.275 E(ed-length)-.165 E 5.5<8370>113.5 308.3 S -(ass by reference, \214x)-5.5 E(ed-length)-.165 E 5.5<8370>113.5 321.5 S -(ass by reference, v)-5.5 E(ariable-length)-.275 E(By-v)108 338.6 Q .513 -(alue types can only be 1, 2 or 4 bytes in length \(e)-.275 F -.165(ve) --.275 G 3.262(ni).165 G 3.262(fy)-3.262 G .512 -(our computer supports by-)-3.262 F -.275(va)108 351.8 S 1.546 -(lue types of other sizes\).).275 F F3(POSTGRES)7.046 E F2 1.547 -(itself only passes inte)4.296 F 1.547(ger types by v)-.165 F 4.297 -(alue. Y)-.275 F(ou)-1.21 E .012 -(should be careful to de\214ne your types such that the)108 365 R 2.762 -(yw)-.165 G .012(ill be the same size \(in bytes\) on all)-2.762 F 4.056 -(architectures. F)108 378.2 R 1.306(or e)-.165 F 1.306(xample, the)-.165 -F/F4 11/Courier@0 SF(long)4.056 E F2 1.307 -(type is dangerous because it is 4 bytes on some)4.056 F 1.213 -(machines and 8 bytes on others, whereas)108 391.4 R F4(int)3.963 E F2 -1.213(type is 4 bytes on most)3.963 F F3(UNIX)3.963 E F2(machines)3.963 -E 1.798(\(though not on most personal computers\).)108 404.6 R 4.548(Ar) -7.298 G 1.798(easonable implementation of the)-4.548 F F4(int4)4.548 E -F2(type on)108 417.8 Q F3(UNIX)2.75 E F2(machines might be:)2.75 E F0 -(/* 4-byte integer, passed by value */)148 443 Q(typedef int int4;)148 -455.2 Q F2 .251(On the other hand, \214x)108 481.4 R .251 -(ed-length types of an)-.165 F 3.001(ys)-.165 G .25 -(ize may be passed by-reference.)-3.001 F -.165(Fo)5.75 G 3(re).165 G -(xam-)-3.165 E(ple, here is a sample implementation of the)108 494.6 Q -F3(POSTGRES)2.75 E F4(char16)2.75 E F2(type:)2.75 E F0 -(/* 16-byte structure, passed by reference */)148 519.8 Q -(typedef struct {)148 532 Q(char data[16];)172 544.2 Q 6(}c)148 556.4 S -(har16;)-6 E F2 1.537(Only pointers to such types can be used when pass\ -ing them in and out of)108 582.6 R F3(POSTGRES)4.287 E F2(functions.)108 -595.8 Q(Finally)108 612.9 Q 4.149(,a)-.715 G 1.399(ll v)-4.149 F 1.399 -(ariable-length types must also be passed by reference.)-.275 F 1.399 -(All v)6.899 F(ariable-length)-.275 E 1.027(types must be)108 626.1 R -1.027(gin with a length \214eld of e)-.165 F 1.028 -(xactly 4 bytes, and all data to be stored within)-.165 F 1.456 -(that type must be located in the memory immediately follo)108 639.3 R -1.456(wing that length \214eld.)-.275 F(The)6.956 E .613(length \214eld\ - is the total length of the structure \(i.e., it includes the size of t\ -he length \214eld)108 652.5 R 2.75(itself\). W)108 665.7 R 2.75(ec)-.88 -G(an de\214ne the)-2.75 E F4(text)2.75 E F2(type as follo)2.75 E(ws:) --.275 E F0(typedef struct {)148 690.9 Q(int4 length;)172 703.1 Q/F5 11 -/Times-Bold@0 SF(28)282.5 756 Q EP -%%Page: 29 29 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(char data[1];)172 96.2 Q 6(}t)148 108.4 S(ext;)-6 E -/F1 11/Times-Roman@0 SF(Ob)108 134.6 Q(viously)-.165 E 3.247(,t)-.715 G -(he)-3.247 E/F2 11/Courier@0 SF(data)3.247 E F1 .496 -(\214eld is not long enough to hold all possible strings \212 it')3.247 -F 3.246(si)-.605 G(mpossi-)-3.246 E .825 -(ble to declare such a structure in C.)108 147.8 R .825 -(When manipulating v)6.325 F .825(ariable-length types, we must)-.275 F -1.108(be careful to allocate the correct amount of memory and initializ\ -e the length \214eld.)108 161 R -.165(Fo)6.607 G(r).165 E -.165(ex)108 -174.2 S .75(ample, if we w).165 F .75(anted to store 40 bytes in a)-.11 -F F2(text)3.501 E F1 .751(structure, we might use a code frag-)3.501 F -(ment lik)108 187.4 Q 2.75(et)-.11 G(his:)-2.75 E F0 -(#include "postgres.h")148 212.6 Q(#include "utils/palloc.h")148 224.8 Q -(...)148 249.2 Q(char buffer[40]; /* our source data */)148 273.6 Q(...) -148 298 Q(text *destination = \(text *\) palloc\(VARHDRSZ + 40\);)148 -322.4 Q(destination->length = VARHDRSZ + 40;)148 334.6 Q -(memmove\(destination->data, buffer, 40\);)148 346.8 Q(...)148 371.2 Q -F1(No)108 401.3 Q 2.913(wt)-.275 G .163(hat we')-2.913 F .493 -.165 -(ve g)-.55 H .163(one o).165 F -.165(ve)-.165 G 2.912(ra).165 G .162 -(ll of the possible structures for base types, we can sho)-2.912 F 2.912 -(ws)-.275 G(ome)-2.912 E -.165(ex)108 414.5 S -(amples of real functions. Suppose).165 E F2(funcs.c)2.75 E F1(look lik) -2.75 E(e:)-.11 E F0(#include )148 439.7 Q -(#include "postgres.h")148 451.9 Q(/* for char16, etc. */)12 E -(#include "utils/palloc.h" /* for palloc */)148 464.1 Q(int)148 488.5 Q -(add_one\(int arg\))148 500.7 Q({)148 512.9 Q(return\(arg + 1\);)172 -525.1 Q(})148 537.3 Q(char16 *)148 561.7 Q -(concat16\(char16 *arg1, char16 *arg2\))148 573.9 Q({)148 586.1 Q -(char16 *new_c16 = \(char16 *\) palloc\(sizeof\(char16\)\);)172 598.3 Q -(memset\(\(void *\) new_c16, 0, sizeof\(char16\)\);)172 622.7 Q -(\(void\) strncpy\(new_c16, arg1, 16\);)172 634.9 Q -(return \(char16 *\)\(strncat\(new_c16, arg2, 16\)\);)172 647.1 Q(})148 -659.3 Q(text *)148 683.7 Q(copytext\(text *t\))148 695.9 Q({)148 708.1 Q -(/*)172 720.3 Q/F3 11/Times-Bold@0 SF(29)282.5 756 Q EP -%%Page: 30 30 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF 6(*V)178 96.2 S -(ARSIZE is the total size of the struct in bytes.)-6 E(*/)178 108.4 Q -(text *new_t = \(text *\) palloc\(VARSIZE\(t\)\);)172 120.6 Q -(memset\(new_t, 0, VARSIZE\(t\)\);)172 145 Q -(VARSIZE\(new_t\) = VARSIZE\(t\);)172 169.4 Q(/*)172 181.6 Q 6(*V)178 -193.8 S(ARDATA is a pointer to the data region of the struct.)-6 E(*/) -178 206 Q(memcpy\(\(void *\) VARDATA\(new_t\), /* destination */)172 -218.2 Q(\(void *\) VARDATA\(t\),)214 230.4 Q(/* source */)30 E 78 -(VARSIZE\(t\)-VARHDRSZ\); /*)214 242.6 R(how many bytes */)6 E -(return\(new_t\);)172 267 Q(})148 279.2 Q/F1 11/Times-Roman@0 SF(On)108 -305.4 Q/F2 10/Times-Roman@0 SF(OSF/1)2.75 E F1(we w)2.75 E(ould type:) --.11 E F0(CREATE FUNCTION add_one\(int4\) RETURNS int4)148 330.6 Q -(AS '/usr/local/postgres95/tutorial/obj/funcs.so' LANGUAGE 'c';)178 -342.8 Q(CREATE FUNCTION concat16\(char16, char16\) RETURNS char16)148 -367.2 Q(AS '/usr/local/postgres95/tutorial/obj/funcs.so' LANGUAGE 'c';) -178 379.4 Q(CREATE FUNCTION copytext\(text\) RETURNS text)148 403.8 Q -(AS '/usr/local/postgres95/tutorial/obj/funcs.so' LANGUAGE 'c';)178 416 -Q F1 .412(On other systems, we might ha)108 442.2 R .742 -.165(ve t)-.22 -H 3.162(om).165 G(ak)-3.162 E 3.162(et)-.11 G .412(he \214lename end in) --3.162 F/F3 11/Courier@0 SF(.sl)3.162 E F1 .413(\(to indicate that it') -3.162 F 3.163(sa)-.605 G(shared library\).)108 455.4 Q/F4 12 -/Times-Bold@0 SF 3(7.2.2. Pr)72 481.6 R -(ogramming Language Functions on Composite T)-.216 E(ypes)-.888 E F1 -1.054(Composite types do not ha)108 498.7 R 1.384 -.165(ve a \214)-.22 H --.165(xe).165 G 3.804(dl).165 G 1.054(ayout lik)-3.804 F 3.804(eC)-.11 G -3.803(structures. Instances)-.001 F 1.053(of a composite)3.803 F .636 -(type may contain null \214elds.)108 511.9 R .637 -(In addition, composite types that are part of an inheritance)6.136 F -(hierarch)108 525.1 Q 2.858(ym)-.055 G .108(ay ha)-2.858 F .438 -.165 -(ve d)-.22 H(if).165 E .107 -(ferent \214elds than other members of the same inheritance hierarch) --.275 F -.715(y.)-.055 G(Therefore,)108 538.3 Q F2(POSTGRES)3.867 E F1 -(pro)3.867 E 1.117(vides a procedural interf)-.165 F 1.117 -(ace for accessing \214elds of composite)-.11 F(types from C.)108 551.5 -Q(As)108 568.6 Q F2(POSTGRES)3.483 E F1 .733(processes a set of instanc\ -es, each instance will be passed into your func-)3.483 F -(tion as an opaque structure of type TUPLE.)108 581.8 Q(Suppose we w)108 -598.9 Q(ant to write a function to answer the query)-.11 E F0 6(*S)148 -624.1 S(ELECT name, c_overpaid\(EMP, 1500\) AS overpaid)-6 E(FROM EMP) -160 636.3 Q(WHERE name = 'Bill' or name = 'Sam';)160 648.5 Q F1 -(In the query abo)108 674.7 Q -.165(ve)-.165 G 2.75(,w).165 G 2.75(ec) --2.75 G(an de\214ne)-2.75 E F3(c_overpaid)2.75 E F1(as:)2.75 E F0 -(#include "postgres.h")148 699.9 Q(/* for char16, etc. */)12 E -(#include "libpq-fe.h" /* for TUPLE */)148 712.1 Q/F5 11/Times-Bold@0 SF -(30)282.5 756 Q EP -%%Page: 31 31 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(bool)148 96.2 Q -(c_overpaid\(TUPLE t,/* the current instance of EMP */)148 108.4 Q -(int4 limit\))214 120.6 Q({)148 132.8 Q(bool isnull = false;)172 145 Q -(int4 salary;)172 157.2 Q -(salary = \(int4\) GetAttributeByName\(t, "salary", &isnull\);)172 181.6 -Q(if \(isnull\))172 206 Q(return \(false\);)196 218.2 Q -(return\(salary > limit\);)172 230.4 Q(})148 242.6 Q/F1 11/Courier@0 SF -(GetAttributeByName)108 268.8 Q/F2 11/Times-Roman@0 SF .07(is the)2.82 F -/F3 10/Times-Roman@0 SF(POSTGRES)2.82 E F2 .07 -(system function that returns attrib)2.82 F .07(utes out of)-.22 F .165 -(the current instance.)108 282 R .164(It has three ar)5.665 F .164 -(guments: the ar)-.198 F .164(gument of type TUPLE passed into the)-.198 -F .471(function, the name of the desired attrib)108 295.2 R .472 -(ute, and a return parameter that describes whether)-.22 F .917 -(the attrib)108 308.4 R .917(ute is null.)-.22 F F1(GetAttributeByName) -6.417 E F2 .916(will align data properly so you can cast)3.667 F .472 -(its return v)108 321.6 R .472(alue to the desired type.)-.275 F -.165 -(Fo)5.972 G 3.222(re).165 G .472(xample, if you ha)-3.387 F .803 -.165 -(ve a)-.22 H 3.223(na).165 G(ttrib)-3.223 E(ute)-.22 E F1(name)3.223 E -F2 .473(which is)3.223 F(of the type)108 334.8 Q F1(char16)2.75 E F2 -2.75(,t)C(he)-2.75 E F1(GetAttributeByName)2.75 E F2(call w)2.75 E -(ould look lik)-.11 E(e:)-.11 E F0(char *str;)148 360 Q(...)148 372.2 Q -(str = \(char *\) GetAttributeByName\(t, "name", &isnull\))148 384.4 Q -F2(The follo)108 414.5 Q(wing query lets)-.275 E F3(POSTGRES)2.75 E F2 -(kno)2.75 E 2.75(wa)-.275 G(bout the)-2.75 E F1(c_overpaid)2.75 E F2 -(function:)2.75 E F0 6(*C)148 439.7 S -(REATE FUNCTION c_overpaid\(EMP, int4\) RETURNS bool)-6 E -(AS '/usr/local/postgres95/tutorial/obj/funcs.so' LANGUAGE 'c';)178 -451.9 Q F2 .212(While there are w)108 482 R .212(ays to construct ne) --.11 F 2.962(wi)-.275 G .211(nstances or modify e)-2.962 F .211 -(xisting instances from within)-.165 F 2.75(aCf)108 495.2 S -(unction, these are f)-2.75 E(ar too comple)-.11 E 2.75(xt)-.165 G 2.75 -(od)-2.75 G(iscuss in this manual.)-2.75 E/F4 12/Times-Bold@0 SF 3 -(7.2.3. Ca)72 521.4 R -.12(ve)-.3 G(ats).12 E F2 2.789 -.88(We n)108 -538.5 T 1.579 -.275(ow t).88 H 1.03(urn to the more dif).275 F 1.03 -(\214cult task of writing programming language functions.)-.275 F(Be) -6.53 E -.11(wa)108 551.7 S 1.163 -(rned: this section of the manual will not mak).11 F 3.913(ey)-.11 G -1.163(ou a programmer)-3.913 F 6.663(.Y)-.605 G 1.163(ou must ha)-7.873 -F 1.493 -.165(ve a)-.22 H 1.023 -(good understanding of C \(including the use of pointers and the)108 -564.9 R F1(malloc)3.773 E F2 1.023(memory man-)3.773 F -(ager\) before trying to write C functions for use with)108 578.1 Q F3 -(POSTGRES)2.75 E F2(.)A .757(While it may be possible to load functions\ - written in languages other than C into)108 595.2 R F3(POST)3.506 E(-) --.92 E(GRES)108 608.4 Q F2 3.613(,t)C .863(his is often dif)-3.613 F -.864(\214cult \(when it is possible at all\) because other languages, s\ -uch as)-.275 F F3(FOR)108 621.6 Q(TRAN)-.6 E F2 1.087(and P)3.837 F -1.087(ascal often do not follo)-.165 F 3.837(wt)-.275 G 1.086 -(he same \231calling con)-3.837 F -.165(ve)-.44 G 1.086(ntion\232 as C.) -.165 F 1.086(That is,)6.586 F 1.24(other languages do not pass ar)108 -634.8 R 1.24(gument and return v)-.198 F 1.241 -(alues between functions in the same)-.275 F -.11(wa)108 648 S 4.214 --.715(y. F).11 H .034(or this reason, we will assume that your programm\ -ing language functions are writ-).55 F(ten in C.)108 661.2 Q -(The basic rules for b)108 678.3 Q(uilding C functions are as follo)-.22 -E(ws:)-.275 E 13.75(\(1\) Most)113.5 695.4 R 1.235 -(of the header \(include\) \214les for)3.985 F F3(POSTGRES)3.985 E F2 -1.236(should already be installed in)3.985 F F1 -(/usr/local/postgres95/include)142.826 708.6 Q F2 2.464 -(\(see Figure 2\).)5.214 F -1.21(Yo)7.964 G 5.214(us)1.21 G 2.464 -(hould al)-5.214 F -.11(wa)-.11 G(ys).11 E(include)142.826 721.8 Q/F5 11 -/Times-Bold@0 SF(31)282.5 756 Q EP -%%Page: 32 32 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(-I/usr/local/postgres95/include)182.826 96.2 Q/F1 11 -/Times-Roman@0 SF 1.373(on your)142.826 122.4 R/F2 11/Courier@0 SF(cc) -4.123 E F1 1.373(command lines.)4.123 F 1.373 -(Sometimes, you may \214nd that you require header)6.873 F .198 -(\214les that are in the serv)142.826 135.6 R .197 -(er source itself \(i.e., you need a \214le we ne)-.165 F .197 -(glected to install)-.165 F(in)142.826 148.8 Q F2(include)2.75 E F1 2.75 -(\). In)B(those cases you may need to add one or more of)2.75 E F0 -(-I/usr/local/postgres95/src/backend)182.826 174 Q -(-I/usr/local/postgres95/src/backend/include)182.826 186.2 Q -(-I/usr/local/postgres95/src/backend/port/)182.826 198.4 Q -(-I/usr/local/postgres95/src/backend/obj)182.826 210.6 Q F1(\(where) -142.826 236.8 Q F2()2.75 E F1(is the name of the port, e.g.,) -2.75 E F2(alpha)2.75 E F1(or)2.75 E F2(sparc\).)2.75 E F1 13.75 -(\(2\) When)113.5 253.9 R 2.892(allocating memory)5.642 F 5.642(,u)-.715 -G 2.892(se the)-5.642 F/F3 10/Times-Roman@0 SF(POSTGRES)5.643 E F1 -(routines)5.643 E F2(palloc)5.643 E F1(and)5.643 E F2(pfree)5.643 E F1 -.088(instead of the corresponding C library routines)142.826 267.1 R F2 -(malloc)2.838 E F1(and)2.838 E F2(free)2.838 E F1 5.588(.T)C .088 -(he memory)-5.588 F .857(allocated by)142.826 280.3 R F2(palloc)3.607 E -F1 .857(will be freed automatically at the end of each transaction,) -3.607 F(pre)142.826 293.5 Q -.165(ve)-.275 G(nting memory leaks.).165 E -13.75(\(3\) Al)113.5 310.6 R -.11(wa)-.11 G .427 -(ys zero the bytes of your structures using).11 F F2(memset)3.177 E F1 -(or)3.177 E F2(bzero)3.177 E F1 5.927(.S)C -2.365 -.275(ev e)-5.927 H -.427(ral rou-).275 F .521(tines \(such as the hash access method, hash \ -join and the sort algorithm\) compute)142.826 323.8 R 1.463 -(functions of the ra)142.826 337 R 4.213(wb)-.165 G 1.463 -(its contained in your structure.)-4.213 F(Ev)6.963 E 1.463 -(en if you initialize all)-.165 F .133 -(\214elds of your structure, there may be se)142.826 350.2 R -.165(ve) --.275 G .133(ral bytes of alignment padding \(holes in).165 F -(the structure\) that may contain g)142.826 363.4 Q(arbage v)-.055 E -(alues.)-.275 E 13.75(\(4\) Most)113.5 380.5 R .496(of the internal) -3.246 F F3(POSTGRES)3.246 E F1 .496(types are declared in)3.246 F F2 -(postgres.h)3.245 E F1 3.245(,s)C 3.245(oi)-3.245 G(t')-3.245 E 3.245 -(su)-.605 G(su-)-3.245 E -(ally a good idea to include that \214le as well.)142.826 393.7 Q 13.75 -(\(5\) Compiling)113.5 410.8 R .214 -(and loading your object code so that it can be dynamically loaded into) -2.964 F F3(POSTGRES)142.826 424 Q F1(al)2.83 E -.11(wa)-.11 G .08 -(ys requires special \215ags.).11 F .079 -(See Appendix A for a detailed e)5.58 F(xplana-)-.165 E(tion of ho) -142.826 437.2 Q 2.75(wt)-.275 G 2.75(od)-2.75 G 2.75(oi)-2.75 G 2.75(tf) --2.75 G(or your particular operating system.)-2.75 E/F4 11/Times-Bold@0 -SF(32)282.5 756 Q EP -%%Page: 33 33 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(8. EXTENDING)72 165.4 R(SQL: TYPES) -4.75 E 77.5 178.6 72 178.6 DL 80.5 178.6 75 178.6 DL 86 178.6 80.5 178.6 -DL 91.5 178.6 86 178.6 DL 97 178.6 91.5 178.6 DL 102.5 178.6 97 178.6 DL -108 178.6 102.5 178.6 DL 113.5 178.6 108 178.6 DL 119 178.6 113.5 178.6 -DL 124.5 178.6 119 178.6 DL 130 178.6 124.5 178.6 DL 135.5 178.6 130 -178.6 DL 141 178.6 135.5 178.6 DL 146.5 178.6 141 178.6 DL 152 178.6 -146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 178.6 157.5 178.6 DL 168.5 -178.6 163 178.6 DL 174 178.6 168.5 178.6 DL 179.5 178.6 174 178.6 DL 185 -178.6 179.5 178.6 DL 190.5 178.6 185 178.6 DL 196 178.6 190.5 178.6 DL -201.5 178.6 196 178.6 DL 207 178.6 201.5 178.6 DL 212.5 178.6 207 178.6 -DL 218 178.6 212.5 178.6 DL 223.5 178.6 218 178.6 DL 229 178.6 223.5 -178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 234.5 178.6 DL 245.5 178.6 -240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 178.6 251 178.6 DL 262 178.6 -256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 178.6 267.5 178.6 DL 278.5 -178.6 273 178.6 DL 284 178.6 278.5 178.6 DL 289.5 178.6 284 178.6 DL 295 -178.6 289.5 178.6 DL 300.5 178.6 295 178.6 DL 306 178.6 300.5 178.6 DL -311.5 178.6 306 178.6 DL 317 178.6 311.5 178.6 DL 322.5 178.6 317 178.6 -DL 328 178.6 322.5 178.6 DL 333.5 178.6 328 178.6 DL 339 178.6 333.5 -178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 344.5 178.6 DL 355.5 178.6 -350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 178.6 361 178.6 DL 372 178.6 -366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 178.6 377.5 178.6 DL 388.5 -178.6 383 178.6 DL 394 178.6 388.5 178.6 DL 399.5 178.6 394 178.6 DL 405 -178.6 399.5 178.6 DL 410.5 178.6 405 178.6 DL 416 178.6 410.5 178.6 DL -421.5 178.6 416 178.6 DL 427 178.6 421.5 178.6 DL 432.5 178.6 427 178.6 -DL 438 178.6 432.5 178.6 DL 443.5 178.6 438 178.6 DL 449 178.6 443.5 -178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 454.5 178.6 DL 465.5 178.6 -460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 178.6 471 178.6 DL 482 178.6 -476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 178.6 487.5 178.6 DL 498.5 -178.6 493 178.6 DL 504 178.6 498.5 178.6 DL/F1 11/Times-Roman@0 SF .275 -(As pre)108 208.9 R .275(viously mentioned, there are tw)-.275 F 3.025 -(ok)-.11 G .276(inds of types in)-3.025 F/F2 10/Times-Roman@0 SF -(POSTGRES)3.026 E F1(:)A/F3 11/Times-Italic@0 SF(base)3.026 E F1 .276 -(types \(de\214ned)3.026 F(in a programming language\) and)108 222.1 Q -F3(composite)2.75 E F1(types \(instances\).)2.75 E 1.449 -(Examples in this section up to interf)108 239.2 R 1.448 -(acing indices can be found in)-.11 F/F4 11/Courier@0 SF(complex.sql) -4.198 E F1(and)A F4(complex.c)108 252.4 Q F1 5.5(.C)C(omposite e)-5.5 E -(xamples are in)-.165 E F4(funcs.sql)2.75 E F1(.)A/F5 12/Times-Bold@0 SF -3(8.1. User)72 278.6 R(-De\214ned T)-.444 E(ypes)-.888 E 77.5 291.8 72 -291.8 DL 80.5 291.8 75 291.8 DL 86 291.8 80.5 291.8 DL 91.5 291.8 86 -291.8 DL 97 291.8 91.5 291.8 DL 102.5 291.8 97 291.8 DL 108 291.8 102.5 -291.8 DL 113.5 291.8 108 291.8 DL 119 291.8 113.5 291.8 DL 124.5 291.8 -119 291.8 DL 130 291.8 124.5 291.8 DL 135.5 291.8 130 291.8 DL 141 291.8 -135.5 291.8 DL 146.5 291.8 141 291.8 DL 152 291.8 146.5 291.8 DL 157.5 -291.8 152 291.8 DL 163 291.8 157.5 291.8 DL 168.5 291.8 163 291.8 DL 174 -291.8 168.5 291.8 DL 179.5 291.8 174 291.8 DL 185 291.8 179.5 291.8 DL -190.5 291.8 185 291.8 DL 196 291.8 190.5 291.8 DL 201.5 291.8 196 291.8 -DL 207 291.8 201.5 291.8 DL 212.5 291.8 207 291.8 DL 218 291.8 212.5 -291.8 DL 223.5 291.8 218 291.8 DL 229 291.8 223.5 291.8 DL 234.5 291.8 -229 291.8 DL 240 291.8 234.5 291.8 DL 245.5 291.8 240 291.8 DL 251 291.8 -245.5 291.8 DL 256.5 291.8 251 291.8 DL 262 291.8 256.5 291.8 DL 267.5 -291.8 262 291.8 DL 273 291.8 267.5 291.8 DL 278.5 291.8 273 291.8 DL 284 -291.8 278.5 291.8 DL 289.5 291.8 284 291.8 DL 295 291.8 289.5 291.8 DL -300.5 291.8 295 291.8 DL 306 291.8 300.5 291.8 DL 311.5 291.8 306 291.8 -DL 317 291.8 311.5 291.8 DL 322.5 291.8 317 291.8 DL 328 291.8 322.5 -291.8 DL 333.5 291.8 328 291.8 DL 339 291.8 333.5 291.8 DL 344.5 291.8 -339 291.8 DL 350 291.8 344.5 291.8 DL 355.5 291.8 350 291.8 DL 361 291.8 -355.5 291.8 DL 366.5 291.8 361 291.8 DL 372 291.8 366.5 291.8 DL 377.5 -291.8 372 291.8 DL 383 291.8 377.5 291.8 DL 388.5 291.8 383 291.8 DL 394 -291.8 388.5 291.8 DL 399.5 291.8 394 291.8 DL 405 291.8 399.5 291.8 DL -410.5 291.8 405 291.8 DL 416 291.8 410.5 291.8 DL 421.5 291.8 416 291.8 -DL 427 291.8 421.5 291.8 DL 432.5 291.8 427 291.8 DL 438 291.8 432.5 -291.8 DL 443.5 291.8 438 291.8 DL 449 291.8 443.5 291.8 DL 454.5 291.8 -449 291.8 DL 460 291.8 454.5 291.8 DL 465.5 291.8 460 291.8 DL 471 291.8 -465.5 291.8 DL 476.5 291.8 471 291.8 DL 482 291.8 476.5 291.8 DL 487.5 -291.8 482 291.8 DL 493 291.8 487.5 291.8 DL 498.5 291.8 493 291.8 DL 504 -291.8 498.5 291.8 DL 3(8.1.1. Functions)72 322.1 R(Needed f)3 E -(or a User)-.3 E(-De\214ned T)-.444 E(ype)-.888 E F1 3.097(Au)108 339.2 -S(ser)-3.097 E .347(-de\214ned type must al)-.22 F -.11(wa)-.11 G .347 -(ys ha).11 F -.165(ve)-.22 G F3(input)3.262 E F1(and)3.096 E F3(output) -3.096 E F1 3.096(functions. These)3.096 F .346(functions deter)3.096 F -(-)-.22 E 1.115(mine ho)108 352.4 R 3.865(wt)-.275 G 1.116(he type appe\ -ars in strings \(for input by the user and output to the user\) and) --3.865 F(ho)108 365.6 Q 2.93(wt)-.275 G .18(he type is or)-2.93 F -.055 -(ga)-.198 G .18(nized in memory).055 F 5.679(.T)-.715 G .179 -(he input function tak)-5.679 F .179(es a null-delimited character)-.11 -F 1.27(string as its input and returns the internal \(in memory\) repre\ -sentation of the type.)108 378.8 R(The)6.77 E .931(output function tak) -108 392 R .93(es the internal representation of the type and returns a \ -null-delimited)-.11 F(character string.)108 405.2 Q .939(Suppose we w) -108 422.3 R .939(ant to de\214ne a)-.11 F F4(complex)3.69 E F1 .94 -(type which represents comple)3.69 F 3.69(xn)-.165 G .94(umbers. Natu-) --3.69 F(rally)108 435.5 Q 2.75(,w)-.715 G 2.75(ec)-2.75 G -(hoose to represent a comple)-2.75 E 2.75(xi)-.165 G 2.75(nm)-2.75 G -(emory as the follo)-2.75 E(wing C structure:)-.275 E/F6 10/Courier@0 SF -(typedef struct Complex {)148 460.7 Q 30(double x;)172 472.9 R 30 -(double y;)172 485.1 R 6(}C)148 497.3 S(omplex;)-6 E F1 -(and a string of the form)108 523.5 Q F4(\(x,y\))2.75 E F1(as the e)2.75 -E(xternal string representation.)-.165 E 1.12(These functions are usual\ -ly not hard to write, especially the output function.)108 540.6 R(Ho) -6.62 E(we)-.275 E -.165(ve)-.275 G -.44(r,).165 G -(there are a number of points to remember)108 553.8 Q(.)-.605 E 13.75 -(\(1\) When)113.5 570.9 R 2.47(de\214ning your e)5.22 F 2.47 -(xternal \(string\) representation, remember that you must)-.165 F --2.365 -.275(ev e)142.826 584.1 T .113(ntually write a complete and rob) -.275 F .113(ust parser for that representation as your input)-.22 F -(function!)142.826 597.3 Q F6(Complex *)182.826 622.5 Q -(complex_in\(char *str\))182.826 634.7 Q({)182.826 646.9 Q(double x, y;) -206.826 659.1 Q(Complex *result;)206.826 671.3 Q -(if \(sscanf\(str, " \( %lf , %lf \)", &x, &y\) != 2\) {)206.826 695.7 Q -(elog\(WARN, "complex_in: error in parsing)230.826 707.9 Q(return NULL;) -230.826 720.1 Q/F7 11/Times-Bold@0 SF(33)282.5 756 Q EP -%%Page: 34 34 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(})206.826 96.2 Q -(result = \(Complex *\)palloc\(sizeof\(Complex\)\);)206.826 108.4 Q -(result->x = x;)206.826 120.6 Q(result->y = y;)206.826 132.8 Q -(return \(result\);)206.826 145 Q(})182.826 157.2 Q/F1 11/Times-Roman@0 -SF(The output function can simply be:)142.826 183.4 Q F0(char *)182.826 -208.6 Q(complex_out\(Complex *complex\))182.826 220.8 Q({)182.826 233 Q -(char *result;)206.826 245.2 Q(if \(complex == NULL\))206.826 269.6 Q -(return\(NULL\);)230.826 281.8 Q(result = \(char *\) palloc\(60\);) -206.826 306.2 Q(sprintf\(result, "\(%g,%g\)", complex->x, complex->y\);) -206.826 318.4 Q(return\(result\);)206.826 330.6 Q(})182.826 342.8 Q F1 -13.75(\(2\) Y)113.5 372.9 R .752(ou should try to mak)-1.21 F 3.502(et) --.11 G .752(he input and output functions in)-3.502 F -.165(ve)-.44 G -.752(rses of each other).165 F 6.252(.I)-.605 G(f)-6.252 E .181 -(you do not, you will ha)142.826 386.1 R .511 -.165(ve s)-.22 H -2.365 --.275(ev e).165 H .18(re problems when you need to dump your data into) -.275 F 3.169<618c>142.826 399.3 S .419 -(le and then read it back in \(say)-3.169 F 3.17(,i)-.715 G .42 -(nto someone else')-3.17 F 3.17(sd)-.605 G .42(atabase on another com-) --3.17 F 3.672(puter\). This)142.826 412.5 R .922 -(is a particularly common problem when \215oating-point numbers are) -3.672 F(in)142.826 425.7 Q -.22(vo)-.44 G(lv).22 E(ed.)-.165 E 3.371 --.88(To d)108 442.8 T 1.612(e\214ne the).88 F/F2 11/Courier@0 SF -(complex)4.362 E F1 1.612(type, we need to create the tw)4.362 F 4.362 -(ou)-.11 G(ser)-4.362 E 1.612(-de\214ned functions)-.22 F F2(com-)4.362 -E(plex_in)108 456 Q F1(and)2.75 E F2(complex_out)2.75 E F1 -(before creating the type:)2.75 E F0 -(CREATE FUNCTION complex_in\(opaque\))148 481.2 Q(RETURNS complex)166 -493.4 Q(AS '/usr/local/postgres95/tutorial/obj/complex.so')166 505.6 Q -(LANGUAGE 'c';)166 517.8 Q(CREATE FUNCTION complex_out\(opaque\))148 -542.2 Q(RETURNS opaque)166 554.4 Q -(AS '/usr/local/postgres95/tutorial/obj/complex.so')166 566.6 Q -(LANGUAGE 'c';)166 578.8 Q(CREATE TYPE complex \()148 603.2 Q -(internallength = 16,)166 615.4 Q(input = complex_in,)166 627.6 Q -(output = complex_out)166 639.8 Q(\);)148 652 Q F1 .371 -(As discussed earlier)108 682.1 R(,)-.44 E/F3 10/Times-Roman@0 SF -(POSTGRES)3.121 E F1 .371(fully supports arrays of base types.)3.121 F -(Additionally)5.87 E(,)-.715 E F3(POST)3.12 E(-)-.92 E(GRES)108 695.3 Q -F1 .32(supports arrays of user)3.069 F .32(-de\214ned types as well.) --.22 F .32(When you de\214ne a type,)5.82 F F3(POSTGRES)3.07 E F1 1.231 -(automatically pro)108 708.5 R 1.23 -(vides support for arrays of that type.)-.165 F -.165(Fo)6.73 G 3.98(rh) -.165 G 1.23(istorical reasons, the array)-3.98 F 3.301 -(type has the same name as the user)108 721.7 R 3.301 -(-de\214ned type with the underscore character)-.22 F F2(_)6.051 E/F4 11 -/Times-Bold@0 SF(34)282.5 756 Q EP -%%Page: 35 35 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF(prepended.)108 97.2 Q 1.849 -(Composite types do not need an)108 114.3 R 4.599(yf)-.165 G 1.849 -(unction de\214ned on them, since the system already)-4.599 F -(understands what the)108 127.5 Q 2.75(yl)-.165 G(ook lik)-2.75 E 2.75 -(ei)-.11 G(nside.)-2.75 E/F1 12/Times-Bold@0 SF 3(8.1.2. Lar)72 153.7 R -(ge Objects)-.12 E F0 .758(The types discussed to this point are all \ -\231small\232 objects \212 that is, the)108 170.8 R 3.508(ya)-.165 G -.758(re smaller than)-3.508 F(8KB)108 186.2 Q/F2 8/Times-Roman@0 SF(7) --4.4 I F0 .304(in size.)3.054 4.4 N .304(If you require a lar)5.804 F -.305(ger type for something lik)-.198 F 3.055(ead)-.11 G .305 -(ocument retrie)-3.055 F -.275(va)-.275 G 3.055(ls).275 G(ystem)-3.055 E -(or for storing bitmaps, you will need to use the)108 199.4 Q/F3 10 -/Times-Roman@0 SF(POSTGRES)2.75 E/F4 11/Times-Italic@0 SF(lar)2.75 E .22 --.11(ge o)-.407 H(bject).11 E F0(interf)2.75 E(ace.)-.11 E .32 LW 76 -667.4 72 667.4 DL 80 667.4 76 667.4 DL 84 667.4 80 667.4 DL 88 667.4 84 -667.4 DL 92 667.4 88 667.4 DL 96 667.4 92 667.4 DL 100 667.4 96 667.4 DL -104 667.4 100 667.4 DL 108 667.4 104 667.4 DL 112 667.4 108 667.4 DL 116 -667.4 112 667.4 DL 120 667.4 116 667.4 DL 124 667.4 120 667.4 DL 128 -667.4 124 667.4 DL 132 667.4 128 667.4 DL 136 667.4 132 667.4 DL 140 -667.4 136 667.4 DL 144 667.4 140 667.4 DL 148 667.4 144 667.4 DL 152 -667.4 148 667.4 DL 156 667.4 152 667.4 DL 160 667.4 156 667.4 DL 164 -667.4 160 667.4 DL 168 667.4 164 667.4 DL 172 667.4 168 667.4 DL 176 -667.4 172 667.4 DL 180 667.4 176 667.4 DL 184 667.4 180 667.4 DL 188 -667.4 184 667.4 DL 192 667.4 188 667.4 DL 196 667.4 192 667.4 DL 200 -667.4 196 667.4 DL 204 667.4 200 667.4 DL 208 667.4 204 667.4 DL 212 -667.4 208 667.4 DL 216 667.4 212 667.4 DL/F5 5/Times-Roman@0 SF(7)93.6 -677.8 Q F2 2.338(8*1)2.338 3.2 O .338(024 == 8192 bytes.)-2.338 F .338 -(In f)4.338 F .338 -(act, the type must be considerably smaller than 8192 bytes, since the) --.08 F/F6 7/Times-Roman@0 SF(POSTGRES)2.338 E F2 .338(tuple and page) -2.338 F -.12(ove)72 690.6 S -(rhead must also \214t into this 8KB limitation.).12 E(The actual v)4 E -(alue that \214ts depends on the machine architecture.)-.2 E/F7 11 -/Times-Bold@0 SF(35)282.5 756 Q EP -%%Page: 36 36 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(9. EXTENDING)72 165.4 R(SQL: OPERA) -4.75 E -.342(TO)-1.805 G(RS).342 E 77.5 178.6 72 178.6 DL 80.5 178.6 75 -178.6 DL 86 178.6 80.5 178.6 DL 91.5 178.6 86 178.6 DL 97 178.6 91.5 -178.6 DL 102.5 178.6 97 178.6 DL 108 178.6 102.5 178.6 DL 113.5 178.6 -108 178.6 DL 119 178.6 113.5 178.6 DL 124.5 178.6 119 178.6 DL 130 178.6 -124.5 178.6 DL 135.5 178.6 130 178.6 DL 141 178.6 135.5 178.6 DL 146.5 -178.6 141 178.6 DL 152 178.6 146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 -178.6 157.5 178.6 DL 168.5 178.6 163 178.6 DL 174 178.6 168.5 178.6 DL -179.5 178.6 174 178.6 DL 185 178.6 179.5 178.6 DL 190.5 178.6 185 178.6 -DL 196 178.6 190.5 178.6 DL 201.5 178.6 196 178.6 DL 207 178.6 201.5 -178.6 DL 212.5 178.6 207 178.6 DL 218 178.6 212.5 178.6 DL 223.5 178.6 -218 178.6 DL 229 178.6 223.5 178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 -234.5 178.6 DL 245.5 178.6 240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 -178.6 251 178.6 DL 262 178.6 256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 -178.6 267.5 178.6 DL 278.5 178.6 273 178.6 DL 284 178.6 278.5 178.6 DL -289.5 178.6 284 178.6 DL 295 178.6 289.5 178.6 DL 300.5 178.6 295 178.6 -DL 306 178.6 300.5 178.6 DL 311.5 178.6 306 178.6 DL 317 178.6 311.5 -178.6 DL 322.5 178.6 317 178.6 DL 328 178.6 322.5 178.6 DL 333.5 178.6 -328 178.6 DL 339 178.6 333.5 178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 -344.5 178.6 DL 355.5 178.6 350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 -178.6 361 178.6 DL 372 178.6 366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 -178.6 377.5 178.6 DL 388.5 178.6 383 178.6 DL 394 178.6 388.5 178.6 DL -399.5 178.6 394 178.6 DL 405 178.6 399.5 178.6 DL 410.5 178.6 405 178.6 -DL 416 178.6 410.5 178.6 DL 421.5 178.6 416 178.6 DL 427 178.6 421.5 -178.6 DL 432.5 178.6 427 178.6 DL 438 178.6 432.5 178.6 DL 443.5 178.6 -438 178.6 DL 449 178.6 443.5 178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 -454.5 178.6 DL 465.5 178.6 460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 -178.6 471 178.6 DL 482 178.6 476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 -178.6 487.5 178.6 DL 498.5 178.6 493 178.6 DL 504 178.6 498.5 178.6 DL -/F1 10/Times-Roman@0 SF(POSTGRES)108 208.9 Q/F2 11/Times-Roman@0 SF .485 -(supports left unary)3.235 F 3.235(,r)-.715 G .485 -(ight unary and binary operators.)-3.235 F .484(Operators can be)5.984 F -/F3 11/Times-Italic@0 SF -.11(ov)3.234 G(er).11 E(-)-.22 E(loaded)108 -222.1 Q F2 3.116(,o)C 3.117(rr)-3.116 G .367(e-used with dif)-3.117 F -.367(ferent numbers and types of ar)-.275 F 3.117(guments. If)-.198 F -.367(there is an ambigu-)3.117 F .126(ous situation and the system cann\ -ot determine the correct operator to use, it will return an)108 235.3 R -1.232(error and you may ha)108 248.5 R 1.562 -.165(ve t)-.22 H 3.982(ot) -.165 G 1.232 -(ypecast the left and/or right operands to help it understand)-3.982 F -(which operator you meant to use.)108 261.7 Q 2.289 -.88(To c)108 278.8 -T .529(reate an operator for adding tw).88 F 3.279(oc)-.11 G(omple) --3.279 E 3.279(xn)-.165 G .529(umbers can be done as follo)-3.279 F -3.278(ws. First)-.275 F(we)3.278 E .436 -(need to create a function to add the ne)108 292 R 3.186(wt)-.275 G .436 -(ypes. Then, we can create the operator with the)-3.186 F(function.)108 -305.2 Q/F4 10/Courier@0 SF -(CREATE FUNCTION complex_add\(complex, complex\))148 330.4 Q -(RETURNS complex)166 342.6 Q(AS '$PWD/obj/complex.so')166 354.8 Q -(LANGUAGE 'c';)166 367 Q(CREATE OPERATOR + \()148 403.6 Q -(leftarg = complex,)166 415.8 Q(rightarg = complex,)166 428 Q -(procedure = complex_add,)166 440.2 Q(commutator = +)166 452.4 Q(\);)148 -464.6 Q F2 -.88(We)108 506.9 S -1.815 -.55('v e).88 H(sho)4.31 E 1.01 -(wn ho)-.275 F 3.76(wt)-.275 G 3.76(oc)-3.76 G 1.01 -(reate a binary operator here. T)-3.76 F 3.759(oc)-.88 G 1.009 -(reate unary operators, just omit)-3.759 F(one of)108 520.1 Q/F5 11 -/Courier@0 SF(leftarg)2.75 E F2(\(for left unary\) or)2.75 E F5 -(rightarg)2.75 E F2(\(for right unary\).)2.75 E 1.823(If we gi)108 537.2 -R 2.153 -.165(ve t)-.275 H 1.824(he system enough type information, it \ -can automatically \214gure out which).165 F(operators to use.)108 550.4 -Q F4(SELECT \(a + b\) AS c FROM test_complex;)148 575.6 Q .4 LW 248 -606.1 148 606.1 DL(c)153 615.8 Q 248 620.3 148 620.3 DL(\(5.2,6.05\))153 -630 Q 248 634.5 148 634.5 DL(\(133.42,144.95\))153 644.2 Q 248 648.7 148 -648.7 DL 248 606.1 248 648.7 DL 148 606.1 148 648.7 DL/F6 11 -/Times-Bold@0 SF(36)282.5 756 Q EP -%%Page: 37 37 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(10. EXTENDING)72 165.4 R(SQL: A)4.75 -E(GGREGA)-1.045 E(TES)-1.805 E 77.5 178.6 72 178.6 DL 80.5 178.6 75 -178.6 DL 86 178.6 80.5 178.6 DL 91.5 178.6 86 178.6 DL 97 178.6 91.5 -178.6 DL 102.5 178.6 97 178.6 DL 108 178.6 102.5 178.6 DL 113.5 178.6 -108 178.6 DL 119 178.6 113.5 178.6 DL 124.5 178.6 119 178.6 DL 130 178.6 -124.5 178.6 DL 135.5 178.6 130 178.6 DL 141 178.6 135.5 178.6 DL 146.5 -178.6 141 178.6 DL 152 178.6 146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 -178.6 157.5 178.6 DL 168.5 178.6 163 178.6 DL 174 178.6 168.5 178.6 DL -179.5 178.6 174 178.6 DL 185 178.6 179.5 178.6 DL 190.5 178.6 185 178.6 -DL 196 178.6 190.5 178.6 DL 201.5 178.6 196 178.6 DL 207 178.6 201.5 -178.6 DL 212.5 178.6 207 178.6 DL 218 178.6 212.5 178.6 DL 223.5 178.6 -218 178.6 DL 229 178.6 223.5 178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 -234.5 178.6 DL 245.5 178.6 240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 -178.6 251 178.6 DL 262 178.6 256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 -178.6 267.5 178.6 DL 278.5 178.6 273 178.6 DL 284 178.6 278.5 178.6 DL -289.5 178.6 284 178.6 DL 295 178.6 289.5 178.6 DL 300.5 178.6 295 178.6 -DL 306 178.6 300.5 178.6 DL 311.5 178.6 306 178.6 DL 317 178.6 311.5 -178.6 DL 322.5 178.6 317 178.6 DL 328 178.6 322.5 178.6 DL 333.5 178.6 -328 178.6 DL 339 178.6 333.5 178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 -344.5 178.6 DL 355.5 178.6 350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 -178.6 361 178.6 DL 372 178.6 366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 -178.6 377.5 178.6 DL 388.5 178.6 383 178.6 DL 394 178.6 388.5 178.6 DL -399.5 178.6 394 178.6 DL 405 178.6 399.5 178.6 DL 410.5 178.6 405 178.6 -DL 416 178.6 410.5 178.6 DL 421.5 178.6 416 178.6 DL 427 178.6 421.5 -178.6 DL 432.5 178.6 427 178.6 DL 438 178.6 432.5 178.6 DL 443.5 178.6 -438 178.6 DL 449 178.6 443.5 178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 -454.5 178.6 DL 465.5 178.6 460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 -178.6 471 178.6 DL 482 178.6 476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 -178.6 487.5 178.6 DL 498.5 178.6 493 178.6 DL 504 178.6 498.5 178.6 DL -/F1 11/Times-Roman@0 SF(Aggre)108 208.9 Q -.055(ga)-.165 G .241(tes in) -.055 F/F2 10/Times-Roman@0 SF(POSTGRES)2.991 E F1 .241(are e)2.991 F -.241(xpressed in terms of)-.165 F/F3 11/Times-Italic@0 SF .241(state tr) -2.991 F .241(ansition functions)-.165 F F1 5.741(.T)C .24(hat is, an) --5.741 F(aggre)108 222.1 Q -.055(ga)-.165 G .924 -(te can be de\214ned in terms of).055 F F3(state)3.675 E F1 .925 -(that is modi\214ed whene)3.675 F -.165(ve)-.275 G 3.675(ra).165 G 3.675 -(ni)-3.675 G .925(nstance is pro-)-3.675 F 3.74(cessed. Some)108 235.3 R -.989(state functions look at a particular v)3.74 F .989 -(alue in the instance when computing)-.275 F 1.59(the ne)108 248.5 R -4.34(ws)-.275 G 1.59(tate \()-4.34 F F3(sfunc1)A F1 1.59(in the)4.34 F -/F4 11/Times-Bold@0 SF(cr)4.34 E 1.59(eate aggr)-.198 F(egate)-.198 E F1 -1.59(syntax\) while others only k)4.34 F 1.591(eep track of)-.11 F -(their o)108 261.7 Q(wn internal state \()-.275 E F3(sfunc2)A F1(\).)A -.085(If we de\214ne an aggre)108 278.8 R -.055(ga)-.165 G .084 -(te that uses only).055 F/F5 11/Courier@0 SF(sfunc1)2.834 E F1 2.834(,w) -C 2.834(ed)-2.834 G .084(e\214ne an aggre)-2.834 F -.055(ga)-.165 G .084 -(te that computes a).055 F .488(running function of the attrib)108 292 R -.488(ute v)-.22 F .488(alues from each instance.)-.275 F .488 -(\231Sum\232 is an e)5.988 F .488(xample of this)-.165 F .074 -(kind of aggre)108 305.2 R -.055(ga)-.165 G 2.824(te. \231Sum\232).055 F -.073(starts at zero and al)2.824 F -.11(wa)-.11 G .073 -(ys adds the current instance').11 F 2.823(sv)-.605 G .073(alue to its) --3.098 F .19(running total.)108 318.4 R 1.95 -.88(We w)5.69 H .19 -(ill use the).88 F F5(int4pl)2.94 E F1 .19(that is b)2.94 F .191 -(uilt into)-.22 F F2(POSTGRES)2.941 E F1 .191(to perform this addi-) -2.941 F(tion.)108 331.6 Q/F6 10/Courier@0 SF -(CREATE AGGREGATE complex_sum \()148 356.8 Q(sfunc1 = complex_add,)178 -369 Q(basetype = complex,)178 381.2 Q(stype1 = complex,)178 393.4 Q -(initcond1 = '\(0,0\)')178 405.6 Q(\);)160 417.8 Q -(SELECT complex_sum\(a\) FROM test_complex;)148 454.4 Q .4 LW 224 484.9 -148 484.9 DL(complex_sum)153 494.6 Q 224 499.1 148 499.1 DL(\(34,53.9\)) -153 508.8 Q 224 513.3 148 513.3 DL 224 484.9 224 513.3 DL 148 484.9 148 -513.3 DL F1 .184(If we de\214ne only)108 535 R F5(sfunc2)2.934 E F1 -2.934(,w)C 2.934(ea)-2.934 G .184(re specifying an aggre)-2.934 F -.055 -(ga)-.165 G .184(te that computes a running func-).055 F .998 -(tion that is independent of the attrib)108 548.2 R .999(ute v)-.22 F -.999(alues from each instance.)-.275 F .999(\231Count\232 is the most) -6.499 F 1.313(common e)108 561.4 R 1.313(xample of this kind of aggre) --.165 F -.055(ga)-.165 G 4.063(te. \231Count\232).055 F 1.312 -(starts at zero and adds one to its)4.063 F 1.665 -(running total for each instance, ignoring the instance v)108 574.6 R -4.415(alue. Here,)-.275 F 1.666(we use the b)4.415 F(uilt-in)-.22 E F5 -(int4inc)108 587.8 Q F1 .631(routine to do the w)3.381 F .631 -(ork for us.)-.11 F .63(This routine increments \(adds one to\) its ar) -6.131 F(gu-)-.198 E(ment.)108 601 Q F6 -(CREATE AGGREGATE my_count \(sfunc2 = int4inc, -- add one)148 626.2 Q -(basetype = int4, stype2 = int4,)322 638.4 Q(initcond2 = '0'\))322 650.6 -Q(SELECT my_count\(*\) as emp_count from EMP;)148 675 Q F4(37)282.5 756 -Q EP -%%Page: 38 38 -%%BeginPageSetup -BP -%%EndPageSetup -.4 LW 212 88.5 148 88.5 DL/F0 10/Courier@0 SF(emp_count)153 98.2 Q 212 -102.7 148 102.7 DL(5)153 112.4 Q 212 116.9 148 116.9 DL 212 88.5 212 -116.9 DL 148 88.5 148 116.9 DL/F1 11/Times-Roman@0 SF -1.804 -.88 -(\231A v)108 138.6 T .095(erage\232 is an e).715 F .095 -(xample of an aggre)-.165 F -.055(ga)-.165 G .096 -(te that requires both a function to compute the run-).055 F .987 -(ning sum and a function to compute the running count.)108 151.8 R .986 -(When all of the instances ha)6.486 F -.165(ve)-.22 G .405 -(been processed, the \214nal answer for the aggre)108 165 R -.055(ga) --.165 G .405(te is the running sum di).055 F .405(vided by the run-) --.275 F .923(ning count.)108 178.2 R 2.683 -.88(We u)6.423 H .923 -(se the).88 F/F2 11/Courier@0 SF(int4pl)3.673 E F1(and)3.673 E F2 -(int4inc)3.673 E F1 .922(routines we used before as well as the)3.673 F -/F3 10/Times-Roman@0 SF(POSTGRES)108 191.4 Q F1(inte)2.855 E .105 -(ger di)-.165 F .105(vision routine,)-.275 F F2(int4div)2.855 E F1 2.855 -(,t)C 2.855(oc)-2.855 G .105(ompute the di)-2.855 F .106 -(vision of the sum by the)-.275 F(count.)108 204.6 Q F0 -(CREATE AGGREGATE my_average \(sfunc1 = int4pl, --)148 229.8 Q(sum)12 E -(basetype = int4,)334 242 Q(stype1 = int4,)334 254.2 Q -(sfunc2 = int4inc, -- count)334 266.4 Q(stype2 = int4,)334 278.6 Q -(finalfunc = int4div, -- division)334 290.8 Q(initcond1 = '0',)334 303 Q -(initcond2 = '0'\))334 315.2 Q -(SELECT my_average\(salary\) as emp_average FROM EMP;)148 339.6 Q 224 -370.1 148 370.1 DL(emp_average)153 379.8 Q 224 384.3 148 384.3 DL(1640) -153 394 Q 224 398.5 148 398.5 DL 224 370.1 224 398.5 DL 148 370.1 148 -398.5 DL/F4 11/Times-Bold@0 SF(38)282.5 756 Q EP -%%Page: 39 39 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(11. INTERF)72 165.4 R -1.045(AC)-1.71 -G(ING EXTENSIONS T)1.045 E 4.75(OI)-.342 G(NDICES)-4.75 E 77.5 178.6 72 -178.6 DL 80.5 178.6 75 178.6 DL 86 178.6 80.5 178.6 DL 91.5 178.6 86 -178.6 DL 97 178.6 91.5 178.6 DL 102.5 178.6 97 178.6 DL 108 178.6 102.5 -178.6 DL 113.5 178.6 108 178.6 DL 119 178.6 113.5 178.6 DL 124.5 178.6 -119 178.6 DL 130 178.6 124.5 178.6 DL 135.5 178.6 130 178.6 DL 141 178.6 -135.5 178.6 DL 146.5 178.6 141 178.6 DL 152 178.6 146.5 178.6 DL 157.5 -178.6 152 178.6 DL 163 178.6 157.5 178.6 DL 168.5 178.6 163 178.6 DL 174 -178.6 168.5 178.6 DL 179.5 178.6 174 178.6 DL 185 178.6 179.5 178.6 DL -190.5 178.6 185 178.6 DL 196 178.6 190.5 178.6 DL 201.5 178.6 196 178.6 -DL 207 178.6 201.5 178.6 DL 212.5 178.6 207 178.6 DL 218 178.6 212.5 -178.6 DL 223.5 178.6 218 178.6 DL 229 178.6 223.5 178.6 DL 234.5 178.6 -229 178.6 DL 240 178.6 234.5 178.6 DL 245.5 178.6 240 178.6 DL 251 178.6 -245.5 178.6 DL 256.5 178.6 251 178.6 DL 262 178.6 256.5 178.6 DL 267.5 -178.6 262 178.6 DL 273 178.6 267.5 178.6 DL 278.5 178.6 273 178.6 DL 284 -178.6 278.5 178.6 DL 289.5 178.6 284 178.6 DL 295 178.6 289.5 178.6 DL -300.5 178.6 295 178.6 DL 306 178.6 300.5 178.6 DL 311.5 178.6 306 178.6 -DL 317 178.6 311.5 178.6 DL 322.5 178.6 317 178.6 DL 328 178.6 322.5 -178.6 DL 333.5 178.6 328 178.6 DL 339 178.6 333.5 178.6 DL 344.5 178.6 -339 178.6 DL 350 178.6 344.5 178.6 DL 355.5 178.6 350 178.6 DL 361 178.6 -355.5 178.6 DL 366.5 178.6 361 178.6 DL 372 178.6 366.5 178.6 DL 377.5 -178.6 372 178.6 DL 383 178.6 377.5 178.6 DL 388.5 178.6 383 178.6 DL 394 -178.6 388.5 178.6 DL 399.5 178.6 394 178.6 DL 405 178.6 399.5 178.6 DL -410.5 178.6 405 178.6 DL 416 178.6 410.5 178.6 DL 421.5 178.6 416 178.6 -DL 427 178.6 421.5 178.6 DL 432.5 178.6 427 178.6 DL 438 178.6 432.5 -178.6 DL 443.5 178.6 438 178.6 DL 449 178.6 443.5 178.6 DL 454.5 178.6 -449 178.6 DL 460 178.6 454.5 178.6 DL 465.5 178.6 460 178.6 DL 471 178.6 -465.5 178.6 DL 476.5 178.6 471 178.6 DL 482 178.6 476.5 178.6 DL 487.5 -178.6 482 178.6 DL 493 178.6 487.5 178.6 DL 498.5 178.6 493 178.6 DL 504 -178.6 498.5 178.6 DL/F1 11/Times-Roman@0 SF .125 -(The procedures described thus f)108 208.9 R .125 -(ar let you de\214ne a ne)-.11 F 2.875(wt)-.275 G .124(ype, ne)-2.875 F -2.874(wf)-.275 G .124(unctions and ne)-2.874 F 2.874(wo)-.275 G(per) --2.874 E(-)-.22 E 3.069(ators. Ho)108 222.1 R(we)-.275 E -.165(ve)-.275 -G 1.199 -.44(r, w).165 H 3.069(ec).44 G .32 -(annot yet de\214ne a secondary inde)-3.069 F 3.07(x\()-.165 G .32 -(such as a B-tree, R-tree or hash)-3.07 F(access method\) o)108 235.3 Q --.165(ve)-.165 G 2.75(ran).165 G .55 -.275(ew t)-2.75 H -(ype or its operators.).275 E .181(Look back at Figure 3.)108 252.4 R -.181(The right half sho)5.681 F .18 -(ws the catalogs that we must modify in order to)-.275 F(tell)108 265.6 -Q/F2 10/Times-Roman@0 SF(POSTGRES)4.911 E F1(ho)4.911 E 4.911(wt)-.275 G -4.911(ou)-4.911 G 2.161(se a user)-4.911 F 2.161 -(-de\214ned type and/or user)-.22 F 2.162(-de\214ned operators with an) --.22 F(inde)108 278.8 Q 3.874(x\()-.165 G(i.e.,)-3.874 E/F3 11/Courier@0 -SF(pg_am)3.874 E F1(,)A F3(pg_amop)3.874 E F1(,)A F3(pg_amproc)3.873 E -F1(and)3.873 E F3(pg_opclass)3.873 E F1 3.873(\). Unfortunately)B 3.873 -(,t)-.715 G(here)-3.873 E 1.611(is no simple command to do this.)108 292 -R 3.372 -.88(We w)7.111 H 1.612(ill demonstrate ho).88 F 4.362(wt)-.275 -G 4.362(om)-4.362 G 1.612(odify these catalogs)-4.362 F .78 -(through a running e)108 305.2 R .78(xample: a ne)-.165 F 3.53(wo)-.275 -G .779(perator class for the B-tree access method that sorts)-3.53 F -(inte)108 318.4 Q(gers in ascending absolute v)-.165 E(alue order)-.275 -E(.)-.605 E(The)108 335.5 Q F3(pg_am)3.956 E F1 1.206 -(class contains one instance for e)3.956 F -.165(ve)-.275 G 1.206 -(ry user).165 F 1.206(-de\214ned access method.)-.22 F(Support)6.706 E -1.667(for the heap access method is b)108 348.7 R 1.667(uilt into)-.22 F -F2(POSTGRES)4.417 E F1 4.417(,b)C 1.667(ut e)-4.637 F -.165(ve)-.275 G -1.667(ry other access method is).165 F(described here.)108 361.9 Q -(The schema is)5.5 E 496.228 379.65 115.771 379.65 DL F3(amname)121.271 -390.1 Q F1(name of the access method)56.1 E 496.228 394.85 115.771 -394.85 DL F3(amowner)121.271 405.3 Q F1(object id of the o)49.5 E(wner') --.275 E 2.75(si)-.605 G(nstance in pg_user)-2.75 E 496.228 410.05 -115.771 410.05 DL F3(amkind)121.271 420.5 Q F1(not used at present, b) -56.1 E(ut set to 'o' as a place holder)-.22 E 496.228 425.25 115.771 -425.25 DL F3(amstrategies)121.271 435.7 Q F1(number of strate)16.5 E -(gies for this access method \(see belo)-.165 E(w\))-.275 E 496.228 -440.45 115.771 440.45 DL F3(amsupport)121.271 450.9 Q F1 -(number of support routines for this access method \(see belo)36.3 E -(w\))-.275 E 496.228 455.65 115.771 455.65 DL F3(amgettuple)121.271 -466.1 Q(aminsert)121.271 479.3 Q(...)121.271 492.5 Q F1 4.257 -(procedure identi\214ers for interf)216.971 466.1 R 4.257 -(ace routines to the access)-.11 F 5.101(method. F)216.971 479.3 R 2.351 -(or e)-.165 F(xample,)-.165 E F3(regproc)5.101 E F1 2.351 -(ids for opening, closing,)5.101 F -(and getting instances from the access method appear here.)216.971 492.5 -Q 496.228 497.25 115.771 497.25 DL 208.721 379.65 208.721 497.25 DL -496.228 379.65 496.228 497.25 DL 115.771 379.65 115.771 497.25 DL .68 -(The object ID of the instance in)108 518.7 R F3(pg_am)3.431 E F1 .681 -(is used as a foreign k)3.431 F 1.011 -.165(ey i)-.11 H 3.431(nl).165 G -.681(ots of other classes.)-3.431 F -1.21(Yo)108 531.9 S 2.912(ud)1.21 G -(on')-2.912 E 2.912(tn)-.198 G .162(eed to add a ne)-2.912 F 2.911(wi) --.275 G .161(nstance to this class; all you')-2.911 F .161 -(re interested in is the object ID)-.55 F -(of the access method instance you w)108 545.1 Q(ant to e)-.11 E(xtend:) --.165 E/F4 10/Courier@0 SF(SELECT oid FROM pg_am WHERE amname = 'btree') -148 570.3 Q .4 LW 176 587.8 148 587.8 DL(oid)153 597.5 Q 176 602 148 602 -DL(403)153 611.7 Q 176 616.2 148 616.2 DL 176 587.8 176 616.2 DL 148 -587.8 148 616.2 DL F1(The)108 650.9 Q F3(amstrategies)3.445 E F1(attrib) -3.445 E .695(ute e)-.22 F .695 -(xists to standardize comparisons across data types.)-.165 F -.165(Fo) -6.196 G(r).165 E -.165(ex)108 664.1 S 1.527 -(ample, B-trees impose a strict ordering on k).165 F -.165(ey)-.11 G -1.527(s, lesser to greater).165 F 7.026(.S)-.605 G(ince)-7.026 E F2 -(POSTGRES)4.276 E F1(allo)108 677.3 Q 1.144 -(ws the user to de\214ne operators,)-.275 F F2(POSTGRES)3.894 E F1 1.145 -(cannot look at the)3.894 F/F5 11/Times-Bold@0 SF(name)3.895 E F1 1.145 -(of an operator)3.895 F(\(e)108 690.5 Q(g,)-.165 E F3(>)3.713 E F1(or) -3.713 E F3(<)3.713 E F1 3.712(\)a)C .962 -(nd tell what kind of comparison it is.)-3.712 F .962(In f)6.462 F .962 -(act, some access methods don')-.11 F(t)-.198 E 3.648(impose an)108 -703.7 R 6.398(yo)-.165 G 3.648(rdering at all.)-6.398 F -.165(Fo)9.149 G -6.399(re).165 G 3.649(xample, R-trees e)-6.564 F 3.649 -(xpress a rectangle-containment)-.165 F F5(39)282.5 756 Q EP -%%Page: 40 40 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF 1.021 -(relationship, whereas a hashed data structure e)108 97.2 R 1.021 -(xpresses only bitwise similarity based on)-.165 F .039(the v)108 110.4 -R .039(alue of a hash function.)-.275 F/F1 10/Times-Roman@0 SF(POSTGRES) -5.539 E F0 .039(needs some consistent w)2.789 F .039 -(ay of taking a quali\214ca-)-.11 F .049(tion in your query)108 123.6 R -2.799(,l)-.715 G .049 -(ooking at the operator and then deciding if a usable inde)-2.799 F -2.798(xe)-.165 G 2.798(xists. This)-2.963 F .162(implies that)108 136.8 -R F1(POSTGRES)2.912 E F0 .162(needs to kno)2.912 F 1.592 -.715(w, f) --.275 H .162(or e).715 F .162(xample, that the)-.165 F/F2 11/Courier@0 -SF(<=)2.913 E F0(and)2.913 E F2(>)2.913 E F0 .163(operators partition) -2.913 F 3.102(aB)108 150 S(-tree.)-3.102 E F1(POSTGRES)5.852 E F0 .352 -(uses strate)3.102 F .352(gies to e)-.165 F .351 -(xpress these relationships between operators and)-.165 F(the w)108 -163.2 Q(ay the)-.11 E 2.75(yc)-.165 G(an be used to scan indices.)-2.75 -E .687(De\214ning a ne)108 180.3 R 3.437(ws)-.275 G .687(et of strate) --3.437 F .687(gies is be)-.165 F .687 -(yond the scope of this discussion, b)-.165 F .688(ut we')-.22 F .688 -(ll e)-.11 F(xplain)-.165 E(ho)108 193.5 Q 3.122(wB)-.275 G .372 -(-tree strate)-3.122 F .372(gies w)-.165 F .372(ork because you')-.11 F -.372(ll need to kno)-.11 F 3.122(wt)-.275 G .372(hat to add a ne)-3.122 -F 3.121(wo)-.275 G .371(perator class.)-3.121 F .099(In the)108 206.7 R -F2(pg_am)2.849 E F0 .099(class, the)2.849 F F2(amstrategies)2.849 E F0 -(attrib)2.849 E .099(ute is the number of strate)-.22 F .099 -(gies de\214ned for)-.165 F(this access method.)108 219.9 Q -.165(Fo)5.5 -G 2.75(rB).165 G(-trees, this number is 5.)-2.75 E(These strate)5.5 E -(gies correspond to)-.165 E .44 LW 367.858 237.65 244.141 237.65 DL -(less than)249.641 248.1 Q(1)69.025 E 367.858 252.85 244.141 252.85 DL -(less than or equal)249.641 263.3 Q(2)30.536 E 367.858 268.05 244.141 -268.05 DL 80.641(equal 3)249.641 278.5 R 367.858 283.25 244.141 283.25 -DL(greater than or equal)249.641 293.7 Q(4)16.5 E 367.858 298.45 244.141 -298.45 DL(greater than)249.641 308.9 Q(5)54.989 E 367.858 313.65 244.141 -313.65 DL 367.858 237.65 367.858 313.65 DL 244.141 237.65 244.141 313.65 -DL 348.608 237.65 348.608 313.65 DL .255(The idea is that you')108 335.1 -R .254(ll need to add procedures corresponding to the comparisons abo) --.11 F .584 -.165(ve t)-.165 H(o).165 E(the)108 348.3 Q F2(pg_amop)3.068 -E F0 .318(relation \(see belo)3.068 F 3.068(w\). The)-.275 F .318 -(access method code can use these strate)3.068 F .319(gy num-)-.165 F -.11(bers, re)108 361.5 R -.055(ga)-.165 G .11 -(rdless of data type, to \214gure out ho).055 F 2.86(wt)-.275 G 2.86(op) --2.86 G .11(artition the B-tree, compute selecti)-2.86 F(vity)-.275 E(,) --.715 E .898(and so on.)108 374.7 R(Don')6.399 E 3.649(tw)-.198 G .899 -(orry about the details of adding procedures yet; just understand that) --3.759 F .48(there must be a set of these procedures for)108 387.9 R F2 -(int2)3.23 E F0(,)A F2(int4)3.23 E F0(,)A F2(oid)3.23 E F0 3.23(,a)C .48 -(nd e)-3.23 F -.165(ve)-.275 G .479(ry other data type).165 F -(on which a B-tree can operate.)108 401.1 Q .803(Sometimes, strate)108 -418.2 R .803(gies aren')-.165 F 3.554(te)-.198 G .804 -(nough information for the system to \214gure out ho)-3.554 F 3.554(wt) --.275 G 3.554(ou)-3.554 G(se)-3.554 E 1.848(an inde)108 431.4 R 4.598 -(x. Some)-.165 F 1.848 -(access methods require other support routines in order to w)4.598 F -4.598(ork. F)-.11 F(or)-.165 E -.165(ex)108 444.6 S 1.976 -(ample, the B-tree access method must be able to compare tw).165 F 4.726 -(ok)-.11 G -.165(ey)-4.836 G 4.726(sa).165 G 1.976(nd determine)-4.726 F -.745(whether one is greater than, equal to, or less than the other)108 -457.8 R 6.245(.S)-.605 G(imilarly)-6.245 E 3.495(,t)-.715 G .745 -(he R-tree access)-3.495 F 1.685(method must be able to compute interse\ -ctions, unions, and sizes of rectangles.)108 471 R(These)7.185 E .884(o\ -perations do not correspond to user quali\214cations in SQL queries; th\ -e)108 484.2 R 3.633(ya)-.165 G .883(re administra-)-3.633 F(ti)108 497.4 -Q .33 -.165(ve r)-.275 H(outines used by the access methods, internally) -.165 E(.)-.715 E 1.971(In order to manage di)108 514.5 R -.165(ve)-.275 -G 1.972(rse support routines consistently across all).165 F F1(POSTGRES) -4.722 E F0(access)4.722 E(methods,)108 527.7 Q F2(pg_am)4.65 E F0 1.9 -(includes an attrib)4.65 F 1.9(ute called)-.22 F F2(amsupport)4.65 E F0 -7.4(.T)C 1.899(his attrib)-7.4 F 1.899(ute records the)-.22 F .136 -(number of support routines used by an access method.)108 540.9 R -.165 -(Fo)5.636 G 2.887(rB).165 G .137(-trees, this number is one \212)-2.887 -F .173(the routine to tak)108 554.1 R 2.923(et)-.11 G .393 -.11(wo ke) --2.923 H .173(ys and return)-.055 F/F3 11/Symbol SF(-)2.923 E F0 .173 -(1, 0, or).916 F F3(+)2.923 E F0 .172 -(1, depending on whether the \214rst k).916 F .502 -.165(ey i)-.11 H(s) -.165 E(less than, equal to, or greater than the second.)108 569.5 Q/F4 8 -/Times-Roman@0 SF(8)-4.4 I F0(The)108 586.6 Q F2(amstrategies)4.312 E F0 -1.562(entry in)4.312 F F2(pg_am)4.312 E F0 1.562(is just the)4.312 F/F5 -11/Times-Italic@0 SF(number)4.312 E F0 1.562(of strate)4.312 F 1.562 -(gies de\214ned for the)-.165 F 1.852(access method in question.)108 -599.8 R 1.852(The procedures for less than, less equal, and so on don') -7.352 F(t)-.198 E 3.555(appear in)108 613 R F2(pg_am)6.305 E F0 9.055 -(.S)C(imilarly)-9.055 E(,)-.715 E F2(amsupport)6.305 E F0 3.555 -(is just the number of support routines)6.305 F -(required by the access method.)108 626.2 Q -(The actual routines are listed else)5.5 E(where.)-.275 E .974(The ne) -108 643.3 R .974(xt class of interest is)-.165 F F2(pg_opclass.)3.724 E -F0 .973(This class e)6.474 F .973(xists only to associate a name)-.165 F -1.914(with an)108 656.5 R F2(oid)4.664 E F0 7.414(.I)C(n)-7.414 E F2 -(pg_amop)4.665 E F0 4.665(,e)C -.165(ve)-4.94 G 1.915 -(ry B-tree operator class has a set of procedures, one).165 F 4.98 -(through \214v)108 669.7 R 4.98(e, abo)-.165 F -.165(ve)-.165 G 10.48 -(.S).165 G 4.979(ome e)-10.48 F 4.979(xisting opclasses are)-.165 F F2 -(int2_ops)7.729 E F0(,)A F2(int4_ops)7.729 E F0 7.729(,a)C(nd)-7.729 E -.32 LW 76 679.3 72 679.3 DL 80 679.3 76 679.3 DL 84 679.3 80 679.3 DL 88 -679.3 84 679.3 DL 92 679.3 88 679.3 DL 96 679.3 92 679.3 DL 100 679.3 96 -679.3 DL 104 679.3 100 679.3 DL 108 679.3 104 679.3 DL 112 679.3 108 -679.3 DL 116 679.3 112 679.3 DL 120 679.3 116 679.3 DL 124 679.3 120 -679.3 DL 128 679.3 124 679.3 DL 132 679.3 128 679.3 DL 136 679.3 132 -679.3 DL 140 679.3 136 679.3 DL 144 679.3 140 679.3 DL 148 679.3 144 -679.3 DL 152 679.3 148 679.3 DL 156 679.3 152 679.3 DL 160 679.3 156 -679.3 DL 164 679.3 160 679.3 DL 168 679.3 164 679.3 DL 172 679.3 168 -679.3 DL 176 679.3 172 679.3 DL 180 679.3 176 679.3 DL 184 679.3 180 -679.3 DL 188 679.3 184 679.3 DL 192 679.3 188 679.3 DL 196 679.3 192 -679.3 DL 200 679.3 196 679.3 DL 204 679.3 200 679.3 DL 208 679.3 204 -679.3 DL 212 679.3 208 679.3 DL 216 679.3 212 679.3 DL/F6 5 -/Times-Roman@0 SF(8)93.6 689.7 Q F4 -(Strictly speaking, this routine can return a ne)2 3.2 M -.04(ga)-.12 G -(ti).04 E .24 -.12(ve n)-.2 H(umber \(< 0\), 0, or a non-zero positi).12 -E .24 -.12(ve n)-.2 H(umber \(> 0\).).12 E/F7 11/Times-Bold@0 SF(40) -282.5 756 Q EP -%%Page: 41 41 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Courier@0 SF(oid_ops)108 97.2 Q/F1 11/Times-Roman@0 SF 7.077(.Y)C -1.577(ou need to add an instance with your opclass name \(for e)-8.287 F -(xample,)-.165 E F0(com-)4.328 E(plex_abs_ops)108 110.4 Q F1 3.409(\)t)C -(o)-3.409 E F0(pg_opclass)3.409 E F1 6.159(.T)C(he)-6.159 E F0(oid)3.409 -E F1 .658(of this instance is a foreign k)3.408 F .988 -.165(ey i)-.11 H -3.408(no).165 G(ther)-3.408 E(classes.)108 123.6 Q/F2 10/Courier@0 SF -(INSERT INTO pg_opclass \(opcname\) VALUES \('complex_abs_ops'\);)148 -148.8 Q(SELECT oid, opcname)148 173.2 Q(FROM pg_opclass)160 185.4 Q -(WHERE opcname = 'complex_abs_ops';)160 197.6 Q .4 LW 275 215.1 148 -215.1 DL 21(oid opcname)153 224.8 R 275 229.3 148 229.3 DL 9 -(17314 int4_abs_ops)153 239 R 275 243.5 148 243.5 DL 275 215.1 275 243.5 -DL 148 215.1 148 243.5 DL 190.5 215.1 190.5 243.5 DL F1 .186 -(Note that the)108 278.2 R F0(oid)2.936 E F1 .186(for your)2.936 F F0 -(pg_opclass)2.936 E F1(instance)2.936 E/F3 11/Times-Bold@0 SF .186 -(will be differ)2.936 F(ent)-.198 E F1 5.686(!Y)C .187 -(ou should substi-)-6.896 F(tute your v)108 291.4 Q -(alue for 17314 where)-.275 E -.165(ve)-.275 G 2.75(ri).165 G 2.75(ta) --2.75 G(ppears in this discussion.)-2.75 E .151(So no)108 308.5 R 2.901 -(ww)-.275 G 2.9(eh)-2.901 G -2.475 -.22(av e)-2.9 H .15 -(an access method and an operator class.)3.12 F 1.91 -.88(We s)5.65 H -.15(till need a set of operators;).88 F .651 -(the procedure for de\214ning operators w)108 321.7 R .652 -(as discussed earlier in this manual.)-.11 F -.165(Fo)6.152 G 3.402(rt) -.165 G(he)-3.402 E F0(com-)3.402 E(plex_abs_ops)108 334.9 Q F1 -(operator class on B-trees, the operators we require are:)2.75 E -(absolute v)148 361.1 Q(alue less-than)-.275 E(absolute v)148 374.3 Q -(alue less-than-or)-.275 E(-equal)-.22 E(absolute v)148 387.5 Q -(alue equal)-.275 E(absolute v)148 400.7 Q(alue greater)-.275 E -(-than-or)-.22 E(-equal)-.22 E(absolute v)148 413.9 Q(alue greater)-.275 -E(-than)-.22 E(Suppose the code that implements the functions de\214ned\ - is stored in the \214le)108 440.1 Q F2 -(/usr/local/postgres95/src/tutorial/complex.c)148 465.3 Q F1 -.165(Pa) -108 491.5 S .592(rt of the code look lik).165 F 3.342(et)-.11 G .592 -(his: \(note that we will only sho)-3.342 F 3.342(wt)-.275 G .592 -(he equality operator for the)-3.342 F .631(rest of the e)108 504.7 R -.632(xamples. The other four operators are v)-.165 F .632(ery similar) --.165 F 3.382(.R)-.605 G .632(efer to)-3.382 F F0(complex.c)3.382 E F1 -(or)3.382 E F0(complex.sql)108 517.9 Q F1(for the details.\))2.75 E F2 -(#define Mag\(c\))148 543.1 Q(\(\(c\)->x*\(c\)->x + \(c\)->y*\(c\)->y\)) -24 E(bool)148 567.5 Q(complex_abs_eq\(Complex *a, Complex *b\))148 579.7 -Q({)148 591.9 Q(double amag = Mag\(a\), bmag = Mag\(b\);)172 604.1 Q -(return \(amag==bmag\);)172 616.3 Q(})148 628.5 Q F1 -(There are a couple of important things that are happening belo)108 -654.7 Q -.715(w.)-.275 G 1.966 -(First, note that operators for less-than, less-than-or)108 671.8 R -1.966(-equal, equal, greater)-.22 F(-than-or)-.22 E(-equal,)-.22 E .885 -(and greater)108 685 R .886(-than for)-.22 F F0(int4)3.636 E F1 .886 -(are being de\214ned.)3.636 F .886 -(All of these operators are already de\214ned)6.386 F(for)108 698.2 Q F0 -(int4)2.962 E F1 .212(under the names)2.962 F F0(<)2.962 E F1(,)A F0(<=) -2.962 E F1(,)A F0(=)2.962 E F1(,)A F0(>=)2.962 E F1 2.962(,a)C(nd)-2.962 -E F0(>)2.962 E F1 5.712(.T)C .212(he ne)-5.712 F 2.961(wo)-.275 G .211 -(perators beha)-2.961 F .541 -.165(ve d)-.22 H(if).165 E(ferently)-.275 -E 2.961(,o)-.715 G(f)-2.961 E 2.783(course. In)108 711.4 R .033 -(order to guarantee that)2.783 F/F4 10/Times-Roman@0 SF(POSTGRES)2.783 E -F1 .034(uses these ne)2.783 F 2.784(wo)-.275 G .034 -(perators rather than the old)-2.784 F F3(41)282.5 756 Q EP -%%Page: 42 42 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF .765(ones, the)108 97.2 R 3.515(yn)-.165 G .764 -(eed to be named dif)-3.515 F .764(ferently from the old ones.)-.275 F -.764(This is a k)6.264 F 1.094 -.165(ey p)-.11 H .764(oint: you can).165 -F -.165(ove)108 110.4 S 1.48(rload operators in).165 F/F1 10 -/Times-Roman@0 SF(POSTGRES)4.23 E F0 4.23(,b)C 1.48 -(ut only if the operator isn')-4.45 F 4.231(ta)-.198 G 1.481 -(lready de\214ned for the)-4.231 F(ar)108 123.6 Q 1.474(gument types.) --.198 F 1.474(That is, if you ha)6.974 F -.165(ve)-.22 G/F2 11/Courier@0 -SF(<)4.388 E F0 1.473(de\214ned for \()4.223 F F2(int4)A F0(,)A F2(int4) -4.223 E F0 1.473(\), you can')B 4.223(td)-.198 G 1.473(e\214ne it)-4.223 -F(ag)108 136.8 Q(ain.)-.055 E F1(POSTGRES)5.893 E/F3 11/Times-Bold@0 SF -.393(does not check)3.143 F F0 .393 -(this when you de\214ne your operator)3.143 F 3.144(,s)-.44 G 3.144(ob) --3.144 G 3.144(ec)-3.144 G 3.144(areful. T)-3.144 F(o)-.88 E -.22(avo) -108 150 S .642 -(id this problem, odd names will be used for the operators.).22 F .641 -(If you get this wrong, the)6.141 F(access methods are lik)108 163.2 Q -(ely to crash when you try to do scans.)-.11 E 1.223 -(The other important point is that all the operator functions return)108 -180.3 R/F4 11/Times-Italic@0 SF(Boolean)3.974 E F0 -.275(va)3.974 G -3.974(lues. The).275 F .733(access methods rely on this f)108 193.5 R -3.483(act. \(On)-.11 F .733 -(the other hand, the support function returns what-)3.483 F -2.365 -.275 -(ev e)108 206.7 T 2.75(rt).275 G(he particular access method e)-2.75 E -(xpects \212 in this case, a signed inte)-.165 E(ger)-.165 E(.\))-.605 E -1.443(The \214nal routine in the \214le is the \231support routine\232 \ -mentioned when we discussed the)108 223.8 R F2(amsupport)108 237 Q F0 -(attrib)2.75 E(ute of the)-.22 E F2(pg_am)2.75 E F0 2.75(class. W)2.75 F -2.75(ew)-.88 G(ill use this later on.)-2.75 E -.165(Fo)5.5 G 2.75(rn) -.165 G -.275(ow)-2.75 G 2.75(,i)-.44 G(gnore it.)-2.75 E/F5 10/Courier@0 -SF(CREATE FUNCTION complex_abs_eq\(complex, complex\))148 262.2 Q -(RETURNS bool)178 274.4 Q -(AS '/usr/local/postgres95/tutorial/obj/complex.so')178 286.6 Q -(LANGUAGE 'c';)178 298.8 Q F0(No)108 337.2 Q 3.975(wd)-.275 G 1.224 -(e\214ne the operators that use them.)-3.975 F 1.224 -(As noted, the operator names must be unique)6.724 F .684 -(among all operators that tak)108 350.4 R 3.434(et)-.11 G -.11(wo)-3.434 -G F2(int4)3.544 E F0 3.434(operands. In)3.434 F .684 -(order to see if the operator names)3.434 F(listed belo)108 363.6 Q 2.75 -(wa)-.275 G(re tak)-2.75 E(en, we can do a query on)-.11 E F2 -(pg_operator)2.75 E F0(:)A F5(/*)148 388.8 Q 6(*t)154 401 S -(his query uses the regular expression operator \(~\))-6 E 6(*t)154 -413.2 S 6(of)-6 G(ind three-character operator names that end in)-6 E 6 -(*t)154 425.4 S(he character &)-6 E(*/)154 437.6 Q(SELECT *)148 449.8 Q -(FROM pg_operator)148 462 Q(WHERE oprname ~ '^..&$'::text;)148 474.2 Q -F0 1.15(to see if your name is tak)108 500.4 R 1.149 -(en for the types you w)-.11 F 3.899(ant. The)-.11 F 1.149 -(important things here are the)3.899 F .359 -(procedure \(which are the C functions de\214ned abo)108 513.6 R -.165 -(ve)-.165 G 3.109(\)a).165 G .359(nd the restriction and join selecti) --3.109 F(v-)-.275 E .13(ity functions.)108 526.8 R -1.21(Yo)5.63 G 2.88 -(us)1.21 G .13(hould just use the ones used belo)-2.88 F .129 -(w\212note that there are dif)-.275 F .129(ferent such)-.275 F .54 -(functions for the less-than, equal, and greater)108 540 R .541 -(-than cases.)-.22 F(These)6.041 E F4(must)3.291 E F0 .541 -(be supplied, or the)3.291 F .048 -(access method will crash when it tries to use the operator)108 553.2 R -5.548(.Y)-.605 G .048(ou should cop)-6.758 F 2.798(yt)-.11 G .048 -(he names for)-2.798 F F2(restrict)108 566.4 Q F0(and)2.75 E F2(join) -2.75 E F0 2.75(,b)C -(ut use the procedure names you de\214ned in the last step.)-2.97 E F5 -(CREATE OPERATOR = \()148 591.6 Q -(leftarg = complex, rightarg = complex, procedure = complex_abs_eq,)166 -603.8 Q(restrict = eqsel, join = eqjoinsel)166 616 Q(\))148 628.2 Q F0 -1.687(Notice that \214v)108 654.4 R 4.437(eo)-.165 G 1.688 -(perators corresponding to less, less equal, equal, greater)-4.437 F -4.438(,a)-.44 G 1.688(nd greater)-4.438 F(equal are de\214ned.)108 667.6 -Q -.88(We)108 684.7 S -.55('r).88 G 2.896(ej).55 G .145 -(ust about \214nished. the last thing we need to do is to update the) --2.896 F F2(pg_amop)2.895 E F0(relation.)2.895 E 1.76 -.88(To d)108 -697.9 T 2.75(ot).88 G(his, we need the follo)-2.75 E(wing attrib)-.275 E -(utes:)-.22 E F3(42)282.5 756 Q EP -%%Page: 43 43 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 428.05 88.75 183.95 88.75 DL/F0 11/Courier@0 SF(amopid)189.45 -99.2 Q/F1 11/Times-Roman@0 SF(the)278.55 99.2 Q F0(oid)3.821 E F1 1.071 -(of the)3.821 F F0(pg_am)3.821 E F1(instance)3.822 E -(for B-tree \(== 403, see abo)278.55 112.4 Q -.165(ve)-.165 G(\)).165 E -428.05 117.15 183.95 117.15 DL F0(amopclaid)189.45 127.6 Q F1(the)278.55 -127.6 Q F0(oid)5.539 E F1 2.788(of the)5.538 F F0(pg_opclass)5.538 E F1 -5.213(instance for)278.55 140.8 R F0(int4_abs_ops)7.964 E F1 .684 -(\(== whate)278.55 154 R -.165(ve)-.275 G 3.434(ry).165 G .684 -(ou got instead of)-3.434 F(17314, see abo)278.55 167.2 Q -.165(ve)-.165 -G(\)).165 E 428.05 171.95 183.95 171.95 DL F0(amopopr)189.45 182.4 Q F1 -(the)278.55 182.4 Q F0(oid)2.779 E F1 2.779(so)C 2.779(ft)-2.779 G .029 -(he operators for the)-2.779 F 1.386(opclass \(which we')278.55 195.6 R -1.386(ll get in just)-.11 F 2.75(am)278.55 208.8 S(inute\))-2.75 E -428.05 213.55 183.95 213.55 DL(cost functions.)278.55 224 Q F0 -(amopselect,)189.45 224 Q(amopnpages)189.45 237.2 Q 428.05 241.95 183.95 -241.95 DL 428.05 88.75 428.05 241.95 DL 183.95 88.75 183.95 241.95 DL -270.3 88.75 270.3 241.95 DL F1 .012(The cost functions are used by the \ -query optimizer to decide whether or not to use a gi)108 263.4 R -.165 -(ve)-.275 G(n).165 E(inde)108 276.6 Q 5.733(xi)-.165 G 5.733(nas)-5.733 -G 5.733(can. F)-5.733 F(ortunately)-.165 E 5.733(,t)-.715 G 2.983 -(hese already e)-5.733 F 5.733(xist. The)-.165 F(tw)5.733 E 5.732(of) --.11 G 2.982(unctions we')-5.732 F 2.982(ll use are)-.11 F F0(btreesel,) -108 289.8 Q F1 1.467(which estimates the selecti)4.217 F 1.467 -(vity of the B-tree, and)-.275 F F0(btreenpage,)4.218 E F1(which)4.218 E -(estimates the number of pages a search will touch in the tree.)108 303 -Q .215(So we need the)108 320.1 R F0(oid)2.965 E F1 2.965(so)C 2.965(ft) --2.965 G .215(he operators we just de\214ned.)-2.965 F -.88(We)5.714 G --.11('l).88 G 2.964(ll).11 G .214(ook up the names of all the)-2.964 F -(operators that tak)108 333.3 Q 2.75(et)-.11 G -.11(wo)-2.75 G F0(int4) -2.86 E F1(s, and pick ours out:)A/F2 10/Courier@0 SF -(SELECT o.oid AS opoid, o.oprname)148 358.5 Q -(INTO TABLE complex_ops_tmp)148 370.7 Q(FROM pg_operator o, pg_type t) -148 382.9 Q(WHERE o.oprleft = t.oid and o.oprright = t.oid)148 395.1 Q -(and t.typname = 'complex';)178 407.3 Q F1(which returns:)108 432.5 Q .4 -LW 245 450 148 450 DL F2 21(oid oprname)153 459.7 R 245 464.2 148 464.2 -DL 9(17321 <)153 473.9 R 245 478.4 148 478.4 DL 9(17322 <=)153 488.1 R -245 492.6 148 492.6 DL 15(17323 =)153 502.3 R 245 506.8 148 506.8 DL 9 -(17324 >=)153 516.5 R 245 521 148 521 DL 9(17325 >)153 530.7 R 245 535.2 -148 535.2 DL 245 450 245 535.2 DL 148 450 148 535.2 DL 190.5 450 190.5 -535.2 DL F1(\(Ag)108 556.9 Q .294(ain, some of your)-.055 F F0(oid)3.044 -E F1 .295(numbers will almost certainly be dif)3.044 F 3.045 -(ferent.\) The)-.275 F .295(operators we)3.045 F 1.839 -(are interested in are those with)108 570.1 R F0(oid)4.589 E F1 4.589 -(s1)C 1.839(7321 through 17325.)-4.589 F 1.838(The v)7.338 F 1.838 -(alues you get will)-.275 F .504(probably be dif)108 583.3 R .504 -(ferent, and you should substitute them for the v)-.275 F .505 -(alues belo)-.275 F 4.685 -.715(w. W)-.275 H 3.255(ec)-.165 G .505 -(an look)-3.255 F -(at the operator names and pick out the ones we just added.)108 596.5 Q -(No)108 613.6 Q 3.447(ww)-.275 G(e')-3.447 E .697(re ready to update) --.55 F F0(pg_amop)3.447 E F1 .696(with our ne)3.446 F 3.446(wo)-.275 G -.696(perator class.)-3.446 F .696(The most important)6.196 F 1.116(thin\ -g in this entire discussion is that the operators are ordered, from les\ -s equal through)108 626.8 R(greater equal, in)108 640 Q F0(pg_amop)2.75 -E F1 5.5(.W)C 2.75(ea)-6.38 G(dd the instances we need:)-2.75 E F2 -(INSERT INTO pg_amop \(amopid, amopclaid, amopopr, amopstrategy,)154 -665.2 Q(amopselect, amopnpages\))274 677.4 Q -(SELECT am.oid, opcl.oid, c.opoid, 3,)178 689.6 Q -('btreesel'::regproc, 'btreenpage'::regproc)195 701.8 Q/F3 11 -/Times-Bold@0 SF(43)282.5 756 Q EP -%%Page: 44 44 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(FROM pg_am am, pg_opclass opcl, complex_ops_tmp c) -178 96.2 Q(WHERE amname = 'btree' and opcname = 'complex_abs_ops')178 -108.4 Q(and c.oprname = '=';)196 120.6 Q/F1 11/Times-Roman@0 SF 1.007(N\ -ote the order: \231less than\232 is 1, \231less than or equal\232 is 2,\ - \231equal\232 is 3, \231greater than or)108 159 R -(equal\232 is 4, and \231greater than\232 is 5.)108 172.2 Q .437 -(The last step \(\214nally!\) is re)108 189.3 R .438 -(gistration of the \231support routine\232 pre)-.165 F .438 -(viously described in our)-.275 F 1.924(discussion of)108 202.5 R/F2 11 -/Courier@0 SF(pg_am)4.674 E F1 7.424(.T)C(he)-7.424 E F2(oid)4.674 E F1 -1.923(of this support routine is stored in the)4.673 F F2(pg_amproc) -4.673 E F1 .078(class, k)108 215.7 R -.165(ey)-.11 G .078 -(ed by the access method).165 F F2(oid)2.828 E F1 .078 -(and the operator class)2.828 F F2(oid)2.829 E F1 5.579(.F)C .079 -(irst, we need to re)-5.579 F(g-)-.165 E .804(ister the function in)108 -228.9 R/F3 10/Times-Roman@0 SF(POSTGRES)3.554 E F1 .803 -(\(recall that we put the C code that implements this rou-)3.554 F(tine\ - in the bottom of the \214le in which we implemented the operator routi\ -nes\):)108 242.1 Q F0(CREATE FUNCTION int4_abs_cmp\(int4, int4\))148 -267.3 Q(RETURNS int4)184 279.5 Q -(AS '/usr/local/postgres95/tutorial/obj/complex.so')184 291.7 Q -(LANGUAGE 'c';)184 303.9 Q -(SELECT oid, proname FROM pg_proc WHERE prname = 'int4_abs_cmp';)148 -340.5 Q .4 LW 275 358 148 358 DL 21(oid proname)153 367.7 R 275 372.2 -148 372.2 DL 9(17328 int4_abs_cmp)153 381.9 R 275 386.4 148 386.4 DL 275 -358 275 386.4 DL 148 358 148 386.4 DL 190.5 358 190.5 386.4 DL F1(\(Ag) -108 421.1 Q .642(ain, your)-.055 F F2(oid)3.392 E F1 .642 -(number will probably be dif)3.392 F .642 -(ferent and you should substitute the v)-.275 F(alue)-.275 E .526 -(you see for the v)108 434.3 R .526(alue belo)-.275 F -.715(w.)-.275 G -6.026(\)R).715 G .526(ecalling that the B-tree instance')-6.026 F(s) --.605 E F2(oid)3.276 E F1 .526(is 403 and that of)3.276 F F2 -(int4_abs_ops)108 447.5 Q F1(is 17314, we can add the ne)2.75 E 2.75(wi) --.275 G(nstance as follo)-2.75 E(ws:)-.275 E F0 -(INSERT INTO pg_amproc \(amid, amopclaid, amproc, amprocnum\))148 472.7 -Q(VALUES \('403'::oid,)178 484.9 Q(-- btree oid)48 E 30 -('17314'::oid, --)226 497.1 R(pg_opclass tuple)12 E 30('17328'::oid, --) -226 509.3 R(new pg_proc oid)6 E('1'::int2\);)226 521.5 Q/F4 11 -/Times-Bold@0 SF(44)282.5 756 Q EP -%%Page: 45 45 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(12. LIBPQ)72 165.4 R 77.5 178.6 72 -178.6 DL 80.5 178.6 75 178.6 DL 86 178.6 80.5 178.6 DL 91.5 178.6 86 -178.6 DL 97 178.6 91.5 178.6 DL 102.5 178.6 97 178.6 DL 108 178.6 102.5 -178.6 DL 113.5 178.6 108 178.6 DL 119 178.6 113.5 178.6 DL 124.5 178.6 -119 178.6 DL 130 178.6 124.5 178.6 DL 135.5 178.6 130 178.6 DL 141 178.6 -135.5 178.6 DL 146.5 178.6 141 178.6 DL 152 178.6 146.5 178.6 DL 157.5 -178.6 152 178.6 DL 163 178.6 157.5 178.6 DL 168.5 178.6 163 178.6 DL 174 -178.6 168.5 178.6 DL 179.5 178.6 174 178.6 DL 185 178.6 179.5 178.6 DL -190.5 178.6 185 178.6 DL 196 178.6 190.5 178.6 DL 201.5 178.6 196 178.6 -DL 207 178.6 201.5 178.6 DL 212.5 178.6 207 178.6 DL 218 178.6 212.5 -178.6 DL 223.5 178.6 218 178.6 DL 229 178.6 223.5 178.6 DL 234.5 178.6 -229 178.6 DL 240 178.6 234.5 178.6 DL 245.5 178.6 240 178.6 DL 251 178.6 -245.5 178.6 DL 256.5 178.6 251 178.6 DL 262 178.6 256.5 178.6 DL 267.5 -178.6 262 178.6 DL 273 178.6 267.5 178.6 DL 278.5 178.6 273 178.6 DL 284 -178.6 278.5 178.6 DL 289.5 178.6 284 178.6 DL 295 178.6 289.5 178.6 DL -300.5 178.6 295 178.6 DL 306 178.6 300.5 178.6 DL 311.5 178.6 306 178.6 -DL 317 178.6 311.5 178.6 DL 322.5 178.6 317 178.6 DL 328 178.6 322.5 -178.6 DL 333.5 178.6 328 178.6 DL 339 178.6 333.5 178.6 DL 344.5 178.6 -339 178.6 DL 350 178.6 344.5 178.6 DL 355.5 178.6 350 178.6 DL 361 178.6 -355.5 178.6 DL 366.5 178.6 361 178.6 DL 372 178.6 366.5 178.6 DL 377.5 -178.6 372 178.6 DL 383 178.6 377.5 178.6 DL 388.5 178.6 383 178.6 DL 394 -178.6 388.5 178.6 DL 399.5 178.6 394 178.6 DL 405 178.6 399.5 178.6 DL -410.5 178.6 405 178.6 DL 416 178.6 410.5 178.6 DL 421.5 178.6 416 178.6 -DL 427 178.6 421.5 178.6 DL 432.5 178.6 427 178.6 DL 438 178.6 432.5 -178.6 DL 443.5 178.6 438 178.6 DL 449 178.6 443.5 178.6 DL 454.5 178.6 -449 178.6 DL 460 178.6 454.5 178.6 DL 465.5 178.6 460 178.6 DL 471 178.6 -465.5 178.6 DL 476.5 178.6 471 178.6 DL 482 178.6 476.5 178.6 DL 487.5 -178.6 482 178.6 DL 493 178.6 487.5 178.6 DL 498.5 178.6 493 178.6 DL 504 -178.6 498.5 178.6 DL/F1 10/Times-Roman@0 SF(LIBPQ)108 208.9 Q/F2 11 -/Times-Roman@0 SF .581(is the application programming interf)3.331 F -.581(ace to)-.11 F F1(POSTGRES)3.331 E F2(.)A F1(LIBPQ)6.081 E F2 .582 -(is a set of library)3.331 F .976(routines which allo)108 222.1 R .976 -(ws client programs to pass queries to the)-.275 F F1(POSTGRES)3.726 E -F2(back)3.726 E .975(end serv)-.11 F(er)-.165 E(and to recei)108 235.3 Q -.33 -.165(ve t)-.275 H(he results of these queries.).165 E 1.922(This v) -108 252.4 R 1.922(ersion of the documentation describes the C interf) --.165 F 1.922(ace library)-.11 F 7.423(.T)-.715 G 1.923(hree short pro-) --7.423 F 1.642(grams are included at the end of this section to sho)108 -265.6 R 4.392(wh)-.275 G 2.192 -.275(ow t)-4.392 H 4.391(ow).275 G 1.641 -(rite programs that use)-4.391 F F1(LIBPQ)108 278.8 Q F2(.)A -(There are se)108 295.9 Q -.165(ve)-.275 G(ral e).165 E(xamples of)-.165 -E F1(LIBPQ)2.75 E F2(applications in the follo)2.75 E(wing directories:) --.275 E/F3 10/Courier@0 SF(../src/test/regress)148 321.1 Q -(../src/test/examples)148 333.3 Q(../src/bin/psql)148 345.5 Q F2 1.96 -(Frontend programs which use)108 375.6 R F1(LIBPQ)4.71 E F2 1.961 -(must include the header \214le)4.711 F/F4 11/Courier@0 SF(libpq-fe.h) -4.711 E F2(and)4.711 E(must link with the)108 388.8 Q F4(libpq)2.75 E F2 -(library)2.75 E(.)-.715 E/F5 12/Times-Bold@0 SF 3(12.1. Contr)72 428.2 R -(ol and Initialization)-.216 E F2 .497(The follo)108 445.3 R .497 -(wing en)-.275 F .497(vironment v)-.44 F .497 -(ariables can be used to set up def)-.275 F .496(ault en)-.11 F .496 -(vironment v)-.44 F .496(alues to)-.275 F -.22(avo)108 458.5 S -(id hard-coding database names into an application program:).22 E<83> -113.5 475.6 Q/F6 11/Times-Bold@0 SF(PGHOST)5.5 E F2(sets the def)2.75 E -(ault serv)-.11 E(er name.)-.165 E<83>113.5 488.8 Q F6(PGOPTIONS)5.5 E -F2(sets additional runtime options for the)2.75 E F1(POSTGRES)2.75 E F2 -(back)2.75 E(end.)-.11 E<83>113.5 502 Q F6(PGPOR)5.5 E(T)-.44 E F2 -(sets the def)2.75 E(ault port for communicating with the)-.11 E F1 -(POSTGRES)2.75 E F2(back)2.75 E(end.)-.11 E<83>113.5 515.2 Q F6(PGTTY) -5.5 E F2 .201(sets the \214le or tty on which deb)2.951 F .201 -(ugging messages from the back)-.22 F .202(end serv)-.11 F .202(er are) --.165 F(displayed.)122.85 528.4 Q<83>113.5 541.6 Q F6(PGD)5.5 E -1.65 --1.045(AT A)-.385 H -.33(BA)1.045 G(SE).33 E F2(sets the def)2.75 E -(ault)-.11 E F1(POSTGRES)2.75 E F2(database name.)2.75 E<83>113.5 554.8 -Q F6(PGREALM)5.5 E F2 .232(sets the)2.982 F/F7 11/Times-Italic@0 SF --.385(Ke)2.982 G(rber).385 E(os)-.495 E F2 .232(realm to use with)2.982 -F F1(POSTGRES)2.981 E F2 2.981(,i)C 2.981(fi)-2.981 G 2.981(ti)-2.981 G -2.981(sd)-2.981 G(if)-2.981 E .231(ferent from the)-.275 F 1.027 -(local realm.)122.85 568 R(If)6.527 E F4(PGREALM)3.777 E F2 1.027 -(is set,)3.777 F F1(POSTGRES)3.777 E F2 1.027 -(applications will attempt authentication)3.777 F 1.308(with serv)122.85 -581.2 R 1.308(ers for this realm and use separate tick)-.165 F 1.307 -(et \214les to a)-.11 F -.22(vo)-.22 G 1.307(id con\215icts with local) -.22 F(tick)122.85 594.4 Q 2.668(et \214les.)-.11 F 2.668(This en)8.168 F -2.668(vironment v)-.44 F 2.668(ariable is only used if)-.275 F F7 -.385 -(Ke)5.418 G(rber).385 E(os)-.495 E F2 2.668(authentication is)5.418 F -(enabled.)122.85 607.6 Q F5 3(12.2. Database)72 633.8 R -(Connection Functions)3 E F2(The follo)108 650.9 Q -(wing routines deal with making a connection to a back)-.275 E -(end from a C program.)-.11 E F6(PQsetdb)108 668 Q F2(Mak)133 685.1 Q -(es a ne)-.11 E 2.75(wc)-.275 G(onnection to a back)-2.75 E(end.)-.11 E -F3(PGconn *PQsetdb\(char *pghost,)173 710.3 Q(char *pgport,)269 722.5 Q -F6(45)282.5 756 Q EP -%%Page: 46 46 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(char *pgoptions,)269 96.2 Q(char *pgtty,)269 108.4 Q -(char *dbName\);)269 120.6 Q/F1 11/Times-Roman@0 SF .482(If an)133 146.8 -R 3.232(ya)-.165 G -.198(rg)-3.232 G .481 -(ument is NULL, then the corresponding en).198 F .481(vironment v)-.44 F -.481(ariable is check)-.275 F(ed.)-.11 E(If the en)133 160 Q -(vironment v)-.44 E(ariable is also not set, then hardwired def)-.275 E -(aults are used.)-.11 E/F2 11/Times-Italic@0 SF(PQsetdb)133 177.1 Q F1 -(al)4.191 E -.11(wa)-.11 G 1.441(ys returns a v).11 F 1.441 -(alid PGconn pointer)-.275 F 6.941(.T)-.605 G(he)-6.941 E F2(PQstatus) -4.191 E F1 1.442(\(see belo)4.192 F 1.442(w\) com-)-.275 F 2.872 -(mand should be called to ensure that a connection w)133 190.3 R 2.872 -(as properly made before)-.11 F .2(queries are sent via the connection.) -133 203.5 R/F3 10/Times-Roman@0 SF(LIBPQ)5.701 E F1 .201 -(programmers should be careful to main-)2.951 F .054 -(tain the PGconn abstraction.)133 216.7 R .054 -(Use the accessor functions belo)5.554 F 2.803(wt)-.275 G 2.803(og) --2.803 G .053(et at the contents)-2.803 F 1.332(of PGconn.)133 229.9 R --1.342 -.814(Av o)6.832 H 1.332 -(id directly referencing the \214elds of the PGconn structure as the) -.814 F(y)-.165 E(are subject to change in the future.)133 243.1 Q/F4 11 -/Times-Bold@0 SF(PQdb)133 260.2 Q F1 -(returns the database name of the connection.)2.75 E F0 -(char *PQdb\(PGconn *conn\))173 285.4 Q F4(PQhost)133 311.6 Q F1 -(returns the host name of the connection.)2.75 E F0 -(char *PQhost\(PGconn *conn\))173 336.8 Q F4(PQoptions)133 363 Q F1 -(returns the pgoptions used in the connection.)2.75 E F0 -(char *PQoptions\(PGconn *conn\))173 388.2 Q F4(PQport)133 414.4 Q F1 -(returns the pgport of the connection.)2.75 E F0 -(char *PQport\(PGconn *conn\))173 439.6 Q F4(PQtty)133 465.8 Q F1 -(returns the pgtty of the connection.)2.75 E F0 -(char *PQtty\(PGconn *conn\))173 491 Q F4(PQstatus)133 517.2 Q F1 3.175 -(Returns the status of the connection. The status can be CONNEC-)5.926 F -(TION_OK or CONNECTION_B)133 530.4 Q(AD.)-.385 E F0 -(ConnStatusType *PQstatus\(PGconn *conn\))173 555.6 Q F4(PQerr)133 581.8 -Q(orMessage)-.198 E F1 -(returns the error message associated with the connection)2.75 E F0 -(char *PQerrorMessage\(PGconn* conn\);)173 607 Q F4(PQ\214nish)108 637.1 -Q F1 .041(Close the connection to the back)133 654.2 R 2.791(end. Also) --.11 F .041(frees memory used by the PGconn struc-)2.791 F 2.75 -(ture. The)133 667.4 R -(PGconn pointer should not be used after PQ\214nish has been called.) -2.75 E F0(void PQfinish\(PGconn *conn\))173 692.6 Q F4(46)282.5 756 Q EP -%%Page: 47 47 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Bold@0 SF(PQr)108 97.2 Q(eset)-.198 E/F1 11/Times-Roman@0 -SF 1.035(Reset the communication port with the back)133 114.3 R 3.784 -(end. This)-.11 F 1.034(function will close the IPC)3.784 F(sock)133 -127.5 Q .211(et connection to the back)-.11 F .212 -(end and attempt to reestablish a ne)-.11 F 2.962(wc)-.275 G .212 -(onnection to the)-2.962 F(same back)133 140.7 Q(end.)-.11 E/F2 10 -/Courier@0 SF(void PQreset\(PGconn *conn\))173 165.9 Q F0(PQtrace)108 -196 Q F1 1.773 -(Enables tracing of messages passed between the frontend and the back) -133 213.1 R 4.523(end. The)-.11 F(messages are echoed to the deb)133 -226.3 Q(ug_port \214le stream.)-.22 E F2(void PQtrace\(PGconn *conn,)173 -251.5 Q(FILE* debug_port\);)251 263.7 Q F0(PQuntrace)108 293.8 Q F1 -(Disables tracing of messages passed between the frontend and the back) -133 310.9 Q(end.)-.11 E F2(void PQuntrace\(PGconn *conn\);)173 336.1 Q -/F3 12/Times-Bold@0 SF 3(12.3. Query)72 366.2 R(Execution Functions)3 E -F0(PQexec)108 383.3 Q F1 .141(Submit a query to)133 400.4 R/F4 10 -/Times-Roman@0 SF(POSTGRES)2.891 E F1 5.641(.R)C .141 -(eturns a PGresult pointer if the query w)-5.641 F .142(as success-)-.11 -F .738(ful or a NULL otherwise.)133 413.6 R .738(If a NULL is returned,) -6.238 F/F5 11/Times-Italic@0 SF(PQerr)3.488 E(orMessa)-.495 E -.11(ge) --.11 G F1 .738(can be used to)3.598 F -(get more information about the error)133 426.8 Q(.)-.605 E F2 -(PGresult *PQexec\(PGconn *conn,)173 452 Q(char *query\);)275 464.2 Q F1 -3.049(The PGresult structure encapsulates the query result returned by \ -the back)133 490.4 R(end.)-.11 E F4(LIBPQ)133 503.6 Q F1 .217(programme\ -rs should be careful to maintain the PGresult abstraction. Use the)2.967 -F 2.819(accessor functions described belo)133 516.8 R 5.569(wt)-.275 G -5.569(or)-5.569 G(etrie)-5.569 E 3.149 -.165(ve t)-.275 H 2.819 -(he results of the query).165 F 8.32(.A)-.715 G -.22(vo)-9.134 G(id).22 -E .188 -(directly referencing the \214elds of the PGresult structure as the)133 -530 R 2.938(ya)-.165 G .188(re subject to change)-2.938 F -(in the future.)133 543.2 Q F0(PQr)108 560.3 Q(esultStatus)-.198 E F1 -.562(Returns the result status of the query)133 577.4 R(.)-.715 E F5 -(PQr)6.062 E(esultStatus)-.407 E F1 .562(can return one of the follo) -3.312 F(w-)-.275 E(ing v)133 590.6 Q(alues:)-.275 E F2 -(PGRES_EMPTY_QUERY,)173 615.8 Q 6(PGRES_COMMAND_OK, /*)173 628 R -(the query was a command */)6 E 6(PGRES_TUPLES_OK, /*)173 640.2 R -(the query successfully returned tuples */)6 E(PGRES_COPY_OUT,)173 652.4 -Q(PGRES_COPY_IN,)173 664.6 Q -(PGRES_BAD_RESPONSE, /* an unexpected response was received */)173 676.8 -Q(PGRES_NONFATAL_ERROR,)173 689 Q(PGRES_FATAL_ERROR)173 701.2 Q F0(47) -282.5 756 Q EP -%%Page: 48 48 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF .004 -(If the result status is PGRES_TUPLES_OK, then the follo)133 97.2 R .004 -(wing routines can be used)-.275 F(to retrie)133 110.4 Q .33 -.165(ve t) --.275 H(he tuples returned by the query).165 E(.)-.715 E/F1 11 -/Times-Bold@0 SF(PQntuples)133 127.5 Q F0 -(returns the number of tuples \(instances\) in the query result.)2.75 E -/F2 10/Courier@0 SF(int PQntuples\(PGresult *res\);)173 152.7 Q F1 -(PQn\214elds)133 178.9 Q F0(returns the number of \214elds \(attrib)2.75 -E(utes\) in the query result.)-.22 E F2(int PQnfields\(PGresult *res\);) -173 204.1 Q F1(PQfname)133 230.3 Q F0 1.473 -(returns the \214eld \(attrib)4.223 F 1.473 -(ute\) name associated with the gi)-.22 F -.165(ve)-.275 G 4.224<6e8c> -.165 G 1.474(eld inde)-4.224 F(x.)-.165 E(Field indices start at 0.)133 -243.5 Q F2(char *PQfname\(PGresult *res,)173 268.7 Q(int field_index\);) -251 280.9 Q F1(PQfnumber)133 307.1 Q F0 .418 -(returns the \214eld \(attrib)3.168 F .417(ute\) inde)-.22 F 3.167(xa) --.165 G .417(ssociated with the gi)-3.167 F -.165(ve)-.275 G 3.167<6e8c> -.165 G .417(eld name.)-3.167 F F2(int PQfnumber\(PGresult *res,)173 -332.3 Q(char* field_name\);)251 344.5 Q F1(PQftype)133 370.7 Q F0 1.677 -(returns the \214eld type associated with the gi)4.426 F -.165(ve)-.275 -G 4.427<6e8c>.165 G 1.677(eld inde)-4.427 F 1.677(x. The inte)-.165 F -(ger)-.165 E(returned is an internal coding of the type.)133 383.9 Q -(Field indices start at 0.)5.5 E F2(Oid PQftype\(PGresult *res,)173 -409.1 Q(int field_num\);)245 421.3 Q F1(PQfsize)133 447.5 Q F0 .17 -(returns the size in bytes of the \214eld associated with the gi)2.92 F --.165(ve)-.275 G 2.919<6e8c>.165 G .169(eld inde)-2.919 F .169(x. If) --.165 F(the size returned is -1, the \214eld is a v)133 460.7 Q -(ariable length \214eld.)-.275 E(Field indices start at 0.)5.5 E F2 -(int2 PQfsize\(PGresult *res,)173 485.9 Q(int field_index\);)251 498.1 Q -F1(PQgetv)133 524.3 Q(alue)-.11 E F0 .494(returns the \214eld \(attrib) -3.244 F .494(ute\) v)-.22 F 3.244(alue. F)-.275 F .494 -(or most queries, the v)-.165 F .495(alue returned)-.275 F(by)133 537.5 -Q/F3 11/Times-Italic@0 SF(PQg)5.299 E(etvalue)-.11 E F0 2.549 -(is a null-terminated ASCII string representation of the attrib)5.299 F -(ute)-.22 E -.275(va)133 550.7 S 3.973(lue. If).275 F 1.223(the query w) -3.973 F 1.223(as a result of a)-.11 F F1(BIN)3.973 E(AR)-.22 E(Y)-.385 E -F0(cursor)3.974 E 3.974(,t)-.44 G 1.224(hen the v)-3.974 F 1.224 -(alue returned by)-.275 F F3(PQg)133 563.9 Q(etvalue)-.11 E F0 1.781 -(is the binary representation of the type in the internal format of the) -4.531 F(back)133 577.1 Q .287(end serv)-.11 F(er)-.165 E 5.788(.I)-.605 -G 3.038(ti)-5.788 G 3.038(st)-3.038 G .288(he programmer')-3.038 F 3.038 -(sr)-.605 G .288(esponsibility to cast and con)-3.038 F -.165(ve)-.44 G -.288(rt the data to).165 F .604(the correct C type.)133 590.3 R .604 -(The v)6.104 F .604(alue returned by)-.275 F F3(PQg)3.354 E(etvalue)-.11 -E F0 .603(points to storage that is part)3.354 F .264 -(of the PGresult structure.)133 603.5 R .264(One must e)5.764 F .264 -(xplicitly cop)-.165 F 3.014(yt)-.11 G .264(he v)-3.014 F .265 -(alue into other storage if it)-.275 F -(is to be used past the lifetime of the PGresult structure itself.)133 -616.7 Q F2(char* PQgetvalue\(PGresult *res,)173 641.9 Q(int tup_num,)275 -654.1 Q(int field_num\);)275 666.3 Q F1(PQgetlength)133 692.5 Q F0 .49 -(returns the length of a \214eld \(attrib)3.24 F .489(ute\) in bytes.) --.22 F .489(If the \214eld is a)5.989 F F3(struct)3.239 E(varlena)133 -705.7 Q F0 3.324(,t)C .574(he length returned here does)-3.324 F F1(not) -3.324 E F0 .575(include the size \214eld of the v)3.325 F .575 -(arlena, i.e.,)-.275 F(it is 4 bytes less.)133 718.9 Q F1(48)282.5 756 Q -EP -%%Page: 49 49 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(int PQgetlength\(PGresult *res,)173 96.2 Q -(int tup_num,)269 108.4 Q(int field_num\);)269 120.6 Q/F1 11 -/Times-Bold@0 SF(PQcmdStatus)108 150.7 Q/F2 11/Times-Roman@0 SF -(Returns the command status associated with the last query command.)133 -167.8 Q F0(char *PQcmdStatus\(PGresult *res\);)173 193 Q F1(PQoidStatus) -108 223.1 Q F2 2.297(Returns a string with the object id of the tuple i\ -nserted if the last query is an)133 240.2 R(INSER)133 253.4 Q 2.75(Tc) --.66 G 2.75(ommand. Otherwise,)-2.75 F(returns an empty string.)2.75 E -F0(char* PQoidStatus\(PGresult *res\);)173 278.6 Q F1(PQdisplayT)108 -308.7 Q(uples)-1.012 E F2 .946 -(Prints out all the tuples and, optionally)133 325.8 R 3.696(,t)-.715 G -.946(he attrib)-3.696 F .947(ute names to the speci\214ed output)-.22 F -2.75(stream. The)133 339 R(programs)2.75 E F1(psql)2.75 E F2(and)2.75 E -F1(monitor)2.75 E F2(both use)2.75 E/F3 11/Times-Italic@0 SF(PQdisplayT) -2.75 E(uples)-.605 E F2(for output.)2.75 E F0(void PQdisplayTuples\()173 -364.2 Q(PGresult* res,)215 376.4 Q(FILE* fout,)215 388.6 Q -(/* output stream */)36 E(int fillAlign,)215 400.8 Q -(/* pad the fields with spaces? */)18 E(char *fieldSep,)215 413 Q -(/* string to use as the field separator */)12 E -(int printHeader, /* display attribute headers */)215 425.2 Q -(int quiet,)215 437.4 Q(/* print the number of rows returned ? */)42 E -(\);)215 449.6 Q F1(PQclear)108 479.7 Q F2 .635 -(Frees the storage associated with the PGresult.)133 496.8 R(Ev)6.135 E -.634(ery query result should be prop-)-.165 F .588 -(erly freed when it is no longer used.)133 510 R -.165(Fa)6.089 G .589 -(ilure to do this will result in memory leaks).165 F -(in the frontend application.)133 523.2 Q F0 -(void PQclear\(PQresult *res\);)173 548.4 Q/F4 12/Times-Bold@0 SF 3 -(12.4. F)72 578.5 R(ast P)-.3 E(ath)-.12 E/F5 10/Times-Roman@0 SF -(POSTGRES)108 595.6 Q F2(pro)3.011 E .26(vides a)-.165 F F1 .26 -(fast path)3.01 F F2(interf)3.01 E .26 -(ace to send function calls to the back)-.11 F 3.01(end. This)-.11 F .26 -(is a)3.01 F 1.006 -(trapdoor into system internals and can be a potential security hole.) -108 608.8 R 1.007(Most users will not)6.507 F(need this feature.)108 622 -Q F0(PGresult* PQfn\(PGconn* conn,)148 647.2 Q(int fnid,)226 659.4 Q -(int *result_buf,)226 671.6 Q(int *result_len,)226 683.8 Q -(int result_is_int,)226 696 Q(PQArgBlock *args,)226 708.2 Q -(int nargs\);)226 720.4 Q F1(49)282.5 756 Q EP -%%Page: 50 50 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF(The)108 97.2 Q/F1 11/Times-Italic@0 SF(fnid) -3.054 E F0(ar)3.054 E .304 -(gument is the object identi\214er of the function to be e)-.198 F -.165 -(xe)-.165 G(cuted.).165 E F1 -.407(re)5.803 G(sult_b).407 E(uf)-.22 E F0 -.303(is the)3.053 F -.22(bu)108 110.4 S -.275(ff).22 G .807 -(er in which to load the return v).275 F 3.557(alue. The)-.275 F .807 -(caller must ha)3.557 F 1.137 -.165(ve a)-.22 H .807(llocated suf).165 F -.807(\214cient space)-.275 F .861(to store the return v)108 123.6 R -3.611(alue. The)-.275 F .861 -(result length will be returned in the storage pointed to by)3.611 F F1 --.407(re)108 136.8 S(sult_len.).407 E F0 .075 -(If the result is to be an inte)5.575 F .075(ger v)-.165 F .075 -(alue, than)-.275 F F1 -.407(re)2.825 G(sult_is_int).407 E F0 .075 -(should be set to 1; oth-)2.825 F(erwise it should be set to 0.)108 150 -Q F1(ar)5.5 E(gs)-.407 E F0(and)2.75 E F1(nar)2.75 E(gs)-.407 E F0 -(specify the ar)2.75 E(guments to the function.)-.198 E/F2 10/Courier@0 -SF(typedef struct {)148 175.2 Q(int len;)172 187.4 Q(int isint;)172 -199.6 Q(union {)172 211.8 Q(int *ptr;)196 224 Q(int integer;)184 236.2 Q -6(}u)172 248.4 S(;)-6 E 6(}P)148 260.6 S(QArgBlock;)-6 E F1(PQfn)108 -290.7 Q F0(al)4.181 E -.11(wa)-.11 G 1.431(ys returns a v).11 F 1.431 -(alid PGresult*.)-.275 F 1.431(The resultStatus should be check)6.931 F -1.431(ed before the)-.11 F .37(result is used.)108 303.9 R .37 -(The caller is responsible for freeing the PGresult with)8.62 F F1 -(PQclear)3.121 E F0 .371(when it is)3.121 F(not longer needed.)108 317.1 -Q/F3 12/Times-Bold@0 SF 3(12.5. Asynchr)72 334.2 R(onous Noti\214cation) --.216 E/F4 10/Times-Roman@0 SF(POSTGRES)108 351.3 Q F0 .808 -(supports asynchronous noti\214cation via the)3.558 F F1(LISTEN)3.557 E -F0(and)3.557 E F1(NO)3.557 E(TIFY)-.44 E F0(commands.)3.557 E 3.739(Ab) -108 364.5 S(ack)-3.739 E .989(end re)-.11 F .989 -(gisters its interest in a particular relation with the LISTEN command.) --.165 F(All)6.49 E(back)108 377.7 Q 3.32(ends listening on a particular\ - relation will be noti\214ed asynchronously when a)-.11 F(NO)108 390.9 Q -.996(TIFY of that relation name is e)-.44 F -.165(xe)-.165 G .997 -(cuted by another back).165 F 3.747(end. No)-.11 F .997 -(additional informa-)3.747 F .53 -(tion is passed from the noti\214er to the listener)108 404.1 R 6.029 -(.T)-.605 G .529(hus, typically)-6.029 F 3.279(,a)-.715 G .859 -.165 -(ny a)-3.279 H .529(ctual data that needs).165 F -(to be communicated is transferred through the relation.)108 417.3 Q F4 -(LIBPQ)108 434.4 Q F0 2.056(applications are noti\214ed whene)4.806 F --.165(ve)-.275 G 4.807(rac).165 G 2.057(onnected back)-4.807 F 2.057 -(end has recei)-.11 F -.165(ve)-.275 G 4.807(da).165 G 4.807(na)-4.807 G -(syn-)-4.807 E .731(chronous noti\214cation.)108 447.6 R(Ho)6.231 E(we) --.275 E -.165(ve)-.275 G 1.611 -.44(r, t).165 H .731 -(he communication from the back).44 F .731(end to the frontend is)-.11 F -2.002(not asynchronous.)108 460.8 R 2.002 -(Noti\214cation comes piggy-back)7.502 F 2.002 -(ed on other query results.)-.11 F 2.002(Thus, an)7.502 F .81 -(application must submit queries, e)108 474 R -.165(ve)-.275 G 3.56(ne) -.165 G .81(mpty ones, in order to recei)-3.56 F 1.139 -.165(ve n)-.275 H -.809(otice of back).165 F(end)-.11 E 3.308(noti\214cation. In)108 487.2 -R(ef)3.308 E .558(fect, the)-.275 F F4(LIBPQ)3.308 E F0 .558 -(application must poll the back)3.308 F .559(end to see if there is an) --.11 F(y)-.165 E 1.901(pending noti\214cation information.)108 500.4 R -1.9(After the e)7.401 F -.165(xe)-.165 G 1.9(cution of a query).165 F -4.65(,af)-.715 G 1.9(rontend may call)-4.65 F F1(PQNoti\214es)108 513.6 -Q F0(to see if an)2.75 E 2.75(yn)-.165 G(oti\214cation data is a)-2.75 E --.275(va)-.22 G(ilable from the back).275 E(end.)-.11 E/F5 11 -/Times-Bold@0 SF(PQNoti\214es)108 530.7 Q F0 2.129(returns the noti\214\ -cation from a list of unhandled noti\214cations from the back)133 547.8 -R(end.)-.11 E .825 -(Returns NULL if there are no pending noti\214cations from the back)133 -561 R(end.)-.11 E F1(PQNoti\214es)6.325 E F0(beha)133 574.2 Q -.165(ve) --.22 G 3.76(sl).165 G(ik)-3.76 E 3.76(et)-.11 G 1.01 -(he popping of a stack.)-3.76 F 1.011 -(Once a noti\214cation is returned from)6.511 F F1(PQnoti-)3.761 E -(\214es,)133 587.4 Q F0(it is considered handled and will be remo)2.75 E --.165(ve)-.165 G 2.75(df).165 G(rom the list of noti\214cations.)-2.75 E -F2(PGnotify* PQNotifies\(PGconn *conn\);)173 612.6 Q F0 -(The second sample program gi)108 642.7 Q -.165(ve)-.275 G 2.75(sa).165 -G 2.75(ne)-2.75 G(xample of the use of asynchronous noti\214cation.) --2.915 E F3 3(12.6. Functions)72 659.8 R -(Associated with the COPY Command)3 E F0(The)108 676.9 Q F1(copy)3.4 E -F0 .65(command in)3.4 F F4(POSTGRES)3.4 E F0 .649 -(has options to read from or write to the netw)3.4 F .649(ork con-)-.11 -F 1.149(nection used by)108 690.1 R F4(LIBPQ)3.899 E F0 6.649(.T)C 1.149 -(herefore, functions are necessary to access this netw)-6.649 F 1.15 -(ork con-)-.11 F(nection directly so applications may tak)108 703.3 Q -2.75(ef)-.11 G(ull adv)-2.75 E(antage of this capability)-.275 E(.)-.715 -E F5(50)282.5 756 Q EP -%%Page: 51 51 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Bold@0 SF(PQgetline)108 97.2 Q/F1 11/Times-Roman@0 SF 1.171 -(Reads a ne)133 114.3 R 1.171 -(wline-terminated line of characters \(transmitted by the back)-.275 F -1.17(end serv)-.11 F(er\))-.165 E .821(into a b)133 127.5 R(uf)-.22 E -(fer)-.275 E/F2 11/Times-Italic@0 SF(string)3.571 E F1 .821(of size) -3.571 F F2(length)3.571 E F1 6.321(.L)C(ik)-6.321 E(e)-.11 E F2(fg)3.571 -E(ets)-.11 E F1 .822(\(3\), this routine copies up to)B F2(length)3.572 -E F1(-1)A .56(characters into)133 140.7 R F2(string)3.31 E F1 6.06(.I)C -3.31(ti)-6.06 G 3.31(sl)-3.31 G(ik)-3.31 E(e)-.11 E F2 -.11(ge)3.31 G -(ts).11 E F1 .56(\(3\), ho)B(we)-.275 E -.165(ve)-.275 G 1.439 -.44 -(r, i).165 H 3.309(nt).44 G .559(hat it con)-3.309 F -.165(ve)-.44 G -.559(rts the terminating).165 F(ne)133 153.9 Q -(wline into a null character)-.275 E(.)-.605 E F2(PQg)133 171 Q(etline) --.11 E F1 .329(returns EOF at EOF)3.078 F 3.079(,0i)-.88 G 3.079(ft) --3.079 G .329(he entire line has been read, and 1 if the b)-3.079 F(uf) --.22 E(fer)-.275 E(is full b)133 184.2 Q(ut the terminating ne)-.22 E -(wline has not yet been read.)-.275 E 1.471 -(Notice that the application must check to see if a ne)133 201.3 R 4.221 -(wl)-.275 G 1.471(ine consists of the single)-4.221 F 2.691 -(character \231.)133 214.5 R 2.691(\232, which indicates that the back) --.77 F 2.691(end serv)-.11 F 2.692(er has \214nished sending the)-.165 F -.89(results of the)133 227.7 R F2(copy)3.64 E F1 3.64 -(command. Therefore,)3.64 F .889(if the application e)3.639 F -.165(ve) --.275 G 3.639(re).165 G .889(xpects to recei)-3.804 F -.165(ve)-.275 G -1.419(lines that are more than)133 240.9 R F2(length)4.169 E F1 1.419 -(-1 characters long, the application must be sure to)B -(check the return v)133 254.1 Q(alue of)-.275 E F2(PQg)2.75 E(etline) --.11 E F1 -.165(ve)2.75 G(ry carefully).165 E(.)-.715 E(The code in)133 -271.2 Q/F3 10/Courier@0 SF(../src/bin/psql/psql.c)173 296.4 Q F1 -(contains routines that correctly handle the cop)133 322.6 Q 2.75(yp) --.11 G(rotocol.)-2.75 E F3(int PQgetline\(PGconn *conn,)173 347.8 Q -(char *string,)257 360 Q(int length\))257 372.2 Q F0(PQputline)108 402.3 -Q F1(Sends a null-terminated)133 419.4 Q F2(string)2.75 E F1 -(to the back)2.75 E(end serv)-.11 E(er)-.165 E(.)-.605 E .152 -(The application must e)133 436.5 R .152 -(xplicitly send the single character \231.)-.165 F 5.652<9a74>-.77 G -2.901(oi)-5.652 G .151(ndicate to the back-)-2.901 F -(end that it has \214nished sending its data.)133 449.7 Q F3 -(void PQputline\(PGconn *conn,)173 474.9 Q(char *string\);)263 487.1 Q -F0(PQendcopy)108 517.2 Q F1 2.02(Syncs with the back)133 534.3 R 4.77 -(end. This)-.11 F 2.021(function w)4.77 F 2.021(aits until the back)-.11 -F 2.021(end has \214nished the)-.11 F(cop)133 547.5 Q 5.207 -.715(y. I) --.11 H 3.777(ts).715 G 1.027 -(hould either be issued when the last string has been sent to the back) --3.777 F(end)-.11 E(using)133 560.7 Q F2(PQputline)3.67 E F1 .921 -(or when the last string has been recei)3.67 F -.165(ve)-.275 G 3.671 -(df).165 G .921(rom the back)-3.671 F .921(end using)-.11 F F2(PGg)133 -573.9 Q(etline)-.11 E F1 6.439(.I)C 3.689(tm)-6.439 G .939 -(ust be issued or the back)-3.689 F .939 -(end may get \231out of sync\232 with the fron-)-.11 F 5.023(tend. Upon) -133 587.1 R 2.274(return from this function, the back)5.023 F 2.274 -(end is ready to recei)-.11 F 2.604 -.165(ve t)-.275 H 2.274(he ne).165 -F(xt)-.165 E(query)133 600.3 Q(.)-.715 E(The return v)133 617.4 Q -(alue is 0 on successful completion, nonzero otherwise.)-.275 E F3 -(int PQendcopy\(PGconn *conn\);)173 642.6 Q F1(As an e)133 668.8 Q -(xample:)-.165 E F3 -(PQexec\(conn, "create table foo \(a int4, b char16, d float8\)"\);)173 -694 Q(PQexec\(conn, "copy foo from stdin"\);)173 706.2 Q -(PQputline\(conn, "3hello world4.5\\n"\);)173 718.4 Q F0(51) -282.5 756 Q EP -%%Page: 52 52 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF -(PQputline\(conn,"4goodbye world7.11\\n"\);)173 96.2 Q(...)173 -108.4 Q(PQputline\(conn,".\\n"\);)173 120.6 Q(PQendcopy\(conn\);)173 -132.8 Q/F1 12/Times-Bold@0 SF 3(12.7. LIBPQ)72 162.9 R -.888(Tr)3 G -(acing Functions).888 E/F2 11/Times-Bold@0 SF(PQtrace)108 180 Q/F3 11 -/Times-Roman@0 SF(Enable tracing of the frontend/back)133 197.1 Q -(end communication to a deb)-.11 E(ugging \214le stream.)-.22 E F0 -(void PQtrace\(PGconn *conn)173 222.3 Q(FILE *debug_port\))251 234.5 Q -F2(PQuntrace)108 264.6 Q F3(Disable tracing started by)133 281.7 Q/F4 11 -/Times-Italic@0 SF(PQtr)2.75 E(ace)-.165 E F0 -(void PQuntrace\(PGconn *conn\))173 306.9 Q F1 3(12.8. User)72 337 R -.6 -(Au)3 G(thentication Functions).6 E F3 1.119(If the user has generated \ -the appropriate authentication credentials \(e.g., obtaining)108 354.1 R -F4 -.385(Ke)3.869 G -.22(r-).385 G(ber)108 367.3 Q(os)-.495 E F3(tick) -3.064 E .314(ets\), the frontend/back)-.11 F .315 -(end authentication process is handled by)-.11 F F4(PQe)3.065 E(xec)-.22 -E F3(without)3.065 E(an)108 380.5 Q 2.812(yf)-.165 G .062(urther interv) --2.812 F 2.812(ention. The)-.165 F(follo)2.812 E .061 -(wing routines may be called by)-.275 F/F5 10/Times-Roman@0 SF(LIBPQ) -2.811 E F3 .061(programs to tai-)2.811 F(lor the beha)108 393.7 Q -(vior of the authentication process.)-.22 E F2(fe_getauthname)108 410.8 -Q F3 1.32(Returns a pointer to static space containing whate)133 427.9 R --.165(ve)-.275 G 4.07(rn).165 G 1.321(ame the user has authenti-)-4.07 F -3.549(cated. Use)133 441.1 R .799(of this routine in place of calls to) -3.549 F F4 -.11(ge)3.548 G(ten).11 E(v)-.44 E F3 .798(\(3\) or)B F4 -.11 -(ge)3.548 G(tpwuid).11 E F3 .798(\(3\) by applica-)B 1.407(tions is hig\ -hly recommended, as it is entirely possible that the authenticated user) -133 454.3 R .29(name is)133 467.5 R F2(not)3.04 E F3 .29(the same as v) -3.04 F .29(alue of the)-.275 F/F6 11/Courier@0 SF(USER)3.04 E F3(en)3.04 -E .29(vironment v)-.44 F .29(ariable or the user')-.275 F 3.039(se)-.605 -G(ntry)-3.039 E(in)133 480.7 Q F4(/etc/passwd)2.75 E F3(.)A F0 -(char *fe_getauthname\(char* errorMessage\))173 505.9 Q F2 -(fe_setauthsvc)108 536 Q F3 1.521(Speci\214es that)133 553.1 R F5(LIBPQ) -4.272 E F3 1.522(should use authentication service)4.272 F F4(name)4.272 -E F3 1.522(rather than its com-)4.272 F(piled-in def)133 566.3 Q 2.75 -(ault. This)-.11 F -.275(va)2.75 G(lue is typically tak).275 E -(en from a command-line switch.)-.11 E F0 -(void fe_setauthsvc\(char *name,)173 591.5 Q(char* errorMessage\))287 -603.7 Q F3(An)133 629.9 Q 3.529(ye)-.165 G .778(rror messages from the \ -authentication attempts are returned in the errorMes-)-3.529 F(sage ar) -133 643.1 Q(gument.)-.198 E F1 3(12.9. B)72 660.2 R(UGS)-.12 E F3 1.28 -(The query b)108 677.3 R(uf)-.22 E 1.28 -(fer is 8192 bytes long, and queries o)-.275 F -.165(ve)-.165 G 4.031 -(rt).165 G 1.281(hat length will be silently trun-)-4.031 F(cated.)108 -690.5 Q F2(52)282.5 756 Q EP -%%Page: 53 53 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 3(12.10. Sample)72 97.2 R(Pr)3 E(ograms)-.216 E -/F1 11/Times-Bold@0 SF(53)282.5 756 Q EP -%%Page: 54 54 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 3(12.10.1. Sample)72 97.2 R(Pr)3 E(ogram 1)-.216 -E/F1 10/Courier@0 SF(/*)148 113.3 Q 6(*t)154 125.5 S(estlibpq.c)-6 E 24 -(*T)154 137.7 S(est the C version of)-24 E/F2 9/Courier@0 SF(LIBPQ)6 E -F1 6(,t)C(he)-6 E F2(POSTGRES)6 E F1(frontend library.)6 E(*)154 149.9 Q -(*)154 162.1 Q(*/)154 174.3 Q(#include )148 186.5 Q -(#include "libpq-fe.h")148 198.7 Q(void)148 223.1 Q -(exit_nicely\(PGconn* conn\))148 235.3 Q({)148 247.5 Q -(PQfinish\(conn\);)160 259.7 Q(exit\(1\);)160 271.9 Q(})148 284.1 Q -(main\(\))148 308.5 Q({)148 320.7 Q -(char *pghost, *pgport, *pgoptions, *pgtty;)160 332.9 Q(char* dbName;) -160 345.1 Q(int nFields;)160 357.3 Q(int i,j;)160 369.5 Q 6(/* FILE)148 -393.9 R(*debug; */)6 E(PGconn* conn;)160 418.3 Q(PGresult* res;)160 -430.5 Q(/* begin, by setting the parameters for a backend connection)160 -454.9 Q(if the parameters are null, then the system will try to use)178 -467.1 Q(reasonable defaults by looking up environment variables)178 -479.3 Q(or, failing that, using hardwired constants */)178 491.5 Q -(pghost = NULL;)160 503.7 Q(/* host name of the backend server */)12 E -(pgport = NULL;)160 515.9 Q(/* port of the backend server */)12 E -(pgoptions = NULL; /* special options to start up the backend server */) -160 528.1 Q(pgtty = NULL;)160 540.3 Q -(/* debugging tty for the backend server */)30 E(dbName = "template1";) -160 552.5 Q(/* make a connection to the database */)160 576.9 Q -(conn = PQsetdb\(pghost, pgport, pgoptions, pgtty, dbName\);)160 589.1 Q -(/* check to see that the backend connection was successfully made */) -160 613.5 Q(if \(PQstatus\(conn\) == CONNECTION_BAD\) {)160 625.7 Q -(fprintf\(stderr,"Connection to database '%s' failed.0, dbName\);)172 -637.9 Q(fprintf\(stderr,"%s",PQerrorMessage\(conn\)\);)172 650.1 Q -(exit_nicely\(conn\);)172 662.3 Q(})160 674.5 Q 6(/* debug)148 698.9 R 6 -(=f)6 G 6(open\("/tmp/trace.out","w"\); */)-6 F 12(/* PQtrace\(conn,)148 -711.1 R 6(debug\); */)6 F/F3 11/Times-Bold@0 SF(54)282.5 756 Q EP -%%Page: 55 55 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(/* start a transaction block */)160 96.2 Q -(res = PQexec\(conn,"BEGIN"\);)160 108.4 Q -(if \(PQresultStatus\(res\) != PGRES_COMMAND_OK\) {)160 120.6 Q -(fprintf\(stderr,"BEGIN command failed0\);)172 132.8 Q(PQclear\(res\);) -172 145 Q(exit_nicely\(conn\);)172 157.2 Q(})160 169.4 Q -(/* should PQclear PGresult whenever it is no longer needed to avoid)160 -181.6 Q(memory leaks */)178 193.8 Q(PQclear\(res\);)160 206 Q(/* fetch \ -instances from the pg_database, the system catalog of databases*/)160 -230.4 Q(res = PQexec\(conn,"DECLARE myportal CURSOR FOR select * from p\ -g_database"\);)160 242.6 Q -(if \(PQresultStatus\(res\) != PGRES_COMMAND_OK\) {)160 254.8 Q -(fprintf\(stderr,"DECLARE CURSOR command failed0\);)172 267 Q -(PQclear\(res\);)172 279.2 Q(exit_nicely\(conn\);)172 291.4 Q(})160 -303.6 Q(PQclear\(res\);)160 315.8 Q -(res = PQexec\(conn,"FETCH ALL in myportal"\);)160 340.2 Q -(if \(PQresultStatus\(res\) != PGRES_TUPLES_OK\) {)160 352.4 Q -(fprintf\(stderr,"FETCH ALL command didn't return tuples properly0\);) -172 364.6 Q(PQclear\(res\);)172 376.8 Q(exit_nicely\(conn\);)172 389 Q -(})160 401.2 Q(/* first, print out the attribute names */)160 425.6 Q -(nFields = PQnfields\(res\);)160 437.8 Q -(for \(i=0; i < nFields; i++\) {)160 450 Q -(printf\("%-15s",PQfname\(res,i\)\);)172 462.2 Q(})160 474.4 Q -(printf\("0\);)160 486.6 Q(/* next, print out the instances */)160 511 Q -(for \(i=0; i < PQntuples\(res\); i++\) {)160 523.2 Q(for \(j=0)172 -535.4 Q 6(;j) -148 357.3 Q(#include "libpq-fe.h")148 369.5 Q -(void exit_nicely\(PGconn* conn\))148 393.9 Q({)148 406.1 Q -(PQfinish\(conn\);)160 418.3 Q(exit\(1\);)160 430.5 Q(})148 442.7 Q -(main\(\))148 467.1 Q({)148 479.3 Q -(char *pghost, *pgport, *pgoptions, *pgtty;)160 491.5 Q(char* dbName;) -160 503.7 Q(int nFields;)160 515.9 Q(int i,j;)160 528.1 Q(PGconn* conn;) -160 552.5 Q(PGresult* res;)160 564.7 Q(PGnotify* notify;)160 576.9 Q -(/* begin, by setting the parameters for a backend connection)160 601.3 -Q(if the parameters are null, then the system will try to use)178 613.5 -Q(reasonable defaults by looking up environment variables)178 625.7 Q -(or, failing that, using hardwired constants */)178 637.9 Q -(pghost = NULL;)160 650.1 Q(/* host name of the backend server */)12 E -(pgport = NULL;)160 662.3 Q(/* port of the backend server */)12 E -(pgoptions = NULL; /* special options to start up the backend server */) -160 674.5 Q(pgtty = NULL;)160 686.7 Q -(/* debugging tty for the backend server */)30 E(dbName = getenv\("USER\ -"\); /* change this to the name of your test database*/)160 698.9 Q -(/* make a connection to the database */)160 723.3 Q/F2 11/Times-Bold@0 -SF(57)282.5 756 Q EP -%%Page: 58 58 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF -(conn = PQsetdb\(pghost, pgport, pgoptions, pgtty, dbName\);)160 96.2 Q -(/* check to see that the backend connection was successfully made */) -160 120.6 Q(if \(PQstatus\(conn\) == CONNECTION_BAD\) {)160 132.8 Q -(fprintf\(stderr,"Connection to database '%s' failed.0, dbName\);)172 -145 Q(fprintf\(stderr,"%s",PQerrorMessage\(conn\)\);)172 157.2 Q -(exit_nicely\(conn\);)172 169.4 Q(})160 181.6 Q -(res = PQexec\(conn, "LISTEN TBL2"\);)160 206 Q -(if \(PQresultStatus\(res\) != PGRES_COMMAND_OK\) {)160 218.2 Q -(fprintf\(stderr,"LISTEN command failed0\);)172 230.4 Q(PQclear\(res\);) -172 242.6 Q(exit_nicely\(conn\);)172 254.8 Q(})160 267 Q -(/* should PQclear PGresult whenever it is no longer needed to avoid)160 -279.2 Q(memory leaks */)178 291.4 Q(PQclear\(res\);)160 303.6 Q -(while \(1\) {)160 328 Q -(/* async notification only come back as a result of a query*/)184 340.2 -Q(/* we can send empty queries */)184 352.4 Q -(res = PQexec\(conn, " "\);)184 364.6 Q 30(/* printf\("res->status)148 -376.8 R 6(=%)6 G(s0, pgresStatus[PQresultStatus\(res\)]\); */)-6 E -(/* check for asynchronous returns */)184 389 Q -(notify = PQnotifies\(conn\);)184 401.2 Q(if \(notify\) {)184 413.4 Q -(fprintf\(stderr,)196 425.6 Q -("ASYNC NOTIFY of '%s' from backend pid '%d' received0,)232 437.8 Q -(notify->relname, notify->be_pid\);)232 450 Q(free\(notify\);)196 462.2 -Q(break;)196 474.4 Q(})184 486.6 Q(PQclear\(res\);)184 498.8 Q(})160 511 -Q(/* close the connection to the database and cleanup */)160 535.4 Q -(PQfinish\(conn\);)160 547.6 Q(})148 572 Q/F1 11/Times-Bold@0 SF(58) -282.5 756 Q EP -%%Page: 59 59 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 3(12.10.3. Sample)72 97.2 R(Pr)3 E(ogram 3)-.216 -E/F1 10/Courier@0 SF(/*)148 113.3 Q 6(*t)154 125.5 S(estlibpq3.c)-6 E 24 -(*T)154 137.7 S(est the C version of)-24 E/F2 9/Courier@0 SF(LIBPQ)6 E -F1 6(,t)C(he)-6 E F2(POSTGRES)6 E F1(frontend library.)6 E 18(*t)154 -149.9 S(ests the binary cursor interface)-18 E(*)154 162.1 Q(*)154 174.3 -Q(*)154 186.5 Q(populate a database by doing the following:)154 198.7 Q -(CREATE TABLE test1 \(i int4, d float4, p polygon\);)148 223.1 Q(INSERT\ - INTO test1 values \(1, 3.567, '\(3.0, 4.0, 1.0, 2.0\)'::polygon\);)148 -247.5 Q(INSERT INTO test1 values \(2, 89.05, '\(4.0, 3.0, 2.0, 1.0\)'::\ -polygon\);)148 271.9 Q(the expected output is:)154 296.3 Q(tuple 0: got) -148 320.7 Q 6(i=\()154 332.9 S 6(4b)-6 G(ytes\) 1,)-6 E 6(d=\()154 345.1 -S 6(4b)-6 G(ytes\) 3.567000,)-6 E 6(p=\()154 357.3 S 6(4b)-6 G -(ytes\) 2 points)-6 E -(boundbox = \(hi=3.000000/4.000000, lo = 1.000000,2.000000\))54 E -(tuple 1: got)148 369.5 Q 6(i=\()154 381.7 S 6(4b)-6 G(ytes\) 2,)-6 E 6 -(d=\()154 393.9 S 6(4b)-6 G(ytes\) 89.050003,)-6 E 6(p=\()154 406.1 S 6 -(4b)-6 G(ytes\) 2 points)-6 E -(boundbox = \(hi=4.000000/3.000000, lo = 2.000000,1.000000\))54 E(*)154 -430.5 Q(*/)154 442.7 Q(#include )148 454.9 Q -(#include "libpq-fe.h")148 467.1 Q -(#include "utils/geo-decls.h" /* for the POLYGON type */)148 479.3 Q -(void exit_nicely\(PGconn* conn\))148 503.7 Q({)148 515.9 Q -(PQfinish\(conn\);)160 528.1 Q(exit\(1\);)160 540.3 Q(})148 552.5 Q -(main\(\))148 576.9 Q({)148 589.1 Q -(char *pghost, *pgport, *pgoptions, *pgtty;)160 601.3 Q(char* dbName;) -160 613.5 Q(int nFields;)160 625.7 Q(int i,j;)160 637.9 Q -(int i_fnum, d_fnum, p_fnum;)160 650.1 Q(PGconn* conn;)160 674.5 Q -(PGresult* res;)160 686.7 Q -(/* begin, by setting the parameters for a backend connection)160 711.1 -Q(if the parameters are null, then the system will try to use)178 723.3 -Q/F3 11/Times-Bold@0 SF(59)282.5 756 Q EP -%%Page: 60 60 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF -(reasonable defaults by looking up environment variables)178 96.2 Q -(or, failing that, using hardwired constants */)178 108.4 Q -(pghost = NULL;)160 120.6 Q(/* host name of the backend server */)12 E -(pgport = NULL;)160 132.8 Q(/* port of the backend server */)12 E -(pgoptions = NULL; /* special options to start up the backend server */) -160 145 Q(pgtty = NULL;)160 157.2 Q -(/* debugging tty for the backend server */)30 E -(dbName = getenv\("USER"\);)160 181.6 Q -(/* change this to the name of your test database*/)12 E -(/* make a connection to the database */)160 206 Q -(conn = PQsetdb\(pghost, pgport, pgoptions, pgtty, dbName\);)160 218.2 Q -(/* check to see that the backend connection was successfully made */) -160 242.6 Q(if \(PQstatus\(conn\) == CONNECTION_BAD\) {)160 254.8 Q -(fprintf\(stderr,"Connection to database '%s' failed.0, dbName\);)172 -267 Q(fprintf\(stderr,"%s",PQerrorMessage\(conn\)\);)172 279.2 Q -(exit_nicely\(conn\);)172 291.4 Q(})160 303.6 Q -(/* start a transaction block */)160 328 Q -(res = PQexec\(conn,"BEGIN"\);)160 340.2 Q -(if \(PQresultStatus\(res\) != PGRES_COMMAND_OK\) {)160 352.4 Q -(fprintf\(stderr,"BEGIN command failed0\);)172 364.6 Q(PQclear\(res\);) -172 376.8 Q(exit_nicely\(conn\);)172 389 Q(})160 401.2 Q -(/* should PQclear PGresult whenever it is no longer needed to avoid)160 -413.4 Q(memory leaks */)178 425.6 Q(PQclear\(res\);)160 437.8 Q(/* fetc\ -h instances from the pg_database, the system catalog of databases*/)160 -462.2 Q(res = PQexec\(conn,"DECLARE mycursor BINARY CURSOR FOR select *\ - from test1"\);)160 474.4 Q -(if \(PQresultStatus\(res\) != PGRES_COMMAND_OK\) {)160 486.6 Q -(fprintf\(stderr,"DECLARE CURSOR command failed0\);)172 498.8 Q -(PQclear\(res\);)172 511 Q(exit_nicely\(conn\);)172 523.2 Q(})160 535.4 -Q(PQclear\(res\);)160 547.6 Q -(res = PQexec\(conn,"FETCH ALL in mycursor"\);)160 572 Q -(if \(PQresultStatus\(res\) != PGRES_TUPLES_OK\) {)160 584.2 Q -(fprintf\(stderr,"FETCH ALL command didn't return tuples properly0\);) -172 596.4 Q(PQclear\(res\);)172 608.6 Q(exit_nicely\(conn\);)172 620.8 Q -(})160 633 Q(i_fnum = PQfnumber\(res,"i"\);)160 657.4 Q -(d_fnum = PQfnumber\(res,"d"\);)160 669.6 Q -(p_fnum = PQfnumber\(res,"p"\);)160 681.8 Q(for \(i=0;i<3;i++\) {)160 -706.2 Q(printf\("type[%d] = %d, size[%d] = %d0,)184 718.4 Q/F1 11 -/Times-Bold@0 SF(60)282.5 756 Q EP -%%Page: 61 61 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(i, PQftype\(res,i\),)214 96.2 Q -(i, PQfsize\(res,i\)\);)214 108.4 Q(})160 120.6 Q -(for \(i=0; i < PQntuples\(res\); i++\) {)160 132.8 Q(int *ival;)172 145 -Q(float *dval;)172 157.2 Q(int plen;)172 169.4 Q(POLYGON* pval;)172 -181.6 Q(/* we hard-wire this to the 3 fields we know about */)172 193.8 -Q(ival =)172 206 Q(\(int*\)PQgetvalue\(res,i,i_fnum\);)12 E(dval =)172 -218.2 Q(\(float*\)PQgetvalue\(res,i,d_fnum\);)12 E -(plen = PQgetlength\(res,i,p_fnum\);)172 230.4 Q(/* plen doesn't includ\ -e the length field so need to increment by VARHDSZ*/)172 254.8 Q -(pval = \(POLYGON*\) malloc\(plen + VARHDRSZ\);)172 267 Q -(pval->size = plen;)172 279.2 Q -(memmove\(\(char*\)&pval->npts, PQgetvalue\(res,i,p_fnum\), plen\);)172 -291.4 Q(printf\("tuple %d: got0, i\);)172 303.6 Q -(printf\(" i = \(%d bytes\) %d,0,)172 315.8 Q -(PQgetlength\(res,i,i_fnum\), *ival\);)202 328 Q -(printf\(" d = \(%d bytes\) %f,0,)172 340.2 Q -(PQgetlength\(res,i,d_fnum\), *dval\);)202 352.4 Q(printf\(" p = \(%d b\ -ytes\) %d points boundbox = \(hi=%f/%f, lo = %f,%f\)0,)172 364.6 Q -(PQgetlength\(res,i,d_fnum\),)202 376.8 Q(pval->npts,)202 389 Q -(pval->boundbox.xh,)202 401.2 Q(pval->boundbox.yh,)202 413.4 Q -(pval->boundbox.xl,)202 425.6 Q(pval->boundbox.yl\);)202 437.8 Q(})160 -450 Q(PQclear\(res\);)160 474.4 Q(/* close the portal */)160 498.8 Q -(res = PQexec\(conn, "CLOSE mycursor"\);)160 511 Q(PQclear\(res\);)160 -523.2 Q(/* end the transaction */)160 547.6 Q -(res = PQexec\(conn, "END"\);)160 559.8 Q(PQclear\(res\);)160 572 Q -(/* close the connection to the database and cleanup */)160 596.4 Q -(PQfinish\(conn\);)160 608.6 Q(})148 633 Q/F1 11/Times-Bold@0 SF(61) -282.5 756 Q EP -%%Page: 62 62 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(13. LARGE)72 165.4 R(OBJECTS)4.75 E -77.5 178.6 72 178.6 DL 80.5 178.6 75 178.6 DL 86 178.6 80.5 178.6 DL -91.5 178.6 86 178.6 DL 97 178.6 91.5 178.6 DL 102.5 178.6 97 178.6 DL -108 178.6 102.5 178.6 DL 113.5 178.6 108 178.6 DL 119 178.6 113.5 178.6 -DL 124.5 178.6 119 178.6 DL 130 178.6 124.5 178.6 DL 135.5 178.6 130 -178.6 DL 141 178.6 135.5 178.6 DL 146.5 178.6 141 178.6 DL 152 178.6 -146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 178.6 157.5 178.6 DL 168.5 -178.6 163 178.6 DL 174 178.6 168.5 178.6 DL 179.5 178.6 174 178.6 DL 185 -178.6 179.5 178.6 DL 190.5 178.6 185 178.6 DL 196 178.6 190.5 178.6 DL -201.5 178.6 196 178.6 DL 207 178.6 201.5 178.6 DL 212.5 178.6 207 178.6 -DL 218 178.6 212.5 178.6 DL 223.5 178.6 218 178.6 DL 229 178.6 223.5 -178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 234.5 178.6 DL 245.5 178.6 -240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 178.6 251 178.6 DL 262 178.6 -256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 178.6 267.5 178.6 DL 278.5 -178.6 273 178.6 DL 284 178.6 278.5 178.6 DL 289.5 178.6 284 178.6 DL 295 -178.6 289.5 178.6 DL 300.5 178.6 295 178.6 DL 306 178.6 300.5 178.6 DL -311.5 178.6 306 178.6 DL 317 178.6 311.5 178.6 DL 322.5 178.6 317 178.6 -DL 328 178.6 322.5 178.6 DL 333.5 178.6 328 178.6 DL 339 178.6 333.5 -178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 344.5 178.6 DL 355.5 178.6 -350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 178.6 361 178.6 DL 372 178.6 -366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 178.6 377.5 178.6 DL 388.5 -178.6 383 178.6 DL 394 178.6 388.5 178.6 DL 399.5 178.6 394 178.6 DL 405 -178.6 399.5 178.6 DL 410.5 178.6 405 178.6 DL 416 178.6 410.5 178.6 DL -421.5 178.6 416 178.6 DL 427 178.6 421.5 178.6 DL 432.5 178.6 427 178.6 -DL 438 178.6 432.5 178.6 DL 443.5 178.6 438 178.6 DL 449 178.6 443.5 -178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 454.5 178.6 DL 465.5 178.6 -460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 178.6 471 178.6 DL 482 178.6 -476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 178.6 487.5 178.6 DL 498.5 -178.6 493 178.6 DL 504 178.6 498.5 178.6 DL/F1 11/Times-Roman@0 SF(In) -108 208.9 Q/F2 10/Times-Roman@0 SF(POSTGRES)4.497 E F1 4.497(,d)C 1.746 -(ata v)-4.497 F 1.746(alues are stored in tuples and indi)-.275 F 1.746 -(vidual tuples cannot span data)-.275 F 1.017(pages. Since the size of \ -a data page is 8192 bytes, the upper limit on the size of a data)108 -222.1 R -.275(va)108 235.3 S 1.306(lue is relati).275 F -.165(ve)-.275 G -1.306(ly lo).165 F 2.736 -.715(w. T)-.275 H 4.055(os)-.165 G 1.305 -(upport the storage of lar)-4.055 F 1.305(ger atomic v)-.198 F(alues,) --.275 E F2(POSTGRES)4.055 E F1(pro-)4.055 E .029(vides a lar)108 248.5 R -.029(ge object interf)-.198 F 2.779(ace. This)-.11 F(interf)2.78 E .03 -(ace pro)-.11 F .03(vides \214le-oriented access to user data that)-.165 -F(has been declared to be a lar)108 261.7 Q(ge type.)-.198 E 2.267(This\ - section describes the implementation and the programmatic and query la\ -nguage)108 278.8 R(interf)108 292 Q(aces to)-.11 E F2(POSTGRES)2.75 E F1 -(lar)2.75 E(ge object data.)-.198 E/F3 12/Times-Bold@0 SF 3 -(13.1. Historical)72 309.1 R(Note)3 E F1(Originally)108 326.2 Q(,)-.715 -E F2(POSTGRES)4.077 E F1 1.327 -(4.2 supports three standard implementations of lar)4.077 F 1.328 -(ge objects: as)-.198 F 1.471(\214les e)108 339.4 R 1.471(xternal to) --.165 F F2(POSTGRES)4.22 E F1 4.22(,a)C(s)-4.22 E F2(UNIX)4.22 E F1 1.47 -(\214les managed by)4.22 F F2(POSTGRES)4.22 E F1 4.22(,a)C 1.47 -(nd as data stored)-4.22 F 2.431(within the)108 352.6 R F2(POSTGRES) -5.181 E F1 2.432 -(database. It causes considerable confusion among users. As a)5.181 F -1.719(result, we only support lar)108 365.8 R 1.719 -(ge objects as data stored within the)-.198 F F2(POSTGRES)4.469 E F1 -1.719(database in)4.469 F F2(POSTGRES)108 379 Q F1 1.127(95. Ev)B 1.127 -(en though is is slo)-.165 F 1.128(wer to access, it pro)-.275 F 1.128 -(vides stricter data inte)-.165 F 1.128(grity and)-.165 F 1.272 -(time tra)108 392.2 R -.165(ve)-.22 G 1.272(l. F).165 F 1.272 -(or historical reasons, the)-.165 F 4.022(ya)-.165 G 1.272(re called In) --4.022 F -.165(ve)-.44 G 1.272(rsion lar).165 F 1.272(ge objects. \(W) --.198 F 4.021(ew)-.88 G 1.271(ill use)-4.021 F(In)108 405.4 Q -.165(ve) --.44 G(rsion and lar).165 E -(ge objects interchangeably to mean the same thing in this section.\)) --.198 E F3 3(13.2. In)72 431.6 R -.12(ve)-.48 G(rsion Lar).12 E -(ge Objects)-.12 E F1 2.125(The In)108 448.7 R -.165(ve)-.44 G 2.125 -(rsion lar).165 F 2.125(ge object implementation breaks lar)-.198 F -2.125(ge objects up into \231chunks\232 and)-.198 F 1.03 -(stores the chunks in tuples in the database.)108 461.9 R 3.78(AB)6.53 G -1.03(-tree inde)-3.78 F 3.78(xg)-.165 G 1.03(uarantees f)-3.78 F 1.03 -(ast searches for)-.11 F -(the correct chunk number when doing random access reads and writes.)108 -475.1 Q F3 3(13.3. Lar)72 501.3 R(ge Object Interfaces)-.12 E F1 .643 -(The f)108 518.4 R(acilities)-.11 E F2(POSTGRES)3.393 E F1(pro)3.393 E -.643(vides to access lar)-.165 F .643(ge objects, both in the back)-.198 -F .644(end as part of)-.11 F(user)108 531.6 Q .947(-de\214ned functions\ - or the front end as part of an application using the)-.22 F(interf) -6.446 E .946(ace, are)-.11 F .561(described belo)108 544.8 R 1.991 -.715 -(w. \()-.275 H -.165(Fo).715 G 3.311(ru).165 G .561(sers f)-3.311 F .561 -(amiliar with)-.11 F F2(POSTGRES)3.311 E F1(4.2,)3.311 E F2(POSTGRES) -3.311 E F1 .561(95 has a ne)B 3.312(ws)-.275 G .562(et of)-3.312 F .27 -(functions pro)108 558 R .27(viding a more coherent interf)-.165 F .27 -(ace. The interf)-.11 F .269(ace is the same for dynamically-)-.11 F -(loaded C functions as well as for .)108 571.2 Q(The)108 588.3 Q F2 -(POSTGRES)4.358 E F1(lar)4.358 E 1.608(ge object interf)-.198 F 1.609 -(ace is modeled after the)-.11 F F2(UNIX)4.359 E F1 1.609 -(\214le system interf)4.359 F(ace,)-.11 E .45(with analogues of)108 -601.5 R/F4 11/Times-Italic@0 SF(open)3.199 E F1(\(2\),)A F4 -.407(re) -3.199 G(ad).407 E F1(\(2\),)A F4(write)3.199 E F1(\(2\),)A F4(lseek) -3.199 E F1 .449(\(2\), etc.)B .449(User functions call these rou-)5.949 -F 1.739(tines to retrie)108 614.7 R 2.069 -.165(ve o)-.275 H 1.739 -(nly the data of interest from a lar).165 F 1.74(ge object.)-.198 F --.165(Fo)7.24 G 4.49(re).165 G 1.74(xample, if a lar)-4.655 F(ge)-.198 E -.074(object type called)108 627.9 R F4(mugshot)2.824 E F1 -.165(ex)2.824 -G .074(isted that stored photographs of f).165 F .073 -(aces, then a function called)-.11 F F4(bear)108 641.1 Q(d)-.407 E F1 -.148(could be declared on)2.898 F F4(mugshot)2.898 E F1(data.)2.898 E F4 -(Bear)5.648 E(d)-.407 E F1 .149(could look at the lo)2.898 F .149 -(wer third of a photo-)-.275 F .793 -(graph, and determine the color of the beard that appeared there, if an) -108 654.3 R 4.972 -.715(y. T)-.165 H .792(he entire lar).715 F(ge)-.198 -E(object v)108 667.5 Q(alue need not be b)-.275 E(uf)-.22 E(fered, or e) --.275 E -.165(ve)-.275 G 2.75(ne).165 G(xamined, by the)-2.915 E F4 -(bear)2.75 E(d)-.407 E F1(function.)2.75 E(Lar)108 684.6 Q 1.165(ge obj\ -ects may be accessed from dynamically-loaded C functions or database cl\ -ient)-.198 F .831(programs that link the)108 697.8 R(library)6.331 E(.) --.715 E F2(POSTGRES)6.331 E F1(pro)3.581 E .83 -(vides a set of routines that support open-)-.165 F -(ing, reading, writing, closing, and seeking on lar)108 711 Q -(ge objects.)-.198 E/F5 11/Times-Bold@0 SF(62)282.5 756 Q EP -%%Page: 63 63 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 3(13.3.1. Cr)72 97.2 R(eating a Lar)-.216 E -(ge Object)-.12 E/F1 11/Times-Roman@0 SF(The routine)108 114.3 Q/F2 10 -/Courier@0 SF(Oid lo_creat\(PGconn *conn, int mode\))148 139.5 Q F1 .042 -(creates a ne)108 165.7 R 2.792(wl)-.275 G(ar)-2.792 E .042 -(ge object. The)-.198 F/F3 11/Times-Italic@0 SF(mode)2.792 E F1 .043 -(is a bitmask describing se)2.792 F -.165(ve)-.275 G .043(ral dif).165 F -.043(ferent attrib)-.275 F .043(utes of)-.22 F(the ne)108 178.9 Q 2.75 -(wo)-.275 G 2.75(bject. The)-2.75 F -(symbolic constants listed here are de\214ned in)2.75 E F2 -(/usr/local/postgres95/src/backend/libpq/libpq-fs.h)148 204.1 Q F1 .084 -(The access type \(read, write, or both\) is controlled by)108 230.3 R -/F4 10/Times-Roman@0 SF(OR)2.834 E F1 .084(ing together the bits)2.834 F -F4(INV_READ)2.834 E F1(and)108 243.5 Q F4(INV_WRITE)2.845 E F1 5.595(.I) -C 2.845(ft)-5.595 G .095(he lar)-2.845 F .095(ge object should be archi) --.198 F -.165(ve)-.275 G 2.845(d\212t).165 G .095 -(hat is, if historical v)-2.845 F .096(ersions of)-.165 F .934 -(it should be mo)108 256.7 R -.165(ve)-.165 G 3.684(dp).165 G .933 -(eriodically to a special archi)-3.684 F 1.263 -.165(ve r)-.275 H .933 -(elation \212 then the).165 F F4(INV_ARCHIVE)3.683 E F1 .369 -(bit should be set.)108 269.9 R .369(The lo)5.869 F .37 -(w-order sixteen bits of)-.275 F F3(mask)3.12 E F1 .37 -(are the storage manager number on)3.12 F 1.894(which the lar)108 283.1 -R 1.894(ge object should reside.)-.198 F -.165(Fo)7.394 G 4.644(rs).165 -G 1.894(ites other than Berk)-4.644 F(ele)-.11 E 3.323 -.715(y, t)-.165 -H 1.893(hese bits should).715 F(al)108 296.3 Q -.11(wa)-.11 G -(ys be zero.).11 E(The commands belo)108 313.4 Q 2.75(wc)-.275 G -(reate an \(In)-2.75 E -.165(ve)-.44 G(rsion\) lar).165 E(ge object:) --.198 E F2(inv_oid = lo_creat\(INV_READ|INV_WRITE|INV_ARCHIVE\);)148 -338.6 Q F0 3(13.3.2. Importing)72 377.8 R 3(aL)3 G(ar)-3 E(ge Object) --.12 E F1 1.76 -.88(To i)9 H(mport a UNIX \214le as a lar).88 E -(ge object, call)-.198 E F2(Oid)148 403 Q -(lo_import\(PGconn *conn, text *filename\))148 415.2 Q F1(The)108 441.4 -Q F3(\214lename)3.168 E F1(ar)3.168 E .419(gument speci\214es the UNIX \ -pathname of the \214le to be imported as a lar)-.198 F(ge)-.198 E -(object.)108 454.6 Q F0 3(13.3.3. Exporting)72 480.8 R 3(aL)3 G(ar)-3 E -(ge Object)-.12 E F1 1.76 -.88(To e)9 H(xport a lar).715 E -(ge object into UNIX \214le, call)-.198 E F2(int)148 506 Q -(lo_export\(PGconn *conn, Oid lobjId, text *filename\))148 518.2 Q F1 -(The)108 544.4 Q F3(lobjId)3.071 E F1(ar)3.071 E .321 -(gument speci\214es the Oid of the lar)-.198 F .32(ge object to e)-.198 -F .32(xport and the)-.165 F F3(\214lename)3.07 E F1(ar)3.07 E(gu-)-.198 -E(ment speci\214es the UNIX pathname of the \214le.)108 557.6 Q F0 3 -(13.3.4. Opening)72 583.8 R(an Existing Lar)3 E(ge Object)-.12 E F1 1.76 --.88(To o)108 600.9 T(pen an e).88 E(xisting lar)-.165 E -(ge object, call)-.198 E F2(int)148 626.1 Q -(lo_open\(PGconn *conn, Oid lobjId, int mode, ...\))148 638.3 Q F1(The) -108 664.5 Q F3(lobjId)3.207 E F1(ar)3.207 E .457 -(gument speci\214es the Oid of the lar)-.198 F .458(ge object to open.) --.198 F .458(The mode bits control)5.958 F -(whether the object is opened for reading)108 677.7 Q F4(INV_READ)2.75 E -F1(\), writing or both.)A 4.2(Al)108 694.8 S(ar)-4.2 E 1.45 -(ge object cannot be opened before it is created.)-.198 F/F5 11 -/Courier@0 SF(lo_open)6.949 E F1 1.449(returns a lar)4.199 F 1.449 -(ge object)-.198 F 5.198(descriptor for later use in)108 708 R F5 -(lo_read)7.948 E F1(,)A F5(lo_write)7.948 E F1(,)A F5(lo_lseek)7.948 E -F1(,)A F5(lo_tell)7.948 E F1 7.949(,a)C(nd)-7.949 E F5(lo_close)108 -721.2 Q F1(.)A/F6 11/Times-Bold@0 SF(63)282.5 756 Q EP -%%Page: 64 64 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 3(13.3.5. Writing)72 97.2 R(Data to a Lar)3 E -(ge Object)-.12 E/F1 11/Times-Roman@0 SF(The routine)108 114.3 Q/F2 10 -/Courier@0 SF(int)148 139.5 Q -(lo_write\(PGconn *conn, int fd, char *buf, int len\))148 151.7 Q F1 -(writes)108 177.9 Q/F3 11/Times-Italic@0 SF(len)3.046 E F1 .296 -(bytes from)3.046 F F3 -.22(bu)3.046 G(f).22 E F1 .296(to lar)3.046 F -.296(ge object)-.198 F F3(fd)3.046 E F1 5.796(.T)C(he)-5.796 E F3(fd) -3.046 E F1(ar)3.045 E .295(gument must ha)-.198 F .625 -.165(ve b)-.22 H -.295(een returned by).165 F 2.75(ap)108 191.1 S(re)-2.75 E(vious)-.275 E -F3(lo_open)2.75 E F1(.)A .059 -(The number of bytes actually written is returned.)108 208.2 R .059 -(In the e)5.559 F -.165(ve)-.275 G .059(nt of an error).165 F 2.809(,t) --.44 G .06(he return v)-2.809 F(alue)-.275 E(is ne)108 221.4 Q -.055(ga) --.165 G(ti).055 E -.165(ve)-.275 G(.).165 E F0 3(13.3.6. Seeking)72 -247.6 R(on a Lar)3 E(ge Object)-.12 E F1 1.76 -.88(To c)108 264.7 T -(hange the current read or write location on a lar).88 E -(ge object, call)-.198 E F2(int)148 289.9 Q -(lo_lseek\(PGconn *conn, int fd, int offset, int whence\))148 302.1 Q F1 -.386(This routine mo)108 328.3 R -.165(ve)-.165 G 3.136(st).165 G .386 -(he current location pointer for the lar)-3.136 F .386 -(ge object described by)-.198 F F3(fd)3.135 E F1 .385(to the)3.135 F(ne) -108 341.5 Q 6.512(wl)-.275 G 3.762(ocation speci\214ed by)-6.512 F F3 -(of)6.512 E(fset)-.198 E F1 9.262(.T)C 3.762(he v)-9.262 F 3.762(alid v) --.275 F 3.762(alues for .i whence are)-.275 F/F4 11/Courier@0 SF -(SEEK_SET)6.512 E(SEEK_CUR)108 354.7 Q F1(and)2.75 E F4(SEEK_END.)2.75 E -F0 3(13.3.7. Closing)72 380.9 R 3(aL)3 G(ar)-3 E(ge Object Descriptor) --.12 E F1 2.75(Al)108 398 S(ar)-2.75 E -(ge object may be closed by calling)-.198 E F2(int)148 423.2 Q -(lo_close\(PGconn *conn, int fd\))148 435.4 Q F1(where)108 461.6 Q F3 -(fd)3.9 E F1 1.15(is a lar)3.9 F 1.15(ge object descriptor returned by) --.198 F F3(lo_open)3.9 E F1 6.65(.O)C 3.9(ns)-6.65 G(uccess,)-3.9 E F3 -(lo_close)3.9 E F1(returns)3.899 E 2.75(zero. On)108 474.8 R(error)2.75 -E 2.75(,t)-.44 G(he return v)-2.75 E(alue is ne)-.275 E -.055(ga)-.165 G -(ti).055 E -.165(ve)-.275 G(.).165 E F0 3(13.4. Built)72 491.9 R(in r)3 -E(egister)-.216 E(ed functions)-.216 E F1 .182(There are tw)108 509 R -2.932(ob)-.11 G .182(uilt-in re)-3.152 F .182(gistered functions,)-.165 -F F3(lo_import)2.932 E F1(and)2.932 E F3(lo_e)2.932 E(xport)-.22 E F1 -.182(which are con)2.932 F -.165(ve)-.44 G(nient).165 E -(for use in SQL queries.)108 522.2 Q(Here is an e)108 539.3 Q -(xample of there use)-.165 E F2(CREATE TABLE image \()148 564.5 Q 66 -(name text,)196 576.7 R 54(raster oid)196 588.9 R(\);)148 601.1 Q -(INSERT INTO image \(name, raster\))148 625.5 Q -(VALUES \('beautiful image', lo_import\('/etc/motd'\)\);)166 637.7 Q -(SELECT lo_export\(image.raster, "/tmp/motd"\) from image)148 662.1 Q -(WHERE name = 'beautiful image';)166 674.3 Q/F5 11/Times-Bold@0 SF(64) -282.5 756 Q EP -%%Page: 65 65 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 4.583(13.5. Accessing)72 97.2 R(Lar)4.583 E 1.583 -(ge Objects fr)-.12 F 1.583(om LIBPQ)-.216 F/F1 11/Times-Roman@0 SF -(Belo)10.582 E 4.332(wi)-.275 G 4.332(sas)-4.332 G 1.582 -(ample program which sho)-4.332 F(ws)-.275 E(ho)108 110.4 Q 2.774(wt) --.275 G .024(he lar)-2.774 F .024(ge object interf)-.198 F .024(ace in) --.11 F/F2 10/Times-Roman@0 SF(LIBPQ)2.775 E F1 .025(can be used.)2.775 F --.165(Pa)5.525 G .025(rts of the program are commented).165 F(out b)108 -123.6 Q(ut are left in the source for the readers bene\214t.)-.22 E -(This program can be found in)5.5 E/F3 10/Courier@0 SF -(../src/test/examples)148 148.8 Q F1 1.29 -(Frontend applications which use the lar)108 178.9 R 1.289 -(ge object interf)-.198 F 1.289(ace in)-.11 F F2(LIBPQ)4.039 E F1 1.289 -(should include the)4.039 F(header \214le)108 192.1 Q/F4 11/Courier@0 SF -(libpq/libpq-fs.h)2.75 E F1(and link with the)2.75 E F4(libpq)2.75 E F1 -(library)2.75 E(.)-.715 E/F5 11/Times-Bold@0 SF(65)282.5 756 Q EP -%%Page: 66 66 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 3(13.6. Sample)72 97.2 R(Pr)3 E(ogram)-.216 E/F1 -10/Courier@0 SF(/*-----------------------------------------------------\ ---------------------)148 122.4 Q(*)154 134.6 Q 6(*t)154 146.8 S -(estlo.c--)-6 E 24(*t)154 159 S(est using large objects with libpq)-24 E -(*)154 171.2 Q 6(*C)154 183.4 S -(opyright \(c\) 1994, Regents of the University of California)-6 E(*)154 -195.6 Q(*)154 207.8 Q 6(*I)154 220 S(DENTIFICATION)-6 E 24(*$)154 232.2 -S(Header: /usr/local/devel/pglite/cvs/src/doc/manual.me,v 1.17 1996/02/\ -24 01:19:32 jolly Exp $)-24 E(*)154 244.4 Q(*--------------------------\ ------------------------------------------------)154 256.6 Q(*/)154 268.8 -Q(#include )148 281 Q(#include "libpq-fe.h")148 293.2 Q -(#include "libpq/libpq-fs.h")148 305.4 Q(#define BUFSIZE)148 329.8 Q -(1024)54 E(/*)148 354.2 Q 6(*i)154 366.4 S(mportFile -)-6 E 24(*i)154 -378.6 S -(mport file "in_filename" into database as large object "lobjOid")-24 E -(*)154 390.8 Q(*/)154 403 Q -(Oid importFile\(PGconn *conn, char *filename\))148 415.2 Q({)148 427.4 -Q(Oid lobjId;)172 439.6 Q(int lobj_fd;)172 451.8 Q(char buf[BUFSIZE];) -172 464 Q(int nbytes, tmp;)172 476.2 Q(int fd;)172 488.4 Q(/*)172 512.8 -Q 6(*o)178 525 S(pen the file to be read in)-6 E(*/)178 537.2 Q -(fd = open\(filename, O_RDONLY, 0666\);)172 549.4 Q(if \(fd < 0\))172 -561.6 Q 18({/)12 G 6(*e)-18 G(rror */)-6 E -(fprintf\(stderr, "can't open unix file)184 573.8 Q(})172 586 Q(/*)172 -610.4 Q 6(*c)178 622.6 S(reate the large object)-6 E(*/)178 634.8 Q -(lobjId = lo_creat\(conn, INV_READ|INV_WRITE\);)172 647 Q -(if \(lobjId == 0\) {)172 659.2 Q -(fprintf\(stderr, "can't create large object"\);)184 671.4 Q(})172 683.6 -Q(lobj_fd = lo_open\(conn, lobjId, INV_WRITE\);)172 708 Q(/*)172 720.2 Q -/F2 11/Times-Bold@0 SF(66)282.5 756 Q EP -%%Page: 67 67 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF 6(*r)178 96.2 S -(ead in from the Unix file and write to the inversion file)-6 E(*/)178 -108.4 Q(while \(\(nbytes = read\(fd, buf, BUFSIZE\)\) > 0\) {)172 120.6 -Q(tmp = lo_write\(conn, lobj_fd, buf, nbytes\);)184 132.8 Q -(if \(tmp < nbytes\) {)184 145 Q(fprintf\(stderr, "error while reading) -208 157.2 Q(})184 169.4 Q(})172 181.6 Q(\(void\) close\(fd\);)172 206 Q -(\(void\) lo_close\(conn, lobj_fd\);)172 218.2 Q(return lobjId;)172 -242.6 Q(})148 254.8 Q -(void pickout\(PGconn *conn, Oid lobjId, int start, int len\))148 279.2 -Q({)148 291.4 Q(int lobj_fd;)172 303.6 Q(char* buf;)172 315.8 Q -(int nbytes;)172 328 Q(int nread;)172 340.2 Q -(lobj_fd = lo_open\(conn, lobjId, INV_READ\);)172 364.6 Q -(if \(lobj_fd < 0\) {)172 376.8 Q -(fprintf\(stderr,"can't open large object %d",)184 389 Q(lobjId\);)220 -401.2 Q(})172 413.4 Q(lo_lseek\(conn, lobj_fd, start, SEEK_SET\);)172 -437.8 Q(buf = malloc\(len+1\);)172 450 Q(nread = 0;)172 474.4 Q -(while \(len - nread > 0\) {)172 486.6 Q -(nbytes = lo_read\(conn, lobj_fd, buf, len - nread\);)184 498.8 Q -(buf[nbytes] = ' ';)184 511 Q(fprintf\(stderr,">>> %s", buf\);)184 523.2 -Q(nread += nbytes;)184 535.4 Q(})172 547.6 Q(fprintf\(stderr,"0\);)172 -559.8 Q(lo_close\(conn, lobj_fd\);)172 572 Q(})148 584.2 Q -(void overwrite\(PGconn *conn, Oid lobjId, int start, int len\))148 -608.6 Q({)148 620.8 Q(int lobj_fd;)172 633 Q(char* buf;)172 645.2 Q -(int nbytes;)172 657.4 Q(int nwritten;)172 669.6 Q(int i;)172 681.8 Q -(lobj_fd = lo_open\(conn, lobjId, INV_READ\);)172 706.2 Q -(if \(lobj_fd < 0\) {)172 718.4 Q/F1 11/Times-Bold@0 SF(67)282.5 756 Q -EP -%%Page: 68 68 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(fprintf\(stderr,"can't open large object %d",)184 -96.2 Q(lobjId\);)220 108.4 Q(})172 120.6 Q -(lo_lseek\(conn, lobj_fd, start, SEEK_SET\);)172 145 Q -(buf = malloc\(len+1\);)172 157.2 Q(for \(i=0;i 0\) {)172 242.6 Q -(nbytes = lo_write\(conn, lobj_fd, buf + nwritten, len - nwritten\);)184 -254.8 Q(nwritten += nbytes;)184 267 Q(})172 279.2 Q -(fprintf\(stderr,"0\);)172 291.4 Q(lo_close\(conn, lobj_fd\);)172 303.6 -Q(})148 315.8 Q(/*)148 352.4 Q 6(*e)154 364.6 S(xportFile -)-6 E 24(*e) -154 376.8 S(xport large object "lobjOid" to file "out_filename")-24 E(*) -154 389 Q(*/)154 401.2 Q -(void exportFile\(PGconn *conn, Oid lobjId, char *filename\))148 413.4 Q -({)148 425.6 Q(int lobj_fd;)172 437.8 Q(char buf[BUFSIZE];)172 450 Q -(int nbytes, tmp;)172 462.2 Q(int fd;)172 474.4 Q(/*)172 498.8 Q 6(*c) -178 511 S(reate an inversion "object")-6 E(*/)178 523.2 Q -(lobj_fd = lo_open\(conn, lobjId, INV_READ\);)172 535.4 Q -(if \(lobj_fd < 0\) {)172 547.6 Q -(fprintf\(stderr,"can't open large object %d",)184 559.8 Q(lobjId\);)220 -572 Q(})172 584.2 Q(/*)172 608.6 Q 6(*o)178 620.8 S -(pen the file to be written to)-6 E(*/)178 633 Q -(fd = open\(filename, O_CREAT|O_WRONLY, 0666\);)172 645.2 Q -(if \(fd < 0\))172 657.4 Q 18({/)12 G 6(*e)-18 G(rror */)-6 E -(fprintf\(stderr, "can't open unix file)184 669.6 Q(filename\);)220 -681.8 Q(})172 694 Q(/*)172 718.4 Q/F1 11/Times-Bold@0 SF(68)282.5 756 Q -EP -%%Page: 69 69 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF 6(*r)178 96.2 S -(ead in from the Unix file and write to the inversion file)-6 E(*/)178 -108.4 Q -(while \(\(nbytes = lo_read\(conn, lobj_fd, buf, BUFSIZE\)\) > 0\) {)172 -120.6 Q(tmp = write\(fd, buf, nbytes\);)184 132.8 Q -(if \(tmp < nbytes\) {)196 145 Q(fprintf\(stderr,"error while writing) -208 157.2 Q(filename\);)244 169.4 Q(})184 181.6 Q(})172 193.8 Q -(\(void\) lo_close\(conn, lobj_fd\);)172 218.2 Q(\(void\) close\(fd\);) -172 230.4 Q(return;)172 254.8 Q(})148 267 Q(void)148 291.4 Q -(exit_nicely\(PGconn* conn\))148 303.6 Q({)148 315.8 Q -(PQfinish\(conn\);)160 328 Q(exit\(1\);)160 340.2 Q(})148 352.4 Q(int) -148 376.8 Q(main\(int argc, char **argv\))148 389 Q({)148 401.2 Q -(char *in_filename, *out_filename;)172 413.4 Q(char *database;)172 425.6 -Q(Oid lobjOid;)172 437.8 Q(PGconn *conn;)172 450 Q(PGresult *res;)172 -462.2 Q(if \(argc != 4\) {)172 486.6 Q -(fprintf\(stderr, "Usage: %s database_name in_filename out_filename0,) -184 498.8 Q(argv[0]\);)220 511 Q(exit\(1\);)184 523.2 Q(})172 535.4 Q -(database = argv[1];)172 559.8 Q(in_filename = argv[2];)172 572 Q -(out_filename = argv[3];)172 584.2 Q(/*)172 608.6 Q 6(*s)178 620.8 S -(et up the connection)-6 E(*/)178 633 Q -(conn = PQsetdb\(NULL, NULL, NULL, NULL, database\);)172 645.2 Q -(/* check to see that the backend connection was successfully made */) -172 669.6 Q(if \(PQstatus\(conn\) == CONNECTION_BAD\) {)172 681.8 Q -(fprintf\(stderr,"Connection to database '%s' failed.0, database\);)184 -694 Q(fprintf\(stderr,"%s",PQerrorMessage\(conn\)\);)184 706.2 Q -(exit_nicely\(conn\);)184 718.4 Q/F1 11/Times-Bold@0 SF(69)282.5 756 Q -EP -%%Page: 70 70 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(})172 96.2 Q(res = PQexec\(conn, "begin"\);)172 -120.6 Q(PQclear\(res\);)172 132.8 Q(printf\("importing file)172 145 Q 6 -(/* lobjOid)148 157.2 R 6(=i)6 G(mportFile\(conn, in_filename\); */)-6 E -(lobjOid = lo_import\(conn, in_filename\);)172 169.4 Q(/*)148 181.6 Q -(printf\("as large object %d.0, lobjOid\);)172 193.8 Q -(printf\("picking out bytes 1000-2000 of the large object0\);)172 218.2 -Q(pickout\(conn, lobjOid, 1000, 1000\);)172 230.4 Q -(printf\("overwriting bytes 1000-2000 of the large object with X's0\);) -172 254.8 Q(overwrite\(conn, lobjOid, 1000, 1000\);)172 267 Q(*/)148 -279.2 Q(printf\("exporting large object to file)172 303.6 Q 18 -(/* exportFile\(conn,)148 315.8 R(lobjOid, out_filename\); */)6 E -(lo_export\(conn, lobjOid,out_filename\);)172 328 Q -(res = PQexec\(conn, "end"\);)172 352.4 Q(PQclear\(res\);)172 364.6 Q -(PQfinish\(conn\);)172 376.8 Q(exit\(0\);)172 389 Q(})148 401.2 Q/F1 11 -/Times-Bold@0 SF(70)282.5 756 Q EP -%%Page: 71 71 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(14. THE)72 165.4 R(POSTGRES R)4.75 E -(ULE SYSTEM)-.57 E 77.5 178.6 72 178.6 DL 80.5 178.6 75 178.6 DL 86 -178.6 80.5 178.6 DL 91.5 178.6 86 178.6 DL 97 178.6 91.5 178.6 DL 102.5 -178.6 97 178.6 DL 108 178.6 102.5 178.6 DL 113.5 178.6 108 178.6 DL 119 -178.6 113.5 178.6 DL 124.5 178.6 119 178.6 DL 130 178.6 124.5 178.6 DL -135.5 178.6 130 178.6 DL 141 178.6 135.5 178.6 DL 146.5 178.6 141 178.6 -DL 152 178.6 146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 178.6 157.5 -178.6 DL 168.5 178.6 163 178.6 DL 174 178.6 168.5 178.6 DL 179.5 178.6 -174 178.6 DL 185 178.6 179.5 178.6 DL 190.5 178.6 185 178.6 DL 196 178.6 -190.5 178.6 DL 201.5 178.6 196 178.6 DL 207 178.6 201.5 178.6 DL 212.5 -178.6 207 178.6 DL 218 178.6 212.5 178.6 DL 223.5 178.6 218 178.6 DL 229 -178.6 223.5 178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 234.5 178.6 DL -245.5 178.6 240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 178.6 251 178.6 -DL 262 178.6 256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 178.6 267.5 -178.6 DL 278.5 178.6 273 178.6 DL 284 178.6 278.5 178.6 DL 289.5 178.6 -284 178.6 DL 295 178.6 289.5 178.6 DL 300.5 178.6 295 178.6 DL 306 178.6 -300.5 178.6 DL 311.5 178.6 306 178.6 DL 317 178.6 311.5 178.6 DL 322.5 -178.6 317 178.6 DL 328 178.6 322.5 178.6 DL 333.5 178.6 328 178.6 DL 339 -178.6 333.5 178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 344.5 178.6 DL -355.5 178.6 350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 178.6 361 178.6 -DL 372 178.6 366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 178.6 377.5 -178.6 DL 388.5 178.6 383 178.6 DL 394 178.6 388.5 178.6 DL 399.5 178.6 -394 178.6 DL 405 178.6 399.5 178.6 DL 410.5 178.6 405 178.6 DL 416 178.6 -410.5 178.6 DL 421.5 178.6 416 178.6 DL 427 178.6 421.5 178.6 DL 432.5 -178.6 427 178.6 DL 438 178.6 432.5 178.6 DL 443.5 178.6 438 178.6 DL 449 -178.6 443.5 178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 454.5 178.6 DL -465.5 178.6 460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 178.6 471 178.6 -DL 482 178.6 476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 178.6 487.5 -178.6 DL 498.5 178.6 493 178.6 DL 504 178.6 498.5 178.6 DL/F1 11 -/Times-Roman@0 SF 3.372 -(Production rule systems are conceptually simple, b)108 208.9 R 3.372 -(ut there are man)-.22 F 6.122(ys)-.165 G 3.372(ubtle points)-6.122 F -(in)108 222.1 Q -.22(vo)-.44 G(lv).22 E .603(ed in actually using them.) --.165 F(Consequently)6.103 E 3.353(,w)-.715 G 3.352(ew)-3.353 G .602 -(ill not attempt to e)-3.352 F .602(xplain the actual)-.165 F 2.737 -(syntax and operation of the)108 235.3 R/F2 10/Times-Roman@0 SF -(POSTGRES)5.488 E F1 2.738(rule system here.)5.488 F 2.738 -(Instead, you should read)8.238 F([ST)108 248.5 Q 1.803(ON90b] to under\ -stand some of these points and the theoretical foundations of the)-.198 -F F2(POSTGRES)108 261.7 Q F1 2.477 -(rule system before trying to use rules.)5.227 F 2.478 -(The discussion in this section is)7.977 F .205(intended to pro)108 -274.9 R .205(vide an o)-.165 F -.165(ve)-.165 G(rvie).165 E 2.955(wo) --.275 G 2.954(ft)-2.955 G(he)-2.954 E F2(POSTGRES)2.954 E F1 .204 -(rule system and point the user at help-)2.954 F(ful references and e) -108 288.1 Q(xamples.)-.165 E 1.641(The \231query re)108 305.2 R 1.642 -(write\232 rule system modi\214es queries to tak)-.275 F 4.392(er)-.11 G -1.642(ules into consideration, and)-4.392 F .518 -(then passes the modi\214ed query to the query optimizer for e)108 318.4 -R -.165(xe)-.165 G 3.268(cution. It).165 F .517(is v)3.267 F .517 -(ery po)-.165 F(werful,)-.275 E .246(and can be used for man)108 331.6 R -2.996(yt)-.165 G .246(hings such as query language procedures, vie) --2.996 F .246(ws, and v)-.275 F(ersions.)-.165 E(The po)108 344.8 Q -(wer of this rule system is discussed in [ONG90] as well as [ST)-.275 E -(ON90b].)-.198 E/F3 11/Times-Bold@0 SF(71)282.5 756 Q EP -%%Page: 72 72 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(15. ADMINISTERING)72 165.4 R -(POSTGRES)4.75 E 77.5 178.6 72 178.6 DL 80.5 178.6 75 178.6 DL 86 178.6 -80.5 178.6 DL 91.5 178.6 86 178.6 DL 97 178.6 91.5 178.6 DL 102.5 178.6 -97 178.6 DL 108 178.6 102.5 178.6 DL 113.5 178.6 108 178.6 DL 119 178.6 -113.5 178.6 DL 124.5 178.6 119 178.6 DL 130 178.6 124.5 178.6 DL 135.5 -178.6 130 178.6 DL 141 178.6 135.5 178.6 DL 146.5 178.6 141 178.6 DL 152 -178.6 146.5 178.6 DL 157.5 178.6 152 178.6 DL 163 178.6 157.5 178.6 DL -168.5 178.6 163 178.6 DL 174 178.6 168.5 178.6 DL 179.5 178.6 174 178.6 -DL 185 178.6 179.5 178.6 DL 190.5 178.6 185 178.6 DL 196 178.6 190.5 -178.6 DL 201.5 178.6 196 178.6 DL 207 178.6 201.5 178.6 DL 212.5 178.6 -207 178.6 DL 218 178.6 212.5 178.6 DL 223.5 178.6 218 178.6 DL 229 178.6 -223.5 178.6 DL 234.5 178.6 229 178.6 DL 240 178.6 234.5 178.6 DL 245.5 -178.6 240 178.6 DL 251 178.6 245.5 178.6 DL 256.5 178.6 251 178.6 DL 262 -178.6 256.5 178.6 DL 267.5 178.6 262 178.6 DL 273 178.6 267.5 178.6 DL -278.5 178.6 273 178.6 DL 284 178.6 278.5 178.6 DL 289.5 178.6 284 178.6 -DL 295 178.6 289.5 178.6 DL 300.5 178.6 295 178.6 DL 306 178.6 300.5 -178.6 DL 311.5 178.6 306 178.6 DL 317 178.6 311.5 178.6 DL 322.5 178.6 -317 178.6 DL 328 178.6 322.5 178.6 DL 333.5 178.6 328 178.6 DL 339 178.6 -333.5 178.6 DL 344.5 178.6 339 178.6 DL 350 178.6 344.5 178.6 DL 355.5 -178.6 350 178.6 DL 361 178.6 355.5 178.6 DL 366.5 178.6 361 178.6 DL 372 -178.6 366.5 178.6 DL 377.5 178.6 372 178.6 DL 383 178.6 377.5 178.6 DL -388.5 178.6 383 178.6 DL 394 178.6 388.5 178.6 DL 399.5 178.6 394 178.6 -DL 405 178.6 399.5 178.6 DL 410.5 178.6 405 178.6 DL 416 178.6 410.5 -178.6 DL 421.5 178.6 416 178.6 DL 427 178.6 421.5 178.6 DL 432.5 178.6 -427 178.6 DL 438 178.6 432.5 178.6 DL 443.5 178.6 438 178.6 DL 449 178.6 -443.5 178.6 DL 454.5 178.6 449 178.6 DL 460 178.6 454.5 178.6 DL 465.5 -178.6 460 178.6 DL 471 178.6 465.5 178.6 DL 476.5 178.6 471 178.6 DL 482 -178.6 476.5 178.6 DL 487.5 178.6 482 178.6 DL 493 178.6 487.5 178.6 DL -498.5 178.6 493 178.6 DL 504 178.6 498.5 178.6 DL/F1 11/Times-Roman@0 SF -1.395(In this section, we will discuss aspects of)108 208.9 R/F2 10 -/Times-Roman@0 SF(POSTGRES)4.145 E F1 1.394 -(that are of interest to those who)4.144 F(mak)108 222.1 Q 3.096(ee)-.11 -G(xtensi)-3.261 E .676 -.165(ve u)-.275 H .346(se of).165 F F2(POSTGRES) -3.096 E F1 3.096(,o)C 3.096(rw)-3.096 G .346 -(ho are the site administrator for a group of)-3.096 F F2(POST)3.096 E -(-)-.92 E(GRES)108 235.3 Q F1(users.)2.75 E/F3 12/Times-Bold@0 SF 3 -(15.1. Fr)72 261.5 R(equent T)-.216 E(asks)-1.104 E 77.5 274.7 72 274.7 -DL 80.5 274.7 75 274.7 DL 86 274.7 80.5 274.7 DL 91.5 274.7 86 274.7 DL -97 274.7 91.5 274.7 DL 102.5 274.7 97 274.7 DL 108 274.7 102.5 274.7 DL -113.5 274.7 108 274.7 DL 119 274.7 113.5 274.7 DL 124.5 274.7 119 274.7 -DL 130 274.7 124.5 274.7 DL 135.5 274.7 130 274.7 DL 141 274.7 135.5 -274.7 DL 146.5 274.7 141 274.7 DL 152 274.7 146.5 274.7 DL 157.5 274.7 -152 274.7 DL 163 274.7 157.5 274.7 DL 168.5 274.7 163 274.7 DL 174 274.7 -168.5 274.7 DL 179.5 274.7 174 274.7 DL 185 274.7 179.5 274.7 DL 190.5 -274.7 185 274.7 DL 196 274.7 190.5 274.7 DL 201.5 274.7 196 274.7 DL 207 -274.7 201.5 274.7 DL 212.5 274.7 207 274.7 DL 218 274.7 212.5 274.7 DL -223.5 274.7 218 274.7 DL 229 274.7 223.5 274.7 DL 234.5 274.7 229 274.7 -DL 240 274.7 234.5 274.7 DL 245.5 274.7 240 274.7 DL 251 274.7 245.5 -274.7 DL 256.5 274.7 251 274.7 DL 262 274.7 256.5 274.7 DL 267.5 274.7 -262 274.7 DL 273 274.7 267.5 274.7 DL 278.5 274.7 273 274.7 DL 284 274.7 -278.5 274.7 DL 289.5 274.7 284 274.7 DL 295 274.7 289.5 274.7 DL 300.5 -274.7 295 274.7 DL 306 274.7 300.5 274.7 DL 311.5 274.7 306 274.7 DL 317 -274.7 311.5 274.7 DL 322.5 274.7 317 274.7 DL 328 274.7 322.5 274.7 DL -333.5 274.7 328 274.7 DL 339 274.7 333.5 274.7 DL 344.5 274.7 339 274.7 -DL 350 274.7 344.5 274.7 DL 355.5 274.7 350 274.7 DL 361 274.7 355.5 -274.7 DL 366.5 274.7 361 274.7 DL 372 274.7 366.5 274.7 DL 377.5 274.7 -372 274.7 DL 383 274.7 377.5 274.7 DL 388.5 274.7 383 274.7 DL 394 274.7 -388.5 274.7 DL 399.5 274.7 394 274.7 DL 405 274.7 399.5 274.7 DL 410.5 -274.7 405 274.7 DL 416 274.7 410.5 274.7 DL 421.5 274.7 416 274.7 DL 427 -274.7 421.5 274.7 DL 432.5 274.7 427 274.7 DL 438 274.7 432.5 274.7 DL -443.5 274.7 438 274.7 DL 449 274.7 443.5 274.7 DL 454.5 274.7 449 274.7 -DL 460 274.7 454.5 274.7 DL 465.5 274.7 460 274.7 DL 471 274.7 465.5 -274.7 DL 476.5 274.7 471 274.7 DL 482 274.7 476.5 274.7 DL 487.5 274.7 -482 274.7 DL 493 274.7 487.5 274.7 DL 498.5 274.7 493 274.7 DL 504 274.7 -498.5 274.7 DL F1 .405 -(Here we will brie\215y discuss some procedures that you should be f)108 -305 R .405(amiliar with in manag-)-.11 F(ing an)108 318.2 Q(y)-.165 E F2 -(POSTGRES)2.75 E F1(installation.)2.75 E F3 3(15.1.1. Starting)72 344.4 -R(the P)3 E(ostmaster)-.24 E F1 .539(If you did not install)108 361.5 R -F2(POSTGRES)3.289 E F1 -.165(ex)3.289 G .538 -(actly as described in the installation instructions, you).165 F(may ha) -108 374.7 Q .33 -.165(ve t)-.22 H 2.75(op).165 G -(erform some additional steps before starting the)-2.75 E/F4 11 -/Courier@0 SF(postmaster)2.75 E F1(process.)2.75 E 5.5<8345>113.5 391.8 -S -.165(ve)-5.5 G 3.135(ni).165 G 3.135(fy)-3.135 G .385 -(ou were not the person who installed)-3.135 F F2(POSTGRES)3.136 E F1 -3.136(,y)C .386(ou should understand the)-3.136 F 1.448 -(installation instructions.)122.85 405 R 1.448 -(The installation instructions e)6.948 F 1.448 -(xplain some important issues)-.165 F .008(with respect to where)122.85 -418.2 R F2(POSTGRES)2.759 E F1 .009 -(places some important \214les, proper settings for en)2.759 F(vi-)-.44 -E(ronment v)122.85 431.4 Q(ariables, etc. that may v)-.275 E -(ary from one v)-.275 E(ersion of)-.165 E F2(POSTGRES)2.75 E F1 -(to another)2.75 E(.)-.605 E 5.5<8359>113.5 444.6 S(ou)-6.71 E/F5 11 -/Times-Italic@0 SF(must)4.815 E F1 2.065(start the)4.815 F F4 -(postmaster)4.815 E F1 2.064(process with the user)4.814 F 2.064 -(-id that o)-.22 F 2.064(wns the installed)-.275 F 1.264 -(database \214les.)122.85 457.8 R 1.264(In most cases, if you ha)6.764 F -1.594 -.165(ve f)-.22 H(ollo).165 E 1.264 -(wed the installation instructions, this)-.275 F .393 -(will be the user \231postgres\232.)122.85 471 R .392 -(If you do not start the)5.893 F F4(postmaster)3.142 E F1 .392 -(with the right user)3.142 F(-)-.22 E .703(id, the back)122.85 484.2 R -.703(end serv)-.11 F .703(ers that are started by the)-.165 F F4 -(postmaster)3.453 E F1 .704(will not be able to read)3.453 F(the data.) -122.85 497.4 Q 5.5<834d>113.5 510.6 S(ak)-5.5 E 3.831(es)-.11 G 1.081 -(ure that)-3.831 F F4(/usr/local/postgres95/bin)3.831 E F1 1.08 -(is in your shell command path,)3.831 F(because the)122.85 523.8 Q F4 -(postmaster)2.75 E F1(will use your)2.75 E F4(PATH)2.75 E F1(to locate) -2.75 E F2(POSTGRES)2.75 E F1(commands.)2.75 E 5.5<8352>113.5 537 S .571 -(emember to set the en)-5.5 F .571(vironment v)-.44 F(ariable)-.275 E F4 -(PGDATA)3.321 E F1 .571(to the directory where the)3.321 F F2(POST)3.322 -E(-)-.92 E(GRES)122.85 550.2 Q F1 .043(databases are installed.)2.794 F -.043(\(This v)5.543 F .043(ariable is more fully e)-.275 F .043 -(xplained in the)-.165 F F2(POSTGRES)2.793 E F1 -(installation instructions.\))122.85 563.4 Q 5.5<8349>113.5 576.6 S -3.041(fy)-5.5 G .292(ou do start the)-3.041 F F4(postmaster)3.042 E F1 -.292(using non-standard options, such as a dif)3.042 F .292(ferent TCP) --.275 F .052(port number)122.85 589.8 R 2.802(,r)-.44 G .052 -(emember to tell all users so that the)-2.802 F 2.802(yc)-.165 G .052 -(an set their)-2.802 F F4(PGPORT)2.801 E F1(en)2.801 E(vironment)-.44 E --.275(va)122.85 603 S(riable correctly).275 E(.)-.715 E F3 3 -(15.1.2. Shutting)72 629.2 R(Do)3 E(wn the P)-.12 E(ostmaster)-.24 E F1 -.174(If you need to halt the)108 646.3 R F4(postmaster)2.924 E F1 .175 -(process, you can use the)2.925 F F2(UNIX)2.925 E F4(kill)2.925 E F1 -.175(\(1\) command.)B .445(Some people habitually use the)108 659.5 R F4 -(-9)3.195 E F1(or)3.195 E F4(-KILL)3.195 E F1 .445 -(option; this should ne)3.195 F -.165(ve)-.275 G 3.194(rb).165 G 3.194 -(en)-3.194 G .444(ecessary and)-3.194 F 1.129 -(we do not recommend that you do this, as the)108 672.7 R F4(postmaster) -3.879 E F1 1.129(will be unable to free its)3.879 F -.275(va)108 685.9 S -(rious shared resources, its child processes will be unable to e).275 E -(xit gracefully)-.165 E 2.75(,e)-.715 G(tc.)-2.75 E/F6 11/Times-Bold@0 -SF(72)282.5 756 Q EP -%%Page: 73 73 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 3(15.1.3. Adding)72 97.2 R(and Remo)3 E -(ving Users)-.12 E/F1 11/Times-Roman@0 SF(The)108 114.3 Q/F2 11 -/Courier@0 SF(createuser)3.748 E F1(and)3.748 E F2(destroyuser)3.748 E -F1 .998(commands enable and disable access to)3.748 F/F3 10 -/Times-Roman@0 SF(POST)3.747 E(-)-.92 E(GRES)108 127.5 Q F1 -(by speci\214c users on the host system.)2.75 E F0 3(15.1.4. P)72 153.7 -R(eriodic Upk)-.24 E(eep)-.12 E F1(The)108 170.8 Q F2(vacuum)2.825 E F1 -.075(command should be run on each database periodically)2.825 F 5.575 -(.T)-.715 G .076(his command pro-)-5.575 F .532 -(cesses deleted instances)108 186.2 R/F4 8/Times-Roman@0 SF(9)-4.4 I F1 -.532(and, more importantly)3.282 4.4 N 3.282(,u)-.715 G .532 -(pdates the system)-3.282 F/F5 11/Times-Italic@0 SF(statistics)3.281 E -F1(concerning)3.281 E .531(the size of each class.)108 199.4 R .531 -(If these statistics are permitted to become out-of-date and inaccu-) -6.031 F .521(rate, the)108 212.6 R F3(POSTGRES)3.271 E F1 .52 -(query optimizer may mak)3.271 F 3.27(ee)-.11 G .52 -(xtremely poor decisions with respect to)-3.435 F 1.083(query e)108 -225.8 R -.275(va)-.275 G 1.083(luation strate).275 F 3.833 -(gies. Therefore,)-.165 F 1.083(we recommend running)3.833 F F2(vacuum) -3.834 E F1 -2.365 -.275(ev e)3.834 H 1.084(ry night or).275 F -(so \(perhaps in a script that is e)108 239 Q -.165(xe)-.165 G -(cuted by the).165 E F3(UNIX)2.75 E F2(cron)2.75 E F1(\(1\) or)A F2(at) -2.75 E F1(\(1\) commands\).)A/F6 11/Times-Bold@0 SF .066(Do fr)108 256.1 -R .066(equent backups)-.198 F F1 5.565(.T)C .065 -(hat is, you should either back up your database directories using) --5.565 F(the)108 269.3 Q F3(POSTGRES)4.428 E F6(copy)4.428 E F1 1.679 -(command and/or the)4.429 F F3(UNIX)4.429 E F2(dump)4.429 E F1 1.679 -(\(1\) or)B F2(tar)4.429 E F1 1.679(\(1\) commands.)B -1.21(Yo)7.179 G -(u)1.21 E .45(may think, \231Wh)108 282.5 R 3.2(ya)-.055 G 3.2(mIb)-3.2 -G .449(acking up my database?)-3.2 F .449(What about crash reco)5.949 F --.165(ve)-.165 G 3.199(ry?\232 One).165 F(side)3.199 E(ef)108 295.7 Q -.483(fect of the)-.275 F F3(POSTGRES)3.233 E F1 .483(\231no o)3.233 F --.165(ve)-.165 G .483 -(rwrite\232 storage manager is that it is also a \231no log\232 stor) -.165 F(-)-.22 E 1.793(age manager)108 308.9 R 7.293(.T)-.605 G 1.792(ha\ -t is, the database log stores only abort/commit data, and this is not) --7.293 F .713(enough information to reco)108 322.1 R -.165(ve)-.165 G -3.463(rt).165 G .713 -(he database if the storage medium \(disk\) or the database)-3.463 F -1.262(\214les are corrupted!)108 335.3 R 1.261(In other w)6.761 F 1.261 -(ords, if a disk block goes bad or)-.11 F F3(POSTGRES)4.011 E F1 1.261 -(happens to)4.011 F .486(corrupt a database \214le,)108 348.5 R F6 -.275 -(yo)3.236 G 3.236(uc).275 G .486(annot r)-3.236 F(eco)-.198 E -.11(ve) --.11 G 3.236(rt).11 G .486(hat \214le)-3.236 F F1 5.986(.T)C .486 -(his can be disastrous if the \214le is)-5.986 F -(one of the shared catalogs, such as)108 361.7 Q F2(pg_database)2.75 E -F1(.)A F0 3(15.1.5. T)72 387.9 R(uning)-1.104 E F1 .265(Once your users\ - start to load a signi\214cant amount of data, you will typically run i\ -nto per)108 405 R(-)-.22 E 1.034(formance problems.)108 418.2 R F3 -(POSTGRES)6.534 E F1 1.034(is not the f)3.784 F 1.035 -(astest DBMS in the w)-.11 F 1.035(orld, b)-.11 F 1.035(ut man)-.22 F -3.785(yo)-.165 G 3.785(ft)-3.785 G(he)-3.785 E -.11(wo)108 431.4 S .19 -(rst problems encountered by users are due to their lack of e).11 F .19 -(xperience with an)-.165 F 2.94(yD)-.165 G(BMS.)-2.94 E -(Some general tips include:)108 444.6 Q 13.75(\(1\) De\214ne)113.5 461.7 -R 2.337(indices o)5.087 F -.165(ve)-.165 G 5.087(ra).165 G(ttrib)-5.087 -E 2.338(utes that are commonly used for quali\214cations.)-.22 F -.165 -(Fo)7.838 G(r).165 E -.165(ex)142.826 474.9 S(ample, if you often e).165 -E -.165(xe)-.165 G(cute queries of the form).165 E/F7 10/Courier@0 SF -(SELECT * from EMP where salary < 5000)182.826 500.1 Q F1 1.478 -(then a B-tree inde)142.826 526.3 R 4.228(xo)-.165 G 4.228(nt)-4.228 G -(he)-4.228 E F2(salary)4.227 E F1(attrib)4.227 E 1.477 -(ute will probably be useful.)-.22 F 1.477(If scans)6.977 F(in)142.826 -539.5 Q -.22(vo)-.44 G(lving equality are more common, as in).22 E F7 -(SELECT * from EMP where salary = 5000)182.826 564.7 Q F1 2.063 -(then you should consider de\214ning a hash inde)142.826 590.9 R 4.814 -(xo)-.165 G(n)-4.814 E F2(salary)4.814 E F1 7.564(.Y)C 2.064 -(ou can de\214ne)-8.774 F .202 -(both, though it will use more disk space and may slo)142.826 604.1 R -2.951(wd)-.275 G -.275(ow)-2.951 G 2.951(nu).275 G .201(pdates a bit.) --2.951 F(Scans)5.701 E(using indices are)142.826 617.3 Q F6(much)2.75 E -F1 -.11(fa)2.75 G(ster than sequential scans of the entire class.).11 E -13.75(\(2\) Run)113.5 634.4 R(the)3.882 E F2(vacuum)3.882 E F1 1.132 -(command a lot.)3.882 F 1.132 -(This command updates the statistics that the)6.632 F .404 -(query optimizer uses to mak)142.826 647.6 R 3.154(ei)-.11 G .404 -(ntelligent decisions; if the statistics are inaccurate,)-3.154 F .088 -(the system will mak)142.826 660.8 R 2.839(ei)-.11 G .089 -(nordinately stupid decisions with respect to the w)-2.839 F .089 -(ay it joins)-.11 F .32 LW 76 670.4 72 670.4 DL 80 670.4 76 670.4 DL 84 -670.4 80 670.4 DL 88 670.4 84 670.4 DL 92 670.4 88 670.4 DL 96 670.4 92 -670.4 DL 100 670.4 96 670.4 DL 104 670.4 100 670.4 DL 108 670.4 104 -670.4 DL 112 670.4 108 670.4 DL 116 670.4 112 670.4 DL 120 670.4 116 -670.4 DL 124 670.4 120 670.4 DL 128 670.4 124 670.4 DL 132 670.4 128 -670.4 DL 136 670.4 132 670.4 DL 140 670.4 136 670.4 DL 144 670.4 140 -670.4 DL 148 670.4 144 670.4 DL 152 670.4 148 670.4 DL 156 670.4 152 -670.4 DL 160 670.4 156 670.4 DL 164 670.4 160 670.4 DL 168 670.4 164 -670.4 DL 172 670.4 168 670.4 DL 176 670.4 172 670.4 DL 180 670.4 176 -670.4 DL 184 670.4 180 670.4 DL 188 670.4 184 670.4 DL 192 670.4 188 -670.4 DL 196 670.4 192 670.4 DL 200 670.4 196 670.4 DL 204 670.4 200 -670.4 DL 208 670.4 204 670.4 DL 212 670.4 208 670.4 DL 216 670.4 212 -670.4 DL/F8 5/Times-Roman@0 SF(9)93.6 680.8 Q F4 .195(This may mean dif) -2.195 3.2 N .195(ferent things depending on the)-.2 F/F9 8 -/Times-Italic@0 SF(ar)2.195 E -.12(ch)-.296 G .195(ive mode).12 F F4 -.195(with which each class has been created.)2.195 F(Ho)4.195 E(we)-.2 E --.12(ve)-.2 G .835 -.32(r, t).12 H .195(he current).32 F .759 -(implementation of the)72 693.6 R/F10 8/Courier@0 SF(vacuum)2.759 E F4 -.759(command does)2.759 F F9(not)2.759 E F4 .759(perform an)2.759 F -2.759(yc)-.12 G .759(ompaction or clustering of data.)-2.759 F .76 -(Therefore, the)4.76 F/F11 7/Times-Roman@0 SF(UNIX)2.76 E F4 .76 -(\214les which)2.76 F(store each)72 703.2 Q F11(POSTGRES)2 E F4 -(class ne)2 E -.12(ve)-.2 G 2(rs).12 G -(hrink and the space \231reclaimed\232 by)-2 E F10(vacuum)2 E F4(is ne)2 -E -.12(ve)-.2 G 2(ra).12 G(ctually reused.)-2 E F6(73)282.5 756 Q EP -%%Page: 74 74 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF(and scans classes.)142.826 97.2 Q 13.75 -(\(3\) When)113.5 114.3 R 1.381 -(specifying query qual\214cations \(i.e., the)4.131 F/F1 11/Courier@0 SF -(where)4.131 E F0 1.38(part of the query\), try to)4.13 F 2.234 -(ensure that a clause in)142.826 127.5 R -.22(vo)-.44 G 2.235 -(lving a constant can be turned into one of the form).22 F/F2 11 -/Times-Italic@0 SF -.165(ra)142.826 140.7 S(ng).165 E(e_variable oper) --.11 E(ator constant)-.165 E F0 2.75(,e)C(.g.,)-2.75 E/F3 10/Courier@0 -SF(EMP.salary = 5000)182.826 165.9 Q F0(The)142.826 192.1 Q/F4 10 -/Times-Roman@0 SF(POSTGRES)3.184 E F0 .433 -(query optimizer will only use an inde)3.184 F 3.183(xw)-.165 G .433 -(ith a constant quali\214ca-)-3.183 F(tion of this form.)142.826 205.3 Q -(It doesn')5.5 E 2.75(th)-.198 G(urt to write the clause as)-2.75 E F3 -(5000 = EMP.salary)182.826 230.5 Q F0 .779 -(if the operator \(in this case,)142.826 256.7 R F1(=)3.529 E F0 3.53 -(\)h)C .78(as a)-3.53 F F2(commutator)3.53 E F0 .78 -(operator de\214ned so that)3.53 F F4(POST)3.53 E(-)-.92 E(GRES)142.826 -269.9 Q F0 .784(can re)3.534 F .784 -(write the query into the desired form.)-.275 F(Ho)6.284 E(we)-.275 E --.165(ve)-.275 G 1.664 -.44(r, i).165 H 3.534(fs).44 G .783 -(uch an operator)-3.534 F(does not e)142.826 283.1 Q(xist,)-.165 E F4 -(POSTGRES)2.75 E F0(will ne)2.75 E -.165(ve)-.275 G 2.75(rc).165 G -(onsider the use of an inde)-2.75 E(x.)-.165 E 13.75(\(4\) When)113.5 -300.2 R .152(joining se)2.902 F -.165(ve)-.275 G .152 -(ral classes together in one query).165 F 2.902(,t)-.715 G .153 -(ry to write the join clauses in)-2.902 F 2.75<6199>142.826 313.4 S -(chained\232 form, e.g.,)-2.75 E F3 -(where A.a = B.b and B.b = C.c and ...)182.826 338.6 Q F0 .795 -(Notice that relati)142.826 364.8 R -.165(ve)-.275 G .795(ly fe).165 F -3.545(wc)-.275 G .795(lauses refer to a gi)-3.545 F -.165(ve)-.275 G -3.544(nc).165 G .794(lass and attrib)-3.544 F .794(ute; the clauses)-.22 -F 1.628(form a linear sequence connecting the attrib)142.826 378 R 1.628 -(utes, lik)-.22 F 4.378(el)-.11 G 1.628(inks in a chain.)-4.378 F 1.628 -(This is)7.128 F -(preferable to a query written in a \231star\232 form, such as)142.826 -391.2 Q F3(where A.a = B.b and A.a = C.c and ...)182.826 416.4 Q F0 -2.321(Here, man)142.826 442.6 R 5.071(yc)-.165 G 2.321 -(lauses refer to the same class and attrib)-5.071 F 2.321 -(ute \(in this case,)-.22 F F1(A.a)5.071 E F0(\).)A 1.108 -(When presented with a query of this form, the)142.826 455.8 R F4 -(POSTGRES)3.858 E F0 1.108(query optimizer will)3.858 F -(tend to consider f)142.826 469 Q -(ar more choices than it should and may run out of memory)-.11 E(.)-.715 -E 13.75(\(5\) If)113.5 486.1 R 1.684 -(you are really desperate to see what query plans look lik)4.434 F 1.683 -(e, you can run the)-.11 F F1(postmaster)142.826 499.3 Q F0 1.258 -(with the)4.008 F F1(-d)4.008 E F0 1.259(option and then run)4.008 F F1 -(monitor)4.009 E F0 1.259(with the)4.009 F F1(-t)4.009 E F0(option.) -4.009 E .246 -(The format in which query plans will be printed is hard to read b) -142.826 512.5 R .246(ut you should be)-.22 F(able to tell whether an) -142.826 525.7 Q 2.75(yi)-.165 G(nde)-2.75 E 2.75(xs)-.165 G -(cans are being performed.)-2.75 E/F5 12/Times-Bold@0 SF 3(15.2. Infr)72 -551.9 R(equent T)-.216 E(asks)-1.104 E .44 LW 77.5 565.1 72 565.1 DL -80.5 565.1 75 565.1 DL 86 565.1 80.5 565.1 DL 91.5 565.1 86 565.1 DL 97 -565.1 91.5 565.1 DL 102.5 565.1 97 565.1 DL 108 565.1 102.5 565.1 DL -113.5 565.1 108 565.1 DL 119 565.1 113.5 565.1 DL 124.5 565.1 119 565.1 -DL 130 565.1 124.5 565.1 DL 135.5 565.1 130 565.1 DL 141 565.1 135.5 -565.1 DL 146.5 565.1 141 565.1 DL 152 565.1 146.5 565.1 DL 157.5 565.1 -152 565.1 DL 163 565.1 157.5 565.1 DL 168.5 565.1 163 565.1 DL 174 565.1 -168.5 565.1 DL 179.5 565.1 174 565.1 DL 185 565.1 179.5 565.1 DL 190.5 -565.1 185 565.1 DL 196 565.1 190.5 565.1 DL 201.5 565.1 196 565.1 DL 207 -565.1 201.5 565.1 DL 212.5 565.1 207 565.1 DL 218 565.1 212.5 565.1 DL -223.5 565.1 218 565.1 DL 229 565.1 223.5 565.1 DL 234.5 565.1 229 565.1 -DL 240 565.1 234.5 565.1 DL 245.5 565.1 240 565.1 DL 251 565.1 245.5 -565.1 DL 256.5 565.1 251 565.1 DL 262 565.1 256.5 565.1 DL 267.5 565.1 -262 565.1 DL 273 565.1 267.5 565.1 DL 278.5 565.1 273 565.1 DL 284 565.1 -278.5 565.1 DL 289.5 565.1 284 565.1 DL 295 565.1 289.5 565.1 DL 300.5 -565.1 295 565.1 DL 306 565.1 300.5 565.1 DL 311.5 565.1 306 565.1 DL 317 -565.1 311.5 565.1 DL 322.5 565.1 317 565.1 DL 328 565.1 322.5 565.1 DL -333.5 565.1 328 565.1 DL 339 565.1 333.5 565.1 DL 344.5 565.1 339 565.1 -DL 350 565.1 344.5 565.1 DL 355.5 565.1 350 565.1 DL 361 565.1 355.5 -565.1 DL 366.5 565.1 361 565.1 DL 372 565.1 366.5 565.1 DL 377.5 565.1 -372 565.1 DL 383 565.1 377.5 565.1 DL 388.5 565.1 383 565.1 DL 394 565.1 -388.5 565.1 DL 399.5 565.1 394 565.1 DL 405 565.1 399.5 565.1 DL 410.5 -565.1 405 565.1 DL 416 565.1 410.5 565.1 DL 421.5 565.1 416 565.1 DL 427 -565.1 421.5 565.1 DL 432.5 565.1 427 565.1 DL 438 565.1 432.5 565.1 DL -443.5 565.1 438 565.1 DL 449 565.1 443.5 565.1 DL 454.5 565.1 449 565.1 -DL 460 565.1 454.5 565.1 DL 465.5 565.1 460 565.1 DL 471 565.1 465.5 -565.1 DL 476.5 565.1 471 565.1 DL 482 565.1 476.5 565.1 DL 487.5 565.1 -482 565.1 DL 493 565.1 487.5 565.1 DL 498.5 565.1 493 565.1 DL 504 565.1 -498.5 565.1 DL F0 .029(At some time or another)108 595.4 R 2.779(,e)-.44 -G -.165(ve)-3.054 G(ry).165 E F4(POSTGRES)2.778 E F0 .028 -(site administrator has to perform all of the fol-)2.778 F(lo)108 608.6 -Q(wing actions.)-.275 E F5 3(15.2.1. Cleaning)72 634.8 R -(Up After Crashes)3 E F0(The)108 651.9 Q F1(postgres)3.101 E F0(serv) -3.101 E .351(er and the)-.165 F F1(postmaster)3.101 E F0 .351(run as tw) -3.101 F 3.101(od)-.11 G(if)-3.101 E .351(ferent processes.)-.275 F(The) -5.851 E 3.102(ym)-.165 G(ay)-3.102 E 1.494(crash separately or together) -108 665.1 R 6.993(.T)-.605 G 1.493(he housek)-6.993 F 1.493 -(eeping procedures required to \214x one kind of)-.11 F(crash are dif) -108 678.3 Q(ferent from those required to \214x the other)-.275 E(.) --.605 E(The message you will usually see when the back)108 695.4 Q -(end serv)-.11 E(er crashes is:)-.165 E F3 -(FATAL: no response from backend: detected in ...)148 720.6 Q/F6 11 -/Times-Bold@0 SF(74)282.5 756 Q EP -%%Page: 75 75 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF .584(This generally means one of tw)108 97.2 R -3.334(ot)-.11 G .584(hings: there is a b)-3.334 F .584(ug in the)-.22 F -/F1 10/Times-Roman@0 SF(POSTGRES)3.334 E F0(serv)3.334 E(er)-.165 E -3.335(,o)-.44 G 3.335(rt)-3.335 G(here)-3.335 E .003(is a b)108 110.4 R -.003(ug in some user code that has been dynamically loaded into)-.22 F -F1(POSTGRES)2.752 E F0 5.502(.Y)C .002(ou should)-6.712 F .823 -(be able to restart your application and resume processing, b)108 123.6 -R .824(ut there are some considera-)-.22 F(tions:)108 136.8 Q(\(1\)) -113.5 153.9 Q F1(POSTGRES)16.5 E F0 1.694 -(usually dumps a core \214le \(a snapshot of process memory used for) -4.444 F(deb)142.826 167.1 Q(ugging\) in the database directory)-.22 E/F2 -10/Courier@0 SF(/usr/local/postgres95/data/base//core)182.826 -192.3 Q F0 .478(on the serv)142.826 218.5 R .479(er machine.)-.165 F -.479(If you don')5.979 F 3.229(tw)-.198 G .479(ant to try to deb)-3.339 -F .479(ug the problem or produce)-.22 F 3.399(as)142.826 231.7 S .649 -(tack trace to report the b)-3.399 F .648 -(ug to someone else, you can delete this \214le \(which is)-.22 F -(probably around 10MB\).)142.826 244.9 Q 13.75(\(2\) When)113.5 262 R -.576(one back)3.326 F .576(end crashes in an uncontrolled w)-.11 F .577 -(ay \(i.e., without calling its b)-.11 F(uilt-)-.22 E .64 -(in cleanup routines\), the)142.826 275.2 R/F3 11/Courier@0 SF -(postmaster)3.39 E F0 .64(will detect this situation, kill all running) -3.39 F(serv)142.826 288.4 Q 2.589 -(ers and reinitialize the state shared among all back)-.165 F 2.589 -(ends \(e.g., the shared)-.11 F -.22(bu)142.826 301.6 S -.275(ff).22 G -1.61(er pool and locks\).).275 F 1.61(If your serv)7.11 F 1.609 -(er crashed, you will get the \231no response\232)-.165 F 1.132 -(message sho)142.826 314.8 R 1.132(wn abo)-.275 F -.165(ve)-.165 G 6.632 -(.I).165 G 3.882(fy)-6.632 G 1.132(our serv)-3.882 F 1.132(er w)-.165 F -1.132(as killed because someone else')-.11 F 3.882(ss)-.605 G(erv)-3.882 -E(er)-.165 E(crashed, you will see the follo)142.826 328 Q -(wing message:)-.275 E F2 6(Ih)182.826 353.2 S -(ave been signalled by the postmaster.)-6 E -(Some backend process has died unexpectedly and possibly)182.826 365.4 Q -(corrupted shared memory.)182.826 377.6 Q(The current transaction was)12 -E(aborted, and I am going to exit.)182.826 389.8 Q(Please resend the)12 -E(last query. -- The postgres backend)182.826 402 Q F0 13.75 -(\(3\) Sometimes)113.5 432.1 R .371 -(shared state is not completely cleaned up.)3.121 F .37 -(Frontend applications may)5.87 F(see errors of the form:)142.826 445.3 -Q F2(WARN: cannot write block 34 of myclass [mydb] blind)182.826 470.5 Q -F0(In this case, you should kill the)142.826 496.7 Q F3(postmaster)2.75 -E F0(and restart it.)2.75 E 13.75(\(4\) When)113.5 513.8 R .541(the sys\ -tem crashes while updating the system catalogs \(e.g., when you are)3.29 -F .581(creating a class, de\214ning an inde)142.826 527 R .581 -(x, retrie)-.165 F .58(ving into a class, etc.\) the B-tree indices) --.275 F .986(de\214ned on the catalogs are sometimes corrupted.)142.826 -540.2 R .987(The general \(and non-unique\))6.487 F .363 -(symptom is that)142.826 553.4 R/F4 11/Times-Bold@0 SF(all)3.113 E F0 -.363(queries stop w)3.113 F 3.113(orking. If)-.11 F .363(you ha)3.113 F -.693 -.165(ve t)-.22 H .363(ried all of the abo).165 F .693 -.165(ve s) --.165 H(teps).165 E .231(and nothing else seems to w)142.826 566.6 R -.231(ork, try using the)-.11 F F3(reindexdb)2.981 E F0 2.981 -(command. If)2.981 F F3(rein-)2.981 E(dexdb)142.826 579.8 Q F0 .293 -(succeeds b)3.043 F .293(ut things still don')-.22 F 3.043(tw)-.198 G -.293(ork, you ha)-3.153 F .623 -.165(ve a)-.22 H .292 -(nother problem; if it f).165 F(ails,)-.11 E .084 -(the system catalogs themselv)142.826 593 R .084 -(es were almost certainly corrupted and you will ha)-.165 F -.165(ve) --.22 G(to go back to your backups.)142.826 606.2 Q(The)108 623.3 Q F3 -(postmaster)3.443 E F0 .693(does not usually crash \(it doesn')3.443 F -3.443(td)-.198 G 3.443(ov)-3.443 G .693(ery much e)-3.608 F .693 -(xcept start serv)-.165 F(ers\))-.165 E -.22(bu)108 636.5 S 4.052(ti).22 -G 4.052(td)-4.052 G 1.302(oes happen on occasion.)-4.052 F 1.302 -(In addition, there are a fe)6.802 F 4.053(wc)-.275 G 1.303 -(ases where it encounters)-4.053 F .574 -(problems during the reinitialization of shared resources.)108 649.7 R -(Speci\214cally)6.074 E 3.324(,t)-.715 G .574(here are race con-)-3.324 -F .482(ditions where the operating system lets the)108 662.9 R F3 -(postmaster)3.232 E F0 .482(free shared resources b)3.232 F .483 -(ut then)-.22 F .788(will not permit it to reallocate the same amount o\ -f shared resources \(e)108 676.1 R -.165(ve)-.275 G 3.538(nw).165 G .788 -(hen there is)-3.538 F(no contention\).)108 689.3 Q -1.21(Yo)108 706.4 S -5.278(uw)1.21 G 2.528(ill typically ha)-5.278 F 2.858 -.165(ve t)-.22 H -5.278(or).165 G 2.528(un the)-5.278 F F3(ipcclean)5.278 E F0 2.529 -(command if system errors cause the)5.278 F F3(postmaster)108 719.6 Q F0 -3.334(to crash.)6.084 F 3.333 -(If this happens, you may \214nd \(using the)8.833 F F1(UNIX)6.083 E F3 -(ipcs)6.083 E F0(\(1\))A F4(75)282.5 756 Q EP -%%Page: 76 76 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF .354(command\) that the \231postgres\232 user h\ -as shared memory and/or semaphores allocated e)108 97.2 R -.165(ve)-.275 -G(n).165 E .265(though no)108 110.4 R/F1 11/Courier@0 SF(postmaster) -3.015 E F0 .265(process is running.)3.015 F .265 -(In this case, you should run)5.765 F F1(ipcclean)3.014 E F0(as)3.014 E -2.671(the \231postgres\232 user in order to deallocate these resources.) -108 123.6 R 2.672(Be w)8.171 F 2.672(arned that)-.11 F/F2 11 -/Times-Italic@0 SF(all)5.422 E F0(such)5.422 E .269(resources o)108 -136.8 R .268(wned by the \231postgres\232 user will be deallocated.) --.275 F .268(If you ha)5.768 F .598 -.165(ve m)-.22 H(ultiple).165 E F1 -(post-)3.018 E(master)108 150 Q F0 .383(processes running on the same m\ -achine, you should kill all of them before run-)3.133 F(ning)108 163.2 Q -F1(ipcclean)2.913 E F0 .163(\(otherwise, the)2.913 F 2.913(yw)-.165 G -.163(ill crash on their o)-2.913 F .162 -(wn when their shared resources are)-.275 F(suddenly deallocated\).)108 -176.4 Q/F3 12/Times-Bold@0 SF 3(15.2.2. Mo)72 202.6 R(ving Database Dir) --.12 E(ectories)-.216 E F0 4.764(By def)108 219.7 R 4.764(ault, all)-.11 -F/F4 10/Times-Roman@0 SF(POSTGRES)7.515 E F0 4.765 -(databases are stored in separate subdirectories under)7.515 F F1 -(/usr/local/postgres95/data/base)108 235.1 Q F0(.)A/F5 8/Times-Roman@0 -SF(10)-4.4 I F0 1.688(At some point, you may \214nd that you)4.438 4.4 N -.8(wish to mo)108 248.3 R 1.13 -.165(ve o)-.165 H .799(ne or more datab\ -ases to another location \(e.g., to a \214lesystem with more).165 F -(free space\).)108 261.5 Q(If you wish to mo)108 278.6 Q -.165(ve)-.165 -G F2(all)2.915 E F0(of your databases to the ne)2.75 E 2.75(wl)-.275 G -(ocation, you can simply:)-2.75 E 5.5<834b>113.5 295.7 S(ill the)-5.5 E -F1(postmaster)2.75 E F0(.)A 5.5<8343>113.5 308.9 S(op)-5.5 E 2.838(yt) --.11 G .088(he entire)-2.838 F F1(data)2.838 E F0 .089 -(directory to the ne)2.838 F 2.839(wl)-.275 G .089 -(ocation \(making sure that the ne)-2.839 F 2.839<778c>-.275 G .089 -(les are)-2.839 F -.275(ow)122.85 322.1 S -(ned by user \231postgres\232\).).275 E/F6 10/Courier@0 SF 6(%c)162.85 -347.3 S 6(p-)-6 G(rp /usr/local/postgres95/data /new/place/data)-6 E F0 -5.5<8352>113.5 373.5 S .773(eset your)-5.5 F F1(PGDATA)3.523 E F0(en) -3.523 E .773(vironment v)-.44 F .773 -(ariable \(as described earlier in this manual and in)-.275 F -(the installation instructions\).)122.85 386.7 Q F6 6(#u)162.85 411.9 S -(sing csh or tcsh...)-6 E 6(%s)162.85 424.1 S -(etenv PGDATA /new/place/data)-6 E 6(#u)162.85 448.5 S -(sing sh, ksh or bash...)-6 E 6(%P)162.85 460.7 S -(GDATA=/new/place/data; export PGDATA)-6 E F0 5.5<8352>113.5 486.9 S -(estart the)-5.5 E F1(postmaster)2.75 E F0(.)A F6 6(%p)162.85 512.1 S -(ostmaster &)-6 E F0 5.5<8341>113.5 538.3 S 1.129 -(fter you run some queries and are sure that the ne)-5.5 F(wly-mo)-.275 -E -.165(ve)-.165 G 3.879(dd).165 G 1.129(atabase w)-3.879 F 1.129 -(orks, you)-.11 F(can remo)122.85 551.5 Q .33 -.165(ve t)-.165 H(he old) -.165 E F1(data)2.75 E F0(directory)2.75 E(.)-.715 E F6 6(%r)162.85 576.7 -S 6(m-)-6 G(rf /usr/local/postgres95/data)-6 E F0 2.673 -.88(To i)108 -606.8 T .913(nstall a).88 F F2(single)3.663 E F0 .913 -(database in an alternate directory while lea)3.663 F .913 -(ving all other databases in)-.22 F(place, do the follo)108 620 Q(wing:) --.275 E 5.5<8343>113.5 637.1 S .81(reate the database \(if it doesn') --5.5 F 3.561(ta)-.198 G .811(lready e)-3.561 F .811(xist\) using the) --.165 F/F7 11/Times-Bold@0 SF(cr)3.561 E(eatedb)-.198 E F0 3.561 -(command. In)3.561 F(the)3.561 E(follo)122.85 650.3 Q -(wing steps we will assume the database is named)-.275 E F1(foo)2.75 E -F0(.)A .32 LW 76 667.4 72 667.4 DL 80 667.4 76 667.4 DL 84 667.4 80 -667.4 DL 88 667.4 84 667.4 DL 92 667.4 88 667.4 DL 96 667.4 92 667.4 DL -100 667.4 96 667.4 DL 104 667.4 100 667.4 DL 108 667.4 104 667.4 DL 112 -667.4 108 667.4 DL 116 667.4 112 667.4 DL 120 667.4 116 667.4 DL 124 -667.4 120 667.4 DL 128 667.4 124 667.4 DL 132 667.4 128 667.4 DL 136 -667.4 132 667.4 DL 140 667.4 136 667.4 DL 144 667.4 140 667.4 DL 148 -667.4 144 667.4 DL 152 667.4 148 667.4 DL 156 667.4 152 667.4 DL 160 -667.4 156 667.4 DL 164 667.4 160 667.4 DL 168 667.4 164 667.4 DL 172 -667.4 168 667.4 DL 176 667.4 172 667.4 DL 180 667.4 176 667.4 DL 184 -667.4 180 667.4 DL 188 667.4 184 667.4 DL 192 667.4 188 667.4 DL 196 -667.4 192 667.4 DL 200 667.4 196 667.4 DL 204 667.4 200 667.4 DL 208 -667.4 204 667.4 DL 212 667.4 208 667.4 DL 216 667.4 212 667.4 DL/F8 5 -/Times-Roman@0 SF(10)93.6 677.8 Q F5 .324 -(Data for certain classes may stored else)2.324 3.2 N .324 -(where if a non-standard storage manager w)-.2 F .324 -(as speci\214ed when the)-.08 F 2.323(yw)-.12 G .323(ere created.)-2.323 -F(Use)4.323 E(of non-standard storage managers is an e)72 690.6 Q -(xperimental feature that is not supported outside of Berk)-.12 E(ele) --.08 E -.52(y.)-.12 G F7(76)282.5 756 Q EP -%%Page: 77 77 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF 5.5<834b>113.5 97.2 S(ill the)-5.5 E/F1 11 -/Courier@0 SF(postmaster)2.75 E F0(.)A 5.5<8343>113.5 110.4 S(op)-5.5 E -4.575(yt)-.11 G 1.824(he directory)-4.575 F F1 -(/usr/local/postgres95/data/base/foo)4.574 E F0 1.824(and its con-)4.574 -F(tents to its ultimate destination.)122.85 123.6 Q -(It should still be o)5.5 E(wned by the \231postgres\232 user)-.275 E(.) --.605 E/F2 10/Courier@0 SF 6(%c)162.85 148.8 S 6(p-)-6 G -(rp /usr/local/postgres95/data/base/foo /new/place/foo)-6 E F0 5.5<8352> -113.5 175 S(emo)-5.5 E .33 -.165(ve t)-.165 H(he directory).165 E F1 -(/usr/local/postgres95/data/base/foo)2.75 E F0(:)A F2 6(%r)162.85 200.2 -S 6(m-)-6 G(rf /usr/local/postgres95/data/base/foo)-6 E F0 5.5<834d> -113.5 226.4 S(ak)-5.5 E 3.48(eas)-.11 G .73(ymbolic link from)-3.48 F F1 -(/usr/local/postgres95/data/base)3.48 E F0 .73(to the ne)3.48 F(w)-.275 -E(directory:)122.85 239.6 Q F2 6(%l)162.85 264.8 S 6(n-)-6 G 6(s/)-6 G -(new/place/foo /usr/local/postgres95/data/base/foo)-6 E F0 5.5<8352> -113.5 291 S(estart the)-5.5 E F1(postmaster)2.75 E F0(.)A/F3 12 -/Times-Bold@0 SF 3(15.2.3. Updating)72 317.2 R(Databases)3 E/F4 10 -/Times-Roman@0 SF(POSTGRES)108 334.3 Q F0 .679(is a research system.) -3.429 F .679(In general,)6.179 F F4(POSTGRES)3.429 E F0 .679 -(may not retain the same binary)3.429 F .715 -(format for the storage of databases from release to release.)108 347.5 -R .715(Therefore, when you update)6.215 F(your)108 360.7 Q F4(POSTGRES) -2.8 E F0(softw)2.8 E .05(are, you will probably ha)-.11 F .38 -.165 -(ve t)-.22 H 2.8(om).165 G .049(odify your databases as well.)-2.8 F -(This)5.549 E .248(is a common occurrence with commercial database syst\ -ems as well; unfortunately)108 373.9 R 2.998(,u)-.715 G(nlik)-2.998 E(e) --.11 E .598(commercial systems,)108 387.1 R F4(POSTGRES)3.348 E F0 .598 -(does not come with user)3.348 F .597(-friendly utilities to mak)-.22 F -3.347(ey)-.11 G(our)-3.347 E(life easier when these updates occur)108 -400.3 Q(.)-.605 E .171(In general, you must do the follo)108 417.4 R -.172(wing to update your databases to a ne)-.275 F 2.922(ws)-.275 G -(oftw)-2.922 E .172(are release:)-.11 F<83>113.5 434.5 Q/F5 11 -/Times-Italic@0 SF(Extensions)5.5 E F0 1.073(\(such as user)3.823 F -1.073(-de\214ned types, functions, aggre)-.22 F -.055(ga)-.165 G 1.072 -(tes, etc.\) must be reloaded).055 F(by re-e)122.85 447.7 Q -.165(xe) --.165 G(cuting the SQL).165 E/F6 11/Times-Bold@0 SF(CREA)2.75 E(TE) --1.045 E F0 2.75(commands. See)2.75 F(Appendix A for more details.)2.75 -E<83>113.5 460.9 Q F5(Data)5.5 E F0 1.08 -(must be dumped from the old classes into ASCII \214les \(using the) -3.829 F F6(COPY)3.83 E F0(com-)3.83 E .235(mand\), the ne)122.85 474.1 R -2.985(wc)-.275 G .235(lasses created in the ne)-2.985 F 2.985(wd)-.275 G -.234(atabase \(using the)-2.985 F F6(CREA)2.984 E(TE)-1.045 E F0 -1.023 -(TA)C .234(BLE com-)1.023 F -(mand\), and the data reloaded from the ASCII \214les.)122.85 487.3 Q -<83>113.5 500.5 Q F5(Rules)5.5 E F0(and)4.214 E F5(vie)4.214 E(ws)-.165 -E F0 1.465(must also be reloaded by re-e)4.215 F -.165(xe)-.165 G 1.465 -(cuting the v).165 F(arious)-.275 E F6(CREA)4.215 E(TE)-1.045 E F0(com-) -4.215 E(mands.)122.85 513.7 Q -1.21(Yo)108 530.8 S 4.717(us)1.21 G 1.966 -(hould gi)-4.717 F 2.296 -.165(ve a)-.275 H 2.296 -.165(ny n).165 H -2.516 -.275(ew r).165 H 1.966 -(elease a \231trial period\232; in particular).275 F 4.716(,d)-.44 G -4.716(on)-4.716 G 1.966(ot delete the old)-4.716 F 1.741(database until\ - you are satis\214ed that there are no compatibility problems with the \ -ne)108 544 R(w)-.275 E(softw)108 557.2 Q 3.529(are. F)-.11 F .779(or e) --.165 F .779(xample, you do not w)-.165 F .779(ant to disco)-.11 F -.165 -(ve)-.165 G 3.529(rt).165 G .779(hat a b)-3.529 F .779(ug in a type') --.22 F 3.529<7399>-.605 G .778(input\232 \(con-)-3.529 F -.165(ve)108 -570.4 S 2.143(rsion from ASCII\) and \231output\232 \(con).165 F -.165 -(ve)-.44 G 2.143(rsion to ASCII\) routines pre).165 F -.165(ve)-.275 G -2.143(nts you from).165 F 1.032(reloading your data after you ha)108 -583.6 R 1.362 -.165(ve d)-.22 H(estro).165 E 1.031 -(yed your old databases!)-.11 F 1.031(\(This should be stan-)6.531 F -.838(dard procedure when updating an)108 596.8 R 3.589(ys)-.165 G(oftw) --3.589 E .839(are package, b)-.11 F .839 -(ut some people try to economize)-.22 F -(on disk space without applying enough foresight.\))108 610 Q F3 3 -(15.3. Database)72 636.2 R(Security)3 E .44 LW 77.5 649.4 72 649.4 DL -80.5 649.4 75 649.4 DL 86 649.4 80.5 649.4 DL 91.5 649.4 86 649.4 DL 97 -649.4 91.5 649.4 DL 102.5 649.4 97 649.4 DL 108 649.4 102.5 649.4 DL -113.5 649.4 108 649.4 DL 119 649.4 113.5 649.4 DL 124.5 649.4 119 649.4 -DL 130 649.4 124.5 649.4 DL 135.5 649.4 130 649.4 DL 141 649.4 135.5 -649.4 DL 146.5 649.4 141 649.4 DL 152 649.4 146.5 649.4 DL 157.5 649.4 -152 649.4 DL 163 649.4 157.5 649.4 DL 168.5 649.4 163 649.4 DL 174 649.4 -168.5 649.4 DL 179.5 649.4 174 649.4 DL 185 649.4 179.5 649.4 DL 190.5 -649.4 185 649.4 DL 196 649.4 190.5 649.4 DL 201.5 649.4 196 649.4 DL 207 -649.4 201.5 649.4 DL 212.5 649.4 207 649.4 DL 218 649.4 212.5 649.4 DL -223.5 649.4 218 649.4 DL 229 649.4 223.5 649.4 DL 234.5 649.4 229 649.4 -DL 240 649.4 234.5 649.4 DL 245.5 649.4 240 649.4 DL 251 649.4 245.5 -649.4 DL 256.5 649.4 251 649.4 DL 262 649.4 256.5 649.4 DL 267.5 649.4 -262 649.4 DL 273 649.4 267.5 649.4 DL 278.5 649.4 273 649.4 DL 284 649.4 -278.5 649.4 DL 289.5 649.4 284 649.4 DL 295 649.4 289.5 649.4 DL 300.5 -649.4 295 649.4 DL 306 649.4 300.5 649.4 DL 311.5 649.4 306 649.4 DL 317 -649.4 311.5 649.4 DL 322.5 649.4 317 649.4 DL 328 649.4 322.5 649.4 DL -333.5 649.4 328 649.4 DL 339 649.4 333.5 649.4 DL 344.5 649.4 339 649.4 -DL 350 649.4 344.5 649.4 DL 355.5 649.4 350 649.4 DL 361 649.4 355.5 -649.4 DL 366.5 649.4 361 649.4 DL 372 649.4 366.5 649.4 DL 377.5 649.4 -372 649.4 DL 383 649.4 377.5 649.4 DL 388.5 649.4 383 649.4 DL 394 649.4 -388.5 649.4 DL 399.5 649.4 394 649.4 DL 405 649.4 399.5 649.4 DL 410.5 -649.4 405 649.4 DL 416 649.4 410.5 649.4 DL 421.5 649.4 416 649.4 DL 427 -649.4 421.5 649.4 DL 432.5 649.4 427 649.4 DL 438 649.4 432.5 649.4 DL -443.5 649.4 438 649.4 DL 449 649.4 443.5 649.4 DL 454.5 649.4 449 649.4 -DL 460 649.4 454.5 649.4 DL 465.5 649.4 460 649.4 DL 471 649.4 465.5 -649.4 DL 476.5 649.4 471 649.4 DL 482 649.4 476.5 649.4 DL 487.5 649.4 -482 649.4 DL 493 649.4 487.5 649.4 DL 498.5 649.4 493 649.4 DL 504 649.4 -498.5 649.4 DL F0 1.632(Most sites that use)108 679.7 R F4(POSTGRES) -4.383 E F0 1.633 -(are educational or research institutions and do not pay)4.383 F 1.615 -(much attention to security in their)108 692.9 R F4(POSTGRES)4.365 E F0 -4.365(installations. If)4.365 F 1.614(desired, one can install)4.365 F -F4(POSTGRES)108 706.1 Q F0 1.524(with additional security features.) -4.274 F(Naturally)7.024 E 4.274(,s)-.715 G 1.524 -(uch features come with addi-)-4.274 F(tional administrati)108 719.3 Q -.33 -.165(ve ove)-.275 H(rhead that must be dealt with.).165 E F6(77) -282.5 756 Q EP -%%Page: 78 78 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 12/Times-Bold@0 SF 3(15.3.1. K)72 97.2 R(erber)-.3 E(os)-.216 E/F1 -10/Times-Roman@0 SF(POSTGRES)108 114.3 Q/F2 11/Times-Roman@0 SF 1.328 -(can be con\214gured to use the MIT K)4.078 F 1.327(erberos netw)-.275 F -1.327(ork authentication system.)-.11 F .791(This pre)108 127.5 R -.165 -(ve)-.275 G .791(nts outside users from connecting to your databases o) -.165 F -.165(ve)-.165 G 3.541(rt).165 G .791(he netw)-3.541 F .792 -(ork without)-.11 F(the correct authentication information.)108 140.7 Q -F0 3(15.4. Querying)72 166.9 R(the System Catalogs)3 E .44 LW 77.5 180.1 -72 180.1 DL 80.5 180.1 75 180.1 DL 86 180.1 80.5 180.1 DL 91.5 180.1 86 -180.1 DL 97 180.1 91.5 180.1 DL 102.5 180.1 97 180.1 DL 108 180.1 102.5 -180.1 DL 113.5 180.1 108 180.1 DL 119 180.1 113.5 180.1 DL 124.5 180.1 -119 180.1 DL 130 180.1 124.5 180.1 DL 135.5 180.1 130 180.1 DL 141 180.1 -135.5 180.1 DL 146.5 180.1 141 180.1 DL 152 180.1 146.5 180.1 DL 157.5 -180.1 152 180.1 DL 163 180.1 157.5 180.1 DL 168.5 180.1 163 180.1 DL 174 -180.1 168.5 180.1 DL 179.5 180.1 174 180.1 DL 185 180.1 179.5 180.1 DL -190.5 180.1 185 180.1 DL 196 180.1 190.5 180.1 DL 201.5 180.1 196 180.1 -DL 207 180.1 201.5 180.1 DL 212.5 180.1 207 180.1 DL 218 180.1 212.5 -180.1 DL 223.5 180.1 218 180.1 DL 229 180.1 223.5 180.1 DL 234.5 180.1 -229 180.1 DL 240 180.1 234.5 180.1 DL 245.5 180.1 240 180.1 DL 251 180.1 -245.5 180.1 DL 256.5 180.1 251 180.1 DL 262 180.1 256.5 180.1 DL 267.5 -180.1 262 180.1 DL 273 180.1 267.5 180.1 DL 278.5 180.1 273 180.1 DL 284 -180.1 278.5 180.1 DL 289.5 180.1 284 180.1 DL 295 180.1 289.5 180.1 DL -300.5 180.1 295 180.1 DL 306 180.1 300.5 180.1 DL 311.5 180.1 306 180.1 -DL 317 180.1 311.5 180.1 DL 322.5 180.1 317 180.1 DL 328 180.1 322.5 -180.1 DL 333.5 180.1 328 180.1 DL 339 180.1 333.5 180.1 DL 344.5 180.1 -339 180.1 DL 350 180.1 344.5 180.1 DL 355.5 180.1 350 180.1 DL 361 180.1 -355.5 180.1 DL 366.5 180.1 361 180.1 DL 372 180.1 366.5 180.1 DL 377.5 -180.1 372 180.1 DL 383 180.1 377.5 180.1 DL 388.5 180.1 383 180.1 DL 394 -180.1 388.5 180.1 DL 399.5 180.1 394 180.1 DL 405 180.1 399.5 180.1 DL -410.5 180.1 405 180.1 DL 416 180.1 410.5 180.1 DL 421.5 180.1 416 180.1 -DL 427 180.1 421.5 180.1 DL 432.5 180.1 427 180.1 DL 438 180.1 432.5 -180.1 DL 443.5 180.1 438 180.1 DL 449 180.1 443.5 180.1 DL 454.5 180.1 -449 180.1 DL 460 180.1 454.5 180.1 DL 465.5 180.1 460 180.1 DL 471 180.1 -465.5 180.1 DL 476.5 180.1 471 180.1 DL 482 180.1 476.5 180.1 DL 487.5 -180.1 482 180.1 DL 493 180.1 487.5 180.1 DL 498.5 180.1 493 180.1 DL 504 -180.1 498.5 180.1 DL F2 .509 -(As an administrator \(or sometimes as a plain user\), you w)108 210.4 R -.51(ant to \214nd out what e)-.11 F(xtensions)-.165 E(ha)108 223.6 Q -.854 -.165(ve b)-.22 H .524(een added to a gi).165 F -.165(ve)-.275 G -3.273(nd).165 G 3.273(atabase. The)-3.273 F .523(queries listed belo) -3.273 F 3.273(wa)-.275 G .523(re \231canned\232 queries that)-3.273 F -.599(you can run on an)108 236.8 R 3.35(yd)-.165 G .6 -(atabase to get simple answers.)-3.35 F .6(Before e)6.1 F -.165(xe)-.165 -G .6(cuting an).165 F 3.35(yo)-.165 G 3.35(ft)-3.35 G .6(he queries) --3.35 F(belo)108 250 Q 1.46 -.715(w, b)-.275 H 2.78(es).715 G .03 -(ure to e)-2.78 F -.165(xe)-.165 G .029(cute the).165 F F1(POSTGRES) -2.779 E/F3 11/Courier@0 SF(vacuum)2.779 E F2 2.779(command. \(The)2.779 -F .029(queries will run much)2.779 F(more quickly that w)108 263.2 Q(ay) --.11 E 2.75(.\) Also,)-.715 F -(note that these queries are also listed in)2.75 E/F4 10/Courier@0 SF -(/usr/local/postgres95/tutorial/syscat.sql)148 288.4 Q F2 -(so use cut-and-paste \(or the)108 314.6 Q F3(\\i)2.75 E F2 -(command\) instead of doing a lot of typing.)2.75 E 3.742(This query pr\ -ints the names of all database adminstrators and the name of their)108 -331.7 R(database\(s\).)108 344.9 Q F4(SELECT usename, datname)148 370.1 -Q(FROM pg_user, pg_database)172 382.3 Q -(WHERE usesysid = int2in\(int4out\(datdba\)\))172 394.5 Q -(ORDER BY usename, datname;)172 406.7 Q F2(This query lists all user)108 -432.9 Q(-de\214ned classes in the database.)-.22 E F4(SELECT relname)148 -458.1 Q(FROM pg_class)172 470.3 Q(WHERE relkind = 'r')172 482.5 Q -(-- not indices)66 E(and relname !~ '^pg_')184 494.7 Q(-- not catalogs) -42 E(and relname !~ '^Inv')184 506.9 Q(-- not large objects)42 E -(ORDER BY relname;)172 519.1 Q F2 .671(This query lists all simple indi\ -ces \(i.e., those that are not de\214ned o)108 545.3 R -.165(ve)-.165 G -3.421(raf).165 G .671(unction of se)-3.421 F(v-)-.275 E(eral attrib)108 -558.5 Q(utes\).)-.22 E F4(SELECT bc.relname AS class_name,)148 583.7 Q -(ic.relname AS index_name,)202 595.9 Q(a.attname)202 608.1 Q -(FROM pg_class bc,)172 620.3 Q(-- base class)78 E(pg_class ic,)202 632.5 -Q(-- index class)78 E(pg_index i,)202 644.7 Q(pg_attribute a)202 656.9 Q -(-- att in base)66 E(WHERE i.indrelid = bc.oid)172 669.1 Q -(and i.indexrelid = ic.oid)190 681.3 Q(and i.indkey[0] = a.attnum)190 -693.5 Q(and a.attrelid = bc.oid)190 705.7 Q(and i.indproc = '0'::oid)190 -717.9 Q(-- no functional indices)18 E/F5 11/Times-Bold@0 SF(78)282.5 756 -Q EP -%%Page: 79 79 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(ORDER BY class_name, index_name, attname;)172 96.2 Q -/F1 11/Times-Roman@0 SF .14(This query prints a report of the user)108 -122.4 R .14(-de\214ned attrib)-.22 F .14 -(utes and their types for all user)-.22 F(-de\214ned)-.22 E -(classes in the database.)108 135.6 Q F0 -(SELECT c.relname, a.attname, t.typname)148 160.8 Q -(FROM pg_class c, pg_attribute a, pg_type t)172 173 Q -(WHERE c.relkind = 'r')172 185.2 Q(-- no indices)30 E -(and c.relname !~ '^pg_' -- no catalogs)184 197.4 Q -(and c.relname !~ '^Inv' -- no large objects)184 209.6 Q -(and a.attnum > 0)184 221.8 Q(-- no system att's)48 E -(and a.attrelid = c.oid)184 234 Q(and a.atttypid = t.oid)184 246.2 Q -(ORDER BY relname, attname;)172 258.4 Q F1(This query lists all user)108 -284.6 Q(-de\214ned base types \(not including array types\).)-.22 E F0 -(SELECT u.usename, t.typname)148 309.8 Q(FROM pg_type t, pg_user u)172 -322 Q(WHERE u.usesysid = int2in\(int4out\(t.typowner\)\))172 334.2 Q -(and t.typrelid = '0'::oid)184 346.4 Q(-- no complex types)18 E -(and t.typelem = '0'::oid)184 358.6 Q(-- no arrays)24 E -(and u.usename <> 'postgres')184 370.8 Q(ORDER BY usename, typname;)172 -383 Q F1(This query lists all left-unary \(post-\214x\) operators.)108 -409.2 Q F0(SELECT o.oprname AS left_unary,)148 434.4 Q -(right.typname AS operand,)202 446.6 Q(result.typname AS return_type)202 -458.8 Q(FROM pg_operator o, pg_type right, pg_type result)172 471 Q -(WHERE o.oprkind = 'l')172 483.2 Q(-- left unary)66 E -(and o.oprright = right.oid)184 495.4 Q(and o.oprresult = result.oid)184 -507.6 Q(ORDER BY operand;)172 519.8 Q F1 -(This query lists all right-unary \(pre-\214x\) operators.)108 546 Q F0 -(SELECT o.oprname AS right_unary,)148 571.2 Q(left.typname AS operand,) -202 583.4 Q(result.typname AS return_type)202 595.6 Q -(FROM pg_operator o, pg_type left, pg_type result)172 607.8 Q -(WHERE o.oprkind = 'r')172 620 Q(-- right unary)60 E -(and o.oprleft = left.oid)184 632.2 Q(and o.oprresult = result.oid)184 -644.4 Q(ORDER BY operand;)172 656.6 Q F1 -(This query lists all binary operators.)108 682.8 Q F0 -(SELECT o.oprname AS binary_op,)148 708 Q(left.typname AS left_opr,)202 -720.2 Q/F2 11/Times-Bold@0 SF(79)282.5 756 Q EP -%%Page: 80 80 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Courier@0 SF(right.typname AS right_opr,)202 96.2 Q -(result.typname AS return_type)202 108.4 Q -(FROM pg_operator o, pg_type left, pg_type right, pg_type result)172 -120.6 Q(WHERE o.oprkind = 'b')172 132.8 Q(-- binary)54 E -(and o.oprleft = left.oid)184 145 Q(and o.oprright = right.oid)184 157.2 -Q(and o.oprresult = result.oid)184 169.4 Q -(ORDER BY left_opr, right_opr;)172 181.6 Q/F1 11/Times-Roman@0 SF 1.527 -(This query returns the name, number of ar)108 207.8 R 1.526 -(guments \(parameters\) and return type of all)-.198 F(user)108 221 Q -.826(-de\214ned C functions.)-.22 F .826 -(The same query can be used to \214nd all b)6.326 F .827 -(uilt-in C functions if)-.22 F 3.101(you change the \231C\232 to \231in\ -ternal\232, or all SQL functions if you change the \231C\232 to)108 -234.2 R(\231postquel\232.)108 247.4 Q F0 -(SELECT p.proname, p.pronargs, t.typname)148 272.6 Q -(FROM pg_proc p, pg_language l, pg_type t)172 284.8 Q -(WHERE p.prolang = l.oid)172 297 Q(and p.prorettype = t.oid)184 309.2 Q -(and l.lanname = 'c')184 321.4 Q(ORDER BY proname;)172 333.6 Q F1 1.286 -(This query lists all of the aggre)108 359.8 R -.055(ga)-.165 G 1.286 -(te functions that ha).055 F 1.616 -.165(ve b)-.22 H 1.287 -(een installed and the types to).165 F 1.369(which the)108 373 R 4.119 -(yc)-.165 G 1.368(an be applied.)-4.119 F/F2 11/Courier@0 SF(count)6.868 -E F1 1.368(is not included because it can tak)4.118 F 4.118(ea)-.11 G -1.698 -.165(ny t)-4.118 H 1.368(ype as its).165 F(ar)108 386.2 Q -(gument.)-.198 E F0(SELECT a.aggname, t.typname)148 411.4 Q -(FROM pg_aggregate a, pg_type t)172 423.6 Q(WHERE a.aggbasetype = t.oid) -172 435.8 Q(ORDER BY aggname, typname;)172 448 Q F1 1.036(This query li\ -sts all of the operator classes that can be used with each access metho\ -d as)108 474.2 R -(well as the operators that can be used with the respecti)108 487.4 Q -.33 -.165(ve o)-.275 H(perator classes.).165 E F0 -(SELECT am.amname, opc.opcname, opr.oprname)148 512.6 Q -(FROM pg_am am, pg_amop amop, pg_opclass opc, pg_operator opr)172 524.8 -Q(WHERE amop.amopid = am.oid)172 537 Q(and amop.amopclaid = opc.oid)184 -549.2 Q(and amop.amopopr = opr.oid)184 561.4 Q -(ORDER BY amname, opcname, oprname;)172 573.6 Q/F3 11/Times-Bold@0 SF -(80)282.5 756 Q EP -%%Page: 81 81 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 19/Times-Bold@0 SF 4.75(16. REFERENCES)72 165.4 R 77.5 178.6 -72 178.6 DL 80.5 178.6 75 178.6 DL 86 178.6 80.5 178.6 DL 91.5 178.6 86 -178.6 DL 97 178.6 91.5 178.6 DL 102.5 178.6 97 178.6 DL 108 178.6 102.5 -178.6 DL 113.5 178.6 108 178.6 DL 119 178.6 113.5 178.6 DL 124.5 178.6 -119 178.6 DL 130 178.6 124.5 178.6 DL 135.5 178.6 130 178.6 DL 141 178.6 -135.5 178.6 DL 146.5 178.6 141 178.6 DL 152 178.6 146.5 178.6 DL 157.5 -178.6 152 178.6 DL 163 178.6 157.5 178.6 DL 168.5 178.6 163 178.6 DL 174 -178.6 168.5 178.6 DL 179.5 178.6 174 178.6 DL 185 178.6 179.5 178.6 DL -190.5 178.6 185 178.6 DL 196 178.6 190.5 178.6 DL 201.5 178.6 196 178.6 -DL 207 178.6 201.5 178.6 DL 212.5 178.6 207 178.6 DL 218 178.6 212.5 -178.6 DL 223.5 178.6 218 178.6 DL 229 178.6 223.5 178.6 DL 234.5 178.6 -229 178.6 DL 240 178.6 234.5 178.6 DL 245.5 178.6 240 178.6 DL 251 178.6 -245.5 178.6 DL 256.5 178.6 251 178.6 DL 262 178.6 256.5 178.6 DL 267.5 -178.6 262 178.6 DL 273 178.6 267.5 178.6 DL 278.5 178.6 273 178.6 DL 284 -178.6 278.5 178.6 DL 289.5 178.6 284 178.6 DL 295 178.6 289.5 178.6 DL -300.5 178.6 295 178.6 DL 306 178.6 300.5 178.6 DL 311.5 178.6 306 178.6 -DL 317 178.6 311.5 178.6 DL 322.5 178.6 317 178.6 DL 328 178.6 322.5 -178.6 DL 333.5 178.6 328 178.6 DL 339 178.6 333.5 178.6 DL 344.5 178.6 -339 178.6 DL 350 178.6 344.5 178.6 DL 355.5 178.6 350 178.6 DL 361 178.6 -355.5 178.6 DL 366.5 178.6 361 178.6 DL 372 178.6 366.5 178.6 DL 377.5 -178.6 372 178.6 DL 383 178.6 377.5 178.6 DL 388.5 178.6 383 178.6 DL 394 -178.6 388.5 178.6 DL 399.5 178.6 394 178.6 DL 405 178.6 399.5 178.6 DL -410.5 178.6 405 178.6 DL 416 178.6 410.5 178.6 DL 421.5 178.6 416 178.6 -DL 427 178.6 421.5 178.6 DL 432.5 178.6 427 178.6 DL 438 178.6 432.5 -178.6 DL 443.5 178.6 438 178.6 DL 449 178.6 443.5 178.6 DL 454.5 178.6 -449 178.6 DL 460 178.6 454.5 178.6 DL 465.5 178.6 460 178.6 DL 471 178.6 -465.5 178.6 DL 476.5 178.6 471 178.6 DL 482 178.6 476.5 178.6 DL 487.5 -178.6 482 178.6 DL 493 178.6 487.5 178.6 DL 498.5 178.6 493 178.6 DL 504 -178.6 498.5 178.6 DL/F1 11/Times-Roman@0 SF([D)108 208.9 Q -1.221(AT) --.44 G 16.445(E93] Date,)1.221 F .066 -(C. J. and Darwen, Hugh, A Guide to The SQL Standard, 3rd Edition,)2.816 -F(Reading, MA, June 1993.)173.186 222.1 Q([MEL)108 239.2 Q 15.18 -(T93] Melton,)-1.012 F 2.75(J. Understanding)2.75 F(the Ne)2.75 E 2.75 -(wS)-.275 G(QL, 1994.)-2.75 E 20.284([ONG90] Ong,)108 256.3 R .878 -(L. and Goh, J., `)3.628 F 2.638 -.88(`A U)-.814 H .878(ni\214ed Frame) -.88 F -.11(wo)-.275 G .878(rk for V).11 F .878(ersion Modeling Using) --1.221 F .172(Production Rules in a Database System," Electronics Resea\ -rch Laboratory)173.186 269.5 R(,)-.715 E(Uni)173.186 282.7 Q -.165(ve) --.275 G .611(rsity of California, ERL T).165 F .612 -(echnical Memorandum M90/33, Berk)-.77 F(ele)-.11 E -.715(y,)-.165 G -(CA, April 1990.)173.186 295.9 Q([R)108 313 Q -.385(OW)-.44 G 12.551 -(E87] Ro).385 F 2.491(we, L. and Stonebrak)-.275 F(er)-.11 E 5.241(,M) --.44 G 2.491(., `)-5.241 F 2.491(`The POSTGRES Data Model,)-.814 F 4.118 --.814('' P)-.77 H(roc.).814 E -(1987 VLDB Conference, Brighton, England, Sept. 1987.)173.186 326.2 Q -([ST)108 343.3 Q 15.587(ON86] Stonebrak)-.198 F(er)-.11 E 3.433(,M)-.44 -G 3.433(.a)-3.433 G .683(nd Ro)-3.433 F .683(we, L., `)-.275 F .683 -(`The Design of POSTGRES,)-.814 F 2.311 -.814('' P)-.77 H .684 -(roc. 1986).814 F -.44(AC)173.186 356.5 S 2.147 -(M-SIGMOD Conference on Management of Data, W).44 F 2.146 -(ashington, DC,)-.88 F(May 1986.)173.186 369.7 Q([ST)108 386.8 Q 10.703 -(ON87a] Stonebrak)-.198 F(er)-.11 E 3.378(,M)-.44 G .628 -(., Hanson, E. and Hong, C.-H., `)-3.378 F .628(`The Design of the POST) --.814 F(-)-1.012 E .476(GRES Rules System,)173.186 400 R 2.104 -.814 -('' P)-.77 H .475(roc. 1987 IEEE Conference on Data Engineering,).814 F -(Los Angeles, CA, Feb)173.186 413.2 Q 2.75(.1)-.44 G(987.)-2.75 E([ST) -108 430.3 Q 10.087(ON87b] Stonebrak)-.198 F(er)-.11 E 4.026(,M)-.44 G -1.276(., `)-4.026 F 1.276(`The POSTGRES Storage System,)-.814 F 2.904 --.814('' P)-.77 H 1.276(roc. 1987 VLDB).814 F -(Conference, Brighton, England, Sept. 1987.)173.186 443.5 Q([ST)108 -460.6 Q 15.587(ON89] Stonebrak)-.198 F(er)-.11 E 3.64(,M)-.44 G .89 -(., Hearst, M., and Potamianos, S., `)-3.64 F 2.65 -.88(`A C)-.814 H .89 -(ommentary on the).88 F(POSTGRES Rules System,)173.186 473.8 Q 1.628 --.814('' S)-.77 H(IGMOD Record).814 E/F2 11/Times-Italic@0 SF(18)2.75 E -F1(\(3\), Sept. 1989.)A([ST)108 490.9 Q 10.703(ON90a] Stonebrak)-.198 F -(er)-.11 E 2.878(,M)-.44 G .128(., Ro)-2.878 F .129 -(we, L. A., and Hirohama, M., `)-.275 F .129(`The Implementation of) --.814 F(POSTGRES,)173.186 504.1 Q 3.993 -.814('' I)-.77 H 2.365(EEE T) -.814 F 2.365(ransactions on Kno)-.385 F 2.365 -(wledge and Data Engineering)-.275 F F2(2)173.186 517.3 Q F1 -(\(1\), March 1990.)A([ST)108 534.4 Q 10.087(ON90b] Stonebrak)-.198 F -(er)-.11 E 5.388(,M)-.44 G 5.389(.e)-5.388 G 5.389(ta)-5.389 G 2.639 -(l., `)-5.389 F 2.639(`On Rules, Procedures, Caching and V)-.814 F(ie) --.66 E 2.639(ws in)-.275 F 1.245(Database Systems,)173.186 547.6 R 2.873 --.814('' P)-.77 H 1.245(roc. 1990 A).814 F 1.244 -(CM-SIGMOD Conference on Manage-)-.44 F(ment of Data, Atlantic City) -173.186 560.8 Q 2.75(,N)-.715 G(.J., June 1990.)-2.75 E/F3 11 -/Times-Bold@0 SF(81)282.5 756 Q EP -%%Page: 82 82 -%%BeginPageSetup -BP -%%EndPageSetup -.44 LW 77.5 97.2 72 97.2 DL 80.5 97.2 75 97.2 DL 86 97.2 80.5 97.2 DL -91.5 97.2 86 97.2 DL 97 97.2 91.5 97.2 DL 102.5 97.2 97 97.2 DL 108 97.2 -102.5 97.2 DL 113.5 97.2 108 97.2 DL 119 97.2 113.5 97.2 DL 124.5 97.2 -119 97.2 DL 130 97.2 124.5 97.2 DL 135.5 97.2 130 97.2 DL 141 97.2 135.5 -97.2 DL 146.5 97.2 141 97.2 DL 152 97.2 146.5 97.2 DL 157.5 97.2 152 -97.2 DL 163 97.2 157.5 97.2 DL 168.5 97.2 163 97.2 DL 174 97.2 168.5 -97.2 DL 179.5 97.2 174 97.2 DL 185 97.2 179.5 97.2 DL 190.5 97.2 185 -97.2 DL 196 97.2 190.5 97.2 DL 201.5 97.2 196 97.2 DL 207 97.2 201.5 -97.2 DL 212.5 97.2 207 97.2 DL 218 97.2 212.5 97.2 DL 223.5 97.2 218 -97.2 DL 229 97.2 223.5 97.2 DL 234.5 97.2 229 97.2 DL 240 97.2 234.5 -97.2 DL 245.5 97.2 240 97.2 DL 251 97.2 245.5 97.2 DL 256.5 97.2 251 -97.2 DL 262 97.2 256.5 97.2 DL 267.5 97.2 262 97.2 DL 273 97.2 267.5 -97.2 DL 278.5 97.2 273 97.2 DL 284 97.2 278.5 97.2 DL 289.5 97.2 284 -97.2 DL 295 97.2 289.5 97.2 DL 300.5 97.2 295 97.2 DL 306 97.2 300.5 -97.2 DL 311.5 97.2 306 97.2 DL 317 97.2 311.5 97.2 DL 322.5 97.2 317 -97.2 DL 328 97.2 322.5 97.2 DL 333.5 97.2 328 97.2 DL 339 97.2 333.5 -97.2 DL 344.5 97.2 339 97.2 DL 350 97.2 344.5 97.2 DL 355.5 97.2 350 -97.2 DL 361 97.2 355.5 97.2 DL 366.5 97.2 361 97.2 DL 372 97.2 366.5 -97.2 DL 377.5 97.2 372 97.2 DL 383 97.2 377.5 97.2 DL 388.5 97.2 383 -97.2 DL 394 97.2 388.5 97.2 DL 399.5 97.2 394 97.2 DL 405 97.2 399.5 -97.2 DL 410.5 97.2 405 97.2 DL 416 97.2 410.5 97.2 DL 421.5 97.2 416 -97.2 DL 427 97.2 421.5 97.2 DL 432.5 97.2 427 97.2 DL 438 97.2 432.5 -97.2 DL 443.5 97.2 438 97.2 DL 449 97.2 443.5 97.2 DL 454.5 97.2 449 -97.2 DL 460 97.2 454.5 97.2 DL 465.5 97.2 460 97.2 DL 471 97.2 465.5 -97.2 DL 476.5 97.2 471 97.2 DL 482 97.2 476.5 97.2 DL 487.5 97.2 482 -97.2 DL 493 97.2 487.5 97.2 DL 498.5 97.2 493 97.2 DL 504 97.2 498.5 -97.2 DL/F0 12/Times-Bold@0 SF -.3(Ap)72 136.6 S -(pendix A: Linking Dynamically-Loaded Functions).3 E 77.5 149.8 72 149.8 -DL 80.5 149.8 75 149.8 DL 86 149.8 80.5 149.8 DL 91.5 149.8 86 149.8 DL -97 149.8 91.5 149.8 DL 102.5 149.8 97 149.8 DL 108 149.8 102.5 149.8 DL -113.5 149.8 108 149.8 DL 119 149.8 113.5 149.8 DL 124.5 149.8 119 149.8 -DL 130 149.8 124.5 149.8 DL 135.5 149.8 130 149.8 DL 141 149.8 135.5 -149.8 DL 146.5 149.8 141 149.8 DL 152 149.8 146.5 149.8 DL 157.5 149.8 -152 149.8 DL 163 149.8 157.5 149.8 DL 168.5 149.8 163 149.8 DL 174 149.8 -168.5 149.8 DL 179.5 149.8 174 149.8 DL 185 149.8 179.5 149.8 DL 190.5 -149.8 185 149.8 DL 196 149.8 190.5 149.8 DL 201.5 149.8 196 149.8 DL 207 -149.8 201.5 149.8 DL 212.5 149.8 207 149.8 DL 218 149.8 212.5 149.8 DL -223.5 149.8 218 149.8 DL 229 149.8 223.5 149.8 DL 234.5 149.8 229 149.8 -DL 240 149.8 234.5 149.8 DL 245.5 149.8 240 149.8 DL 251 149.8 245.5 -149.8 DL 256.5 149.8 251 149.8 DL 262 149.8 256.5 149.8 DL 267.5 149.8 -262 149.8 DL 273 149.8 267.5 149.8 DL 278.5 149.8 273 149.8 DL 284 149.8 -278.5 149.8 DL 289.5 149.8 284 149.8 DL 295 149.8 289.5 149.8 DL 300.5 -149.8 295 149.8 DL 306 149.8 300.5 149.8 DL 311.5 149.8 306 149.8 DL 317 -149.8 311.5 149.8 DL 322.5 149.8 317 149.8 DL 328 149.8 322.5 149.8 DL -333.5 149.8 328 149.8 DL 339 149.8 333.5 149.8 DL 344.5 149.8 339 149.8 -DL 350 149.8 344.5 149.8 DL 355.5 149.8 350 149.8 DL 361 149.8 355.5 -149.8 DL 366.5 149.8 361 149.8 DL 372 149.8 366.5 149.8 DL 377.5 149.8 -372 149.8 DL 383 149.8 377.5 149.8 DL 388.5 149.8 383 149.8 DL 394 149.8 -388.5 149.8 DL 399.5 149.8 394 149.8 DL 405 149.8 399.5 149.8 DL 410.5 -149.8 405 149.8 DL 416 149.8 410.5 149.8 DL 421.5 149.8 416 149.8 DL 427 -149.8 421.5 149.8 DL 432.5 149.8 427 149.8 DL 438 149.8 432.5 149.8 DL -443.5 149.8 438 149.8 DL 449 149.8 443.5 149.8 DL 454.5 149.8 449 149.8 -DL 460 149.8 454.5 149.8 DL 465.5 149.8 460 149.8 DL 471 149.8 465.5 -149.8 DL 476.5 149.8 471 149.8 DL 482 149.8 476.5 149.8 DL 487.5 149.8 -482 149.8 DL 493 149.8 487.5 149.8 DL 498.5 149.8 493 149.8 DL 504 149.8 -498.5 149.8 DL/F1 11/Times-Roman@0 SF 1.43(After you ha)108 180.1 R -1.761 -.165(ve c)-.22 H 1.431(reated and re).165 F 1.431 -(gistered a user)-.165 F 1.431(-de\214ned function, your w)-.22 F 1.431 -(ork is essentially)-.11 F(done.)108 193.3 Q/F2 10/Times-Roman@0 SF -(POSTGRES)5.585 E F1 2.835(,h)C -.275(ow)-2.835 G -2.365 -.275(ev e).275 -H .965 -.44(r, m).275 H .085(ust load the).44 F/F3 11/Times-Italic@0 SF -.085(object code)2.835 F F1 .085(\(e.g., a)2.835 F/F4 11/Courier@0 SF -(.o)2.835 E F1 .084(\214le, or a shared library\))2.835 F .536 -(that implements your function.)108 206.5 R .537(As pre)6.036 F .537 -(viously mentioned,)-.275 F F2(POSTGRES)3.287 E F1 .537 -(loads your code at)3.287 F 1.335(run-time, as required.)108 219.7 R -1.334(In order to allo)6.834 F 4.084(wy)-.275 G 1.334 -(our code to be dynamically loaded, you may)-4.084 F(ha)108 232.9 Q 1.43 --.165(ve t)-.22 H 3.85(oc).165 G 1.1 -(ompile and link-edit it in a special w)-3.85 F(ay)-.11 E 6.6(.T)-.715 G -1.1(his section brie\215y describes ho)-6.6 F 3.85(wt)-.275 G(o)-3.85 E -.666(perform the compilation and link-editing required before you can l\ -oad your user)108 246.1 R(-de\214ned)-.22 E .222 -(functions into a running)108 259.3 R F2(POSTGRES)2.973 E F1(serv)2.973 -E(er)-.165 E 5.723(.N)-.605 G .223(ote that)-5.723 F F3 .223(this pr) -2.973 F .223(ocess has c)-.495 F(hang)-.165 E .223(ed as of V)-.11 F(er) --1.221 E(-)-.22 E .177(sion 4.2.)108 274.7 R/F5 8/Times-Roman@0 SF(11) --4.4 I F1 -1.21(Yo)2.927 4.4 O 2.927(us)1.21 G .177(hould e)-2.927 F -.177 -(xpect to read \(and reread, and re-reread\) the manual pages for the) --.165 F 3.075(Cc)108 287.9 S(ompiler)-3.075 E(,)-.44 E F4(cc)3.075 E F1 -.325(\(1\), and the link editor)B(,)-.44 E F4(ld)3.075 E F1 .324 -(\(1\), if you ha)B .654 -.165(ve s)-.22 H .324(peci\214c questions.) -.165 F .324(In addition,)5.824 F 36.494(the re)108 301.1 R 36.494 -(gression test suites in the directory)-.165 F F4 -(/usr/local/postgres95/src/regress)108 314.3 Q F1 2.851(contain se)5.602 -F -.165(ve)-.275 G 2.851(ral w).165 F 2.851(orking e)-.11 F 2.851 -(xamples of)-.165 F(this process.)108 327.5 Q(If you cop)5.5 E 2.75(yw) --.11 G(hat these tests do, you should not ha)-2.75 E .33 -.165(ve a)-.22 -H .33 -.165(ny p).165 H(roblems.).165 E(The follo)108 344.6 Q -(wing terminology will be used belo)-.275 E(w:)-.275 E(Dynamic loading) -108 361.7 Q .398(is what)133 374.9 R F2(POSTGRES)3.148 E F1 .399 -(does to an object \214le.)3.149 F .399 -(The object \214le is copied into the running)5.899 F F2(POSTGRES)133 -388.1 Q F1(serv)3.051 E .301(er and the functions and v)-.165 F .3 -(ariables within the \214le are made a)-.275 F -.275(va)-.22 G(ilable) -.275 E 2.218(to the functions within the)133 401.3 R F2(POSTGRES)4.968 E -F1(process.)4.969 E F2(POSTGRES)7.719 E F1 2.219(does this using the) -4.969 F(dynamic loading mechanism pro)133 414.5 Q -(vided by the operating system.)-.165 E(Loading and link editing)108 -431.6 Q .438(is what you do to an object \214le in order to produce ano\ -ther kind of object \214le \(e.g.,)133 444.8 R .433(an e)133 458 R -.165 -(xe)-.165 G .433(cutable program or a shared library\).).165 F -1.21(Yo) -5.933 G 3.184(up)1.21 G .434(erform this using the link editing)-3.184 F -(program,)133 471.2 Q F4(ld)2.75 E F1(\(1\).)A(The follo)108 488.3 Q -(wing general restrictions and notes also apply to the discussion belo) --.275 E -.715(w.)-.275 G 5.5<8350>113.5 505.4 S 1.132(aths gi)-5.665 F --.165(ve)-.275 G 3.882(nt).165 G 3.882(ot)-3.882 G(he)-3.882 E/F6 11 -/Times-Bold@0 SF(cr)3.882 E 1.131(eate function)-.198 F F1 1.131 -(command must be absolute paths \(i.e., start with)3.881 F .535(\231/\ -\232\) that refer to directories visible on the machine on which the) -122.85 518.6 R F2(POSTGRES)3.285 E F1(serv)3.285 E .535(er is)-.165 F -(running.)122.85 534 Q F5(12)-4.4 I F1 5.5<8354>113.5 547.2 S(he)-5.5 E -F2(POSTGRES)4.044 E F1 1.294(user must be able to tra)4.044 F -.165(ve) --.22 G 1.294(rse the path gi).165 F -.165(ve)-.275 G 4.044(nt).165 G -4.043(ot)-4.044 G(he)-4.043 E F6(cr)4.043 E 1.293(eate function)-.198 F -F1 1.102(command and be able to read the object \214le.)122.85 560.4 R -1.102(This is because the)6.602 F F2(POSTGRES)3.852 E F1(serv)3.853 E -(er)-.165 E 2.562(runs as the)122.85 573.6 R F2(POSTGRES)5.311 E F1 -(user)5.311 E 5.311(,n)-.44 G 2.561 -(ot as the user who starts up the frontend process.)-5.311 F .32 LW 76 -583.2 72 583.2 DL 80 583.2 76 583.2 DL 84 583.2 80 583.2 DL 88 583.2 84 -583.2 DL 92 583.2 88 583.2 DL 96 583.2 92 583.2 DL 100 583.2 96 583.2 DL -104 583.2 100 583.2 DL 108 583.2 104 583.2 DL 112 583.2 108 583.2 DL 116 -583.2 112 583.2 DL 120 583.2 116 583.2 DL 124 583.2 120 583.2 DL 128 -583.2 124 583.2 DL 132 583.2 128 583.2 DL 136 583.2 132 583.2 DL 140 -583.2 136 583.2 DL 144 583.2 140 583.2 DL 148 583.2 144 583.2 DL 152 -583.2 148 583.2 DL 156 583.2 152 583.2 DL 160 583.2 156 583.2 DL 164 -583.2 160 583.2 DL 168 583.2 164 583.2 DL 172 583.2 168 583.2 DL 176 -583.2 172 583.2 DL 180 583.2 176 583.2 DL 184 583.2 180 583.2 DL 188 -583.2 184 583.2 DL 192 583.2 188 583.2 DL 196 583.2 192 583.2 DL 200 -583.2 196 583.2 DL 204 583.2 200 583.2 DL 208 583.2 204 583.2 DL 212 -583.2 208 583.2 DL 216 583.2 212 583.2 DL/F7 5/Times-Roman@0 SF(11)93.6 -593.6 Q F5 .445(The old)2.446 3.2 N/F8 7/Times-Roman@0 SF(POSTGRES)2.445 -E F5 .445(dynamic loading mechanism required in-depth kno)2.445 F .445 -(wledge in terms of e)-.2 F -.12(xe)-.12 G .445 -(cutable format, placement and).12 F .174(alignment of e)72 606.4 R -.12 -(xe)-.12 G .174(cutable instructions within memory).12 F 2.174(,e)-.52 G -.174(tc. on the part of the person writing the dynamic loader)-2.174 F -4.174(.S)-.44 G .174(uch loaders tended to)-4.174 F .862(be slo)72 616 R -2.862(wa)-.2 G .862(nd b)-2.862 F(uggy)-.16 E 4.862(.A)-.52 G 2.862(so) --4.862 G 2.862(fV)-2.862 G .862(ersion 4.2, the)-3.75 F F8(POSTGRES) -2.862 E F5 .862(dynamic loading mechanism has been re)2.862 F .861 -(written to use the dynamic loading)-.2 F .698(mechanism pro)72 625.6 R -.698(vided by the operating system.)-.12 F .699 -(This approach is generally f)4.698 F(aster)-.08 E 2.699(,m)-.32 G .699 -(ore reliable and more portable than our pre)-2.699 F(vious)-.2 E .181 -(dynamic loading mechanism.)72 635.2 R .18 -(The reason for this is that nearly all modern v)4.181 F .18(ersions of) --.12 F F8(UNIX)2.18 E F5 .18(use a dynamic loading mechanism to im-)2.18 -F .648(plement shared libraries and must therefore pro)72 644.8 R .648 -(vide a f)-.12 F .648(ast and reliable mechanism.)-.08 F .648 -(On the other hand, the object \214le must be post-)4.648 F .433 -(processed a bit before it can be loaded into)72 654.4 R F8(POSTGRES) -2.433 E F5 4.433(.W)C 2.433(eh)-5.073 G .433(ope that the lar)-2.433 F -.432(ge increase in speed and reliability will mak)-.144 F 2.432(eu)-.08 -G 2.432(pf)-2.432 G .432(or the)-2.432 F(slight decrease in con)72 664 Q --.12(ve)-.32 G(nience.).12 E F7(12)93.6 674.4 Q F5(Relati)2.257 3.2 M -.497 -.12(ve p)-.2 H .257(aths do in f).12 F .257(act w)-.08 F .257 -(ork, b)-.08 F .257(ut are relati)-.16 F .497 -.12(ve t)-.2 H 2.257(ot) -.12 G .257 -(he directory where the database resides \(which is generally in)-2.257 -F .256(visible to the)-.32 F .044(frontend application\).)72 687.2 R(Ob) -4.044 E(viously)-.12 E 2.044(,i)-.52 G 2.044(tm)-2.044 G(ak)-2.044 E -.044(es no sense to mak)-.08 F 2.044(et)-.08 G .044(he path relati) --2.044 F .284 -.12(ve t)-.2 H 2.044(ot).12 G .044 -(he directory in which the user started the frontend ap-)-2.044 F -(plication, since the serv)72 696.8 Q -(er could be running on a completely dif)-.12 E(ferent machine!)-.2 E F6 -(82)282.5 756 Q EP -%%Page: 83 83 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF 1.887(\(Making the \214le or a higher)122.85 -97.2 R(-le)-.22 E -.165(ve)-.275 G 4.637(ld).165 G 1.887 -(irectory unreadable and/or une)-4.637 F -.165(xe)-.165 G 1.887 -(cutable by the).165 F(\231postgres\232 user is an)122.85 110.4 Q/F1 11 -/Times-Italic@0 SF -.22(ex)2.75 G(tr).22 E(emely)-.407 E F0 -(common mistak)2.75 E(e.\))-.11 E 5.5<8353>113.5 123.6 S 1.373(ymbol na\ -mes de\214ned within object \214les must not con\215ict with each other\ - or with)-5.5 F(symbols de\214ned in)122.85 136.8 Q/F2 10/Times-Roman@0 -SF(POSTGRES)2.75 E F0(.)A 5.5<8354>113.5 150 S .308 -(he GNU C compiler usually does not pro)-5.5 F .308 -(vide the special options that are required to)-.165 F 1.35 -(use the operating system')122.85 163.2 R 4.1(sd)-.605 G 1.349 -(ynamic loader interf)-4.1 F 4.099(ace. In)-.11 F 1.349 -(such cases, the C compiler)4.099 F -(that comes with the operating system must be used.)122.85 176.4 Q/F3 12 -/Times-Bold@0 SF(UL)72 202.6 Q(TRIX)-1.104 E F0 .024(It is v)108 219.7 R -.024(ery easy to b)-.165 F .025 -(uild dynamically-loaded object \214les under UL)-.22 F 2.775(TRIX. UL) --1.012 F .025(TRIX does not)-1.012 F(ha)108 232.9 Q 2.587 -.165(ve a) --.22 H 2.587 -.165(ny s).165 H 2.257 -(hared-library mechanism and hence does not place an).165 F 5.007(yr) --.165 G 2.256(estrictions on the)-5.007 F .204(dynamic loader interf)108 -246.1 R 2.954(ace. On)-.11 F .205 -(the other hand, we had to \(re\)write a non-portable dynamic)2.955 F -(loader ourselv)108 259.3 Q(es and could not use true shared libraries.) --.165 E 1.364(Under UL)108 276.4 R 1.363(TRIX, the only restriction is \ -that you must produce each object \214le with the)-1.012 F(option)108 -289.6 Q/F4 11/Courier@0 SF(-G 0)2.75 E F0 5.5(.\()C(Notice that that') --5.5 E 2.75(st)-.605 G(he numeral `)-2.75 E(`)-.814 E F4(0)A F0 1.628 --.814('' a)D(nd not the letter `).814 E(`)-.814 E F4(O)A F0 -.814('')C -2.75(\). F).814 F(or e)-.165 E(xample,)-.165 E/F5 10/Courier@0 SF 6(#s) -184 314.8 S(imple ULTRIX example)-6 E 6(%c)184 327 S 6(c-)-6 G 6(G0-)-6 -G 6(cf)-6 G(oo.c)-6 E F0 1.628(produces an object \214le called)108 -353.2 R F4(foo.o)4.378 E F0 1.628 -(that can then be dynamically loaded into)4.378 F F2(POST)4.379 E(-)-.92 -E(GRES)108 366.4 Q F0 5.5(.N)C 2.75(oa)-5.5 G -(dditional loading or link-editing must be performed.)-2.75 E F3 -(DEC OSF/1)72 392.6 Q F0 .797(Under DEC OSF/1, you can tak)108 409.7 R -3.547(ea)-.11 G 1.126 -.165(ny s)-3.547 H .796 -(imple object \214le and produce a shared object \214le).165 F .834 -(by running the)108 422.9 R F4(ld)3.584 E F0 .834(command o)3.584 F --.165(ve)-.165 G 3.584(ri).165 G 3.584(tw)-3.584 G .835 -(ith the correct options.)-3.584 F .835(The commands to do this)6.335 F -(look lik)108 436.1 Q(e:)-.11 E F5 6(#s)184 461.3 S -(imple DEC OSF/1 example)-6 E 6(%c)184 473.5 S 6(c-)-6 G 6(cf)-6 G(oo.c) --6 E 6(%l)184 485.7 S 6(d-)-6 G -(shared -expect_unresolved '*' -o foo.so foo.o)-6 E F0 .224 -(The resulting shared object \214le can then be loaded into)108 511.9 R -F2(POSTGRES)2.974 E F0 5.724(.W)C .224(hen specifying the)-5.724 F .062 -(object \214le name to the)108 525.1 R/F6 11/Times-Bold@0 SF(cr)2.812 E -.062(eate function)-.198 F F0 .063(command, one must gi)2.812 F .393 --.165(ve i)-.275 H 2.813(tt).165 G .063(he name of the shared)-2.813 F -.996(object \214le \(ending in)108 540.5 R F4(.so)3.746 E F0 3.746(\)r)C -.996(ather than the simple object \214le.)-3.746 F/F7 8/Times-Roman@0 SF -(13)-4.4 I F0 .996(If the \214le you specify is)3.746 4.4 N -(not a shared object, the back)108 553.7 Q(end will hang!)-.11 E F3 -(SunOS 4.x, Solaris 2.x and HP-UX)72 579.9 Q F0 .348(Under both SunOS 4\ -.x, Solaris 2.x and HP-UX, the simple object \214le must be created by) -108 597 R 1.225 -(compiling the source \214le with special compiler \215ags)108 610.2 R -F1(and)3.976 E F0 3.976(as)3.976 G 1.226(hared library must be pro-) --3.976 F(duced.)108 623.4 Q .32 LW 76 633 72 633 DL 80 633 76 633 DL 84 -633 80 633 DL 88 633 84 633 DL 92 633 88 633 DL 96 633 92 633 DL 100 633 -96 633 DL 104 633 100 633 DL 108 633 104 633 DL 112 633 108 633 DL 116 -633 112 633 DL 120 633 116 633 DL 124 633 120 633 DL 128 633 124 633 DL -132 633 128 633 DL 136 633 132 633 DL 140 633 136 633 DL 144 633 140 633 -DL 148 633 144 633 DL 152 633 148 633 DL 156 633 152 633 DL 160 633 156 -633 DL 164 633 160 633 DL 168 633 164 633 DL 172 633 168 633 DL 176 633 -172 633 DL 180 633 176 633 DL 184 633 180 633 DL 188 633 184 633 DL 192 -633 188 633 DL 196 633 192 633 DL 200 633 196 633 DL 204 633 200 633 DL -208 633 204 633 DL 212 633 208 633 DL 216 633 212 633 DL/F8 5 -/Times-Roman@0 SF(13)93.6 643.4 Q F7(Actually)2.723 3.2 M(,)-.52 E/F9 7 -/Times-Roman@0 SF(POSTGRES)2.723 E F7 .723(does not care what you name \ -the \214le as long as it is a shared object \214le.)2.723 F .724 -(If you prefer to name your)4.724 F .041 -(shared object \214les with the e)72 656.2 R(xtension)-.12 E/F10 8 -/Courier@0 SF(.o)2.041 E F7 2.041(,t)C .041(his is \214ne with)-2.041 F -F9(POSTGRES)2.041 E F7 .041(so long as you mak)2.041 F 2.041(es)-.08 G -.04(ure that the correct \214le name is gi)-2.041 F -.12(ve)-.2 G 2.04 -(nt).12 G 2.04(ot)-2.04 G(he)-2.04 E/F11 8/Times-Bold@0 SF(cr)72 665.8 Q -.331(eate function)-.144 F F7 2.331(command. In)2.331 F .331(other w) -2.331 F .331(ords, you must simply be consistent.)-.08 F(Ho)4.331 E(we) --.2 E -.12(ve)-.2 G .971 -.32(r, f).12 H .332 -(rom a pragmatic point of vie).32 F 1.372 -.52(w, w)-.2 H 2.332(ed).52 G -(iscourage)-2.332 E .626 -(this practice because you will undoubtedly confuse yourself with re)72 -675.4 R -.04(ga)-.12 G .626(rds to which \214les ha).04 F .865 -.12 -(ve b)-.16 H .625(een made into shared object \214les and).12 F .557 -(which ha)72 685 R .797 -.12(ve n)-.16 H 2.557(ot. F).12 F .557(or e) --.12 F .558(xample, it')-.12 F 2.558(sv)-.44 G .558(ery hard to write) --2.678 F F10(Makefile)2.558 E F7 2.558(st)C 2.558(od)-2.558 G 2.558(ot) --2.558 G .558 -(he link-editing automatically if both the object \214le and the)-2.558 -F(shared object \214le end in)72 694.6 Q F10(.o)2 E F7(!)A F6(83)282.5 -756 Q EP -%%Page: 84 84 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 11/Times-Roman@0 SF .671 -(The necessary steps with HP-UX are as follo)108 97.2 R 3.42(ws. The) --.275 F/F1 11/Courier@0 SF(+z)3.42 E F0 .67 -(\215ag to the HP-UX C compiler)3.42 F 1.752 -(produces so-called \231Position Independent Code\232 \(PIC\) and the) -108 110.4 R F1(+u)4.502 E F0 1.752(\215ag remo)4.502 F -.165(ve)-.165 G -4.502(ss).165 G(ome)-4.502 E 1.207(alignment restrictions that the P)108 -123.6 R 1.207(A-RISC architecture normally enforces.)-1.012 F 1.206 -(The object \214le)6.706 F 1.607(must be turned into a shared library u\ -sing the HP-UX link editor with the)108 136.8 R F1(-b)4.357 E F0 -(option.)4.357 E .109(This sounds complicated b)108 150 R .109 -(ut is actually v)-.22 F .108 -(ery simple, since the commands to do it are just:)-.165 F/F2 10 -/Courier@0 SF 6(#s)184 175.2 S(imple HP-UX example)-6 E 6(%c)184 187.4 S -6(c+)-6 G 6(z+)-6 G 6(u-)-6 G 6(cf)-6 G(oo.c)-6 E 6(%l)184 199.6 S 6(d-) --6 G 6(b-)-6 G 6(of)-6 G(oo.sl foo.o)-6 E F0 1.502(As with the)108 225.8 -R F1(.so)4.252 E F0 1.503(\214les mentioned in the last subsection, the) -4.253 F/F3 11/Times-Bold@0 SF(cr)4.253 E 1.503(eate function)-.198 F F0 -(command)4.253 E .378(must be told which \214le is the correct \214le t\ -o load \(i.e., you must gi)108 239 R .708 -.165(ve i)-.275 H 3.128(tt) -.165 G .378(he location of the)-3.128 F(shared library)108 252.2 Q 2.75 -(,o)-.715 G(r)-2.75 E F1(.sl)2.75 E F0(\214le\).)2.75 E -(Under SunOS 4.x, the commands look lik)108 269.3 Q(e:)-.11 E F2 6(#s) -184 294.5 S(imple SunOS 4.x example)-6 E 6(%c)184 306.7 S 6(c-)-6 G -(PIC -c foo.c)-6 E 6(%l)184 318.9 S 6(d-)-6 G -(dc -dp -Bdynamic -o foo.so foo.o)-6 E F0(and the equi)108 345.1 Q -.275 -(va)-.275 G(lent lines under Solaris 2.x are:).275 E F2 6(#s)184 370.3 S -(imple Solaris 2.x example)-6 E 6(%c)184 382.5 S 6(c-)-6 G 6(KP)-6 G -(IC -c foo.c)-6 E(or)220 394.7 Q 6(%g)184 406.9 S(cc -fPIC -c foo.c)-6 E -6(%l)184 419.1 S 6(d-)-6 G 6(G-)-6 G(Bdynamic -o foo.so foo.o)-6 E F0 -.827(When linking shared libraries, you may ha)108 445.3 R 1.157 -.165 -(ve t)-.22 H 3.577(os).165 G .827 -(pecify some additional shared libraries)-3.577 F(\(typically system li\ -braries, such as the C and math libraries\) on your)108 458.5 Q F1(ld) -2.75 E F0(command line.)2.75 E F3(84)282.5 756 Q EP -%%Trailer -end -%%EOF