You are on page 1of 765

PostgreSQL

Equipo de Desarrollo PostgreSQL

Editado por

Thomas Lockhart

PostgreSQL


    "!#
  $ &%'()*+#,.-'(

/$021436587:9;=<?>
36@A9:B9(C
0EDGFH7I@ 5KJ3KL*MONONOPRQ4NS$9(/021436587I91TU 0WVHXU8YZ9:[H9U 0ED\]9:B3.T7:0W^D
_

Tabla de contenidos

`ab8cdeaf]ghg ghghghgAghghgAghgAghghghg ghghghgAghghghg ghghghgAghghgAgAghghghgAghgAghgAghghghg ghghghgAghghghg ghghghghgAghgAghgAghghghgAgAghghgAghghghg ghghghgAghghghg ghghghgAghgAghgAghghghg ghghghgAghghghghg ghghghgAghgAghgAghghghgAgAghghgAghghghg ghghghgAghg
??
ig$jkclmonaqp]b8cmrstgAghg ghghghgAghghghg ghghghgAghghgAgAghghghgAgAghghgAghghghg ghghghgAghghghgAgAghghghgAghgAghgAghghghg ghghghgAghghghg ghghghgAghghgAgAghghghgAghgAghgAghghghg ghghghghgAghghghg ghghghgAghgAghgAghghghgAgAghghgAghghghg ghg
??
u(v=wx   ,8  xyvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv
??
z8!] {q|} v6vAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
~ 
'( 2RO   vhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv
,.G, Ro
2 xvv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
,8 O v vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
??
%)* x  ( v vAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
R,. xovhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv
| "RG)* x  wx( )*qG ,8 G vAvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 
'(RW,.$  2R  vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
v " x R" |"!# vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
??
   
 vAvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
)* x R  vAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv
)* vAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 x  x  v6vAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
)*  ) x $ vhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
  vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
??
  x  v vhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
(v Ro%H vAvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv
)*GO ,%H vAvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhv ??
??
 x $O%H vhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
'(O$,.RZ%H vhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv
??
R
"% )*q%H vhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
~   x %H vAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv
)*R ,%H vhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
w e  xko k-
 x k2  .2G vv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
(v   v6vAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
??
#G" ,8H,8 ( x ,8 vAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 + x   vhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv
  x )*{ ,8 vhvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
 +)*{G ,8 v6vAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
 + q x R$ + R )* vAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv ??
  w  w  vvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
  w  ow % vAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
(v= x ,8  x G vAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
x ,8  x H!]# vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAv ??
x ,8  x G)* ,8G vhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
??
" x  x ,8  x  v6vhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
x ,8  x   ,8'(("k vAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv
x ,8  x   )*R vv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
x ,8  x  )*{ ,8 vhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
x ,8  x  w  v vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
(v  x 
 x R  vhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv ??
 x ,8R+ x   vAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
x ,8  x  v6vhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
   + q,8 x   $ vhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
 x   $ kw vhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv ??
(v=wx  ,8 x G
 vhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
 vhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
??
 $ w4x  ,8 vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
v RO ,8. vhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv
v kG x ,8  vAvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
??

u v  R 2  x  x ,.  x ,8  x   x R    x ,8  x ,8 o  R


 x vhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv
wx   ,.,8 x*vhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
2 $)*  x R x ,8,8  x $ vhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??

  ,8 o,8 O  vAv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??

   )*  x R    vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv ??
~  
 $ vhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAv ??
~  
 x  ,8 vhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
'(
 ,. x   x ,8  q $| x  x G  ,8,8 xyvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vh??
v
u8u(v  x(  O x   x  x  v6vhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhv ??
u v )* x RO,8 x  x  ~  ]$ vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhv ??
G,8 x  ~ | qR v vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
??
 ,.$,.  x   R x R $+   ~ | q vhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
,.,8G2] x  ~  ]$ vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
??
R ,8,8 x  x  ~  R vhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
u(v  )*,8 x $)*  x  x  ,8 vAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv
u(vw4x  ,8,8  x |"!# v vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
~ % vhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
??
 w4w ] v6vAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
 w4w % ~ # vhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
 w4w H +w v6v vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
~  wvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv
# " vAvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAv ??
#]"% vvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
w % vAvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
 v6v vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 %  % vhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
 % % ~ " vAvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAv ??
 % % w vAvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
 %  v6vAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
 % w4 ] vhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 %#  v vhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
 %  % vhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
 % # vhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
 %"!  vhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
 %% ~ # vhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 %% ~ # vAvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhv ??
 %% +w  v6vhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
 %%  vhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
 ]" |w v6vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
 w "% vAvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
??
 #  vhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhv ??
#% v vAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv ??
   % vAvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhv ??
 e % ~ " vhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
  % w v vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
  ] vhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
  w4  vhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 e#  v vAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
   % yvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhv ??
  # vAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
 eH!]  vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
 e% ~ # vhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 e% +w  yv6vhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
 e%  vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 e]" vhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??

 e w  vhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??


  vAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
|# wvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
% vAvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv
% vhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
w " % vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
??
# w H% vAvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhv ??
#  vAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
# ] vhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
 v vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
% w4 v6vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv
H% vAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhv ??
  vhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
## ~ vhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
??
"# % vhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
"# % w4 % vAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
"% v vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
" vAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
% % v vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhv ??
# w "% v vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 % vAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
] vhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
u(v  ,8,8  x  vAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
v vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
createdb vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
createlang vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
createuser
vhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
dropdb v vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
droplang v vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
dropuser
vhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAv ??
ecpg
v vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
pgaccessvAvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
pgadmin vAvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
pg_dump
vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
pg_dumpall
vhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAv ??
psql
vAvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
pgtclshvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
pgtksh v vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
??
u(v vacuumdb
,8,8  x  H 2R)* v vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
vhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv
initdb
vhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
initlocation
v vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
ipcclean v vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhv ??
pg_passwd vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
pg_upgrade
v vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
postgres vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
postmaster
??
iigjkclmna]nd*sfsIb84rmntr
ghghg ghghghgAghghghg ghghghgAghghgAgAghghghghg ghghghgAghghghg ghghghgAghghgAgAghghghgAgAghghgAghghghg ghghghgAghghghg ghghghgAghghgAghgAghghghg ghghghgAghghghg ghghghgAghghgAgAghghghgAghg
??
u(v G v6vAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
??
 R )*|,8 $ )* x 2OR  vhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
 R )* x R  vhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
u v ,8  x    x( 
,8 xevhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
??
)*R| ,8 x( 
,8 x configure v vhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??

x
x
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
A
v
h
v
A
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
A
v
h
v
A
v
h
v
A
v
h
v
v
)*R| ,8  ,8,. make
??
"q#,8 vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv ??
 x R ,8,8 x  vhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv
u v  2RO
,8 x GH R)* v vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
??

 vw4x  $ ,8 xvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv
x G ,8)* x $ vAvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
??
,8G  )*  x R  wx  ,8 xv6vhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
u(vw4x $ ,8  x  x x( vhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhv
 x  ,8,8  x q  G vhvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
wx 2R ,8  x  + GO $ vhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
??
2 x  $   v vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
 v  x  x  R )* qOI,8 ,. xv6v vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
??
   x  G  x vhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
wx ,.  x 
vv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv
postmaster
??
2 x 
R  x  vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
(v HG
  vhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv
 x R ,.$,.  x 2 $O  vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
)*+   O   vAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
 x R  ,8,.G2 vAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
x ,8  x    vhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
(v Z )* x ]   vhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
(v  x  ,. v6vhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
??
#,8 ,8  x   R x  
 vhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
(v  x  x  q R vAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhv
G,8 x  x 2  R vhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
,.,8G2] o   vhvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
??
R ,8,8 x  x 
$2  R vhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
  2G
  G O$,. xvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv
(v %H$)*  x ] q )* vhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
   q x ,8  qR)*2R vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
??
 G)*|,. x  o,8 x  x G   x R vAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
 ,8 x )* x I v6v vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv
v ,8 ,8 x | q R vAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
v  G
$ G
. xv6vhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhv ??
??
 x R x  
. xvvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
R ,8R Oo q  ,8R  v vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
,8G  )*  x RqGR( G
G2 xkvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
x      xqv6vhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
,.'( 
+ q,.)*,8 x ,8 ,8+   $ )* vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
v R+ 
  x  v6vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
??
  xk(v v ?vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v v vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v v u?vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v &v vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v v vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v v u?vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v &v vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v v vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v v u?vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v &v vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v v u?vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v v vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v uv u?vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  xk(v u&v vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  x  (v v vhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
  x  u(v vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
  x  u(v  vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
  x  u(v u
vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
  x  u(v v vhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
2RG o~ R v vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??

2RG o~ R v  vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
2RG o~ R v uvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
% )*    x  vhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
iiigjkcl4mqna
rtrmdym$nt
rgAghghghgAgAghghgAghghghg ghghghgAghghghg ghghghghgAghgAghgAghghghg ghghghgAghghghg ghghghgAghghgAgAghghghgAghgAghgAghghghg ghghghgAghghghghg ghghghgAghgAghgAghghghg ghghghgAghghghg ghghghgAghg
??
u(v 
 R,8  vAv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv
 x ,8R+  
 G,.R O 2RG vhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv??
v "R x &"!#=G    vhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
)*'($,.GG"R x   ROI vAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
??
%  " 2R)*  vhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??

,.G,  " G)*  $ 


 2RG vhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv
(v "R x   x "!]# x ,8  x  vAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
x ,8  x  # x 
Iq   x   R"!]# vhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
x ,8  x  # x 
Iq,8  G vhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
x ,8  x  w4x R x  v vhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
x ,8  x  # x 
I )*    v vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhv ??
??
"
G,.G
q  x ,.  x  vhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
(v "R x   x "!]#=%  v6vAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv
??
%  x ]   vAvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
(v "R x    x "!]#   vhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhv
wx( )*,8 x qR )* ,8 x GO  v vhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
(v "R x   x  H!]# 
 ( vAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
(v H R)*o q G q vAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
??
z8!] {q| x H 
} vhvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
#$+
+G2 R)*   v.vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
  w4 " %$ %#% vAvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv
 )*  vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
   x RRO 
GO vhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAv ??
v ]R  ,8 x  "R x   x G x   x  ,8 vhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
v H% wx  ,.G vhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
v  x   x  x ,8  x G ,8q  x ) ,. vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
??
#% +w vhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
 u|vAvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhv ??
" x (v "O  v  vhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv
u(v %H 
  K$  v vhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhv ??
G,8 x %H 
 v vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
wx ,8,8 x ,8 x G%HO 
? x 
. vhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
??
|     e  )*  x R vhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
HI)*  vAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv
v HGO
?O$)*)* x  wx  ,8 v vhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
wx  ,8 x ,8  x  vhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
wx  ,8" O x ,8R  x  v6vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
??
)* x )* x  v6vAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
|    R R '( x  vhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
)* G vAvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv
(v # x  I,.G  OG  vhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
wx 2R ,8 x   x  I,8   vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
??
#"H!]# vhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
#"%,. vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
ig$ifarm.a$bghghghg ghghghgAghgAghgAghghghg ghghghgAghghghg ghghghgAghghgAgAghghghgAghgAghgAghghghg ghghghghgAghghghg ghghghgAghgAghgAghghghgAgAghghgAghghghg ghghghgAghghghg ghghghgAghgAghgAghghghghg ghghghgAghghghg ghghghgAghgAghgAghghghgAgAghghgAghg
??
(v x ,8  x  v vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
(v GIR O x  vhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
Rk 2RO ,8 vhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
O$,.R.O2R ,8   w )* )* x R,8 xv6vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
wx  ,8 v vhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
x ,8  x  2RO$  w4x ,8O  vAvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
??

., ,8G   x ] IR  x |  # w4~ ! vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv
??
)*o HRG)*  v6vhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  w( x ,8  x  vhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv
wv
??
(v   v6vhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
x ,8  x    x  x o  ~  R vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vh??
v
x ,8  x  HI,8 ,8 x   x   R vhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhv ??
??
,8G2)*  x   x ,8 x    x   R vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
   vAvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv
R ,8,8 x 2 x ,8 x  vhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
x ,8  x  ,. $ |,. x  )* x   vhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv ??
x ,8  x  %"OG  
vhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
libpq
x ,8  x  ,8 x  
vhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
libpq
x
x
6
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
h
v
A
v
h
v
vAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
Z  |  R 
??
)*| HI)*  vhvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
(v    ~ x  x  vhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
 x R w4x ,.  $,8 xvAvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhv ??
 | q   v vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
x ,8  x    x  x o  ~  R vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
x ,8  x  HI,8 ,8 x q $  x   R v6vhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
R ,8,8 x 2 x ,8 x  vhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
x ,8  x  ,. $ |,. x  )* x   vhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
v 
R,8 vhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
)* x  v6vAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv ??
??
HI)*  vAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
wx( )*,8 x q  x ,8 o ,8)* x 
R,. vhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv
vw4x R $  ~ vhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
??
%"O  x  vhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 ,8,8  x + x k vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
wx 2R ,8 x x vhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
,8'(+   x(  O,8 x|v6vhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
  v vhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
v  ~ w4x R $, vhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
~    x '(  ~ w4x R $,. vAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
??
E x '(qRG2   ~ vAvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhv ??
2 x '(] 
 vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
w )*R x   ~ vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv
??
#  x '(q 
 vhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
 x(x ,8R x R'(]$ vhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv
w 2  x o!]  x ,8 x R'(    v6vhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
??
 )* x  R v vAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
  x R'(  x(x ,8  xvvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhv
??
2 x # GRG,.R v6vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??

 x 2  x RR'(  ~
 w
vhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
Postgres
OR'( $  x  vAvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
u(vw4x R $o )*,8 x # 2 vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv
??
]g$jkcl4mnakab8mrrt
mntrghgAghghgAghghghg ghghghgAghghghg ghghghgAghghgAghgAghghghg ghghghgAghghghg ghghghgAghghgAgAghghghgAgAghghgAghghghg ghghghgAghghghg ghghghghgAghgAghgAghghghg ghghghgAghghghg ghghghgAghghgAgAghg
??
v   
  x RqR
 vAvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv
)*R vhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv ??
(v 
 x q $+,8,8GK  ,8+ x G x $ "!# v vhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvh??
v
??
,8)* x   x ,8 x    vAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAv ??
)*G2R ,8 x  $,8 x "  x  vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
??
#q$o RO$  ,.,8 xvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
 )*  | R
 vhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
  x ,8 " )* $  vhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv ??
HI,8 R vhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv
??

(v 
$R  x  v6vhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhv
(v R )* ,8 x  x {R ,.o   x    x " )*$  ~  R v6vhvAvhvhvhv vhvhvhvAvh??
v
??

x
x

x
  ,8 & ,.   q  )* )* OI  R )* ,8 v ??
 
 )*  x { ,8 vAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv
R )* ,8 x  x {G ,8   x   R !  x  vhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv??
 +%".+  w )* )* x R,8 x q ]   vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
(v ,8   x  x ~ $,.- x v vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
wx   ,.,8 x*vhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
??
R,.  vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
x
h
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
A
v
A
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
A
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
A
v
A
v
v
%    RG
)*R+ q x I vhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
(v HG( | q2R
G vhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
??
v
     )* R  x  v6vAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
vw4gcc
x R $,.G+  ~ ,8-
 x vAvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhv ??
)*R  ,8'( ~ wvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
)* x   x   vhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
??
,8 )*)* x  vhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
)* x + q ,8 xvAvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv
??
HI)*  v6vhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
v ,8'(  x  vIvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv
??
R ,8R Oo q o x  vKvAvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
,8'( vhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv
~  vhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAv ??
??
]ig$c4trsmghgAgAghghghgAghghghg ghghghgAghghgAgAghghghgAghgAghgAghghghg ghghghgAghghghg ghghghgAghghgAgAghghghghgAgAghghgAghghghg ghghghgAghghghg ghghghgAghgAghgAghghghg ghghghgAghghghg ghghghgAghghgAghgAghghghgAgAghghgAghghghg ghghghgAghghghg ghghghgAghg
??
u(v H!]# vAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv
??
  ] q  ,8  x  vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
)* $ |  G   ,8  x  R vhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv
,8  x  x  G  R  ,8  x $ vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
??
# x 
I"!]# vAvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv
v 
 R,8  vAv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv ??
??
2RG  x ,8R+ q
 R,8R  vAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
(v )* x  vhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv
 x(   x  x R x  v vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
??
HI,8 ,8 x G x  wx GO,8R ]
 vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
)* x  x  x  ~   $ vhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
(v # x  R q,8 x   R vAvhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
??
 x & x R,8 
 vhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
 x ,8R vhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv
G,8 x  x  x 
o,.2 v vhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhv ??
??
#  x  x  x q,. q,8 x x 2R x ,8  vhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
 x  $&o x ,8  vhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv
  ,8,8  x $)*  x  ,8 x 2  R"# % vhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
 x  x  x   x R,8  vAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhv ??
,.R  G,8  x G vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
~ O  vAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
??
2  x ,8  x G ,8 x I x R vhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
(v ,8GK  ,8 
 x  (+ "!#e x  vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv
??
kG x ,8  v vhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhv ??

h
v
A
v
A
v
h
v
h
v
h
v
A
v
A
v
h
v
h
v
A
v
h
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
A
v
h
v
A
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
A
v
h
v
A
v
h
v
A
v
h
v
h
v
h
v
v
h
v
v
Z   )* ,8
??
% )*q%"O
H| I x  )* vhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??
|,8,.R.O2R ,8+ x   vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
]iig$]$fns8abgAghghghg ghghghgAghgAghgAghghghgAgAghghgAghghghg ghghghgAghghghg ghghghgAghgAghgAghghghghg ghghghgAghghghg ghghghgAghghgAgAghghghgAgAghghgAghghghg ghghghgAghghghg ghghghgAghgAghghgAghghghg ghghghgAghghghg ghghghgAghghgAgAghghghgAgAg
??
uv   q  ,8'(("'(O vhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhv ??
 x $'(O  vAvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv
??
k R  vhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??

 u(v 
  2 R  G  vAvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv

 x ,8 x GOH   vhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
??
%)* x #  x G  x x )* vvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
%)* x #  x R "  vAvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAv ??
 v ,. )* x ,8 xvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhv ??
   ,8 ) x $,. xvhvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhv ??

G,.R  ,. )* x ,8 xvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
 x R   ,. )* x ,8 xvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv
??
k,8  x  ,8 )* x $,.  x  vhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhv vhv ??
x
y
x
h
v
A
v
A
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
A
v
h
v
A
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
h
v
v
h
v
h
v
h
v
A
v
h
v
h
v
A
v
A
v
h
v
h
v
h
v
A
v
h
v
v
 +)*
 x GO$,. x ,8  )*G2$+O (v ov vAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvAvhvAvhv ??
??
kGO)*  x R vAvhvhvhv vhvhvhvAvhvAvhvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhv ??
+'(O$)*  x $ vAvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhvAvhvAvhvhvhv vhvhvhvAvhv
~  
  vAv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvAvhvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvhvAvhvhvhv vhvhvhvAvhvhvhv vhvhvhvAvhvhvAvAvhvhvhvAvhv ??
??

Resumen
R
 G2    
x $ )* x  x GG)* x    x ,. $o  )* 
,8 x    ~ -
G .   x  q)* ,8'(  ,8 x ,.G . x RqGI

$'( x   x  G x   x   R,.)*,8   v ,.  x 
  x  I]"!# ""!# H x RO $  x RO x 2$,.,8  x ,8,8 G ]
 x 2 x R  v GH!]#G+ x ,8 x   x  x 2 ,. R,8  
]  x 
 ~ GO-  v

Captulo 1. Introduction
 ,. )* x () x    $O k G(2 R)* )* x  x )*  x  $2G 
RR
"!]#?O  x  )* x R   $  x  * x GO     x 
 xe~ -
 G v "!#*R]  x R
 G v  v ,8
  ((  ,8'(
HR x O$-
R  x     GOq
$
x )* ,. $ q  ,8   ]G   x ,8  ,8Ro  w4x 
 ,8 x

 x G e    x e  ]     ,8 x y  w4x 
R 
,8 x k 
)* ( $  x ,8 xk ,.  x o   x ,8 o $"# w4x , v

Qu es Postgres?

#Z )*$Z &)* x  x )*  x R  ~  |$Z $,.  x  RO$  ,.  x  G ~ "h
 x x )*     q,. x   x  x x ,8 G,.,8 x q G,.  x ,. xkx )*
Z
k,. x   x  x   ]  x  G,. ,8 v  x   )*$,8)*,8  ],8
  G2H q q  q x ,8 
 xx )*{GO ,8o  x  x 
 x ,8  x $ 
,8OG,8{GG2,. x  $ ])* x RO $ ,8'( v R x  )* x R,= x ,8 
G
)*   x  G,.  (o $ ,8,8  x  R O$+ ,8 ] q R v )*
 G ,8  x  2R  y)*  G  x  K )* ,8 $ R x  v
H x )*,8)*e]'(])* x ,8  x $ 
G2R )* ,8  R)* { x '($,.)* e  ,8  
)* )* x ,8 x ],8  ,.$,.  x  v 2R
Gq ,8 x  x ,.   ,8  x  
 x ,.  x ,8O$ 2    x R,8 e,. x ,8R$  ,.  x  G ,8 x x k
 x  
q       x  x G $,.  )* x qGH2 R)*
,8 
'( x ,8 
 
x ,.  x 
R|,.$O,8R R ,.$ x R x ,8 
    ,8  x K
G 2RO ,8,8  x   x RO x R
 2O$ .RO 
G
 +  G
w4x RO $  x ,8,8  x $

+,8,8GO ,8+,. ,. x o2RG x  ,8R    ~ G+ q$  x R


,8 ,8)*e8  8 .O .Gv R]
]{G2R x  G x G   GO $,.)*
8 88 . 

] x  x GO x e x   x $
,8'(H Go$O  x  
RG  ~  R& G,8  x $ &  ,8  x   v R  x   x ,8,R  ,8

2 x   )* x  o   O  x  $GIR v '(,8'(H

x $ ~ $2G ]R,8)*G,.  G'( x x ,8O ,8  x ) x ,8,R  ,. x
 |
qR
   x  vv

Breve historia de Postgres

H R)* |  ~ $2G oR  $,.  x   O  x  $ IR,. x ,. ,.
)*k"!#*GG)* x R  )*$    $  

R

GG,.  x*~ GO-  v  x ,8,8 ] x  {,8  ]   RO{G "!]#
G(
G2R   R ,8  
k GOR)*
 x G k'( x   ,8  x
,8 x  ,8 x ,.  x ,8 )*   
 x ( x e,.$2    x  "!]#4 x
,8 
 x  ,. x   $2R x ,.,8  x   x ,8  x Gq  x    
,8 x R x R)* { x ,8 x x $)* ],8 x I x ]  x  ,8,8 x   x  I& 
)*,8 x
 x ,.  x   $ $R,.
R'( x v

El proyecto Postgres de Berkeley


#q )* G)* x R,8 x  ~ 2RG,8)* x ] xu 
v #|,8 x ,8R+ x ,8  |
OG
 )*  x  x R  xe      k   x ,8 x )* G 
  x ,. $.,.  x*    
]8 Ev   (  2R)* ] 
 ,. R x G2)*)* x Ry x$ ] (  $   |
v #  ,8

 G,8  +  )*,8 x $)*  x   x G  $  x     8 (
$ev
R
'($2 + 
2  x  )* x R G2  x  x ,8 v 
O )+ 2
G)*   k,8  x  xu  )*RO$  x    x(  x ,8 
w   u $ v # x )*& qGO xu G ,. Rq x .     G
x +,.+   R x + xk x   u $ v  x  G2Rqo x ,8 R ,.q H )*
 2R)* + ?  ]
      + 8{G2R  ( ( 
+  =  8. "!#]8 8$  ZGO x

 e x
x ]  u   ] x ,8O$ v # x .,8  xu  u (   x q )* G)* x
$,. x )&%   G?? | )*,8 x )*  x . x RG,. R +,8 x   $?)*OIO 
x 2 R)* ,8K     x G v  x  )*OR o 
  x RoG
  x '(G
  x $)*  x R oR
 4
)*$R 2q,8 x  x  x )*OIO$& 
OR        v
R
 )* q  )* )* x ,8 x )* ,.'(+ ,8,8  x + q x G ,8 x
  ,.,8 x|v  x qG  8 x  2R)* o x    q  x  x ,8 " x 
Gq 
)* x RO $,. x  x  )*  x R )*RG,8,8 x
x k    
)*  x R G &
 | 2R)*$+  x( )*,8 x 
 ,8 v %)* { x 'o 
  o,.)*] x '()*  x RG  ,.$ 
 x 
  x 
   vK x $ )* x G w   RO
w4x( O)*$  x %"G,.' x  
G'R )* x R$
O  w4x( O)* )( )*k,8  

* *,8)*G,. $  v R
o  *2GqZO x ,8 q  ROGZ
G,.R
,8  x  ,. ,8) ,8 x "
  G+*  x  G  u  v
$)*(o  ,8)* x    O R x ?,8 $2   ,.   x R u  v  x 
]'( 
e
])* x R x )*  x R ,8  
e $qRGo ]]G2R x ,8 
 x R )*
   G  ,.$O  x 
 ,8 x|v  x x G   ,8 G2R
,8H$
,8RR)* x  ,8  )* x q,8 x  GO xv v
Postgres95
 xku  x G -,
  '( x. (   x x x R{R q  x  oH!]#eR

G v  o   ,8 ]o,8 x R x Z,. x  x  oG$O
q x ,8 x o e
 '( G,8 x )* x ,.)* x ,8 x   x R  )* x % ,8,8  
 
H,8  
  x 
  ~ -  v
,.  *  $ R e w y2 $)*(  ,8  x x )/v
,8'(o,8)* o x  x )*OIO x  x  )*  x ee  ,8   )* x  x )*  x
 v R
  u(v v 2OI,8  x  x  xy / )*qO$  x  ,8 x  x
~  x ,8'()*-,8)*O$ ,8 x R
 v v G)* e,.G,.,8 x GO?{$
 x  | x ,8  +)*OIO

0  Z  x 
 ,. x   
G G)* G ,8 x "!]# )* G)* x $ * x
|
 v #2 ,8 x 2  R x   x 2OR '(GH!]# 
)*$
I
k   x )*  $  x R
 ,8 x* x ,.  x q"!#  x 
    v #$ x ,8  x G.  G x  )* G)* x $  v %")
{ x ($ 
x o )*)* x R,8 x  q,. $ 2   ] ~ v # x   libpq O)* x ,8   
 x  qq
)*$+G2,8  x v
0 )* O)* ])* x O $,8 x
] x ,8  x*x 
e
)* psql
$OG $,8 x 2  R"!]# x RO$,.R 
| 2 x     readline v

0 x  x 
 GO  x G  libpgtcl
,8  x R  x %,8 v x
'(  qRG)* ,8 '(OR x 
+  x |%,8o x R,8 ?,8 x )*
R?R
  
)* tcl
0 HqG   x R o,8 x GIR
 x G v #GIO x +  w4x 
  x G x
% x ,8)*,8 x )*O* )*$,. x GIkO x G+2 R)*y *$,8'( 
 
wx GO  x G )* x   v
0 "e )* x R)* { x G )*y e  x 
  x  x ,. $&   x   
    x   x  ,8)* | G2,8   v
0 "    ,8 x GH,.    x R x 
R O $H x   ,.  x  $+,8,R R
,8|,8)* x G q"!]#  (v
0 Hq R   )*-o4 x 
  ~ H )*- o ,8)*  ,8 x|v  R)*
 { x  qZ,8)*   ],. x x ,.,+ x ,8'(&"'($2,8 H
 G)*
 x ,8 x 
O $ |   x 
R  *   v

PostgreSQL
 xu $ H2'( 
 x R
 x )*21R
 43x    ](k  )*
 v  G
)* x]x 
 x )*.R
"!]#8R G ,8 x  x R
  x  GO  x )*,8  x R,8 x ,8$,. ( "!]# v ()* )*eR )*'( ,8
)*|
  x %)*| 
 x OR  x   (v G
   x ]q q,8  x ,8 2G
 
  x  )* x Rq&
G,.R v
 O x R| G2$O   2RG 2'( $'( x ,8 {e x  x R ,.$ x  x  
 G)* x G,8  
 
)*R  R v  x "!#H
{ x(  '(]$2$ 
 )* x R,8,8GK  ,8?,8,8 G $ x 
GRO$Ro,. x R x % x  ? ?. v
#| x ,.  |)*OI+ x R
"!]# x ,8 
 x

0 # o 
 ]R '( x  2 R   G,. x R ],8 x ,8  x ,8 )*  

 x 
,. )* Ro ,8,8 o2  ,8R O,8 x R x +  x  ,8 x
  x    x R ,8R  ,8 x  2R)* ,8 $ G
   x
,8  x R  +  )*)*  x RO$ 2  $?GO)* x G,.  2 x  ,. x
  $ v
0 Ho'( x )* )* x R  )* x R,8G,.R R ,. )*R  " x ,8  x 
 ,8 x   $28
 (  ,R8G2R ,.,8  x $  x  Z,8)*,. x  x R
   .+4R 
 v
0 H'( x $(   x ,8  x   Z x  x ,8 x G2R x H!]# G x ,8  x ,8 

 )* H  x  ,8  x R,8)*   $  O$  R ,.$  x   G2H,. x

 x R  x  q  x R x  '"$ , )* G v
0 #R + x R x '( x  )*OI $ x ,.  x  x 
|R +  G,.'(H'(O 
 x )* ORoq +
G)*{G ,.$  ,8  x  G v
0 #k
 ,.  G?,8  
y Z)*Rq  R'( y x ,8G)* x $  )* G
)* x  x x $ / Hk yR )*k O x  '(]
=R  /  
 G
 xv   x   v

Acerca de esta versin

R
"!]#R   x
 k x ,. v 2Rk)* x & ,8O  
  x(v 

G!# v

H 2$O+o  qo o


2 x     o,8)*"!# v
)* ]     ) x 2RO$ 
    $ O)*$qOR  v
 x 
 x GO$  G oROq,8  
 &2 R)*,.)*R  o x H ,. x
q,8)* o   
, v

Recursos

) x o
 x  ( x   x R|G
%H R 
w4x R  ,8,8  x  x 
    v ,. ,8G,.R  ,8|
 x $  v
 o 2  
w4x( )*,8  x  x GOH$O 2 $O  x ,8 q,8)* x +R    v
 o GHO)*$ 
w4x( )*,8 x $ x $  kO)   ,8,8  x G vw4x ,8  x y 
k"R x  x  x ,.  x " GO  o x R $,.Gk  K k  (k o ,8
,.  x  v
 o  )* x  
w4x( )*,8 x   x  ,8 x  )* x RO$,. |
x v
# o q
 2OR  v
 o   $ 
w4x( O)*$,. x  E     v  ,8 )* x RG$Ok

  GO x 
 x ,8 x RO   x y
,8R* 65  x( O)*$,. x
   "  *  ,8,8  x G$.,8 x  87    8]8 8 v ,8
  )* x  x ,8   x  7
   8]8 8 v
 x     x ,. 
wx( )*,8 x G   oq ,8)* x  v ,8R $ )* x  x ,.   x  97 
: v
G)* q{o)* x $ '(,8 2+
o q2GO
 x 
q  o  x  $
x
,8  G  R

)* x 
#
x $ k)* x  )* x  ,. x   x  x )* x( )*,8 x  ,8
)* x  v
!]4.
x R 
 x 
#o,8,. x q x  
 x R  ! ,8 x   x q |oG
x R|
 x
 |+2 x R
qR  x  x 
 q
?,8 x  o R O)*o x 
qq    v
#   
#,8'( 
  $)* #    R x   x    x ,8 x
  ,.  x  v

" 
2 R k 2R
G;",8 x R  x  x( )*,8 x    x   RO  ,8  x  x  x
,.  x|v k x ,8R   $)* )*'( x , ,8 x   x G'( R ,8 q  2R
,8] ,8RO x ,8 v 
 Oq x ,8 x RR x  x( )*,8 x|v
# |  O
# 2R o,.G
 
 x =<
,8'(  ?> G  x   x  &$O,8 x R& 

x R v
]R
@
R
? x   ,8 ,8  
 GOR v )*R  x   ,8)* x 
   $O 2OR v )*  ] )* G )*K
k  x G R$O
 $
  x kq)*  y  ,. )* x ,8 x
 x   Ro ,8 v  x 2 ],8 x R    
 x  v "  x e G
2,8  e  x { ,8 )* x  
,8O e,8 x RO   v " (  x 

,.$OG,8 R ,.$+$,8  '( | v
x $
  &,. x ,8 x x 
x G"GO  x ,.  G  x ,.  x ,8OG,.,8  x 
,8)* )* x +  ,8 )* x R,8 x  
o x   x  )* q)*G v


  ,8=6(,8'( 
   R q,.++ x   x  &$O,8)* x 
2 +
  v

Terminologa

 x   ,8 )* x R,8 x 2    x R 4      x R$q,.)* )*  x 


 x  
 x $  R
 v  
o2   x  $)*o  x ,8 x R x 
  $R
 x x k)* )*)*  x R{)* x y  x R(  O)

)*G,. ,8  
 G+,. x I x k,8 x ,8R o)* x  k   
R
| x   v
  ( k 2RGG     )*  postgres 
e  G(  
,.'(G  2G?  R? x    v )*]   O    
R x ] | ,.$
  x x  x   +)*,8 x )*| R,8,. x   ,8,8 
,8 $ 
  + ? RZ  O)*$O RO$O  v G)*.$$ G   o +?+ 
)* OI,8 RO$)* ]  x  )* x R x kR x   x  
    O  v % x ] x ,.  x ]
2 G   k  q()* )*

   O y  x 4 k,8 x ,8 ,8)*yK. v   2 $O y GO6
 x ? x  x  ,8 &     :    x R q,.G$ x +    v
 8 8 8  8?8 8 88]
 8 .  ~ & 2 x  x
   x  $&,8 x ),8 x )*|'($,.G,8 )* ? x   ,8  
 e x  R v 
 ~  G o(   x G  O +G
)*{R  ,8O R)*
   x R)* x R x G x ,8 x R x R $2G+  R|  x R   o 2?,8 x createdb v
 postmaster 
,8G2
,8%,8)*k x  GOR] ,8 x (,. GK x 4'( .
 R ,.  x Z2 R)*R
 v # ,8,8  x   x  x 2+,8 x ,8 x  post )* x   x q 2R&  +. GH 2R)*o  q,.)* x ,8,8 x  x R
master
 o,8o,8- x v  postmaster  G ,8R o )* x Ro  ] 
x    x ?O x  x R2 ,8)*)*  x  v " x G)*
$
8,8  x 
H )* x R x G,.GO  2 q x  x RO$R$?,8 x 
 + R ,8 x x   x 
OI,8 o q)* x o&  G,.R v
,8-
 x ]R
q
)*OI,8 R  postgres G   G ]OI,8 $G
  2 $O   ,8R)* x *  e x {Re *  x G  2 $O  R

,. x  x )*  o  |,.)* x $
)* x R v H x G)*
$'(,8ZR

)* x  R .|
,8)*     ,8  o,8 x x R)*G"2 R 
   x Ro,8)* x  ] x x 2 R )*  R    v

Notacin

1 vhvhv 3  /usr/local/pgsql/  x q o xx )


o  ,8'(o 2$O. x R
H,8)* x 4$'   ,8R '()*q G      v
 x   x  ? ,.,8'(G1BA 3 C1)D 3 x  ,. x x  x  ,8 

,8  x  v  
 G,8 x R  
1BE 3 #1BF 3 
],8 x R x OGGOR ,8 1G 3
x  ,8o
q G
  & x o  +,8  x  q2G x  |O|
 ,8 G v
 x  ?OI)*  { x G2 1 3 1 3 + 2 x $O$
 .2  x Z
  x  v
1G 3 |  G x  v
#OI)* )*2RO x   x oOI,8   G2 $O q,8  x $y
)*G v #
  x &OI,8 $ |   o,8  x Ro GH($O x G,  $+H1JI 3
v #$+  x 
OI,8  |   q,8  x Rq G"  2 $O  |$O x ,8 ( &K1 /L3
)*  x RO]
k   x GOI,8 R    e,8  x Re  x    x    G

$O x ,8.  M1)N 3v #  x o H!]#G2R x ,8  (M1)OP 3  x 
$O x ,8  G x x % x )*R$  x   x  H,8 x R v
Nota: En el momento de escribir (Postgres v6.5) la notacin de las rdenes flagging
(o flojos) no es universalmente estable o congruente en todo el conjunto de la documentacin. Por favor, enve los problemas a la Lista de Correo de la Documentacin (o
Documentation Mailing List) 13.

Y2K Statement (Informe sobre el efecto 2000)


Autor: Escrito por Thomas Lockhart 14 el 22-10-1998.


 y     
$  Z
 )* x |%"G) 2RGH!]#
,8  x G ,8  
y 2 k$ R
,8)* x 
,8 J% ,8 x

$O x  x G2 x    * ,8)*$)*  x Rk x  )*  x  v H x )*
 x )*)* x R  G2,8  (

0   ( |&G"R8


 x R o x G$G
 o |2OR+ |GZ G2   G)*
  u  x   x ,8 x  x ,. q  x x % x  )* x H,8  
  G
,8  x  ,8 x  +,.$)* +  ,8'(q x R x  u  x ]  $ |q v
0    x( )* x   x ,8 x 2R x ,8   " R x ,8   x( )*

 )* " ,8 G x ,8   x  &   x $ x ,8)*
 GO  x  2RG,8  x R  *
O x $,.R  v  O)*
'(GG2GO$    )*|  2R  x  $ q 
q'($ x $
 ]    ,8 $,. x ,8R   &   & x   $& ,8O  v
0  e  R   ,8  x 
'(,8]]  ,8'(

,8O  x  x *  x %)*(* x ,8 )* x R  x     
2 $O  *  x ,8    R  q R v o(,8O ,8 x  x %)*2
 RO x 2 ,8 x   x ,8R G u x ( $ 5" v 1 u u)3 2o x RRo,8)*
1 u u u43 $)*  x R
M1 u u3  x RRo,.)*Q1  u uR3(v

0 # o )*$ R 


$ ,8 $  x  4 R)*GOR 
 Z

R{ x 2R  o?G ,8  x  ?,8 x   x ,8 x K  ,8'(,8 
   x
(  .,.G( )*
+G$ ,8 G   ,8 ( v
 O R$2o%'( x *GI,8I , k%'( w4x  R  .  G| x   2,8  x )*
x 2q x  G
 G,.R $ R ,.  )* x Rq x  
oR  x o
G&,8 x 
 x 2 ,8,8  
 $,8  ?
 x '(
q$
 v

Copyrights y Marcas Registradas

S
8
O=UT.e 4"V $ ) B& 4XWGY
O8] 8= .OT8
 $ . 8 .$q 8 8 .  8 (8 S $Y
 "V  ) B$4( 8
8
  H[Z8|\(8 W
+^]8_ k 8 (8+k4(`  8==UT.
8 8 8 8 8
8 H6a   .=(8 v
R
"!]#kR  x  
 '(cb u  G ZR
"!]# wx , v ]  RO  I 
{GO)* x    ,8 x ,8 o  ~ GO-  v
R
   x  
 '(b u     x Rk e y x 
   
 x  v " O $ ,8 )*  ,8,8 x *  RO   ,8 x  Rky
,. )* x ,8 x ,8 $ 
  R"2 xex x % x $
Hk x x $,. G (k|
,8O R" )*
)* x  x 
 x ,8
 '(Z ( k x R RO kk 
     x G x R  $,8  v
 xx x % x ,.] o x GO     x q'($O x    ($,8  
,8  
 G x  x   .2G x R&  ,8R. x  ,8,8  G2.,8,8  x R 
,8 x   ?  x  x ,8 
 x  ,8,8 x Ro
G2  R x   oRo2 kok
,. )* x ,8 x x ,8 2   x 
  '(  x  ,8       R 
( v
# x 
O $    x '( G2,8 ,.$)* x R G,.G,8    G x R  x
,8 
 x  x  )* R d% x ,8)* x   x R k )* ,8 Re ,.)*,8   
,8G,8  ,8 )*  x G)* x   R v  k$
    


2 x R]KR(,8  K  x 
O $ y    x  x R  x  x x 
x  
,8 x )* x  x )*  x 
$
,8  G,8 x )*R)*  x R)*  ,.$,. x|v
x G x )*,8 2R k   x #R v H x( " (" x ey"  2 x
)*,G
 ( " x ,82R)* w4x , v  ] R  x  '( +y]#
% +w *2 x )*$,8G 2R ?  
R  )* x   v  |w k4 x )*
,8?  G kk R,8-
$E  v u G)*,8G
RO    x " Rk
 x R  x|v

Notas

u(v (' RA"2W


 v 
v '(RA" -
R v v ~ K- G v  $ H"R
 v '(R)*
(v '(RA"ke v    v ,8)
(v '(RA"ke v x( )* v ,.)
(v '(RA"ke v  2, v G  "   "  H -'()* v '(R)*
(v )*  Z  eo x( )* v ,8)
(v '(RA"'(W v ,. v E-
 G v   gf"R  ?
v 
 v 
v )*  Z 

I
 x ?e.2 v 
u v '(RhHk v "!# v H)*'( x ,H"2 4 x GOK

u8u(v
u v
u(v
u(v
u(v
u(v
u(v

)*  R? 


I4 ,86e
 v 
'(RhHk v "!# v H)*'( x ,H"2 4 ,8
)*  R? ,86e
 v 
)*  R?  ,8-
'($Ohe ) x v ,. R,8' v  
'(RhHk v 
 v " ,." 2G" RR
 v '()
'(RhHk v  x v " k$H G v '(R)*
'(RhH  x 
 v GO v ,8) x k" - v '(R)*

Captulo 2. Sintaxis SQL


x o ,. ,8 x  o x $" +
 x O$ "!# v
H!]#*)* x    x ,. x I x W  $ v (  x  IG2R],8)* $O  8 G .
=i]$Gv ")* "G2  x + )*{G ,8|,.G )* x R  v2 2R+R)*
&G)*& x G2R,8  j5G x  & ,8 
|,8 R  & x ,8  )*| R    &R 
 $2 x ,8  x  G v

Palabras Clave

H!]#  x # . . X] OG  x 


I
  x  x x   x ,. ,8 ,. v
  x   x  ]88 Z ,8 | x  ,.   ,8 x R x 

  x ,8 ,8 x G"R v ] ,8 
 Z8  4(8  ,. ? x  ,8

q x ,8 R+,. x R"R  x  x x 2  x ,8 ,8 ,8G x G 
$O  v
R
 )* )* x R] x  
,8 x R x R"R x   o   x 
=RGH!]# "!]#   x

=R v  
x  )* x o G  x  R x eR x  x G x 
 x R )* )* x
$,. x ,8)* x H  x  I+ x R x   ]o |,8,86 ,8+ x  
2RG v
w4x( O)*$,. x   ],8 
k "!]# "!]#  x O  (]  8o8

] ! $
v

Palabras clave reservadas


H!]# "!#   x  x  8 8&=X]  ]88  ,.  G x G2R x )*   x ,8)*
 x R ,8  x
,.    +    x R ( G x )* x  G x G,8 K,8 
x "!# v R
GR  x  ,8 
$  ,.  x  G,8 x  )* )* ,8,.  x  v  x
 ,8  :| $
&,8 
 x  x GO)* R | x )*q R &,8)*
 x 
 x   x ,82q x GO)* R qG 
Go ,8 ) x  v  x  
,8  2   v
Sugerencia: Cualquier cadena puede ser especificada como un identificador si va entre
doble comillas (como esa). Se debe tener cuidado desde tanto un identificador ser
sensible a las maysculas / minsculas y contendr espacios en blanco u otro caracteres
especiales.

#& 
  x + $
G+G2GO
 (| R
 x 2 x  K|
 $+ "!#
x  q"!# 
 RG x )* R +o2G|R 
R q,. ) x  x   x R ,.$
G
ABORT ANALYZE
BINARY
CLUSTER CONSTRAINT COPY
DO
EXPLAIN EXTEND
LISTEN LOAD LOCK
MOVE
NEW NONE NOTIFY
RESET
SETOF SHOW
UNLISTEN UNTIL
VACUUM VERBOSE

# 
  x Rq q
 q ]o x )* { x $ OGqG2GO
G  
H!]# e"!]# eGO)* R 
]{ x  x ,.)*eG  G ,. ) x 
x ,8)*  x R ,. G
CASE COALESCE CROSS CURRENT CURRENT_USER
DEC DECIMAL
ELSE END
FALSE FOREIGN
GLOBAL GROUP
LOCAL
NULLIF NUMERIC
ORDER
POSITION PRECISION
SESSION_USER
TABLE THEN TRANSACTION TRUE
USER
WHEN

# 
  x Rq q
 q ]oR)* { x  x $ OGqG2GO
G  
H!]# "!]#
ADD ALL ALTER AND ANY AS ASC
BEGIN BETWEEN BOTH BY
CASCADE CAST CHAR CHARACTER CHECK CLOSE
COLLATE COLUMN COMMIT CONSTRAINT CREATE
CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
CURSOR
DECLARE DEFAULT DELETE DESC DISTINCT DROP
EXECUTE EXISTS EXTRACT
FETCH FLOAT FOR FROM FULL
GRANT
HAVING
IN INNER INSERT INTERVAL INTO IS
JOIN
LEADING LEFT LIKE LOCAL
NAMES NATIONAL NATURAL NCHAR NO NOT NULL
ON OR OUTER
PARTIAL PRIMARY PRIVILEGES PROCEDURE PUBLIC
REFERENCES REVOKE RIGHT ROLLBACK
SELECT SET SUBSTRING
TO TRAILING TRIM
UNION UNIQUE UPDATE USING
VALUES VARCHAR VARYING VIEW
WHERE WITH WORK

#] 
  x R $  "!# x
  x $ OG,. $  
x
x

x
x
R
&G] H  ,8)* )*  8,  RO$  ,. x  )*?  x ,8 x

length
CHAR_LENGTH CHARACTER_LENGTH

#2    x R$ K?


 $Z "!]# "!]# x  x  $
G?,8 
+G 
2RG   x ,8)* x )** R *R  ,8 x  )e x x R 
 R x $ 
? x R 
?
BOOLEAN DOUBLE FLOAT INT INTEGER INTERVAL REAL SMALLINT

#    x R $
G,8 
G2GO
G R x  "!]# "!]# yx
  x $ O
,8  x  v '(,8 ] y 2 x e]
 k x 2RG2 x  )*)* x  
 o,8O R o (v ]2GO x  + (+ x   Z
Nota: Algunas de estas palabras clave representan funciones en SQL92. Estas funciones
estn definidas en Postgres,pero el interprete no considera los nombre como palabras
clave y las permite en otros contextos.

ALLOCATE ARE ASSERTION AT AUTHORIZATION AVG


BIT BIT_LENGTH
CASCADED CATALOG COLLATION CONNECT CONNECTION
CONTINUE CONVERT CORRESPONDING COUNT
DATE DEALLOCATE DEC DESCRIBE DESCRIPTOR
DIAGNOSTICS DISCONNECT DOMAIN
ESCAPE EXCEPT EXCEPTION EXEC EXTERNAL
FIRST FOUND
GET GO GOTO
IDENTITY INDICATOR INPUT INTERSECT
LAST LOWER
MAX MIN MODULE
OCTET_LENGTH OPEN OUTPUT OVERLAPS
PREPARE PRESERVE
ROWS
SCHEMA SECTION SESSION SIZE SOME
SQL SQLCODE SQLERROR SQLSTATE SUM SYSTEM_USER
TEMPORARY TRANSLATE TRANSLATION
UNKNOWN UPPER USAGE
VALUE
WHENEVER WRITE

Palabras clave no-reservadas


H!]# "!# R  x  x  8 8?OX] 8  ]88 '( ,8''(
q,8O G k)*G x x ] x
'(o  x  q k'( ,.' $  k   x R GO v 
o  x  x x   x
,. $ ,8  x (  x 
Ik)* { x 2     $+,8)*  x R ,8
G v R
R  x ]$ OG,. $  ,8  x  ,8 x  ])* 2)*G2R ,.,8 x   v  x
 ,8  :G2R| +,8 
q   x 2,8)* x )*q ,. ) x $  v
# 
  x ]$ O,8 
 x 
  R
 x 2 x  $
,8 
 x 
K
 | "!]# x "!]#
ACCESS AFTER AGGREGATE
BACKWARD BEFORE
CACHE CREATEDB CREATEUSER CYCLE
DATABASE DELIMITERS
EACH ENCODING EXCLUSIVE
FORWARD FUNCTION

HANDLER
INCREMENT INDEX INHERITS INSENSITIVE INSTEAD ISNULL
LANCOMPILER LOCATION
MAXVALUE MINVALUE MODE
NOCREATEDB NOCREATEUSER NOTHING NOTNULL
OIDS OPERATOR
PASSWORD PROCEDURAL
RECIPE RENAME RETURNS ROW RULE
SEQUENCE SERIAL SHARE START STATEMENT STDIN STDOUT
TRUSTED
VALID VERSION

# 
  x  $ O,8 
 x 
 Gq R
 x  OG,8 


| "!]# H!]#
ABSOLUTE ACTION
CONSTRAINTS
DAY DEFERRABLE DEFERRED
HOUR
IMMEDIATE INITIALLY INSENSITIVE ISOLATION
KEY
LANGUAGE LEVEL
MATCH MINUTE MONTH
NEXT
OF ONLY OPTION
PENDANT PRIOR PRIVILEGES
READ RELATIVE RESTRICT
SCROLL SECOND
TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TRIGGER
YEAR
ZONE

#    x Gq ,8 


 x  GO
 G $)*
{ x  x $ OG,8 
x 
 $2 "!# "!]#
COMMITTED SERIALIZABLE TYPE

#+2    x R $
G,8 
 x 
  x R o"!# H!]# x  x  
,8   x x  x ,8 2 x R

ADA
C CATALOG_NAME CHARACTER_SET_CATALOG CHARACTER_SET_NAME
CHARACTER_SET_SCHEMA CLASS_ORIGIN COBOL COLLATION_CATALOG
COLLATION_NAME COLLATION_SCHEMA COLUMN_NAME
COMMAND_FUNCTION CONDITION_NUMBER
CONNECTION_NAME CONSTRAINT_CATALOG CONSTRAINT_NAME
CONSTRAINT_SCHEMA CURSOR_NAME
DATA DATE_TIME_INTERVAL_CODE DATE_TIME_INTERVAL_PRECISION
DYNAMIC_FUNCTION
FORTRAN
LENGTH
MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MORE MUMPS
NAME NULLABLE NUMBER
PAD PASCAL PLI

REPEATABLE RETURNED_LENGTH RETURNED_OCTET_LENGTH


RETURNED_SQLSTATE ROW_COUNT
SCALE SCHEMA_NAME SERVER_NAME SPACE SUBCLASS_ORIGIN
TABLE_NAME
UNCOMMITTED UNNAMED

Comentarios

 &G? x
x 
 2G,.  x .,  ROK  +,8,8GZ,8  x  
 x
'( x   x  v % )* { x  q2OR o  q$Oq v
- This is a standard SQL comment
// And this is another supported comment style, like C++

%"$)*
{ x OR)* 
q q,8)* x $O $H    v
/* multi
line
comment
*/

Nombres

 x  )* x "!]#*G x ],8  x ,8  ,8O$,GG  x )*{GO ,8)* x +


 
 % #( ,8)* x  x yo x ,.$O,8Ro  x )*{GO ,8 v   ,8  %
#   x * (G x ?)*)* x R )* x $q? G)*  %
#   ,.$)*
O,8)*  x y #define  x ,"H,8- x H x ,8  
". v ' v
H G
 K Ro,8 x   ,.)* x ,8,8R$ ${ ,8 v
 x   x ,8 x R?  x )* G  x ,8 x R x G,8,8R] | x  x 
,8)*    ]  e,8)*    v OI)*  x )* e $,8)*   x
,8 x R x o,8,8R x e
 q,.)*e q,8 )*GO x y m R, v 2 x 
q{, x ,8 v

Constantes

kRG  O $ 8


  ,8  x $2 x R? x %)*G
],8)* x R v #  x  x Ro)* { x  G  x ,8 ,8 ,. x x R 
 ,8 R",8 
  o x G x R,8 x )* G,. G k x ])* x Rk)* ,.  x  v
#&,8 x R x G )* ,8 +q ,8O  x )*+I5$ |,8 x 2R x RG" ,8 |ROR x
)*|   x  v

Constantes tipo Cadenas


S
8=88  x 2G,.  x ,. $  & ,.$OG,8G ww  )*  $?,8)*   | )*
 4HnK" v Esto es una cadena !]# )* R
 ,.)*    )*  G
 x G2Ro x ,8   x x e,8  x R,8  x y ,8)*   ] )*  
$,. x G4 v

v  x k ,8)*    )* k G x R],8 ( 


Diannes horse
x ,8 x  $O4XoHK. vhv Dianne\s horse v  x ,8   x ,8 x ROO x x 
,8 x  x 
  ,8  x R,8 o ,8 x eO$ v #],8,8. x  )* )*  
$)*
{ x 
 x x ,8  & x  q,.$  x o.,8    x ,. x ROq \tab v

Constantes tipo Entero


S
8 .q4  8 x x ,8 ,8,. x    R w4w  x  x R ,8 )* v #
O x 
] 
 G$ ]
 x   uG G $ u$ G(v R
  
 x   x  2 R)* 
] )*
 x '( v
,8
e x G)*  G e2G],8 ,8 $O x  R   x  x 
x R,8 x ,8  x "!]#  x  x ,8 x GH 
int8 4000000000 - string style
4000000000::int8 - Postgres (historical) style

Constantes tipo Punto Flotante


p
84 + 8
 ,. x   x  x R ( x  x Ry ,8 )* x k
,8 )*H  x R,8 x ,8  x R ,8o,8 x H 
  x  O)*RZ
{dig}.{dig} [e [+-] {dig}]

  x  dig  x )*    v  )* 2 x ,.    x  dig o x *)*

   v ]R e   x ,8  |,8)*)* x )* x    {+    G2 { 
A D (G2,8  x  v x G" x  x R x )* x  R  x ] x ])* x  ] x 2GOR  u(v. 
'( x x % x ,.$OG,8q x ,8   x  q,.$  x  v
x ,8 x 2R x R   x R x Z $ o v    +G,. ,8
 ,8 R)* x R  x   x R,8 x ,8  x q q"!]#  x R,8 x  
float4 1.23 - string style
1.23::float4 - Postgres (historical) style

Constantes Postgres de tipos definido por el usuario


x ,8 x 2R x Re  x R   k   2 x    $ x $ 
x *  2

  x  x ,8  x 
type string
string::type
CAST string AS type

?
 q   x R  ,8  x k,8)*y x  k R x  ,8 x GO x 
 *  )*  type v   $ eo x k,8 x  x R  e x  ,8  v #R   
  q)* R O x '(k)* qG  eo
  o,8 x 2RR  Gq2G x 
,8Rqq )* ,8)* x    v

Constantes de tipo Array


S
8 .Z c i ,8  
 R G x ,8  &R&OG
,8 x  x
G+ ,.$  x $G, v  )*R x GO ,. $ 
 ?,. x  x oOGGG    x 
{val1delimval2delim}

  x  delim GoG G )* $  e )*,8 x $  x  ,.  pg_type v O

 R ,8 x R  G,8,8&,.)* v x RG)*  ,8 x 2R x R   $O

{{1,2,3},{4,5,6},{7,8,9}}

,8 x  x G|  |  )* x   x G2 x qO$   ,8 x  2R x R& O
 x  v
x  G)* x R*  x  x    $Z G * R x )*,8o  )* R 
O$ )*k
e2Ge2  e$OeG R G)*] )* qG  ,8 x G,.R
,8 + x   x ,. x ,. $  v

Campos y Columnas
Campos

x 8] +,8  
 ?RO  R  x ,8  $ o x       x 

")* x
")*$
,8)* x
,8)*

  x R ,.$ r% x ,8e   x  x .,  ( R $q $q x  R x 8, 
 )*R ,.$)* x  v #   x  x     $ q  x  x x   x       v
  x  ,8 ? q o x ,8,8 x x $  v
  x  ,8 ? q o x ,8,8 x O  v
  x  ,8 ? ,8)* x   x R   x ,8,8 x|v
  x  ,8 ? ,8)* x   v

O)* x( )*,8 x R,8)*,8 x   R 



Xs. t. gt 4B  v 
 G)*yk x  y x R x )* x Rk,8)* x  x  x ,8 k R y R abstime v
#|  x  ,8   & x ,8,8  x G&,8)* x |2 x 
R v #&RO x 2$,.,8  x 
  x  x ,8  x ,8  )* x qG)* x  u v

Columnas
x  ] q,8 x 2R 
q q O)(
instance{.composite_field}.field [number]

x  instance  x R ,8 x q,. $2,. x ,8 )*| x R x  q,8)* x  ,8 
  ,8 x   x  x ,. $ k,8 2 v   x )*
 
O $
 G x 
  
x  x ,8  x   R k o ,8   x +G
  x ,8   ,8      H
 o $
Kq,. $   +  % v=  |  %e    x .,.G x x 
)*  $,.,8 x   )*  x &&
  |  x  x ,.    x O x
,8 $ 
 | G,8 OG,8 x H!]# v composite_field x ,8)* o x k o  ,8)*
  q")  x +
 2 ,8 
,.$)*  ,8,8  x  x  RO  R+ 
 ,. $2HG
G$?% ,8)*,8)*  v x  )* x  field  x ,8)* x )*
 $2 o 2%  )*,8 
"  .,8,.  x   v " field  qR  array x R x ,8
  x  +,8  x  number x  ,8( G)* x G,. ,8k ( v " x k2 x  ,8
 x %)* x R x ,8+2 
 
 x R +  )* x R G$O v

Operadores

  
 GGO$ G  x   x Z 2     2 x "!]# v 
 o  GO$ .G  x ,8 x 2  R  . . Gv q  Ro q  
  x (   ,8 x     )* x    )*OI,8 R ,8 x
  R ,8  pg_operator ,8  v #{ x R    x k$
 
  )* x Rq  | x   x  v

Expresiones

H!]# GO)* R V   ORO x  O)*$+ R x $


 $ v #   x    x
,8 x R x  .q4
r  8 8  )*$q $   x ,8  x q p
=  R  x 
)*| x( )*,8 x v
x oG". x + x o q |    x G
(
,8 x  x 
RO  R
a_expr binary_operator a_expr
a_expr right_unary_operator
left_unary_operator a_expr

)*G
  x  x ,8  x  
  x  G
G,8 x

 2'()*'($    ,8 x  x RyR  R v #R,8  


  x &  & x ,8R $)* x  .& x  & x( I  x  & 
.,8'(2 I e x $O o  
 G  I v #    x R,8,8  x Gq'($  x
 o  2R x $,8  x G v

Parmetros
x  Z8] K& 2 x  ,8 x $O) x x  x ,8 x "!# v % ,.$)* x G2R
?G     x ,8 x   G,. $O,8 x   x 8, x H!]# v # )*,. x $O{ x  


$number

OI)* ,. x  )* o   x ,. x   x ,. x

$,8)*

dept

CREATE FUNCTION dept (name)


RETURNS dept
AS select * from
dept where name=$1
LANGUAGE sql;

Expresiones Funcionales
x u V T8vp
= 8 | x )*  x  x ,8 x  G
H"!]#  o?2 + 
 )* x R+ x R{ x R 
function (a_expr [, a_expr ... ] )

OI)* H 
  x Ro,8 ,8  o o ,.  O q H    x )* $ ?
sqrt(emp.salary)

Expresiones de Agregacin
x  "V T8*$w \(8T8 . x R  ,8,8 x  x  x ,8 x ,8 x 

{q    2G ,8,.  x  $o ,8 x    v x  x ,8 x $
,8 x   ,.
)&%   G x R + x  
 | q ,.)*  )* )*   q  x R  v
#o x $" +  oG" x ,8 x + o    x 

aggregate_name expression
# expression
aggregate_name #

w
w %
aggregate_name  "%
expression
c

x
aggregate_name
 x  aggregate_name  ,8 x 
)*
x
x
x x
x x x

x R  x H
expression
,8 $ 
 ? 
 ,. R o2 
  o x 
G
,8 x|v
#O )*GO )*q ". x 
G,8 x   )*q 
G
,8 x qRO${G& R $
   $  x   "G2 x 
 
 x 
  x  x   v #e x  )*
 )*  &o O )*GOG ##G&  ,8 v #oR,.GO )*o  )*q 
G,. x
e     e x  ,. x 
   2R x R x e x  x   v #&%  )*
)* )*o q
$,. x $O,8  x   $  |  x RO  x ,. x 
  x  
 x 5$ x ]2,8 ,8 x 
 Z,8 ,8]  x R 
 x GO$ )* x  ]%R H
 o,8 x ,8 x R v
(OI)* 8,. x x 
 
|G x %)*Gq$$   $Z & x  R52,. x  u G  


 x %)*    e x R   x  4u*x G x  5,8 x R  2R x ,8 u G  
G
x %)*] q   x R$  x  x    u(v

Lista Objetivo
x  S  ]  x  2R] 
{ x R ",8 q x  G  

x k
 )*G )* x RO$ +,8)* x R
)*(

a_expr [ AS result_attname ]

 x  result_attname G x )* GZR  R


'( *,8  x )*
 $  

" R  x ,.$2 ] x  x R x ,8  ,8  $, x|v " rex
x
x x
x x
xx )*

sult_attname  R
 R ,.G a_expr G,8   *
RO  R?,8 2 )* ,8)*y x )* ,8)**  R  v " *2 
x )* ]&  G,.R] x +2
| x    v
a_expr

Calificadores
xe=8 y=8 8,8 x 2 2R x ,8  
 G x %)*G ,. $ 2  ,8 x ,8 $ 
  ,8
%


x ,. $ 2   x a_expr 
kG$?%,8)* x
x  x ,8  v

boolean

2k?,. x I x Wy 

Lista From
# S
Mp K G x ] ]  V   8 v  G,8)* v  K. x
) + G2R )*(
[ class_reference ] instance_variable
{, [ class_ref ] instance_variable... }

 x  class_reference G+   )*


class_name [ * ]

#K x )*  x  x )*q$O  Go x R x ,8 2O x 


  ,8 
] x  ,8 x class_reference v x $)*
{ x   G
    ] x 2R x ,8 
 x 
e   ,8 o
 x  I  o,8  x  ,8 $o x  
RGO$  q '( x ,8 oG,. ,8 x ]   x  R 2,84wx v

Captulo 3. Data Types


,. |R'(q    x Ro+
  G
  x  v
R
'($ ,8'+ +x R  R
  $
 R* O v ])*y  x 
|RR
|  x '( ^z{
i"|^z}|z ,.)*)* x e G2,8   k'(G v
w4x '(,8 x RZ $"'(   k x ,8R  x k  (  ,8 H!]#*2R x  (,8)*
  x ,82 x o 2 8 x  v ")*+ZR,. x  G,.R oRo"!]#
,8)*$  kR v"w4x R'(,82G2( RR]  x  "!]#  x $$)*
 ,8R k x  x $ 
R
 v  x  R'(o   R x R
'(
q

  x 
)*R v k
R
+ R'( x 
" ,8'k x  x e,8 
 R'($'(
q2GGO$"2   I   )*R$2 ,8'|'(q $ x  )*qR v

m)~m)gtb84ra$bkmmqJab



Postgres Type

  x

SQL92 or SQL3 Type

 
,8  x    
,8R x 
 ? x    x 

,8'(K x

,.'($O,= x

   x R',8'(,8G
 x 
w 
O  xqx k-
'(  .2
,. ,8  x    x 
,8  x ? k '(  )*
 
G"$,. x )* , &LO $
O
R x 
 x  x )* R'
,8   x
  ,8 2  x
R x 4 x  x )*
w 
2  xox R-
'(  .2
  x G *Rk4 x 
2  x   x 
  x  
R x R
G
x(x IR x q x    x 
 x o
)* x ( x    x 
H ,8  x ,8
"$,. x )* , &LOO 
O
 x  x e,8  e
G)*G ,
$'k x    x 

,8 
,8 , 
G

R

.,8 )*

G,. )*$ 4 



R



    q,   x

x 
x 
x 
x 
 x 
 
)* x 
x )* ,
G'

2)*$  x 
x  x R
G

,8 )* $
x )*GO ,8h

Description

Postgres Type

 x 

SQL92 or SQL3 Type


 x
 
R )*
R )* x
R )*)*

,8'( x

R )*
x R

R )*$)* R'k )*q$ x 
,.'($O,=
O x  x

Description

)*RO , x  x   x 

,.  e)*G ,'k x 


  x 
x 
? ? x  x  x
,8  x ,.
R )*q $
 x   R )*q x
$
"R )*
    x 
R',.'O$,.R
 x 

Nota: The cidr and inet types are designed to handle any IP type but only ipv4 is handled
in the current implementation. Everything here that talks about ipv4 will apply to ipv6 in a
future release.

m)~m)gtb84ra$b
{cf8st
f^t
fb8mfb

 x )*

Postgres Function

,.  x  

SQL92 Constant

GG n x ^n
R )*n x ^n
R )*)*n x ^n

,8 
,8 O
,8 O

x R  R
x R )*
x R )*R)*

Description

 x )*q x ,8 O x 


  x
R ,8  x R x 2$,.R  x
R )*q ,8 O x 
 x ,8R  x
R x eR )*q ,8  x 
RO x 2$,.R  x

R
+'( G .'(   x   ~ ] GG )* x  vwx      x "!]#
,8 x( O)* x ,8GH 2R x R (OR  x q "!# $ k R v  R'( '*k 

(H!]# ,.)*  x ,88R'(|&2)*,8 R'(+2R x  k'( ,8']|  $,. x  
 x k'( ,8''(  x  
R'( ' 
 x 2R x  ( v k   x )*-

G R ,8 x( O)R'( R W65"'(k
R'(G2R x  x  R G4 
?2 q,8$ x q ,8 G  x ( -
  x x RR'() v
& '( x  | x    x ,8  x ,8 x  x y*R'( v  v
x R

GO& x  x  x  x )* )*I,8'(,8- x  v ")* '(R& x
x ,.R  x  v  v $   R  x  x e)*  R  ,8  x  x  )  x R )*GOI,8'(,8-
x 
x '( x RR )*
x G",8 R  x G v x )*e2G)*2 G")* '(
x )* ,R 2)*q RqR
G)*$   x R x 
 v
'($)* R'( x  x k   x ,.R  x & x  x 
   v %'( GR'(G2  
  x    x ,8R  x )* o.,.   x k'( x ,8)* RR'(qO  x  x   v

Nota: The original Postgres v4.2 code received from Berkeley rounded all double precision floating point results to six digits for output. Starting with v6.1, floating point numbers
are allowed to retain most of the intrinsic precision of the type (typically 15 digits for
doubles, 6 digits for 4-byte floats). Other types with underlying floating point fields (e.g.
geometric types) carry similar precision.

Numeric Types

 )* ,q,8 x 2 Z R? x  4 x R


GO x   x y 
'(R
R]
 x  x  x )* v

m)~m)gtb84ra$b
|kcd*arsB
ab
Numeric Type

Storage

.,8 )*


O $
 



x 
x 

G
G



x 



x )* ,


O $ 

 


R

Description

2GI,8 G
,8   x
?  :,8 2  x
?  :,8 2  x
 ,8   x
 H,8'( ,8 
"G ,8   x
GO 
O x 

"G ,8   x
2GI,8 G
,8   x
w  x  ?
,8  x ,8

Range

x  )* 

G,. )*$ $,.G
u G,. )H ,8
  
uG G R
uG $
HI u G,. )*$
 ,8
x  )* 
R uG G

%'( x  )*GO ,'(


  Z+ 8, O x  x y R'()* ,GORO x x ,8
  x  v  ?RQ  8 8 
l`  x p
= c .lZ8=8? )q x( O)*R  x|v
%'( x  )* x 
    x     )* x ,.  Z x ,.)*  2 
?'(  v

The Serial Type


%'(+ R
 Z,8  ,82|+,8 x R ,8R k )  R'(  x ,8)*
 x  x  vKw H Z ,8   R,8G& x 
  x   R + x R O G vwx R'(,.  x 
)* )* x R  x ,8  x 
CREATE TABLE tablename (colname SERIAL);

G
 
  x (R,8  x 
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename

(colname INT4 DEFAULT nextval(tablename_colname_seq);


CREATE UNIQUE INDEX tablename_colname_key on tablename (colname);

Atencin
The implicit sequence created for the serial type will not be automatically removed when the table is dropped.

w )* ,8 (G
 x ,8+2  x '(q H x  R)* ,8    k'( x
 R 
,8 x R x x *  q  v "
R'(   k x *,8)*)* x ,8 G x   
k   -
  K
CREATE TABLE tablename (colname SERIAL);
DROP TABLE tablename;
CREATE TABLE tablename (colname SERIAL);

%'(
 x ,.k  )* x x '( R x R  ,8   y  x  k`kz
plz|^ z v

Monetary Type
Obsolete Type: The money is now obsolete. Use numeric or decimal instead.

%'()* x  &H ,8  x ,8k '  ,8 )*" x 


G x RR  x|v
w4 R
 ,8)*   ek R'H# ] #e'( x (' q)* x R
q2'(  2qR'(o)*
x RO,8 x 
 x R  x   x   O8)=v

m)~m)gtb84ra$b
t
fa$4m$rBab
Monetary Type

)* x 

Storage



Description

 ,8   x

Range

u $ G(v R
uG v 

x )* ,k   ,8'(q)* x R$ x '(  * K v

Character Types

H!]#  x G&k]O )*O],8'(,8GO,8'( x k$,8'( v R


| OR&'(G
kR
G2 x    R  x Ry'(k)*
 x GO$G"+(k'( ,8' x  -,8'(q  x 

  x ? )* ( ,8 . e x R'(q2 $ R'( G v

m)~m)gtb84ra$b
m$rm8IarBab
Character Type

Storage

Recommendation Description

,8'(
,8'(K x

Character Type

u 
R
x 
R

Storage

"!]# 4 ,8)*R  
H!]# 8, )*R  

Recommendation Description

R"

,8'( x


R
x 
R

~ ,8'( ,.
H!]# ,.)*R  

" x  q,8'(,.R


   x 
R'  x   
Z    x R'
?$O  G4  x 
R'k '
 )* 

%'(q  x '(G    x 


R',8'(,8G| v %'( x )*o x  '( x  
 x R'(  k 'e,8 &R
   x G x $ x $)* vHw  
x Z x  x   ]'( x   vGw no  x 
R' q,8  x   x  $ ,8'(
 
'(   G x ,8  x   % # v %'( | &

,8)*  R )* x k)*
,8'( x 
 x  R  $2 v

m)~m)gtb84ra$b
a8sImQm$rm8arBa
Character Type

x )*

Storage

Description

G

%'( k,.'($O,8R
x R x 

Date/Time Types

R
"!]# +R'(  
 "!#e $ x e )*qR v

m)~m)gtb84raR ^ kma6Wsd*aB
a$b
Type

R )*)*
x RO
G
G
R )*

Description

 Rq,8 x R x x 


' R x eR )*
&R )*q x R 
& $q,8 x $ x x 
 x  R
 Rq,8 x R x x 
 x  R )* '(q 

G

Storage

$uq~

Earliest

 u$  u

Latest Resolution

u  
G

u $$
G
$uq~

u G  u *
) ,
G 
u 


G

$ G  v 

v 

Nota: To ensure compatibility to earlier versions of PostgreSQL we also continue to provide datetime (equivalent to timestamp) and timespan (equivalent to interval). The types
abstime and reltime are lower precision types which are used internally. You are discouraged from using any of these types in new applications and move any old ones over when
appropriate. Any or all of these type might disappear in a future release.

u )* ,

u )* ,

Date/Time Input
e x R )** x   k,8,8R x  ) x  x   )*R& x ,8   x  w
,8)*$  ."!#,8)*R
 GR    x  x '( v %'( GO x  )* x '
 x y x  x  |,8 x )*   R'( R x  R*,8 y'(
?'( 
 x ROG v %'(],8)*)* x SET DateStyle TO US  SET DateSty,8 R'(
  x 1)* x '*  $ 3 R'(,8)*)* x SET
le TO NonEuropean
2Go'(
  x H1 * ])* x ' 3(v %'( O)*G R'(
DateStyle TO European
 G   v
HG X  a" 8 q R'(],82 x    $
"R )* x   x R'(]
,8 x  R )*q x  v
G)*)*'(Z x R]R )* x   x G q] x ,8 2G x 2 x  
G2
 -
G"
2R x 
 v
date

%'(   k x   q x   ?'(q  v

m)~m)gtb84raR ^ kmaqifc
Example

 x  $O u G
u  u
u u $
u u $
u u u $
u  v G
u  u
G u
u  v G
G 
 x $O  ~

Description

x  )* 
 
w u )*R$ GO
]5$ $ 
 u x   x )* 
  x 5$ e$ 
 u x )* 
g5$G   x K u x  x )* 
G& x 
G
w u R)* x '$ $
w u R)* x '$ 
G& x 
G
 x  
   '(,.)*)* x 

m)~m)gtb84raR ^ tfl~~ra)sImst
fb
Month

 


,8.)*
E 
 x $O

x 

Abbreviations



G,
G
 x

x

Month

,8'

)*
,.R
G
)*G

Abbreviations



,.
"$"

Nota: The month May has no explicit abbreviation, for obvious reasons.

m)~m)gtb8
ra) ^ km)t
Haa)kl~~ra)s4m$Ist
fb
Day

 x 
 x 
%H  
 x G2 
%'( 2 G
O G
R  

Abbreviation

H x
 x
%H $%" G
  
%'( %'( R%'( 

H$

time

%'(   k x   )*q x  R v

m)~m)Xg$tb84raR ^ sd*aifc
Example

(v G






G 
G    

Description

w u
w u
w u
w u
")*
")* u
")* $
")* 
")* 




G
G

5  x  R ,8(


 
5$ x  (' |)* ( O u

$
$

timestamp

?$ x   '( )*G2R)*R


,8 x  q ],. x ,8R x  R  x   $ x R )*
  k  x R  x $
 BC   G  x   x  &R )*k$ x  v HG  v
AD
%'( 
1999-01-08 04:05:06 -8:00

*$ R )*R)* 
 ?k'( ,8'  w ,8)*  x  v
w4x    R  x ?'(k G
)*
January 8 04:05:06 1999 PST

  v

m)~m)gtb8
ra) ^ sdya9|t
faoifc
Time Zone

"%

$

Description

,8
w
w
w

,"R x E % )*


u  R  ?H%
u  R  ?"%
u  R  "%

interval

x GO
 |,8 x ,8  k 'R'(   k x  x R
Quantity Unit [Quantity Unit...] [Direction]
@ Quantity Unit [Direction]

k'(
Quantity  vhvhv -1 0 1 2 vhvAv 5 Unit  second minute hour day week month

century millenium8$
G   x &  ? ' x R65 Direcyear decade
x
,.
 ago &G)* v
tion
Special values

%'(   k x "!#4,8)*R   x ,8  x ,8 x  2G  o )* x   q'(
,8 x  x  $R
 CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP v
R
"!]#  OR
H,8 H,8 x  x R ,8 x  x  x ,8 v

m)~m)gtb8
rabi ^ a8smG(km$4as4d*aMtfb8mfb
Constant

,8 OW x 
,8'

x(x 
I x(x 

Description


 x 
 x ,8  x  )*G  E
u u u $     x )  )*

#R?'( x R'(&
 R )*
O R'( x '(
  )*G

Constant

Description

x
 
x 
R G
R)*O
 (

w   G
 x R
 x R x 2$,.R  x R )*
x '( 
x '(R)*O
x 
'(R 

 
 k'( x '(
   x   current  G GGO )*R'(

 | ZG 
 v "q
  qk x "R  now x )H ,8R  x  v ,. O

 8U k x (R  CURRENT_TIMESTAMP$k'( ,8'k     x (R now v


now

Date/Time Output
R  )*R,. x R x  R'(  2R  w u G"!#k w4x  .RO    x 
R
$ x )* x $  x R'( zkma)\a v %'(q  $  
+'( w )* v

m)~m)gtb8
ra) ^ kma6Ksd*aMkcccab

nw n
n "!]#n
n2RG6n

Style Specification

w u R x 
%H    x 2R
 
  x 2R
 

Description

n GO)* x n

  x $R
 

Example

u  u u
u u u 
 eG, u
"%
u$(v u v u 

 u
 u$(v  H%
 uou 
G uv  "%

%'(*  q R'(y $e x  )* k  ,8 y x  '( ReR )**$O x
,8,8  x ,.k ''(q$
)* G
%'(y"!]# '(  x  x x  x   x    x R|k'( ,8' GO)* x G
k'(R'()* x R'   k k ,8
 v HG kR
"% )* wx  '(
'( +R x  R ,8| x ROGR  x  x  
  v

m)~m)gtb8
ra) ^ kmakrnarHtf
a$fIst
fb
Style Specification

 E x

Example

u$ u u  
u G u(v 
%
u u u   $u
v $ "%

x  GO
 R  -
| -R'( x   O)*$",8'( x R& -

,8 x
 G 
GO| x 
 vw4xkw *
)  q'q R ( - -

week



century



[ Quantity Units [ ... ] ] [ Days ] Hours:Minutes [ ago ]

%'($2GGO$H$
|R R ,8
'(q$ x ,.q HR )*R
G

0 % '(  %"% #y x   x )*


)*R?2R  v
0 %'(  %"% # x   x )*
$OR  v
0 zkz} z H!]#,8)*) x

x $O G   *k'(,8-


 x  ,8R k x R
x $O    *
R'(  x  x y e x   x
v

Time Zones
R
"!]# x $R,8)*$  k R'"!]# 
 x R  x  R ,.$+  v

x
x

kGGR.R'("!#  $ ]'(?   )*  R|


 )*R
? x ,8$    v
%Hk]
  G)*H

0  '( 
'e'( RR  x '(
 x ,8 R  )* x HR'( )*,8 x
  v
0 %'(q    
 )*q$ x  ,8  |,8 x R x ( x R& R 2G ) %"]% v
% )*] x  x '((kO ,. x '( x e)*G x x e x  G2q,8 R k R'y R$
k R )*o2 x ,8oR'( R ()*$OR'( ''(o R'e $
 '(
x 
 )*
 x $O G v
%"y  ER'(k  R ,8   ("!]#,8 RR )*k$ x  x  k '  x
 )*R
Gk'( ,8',8 x R x
R' R x  )*G( x  )* ,8?R )* q x 
,8 x R x x  x  k R| )* v8 OR'(RR )*$ x q    
 )R'(q x 

x  x 
R) )* x ,.$  R  x '( x ,.,. x '( x   
 '(
2$ x 
 )*q x R'(,8 k'(
 v
R
"!]#  x kR )*y$ x   ) '(* x 
x  x 2R) 
RRG xu $  x  x Go'(R
,.  )*   x " 
R)* v
R k '(  x $  R )* R,8   x  x x 
2
  x $ k% )*o4% v
 + R x R )*$R x R x   x x GO+]% ?$  x R - x  x 
 x k ,8'G x %
)* % v % )*G,8 x 
G R ,.$R )*e x '( RH
O

  x  x RR'(,8  x   x R x '( x ,.     x R'(
Z )*
 x  v
%'($2GGO$H$
|R R ,8
'(qR )*q x q'(

0 % '(q%  x 
 x ) x 
O $   eR'(q,8-
 x e  G,.R  x 2R)*G&R 
|R'(q    
 )*q x  v
0 %'( %  x   x )* x 
  o2G'(,8  x  2G yk  x y )* x 
x( O)*$  x RR'(q,8-
 x  x ,8 x(x ,8  x|v
0 %'(q"!#,8)*)* x z+iz#^|^z RR'(q )q x  &R'(  xv
w4  x x $ R )* x  o2,8 G (R'( )* x ,8) % x )*|2G)*
 x k v
Nota: If the compiler option USE_AUSTRALIAN_RULES is set then EST refers to Australia
Eastern Std Time, which has an offset of +10:00 hours from UTC.

Internals
R
"!]#*    x G +  $
" ),8 ,8  R  x  v %'(Gk'(
R'( x ,.
o ,8,8 o  ,8 x ?",.$ ,.  R x  x R+)*,8 x '( x]uG~ R ( x 
'( R $  x R'(q2 )*  x R'((R'(q  x 'k R'(q?  $(v $
 v
,8 x  x   x  R'( u R',8 x R Oy)*$-
  x GG x yG  x  & x 
,8 x   x  x  
'kO x 
,8  x  x o R
HR )*q'( x  G v

Boolean Type

R
+ R+'(o"!#   x R
 v 
,8 x '(
q x q  x  k$
Gn nn  n v '(  RXn x - x  x n.  x  )* )* x G  x  x  
R
x "!# 5 ]## & x  R ,8 
 
R  R v ,. x   x  x ]  x   x
 x  G x ".  x $ $
|
 RRo  
,.)*R  qk ''( +R
 v
 2G u  O v

m)~m)gtb8
rab+tt
am$fB
a
State

Output

%HW 

nhn

 

n n

Input

% ]
+nnRn 4n)nn)n6n
nu n
#"Rn n4n  nn x n)n x jn
n n

Geometric Types

 )* ,R
GG x k  )* x   x $&2 ?GI,8 v %'()* x $)* x $
$R'(q x  O)*+'(
$2  ?  R'(qR'( v

m)~m)gtb8
rab+jkat
d*arsB
a$b
Geometric Type

 x 
 x 

Storage

Representation

 

G'

u



G'

 x

x 
R
x 
R

hA 


,8 , 



h hP


R

G
R
x 
R

 h
4 u
4 u
 u
 u

h
h
h
h

u h h  
u h h  
u A4 h  
u vhvhv

u h u vhvhv D
u h u hv vhv

Description

  x  x 2,8
wx(x o x 
x Rq x o2G
)* x 
,8R x   $&
  e' )*  
R
 x
 x '
 
 x  )*  
,8  e$'
,. ,. x ? x
  

O ,8'2GZ Z x ,.R  x
  x yR 
  G
 kG O)
O  )* ,q
O$  x  ,8'k|2,8 x   x  R  x R  x  x R)* x x  x R2G,.R  x  v

Point

 x R $'( x )* x HRk  )* x 2  x     x  ,8- 


G)*G ,R v
 x ( G,.  e  x R'(   k x  x 
( x ,
x ,
where
x
y

y )
y
is the x-axis coordinate as a floating point number
is the y-axis coordinate as a floating point number

Line Segment
# x )* x R   $.2 x G  |  x R v
  +,8 G  x '(   k x 2 x R
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1
,
x2 , y2
where
(x1,y1) and (x2,y2) are the endpoints of the segment

Box

~  "| x  e +  x R k'( ,8'k Rq,8 x  '(q v
 G,.  e  x R'(   k x  x R 
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1
,
x2 , y2
where
(x1,y1) and (x2,y2) are opposite corners

~  " R   x *R'(


'( k  ,8 x  
 x
 x R $ '(q k& 
 x  v

 x R v %'(,8 x


R'(  
'(,8 x
( x G '(,.

o$   x x  ReR


 2 v R'(,8 x  R'(q,8 x
x  R)* x  ) R'(q x  

Path

'(].2 x 
,8 x(x G,.R R]  x  v ',8 x K x Ek'(R'(
O+ x  + x R x '(2G x ,8 x(x G,.R  x K,8  Kk'(kR'( 2+ x
 ( x q,8 x(x G,.R v2 x ,8R  x  popen(p)  x pclose(p)    R ,8
R'k x ,8  H x x ,8  x  isopen(p)  x isclosed(p)   
2G ,8G '(q x o
GO v
R' ,8  e  x R'(   k x  x R
( ( x1 , y1 ) , ... , ( xn , yn ) )
[ ( x1 , y1 ) , ... , ( xn , yn ) ]
( x1 , y1 ) , ... , ( xn , yn )
( x1 , y1
, ... ,
xn , yn )
x1 , y1
, ... ,
xn , yn
where
(x1,y1),...,(xn,yn) are points 1 through n
a leading "[" indicates an open path
a leading "(" indicates a closed path

'(&  
2 x ' O2 x R v= RR'(|
2  x |O Z] (v u 2G
 )* &R'(k'( ,8'e'($ e x  o   x  x '(G2 K,8  ?" x x R
,8 x & R'( x )*  x R2('( x R'( 2  x R   kG *,8 2 x  x 
'(  v %Z'(]
  R xy x ,8R  x upgradepath o   Re,8 x GO'(q  )*  x
  G )  (v u G v

Polygon

 
 x k. x R R]  x  v 
 x ]
 2'  
$ k,. x  
   
  x &e,.  R'(2
 &]R  R G x R  * x '(
'(G  x  &
 (  x G v

 x +2G,.  2 x '(   k x  x 
( ( x1 , y1 ) , ... , (
( x1 , y1 ) , ... , (
( x1 , y1
, ... ,
x1 , y1
, ... ,
where
(x1,y1),...,(xn,yn)

xn
xn
xn
xn

,
,
,
,

yn ) )
yn )
yn )
yn

are points 1 through n

 
 x o R ?  x '( O x R v. '(2RGGO  x O k (v u
2G  O)* 
 x k'( ,8' '(  x  y G  x  x '(G2 |R'( 2q "
 &,.  x G2G'( 
  +,8  x R   G ,8  x $ x '(G2  v %'(
    x x ,.R  x
Z2   o,. x 
H  x   )*  x   G
) : (v u Rupgradepoly
 v

Circle

,8 |. x R e,8 x R? x ( x eo   v


,8 ,8  ,8  e  x R'(   k x  x R
< ( x
( ( x
( x
x

,
,
,
,

y ) , r >
y ) , r )
y ) , r
y
, r

where
(x,y) is the center of the circle
r is the radius of the circle

,8 |   2 x '( 2 x R v

IP Version 4 Networks and Host Addresses

%'(k,8 2RG x GkO-G,.  x w     wx G)* x  R x 


x RR  x|v %'( x |R
o'( x x k-
 x w  x R  x  x y )* 

O G  x x G x RR  x .2 x ( )* q'(2%
 w e  . v

m)~m)gtb8
rab.i+aGrb8st
f#oBab
IPV4 Type

CIDR

,8 

$O  

Storage

w  x Rk-

Description

x 


O $
 

x R+ x '(R

%'(,8 qR'(  w  x Rk- v %'( )* qG,.  x ,. $2  x GkO-

k'( x.x.x.x o'( x Rk-y x /y R'( x )*  R x R'(
x x.x.x.x/y
"
v

w

R)*)* R   ,8 ,8  R  x 2 )*  x  ) R'(k o,8   
x )* x 
R/y
) ,.G|'($+ + R x  y x ,8  k$ G+$  '(,8R] x R'(
x   v
k)*qG")* 

m)~m)gtb8
rab.iB
abzmd*Iab
CIDR Input

u v u v u
u v u
u vu
u
u v u(v
u v u(v
u vu
u

Range

Z w  w 
 ,.-
Z w  w 
 ,.-

CIDR Displayed

u v uG v u
u v uG v
u v u u
u v u$
u v uv
u v u(v
u v u uG
u

inet

%'(k x GR
k  G  x  '(  x  x    & '( x( O)*$  x  '(
x ,8   x y'( w     x |R'(| |  x|v R'(|
 k x |R*2R
w  yx Rk-2
 k'(  '(,. R v %'( x  | )*  ZRR'(,8 R
,.G|'(+R'(  x R'('(|,8 x  x  x G v" x ,8  x G" +,'(

O  | )* x + '(  v
%'( x   )* R'(  x ,8  x  x.x.x.x/y k'(G x.x.x.x  x x R x ('(
 x y '( x )
G  q x '( x R)*- v$w R'( /y OZ   ? R
& q$ 
v x   R'(
x
 x G e (  /32 v %'(   kR'(qR 
/32
/y $O(  (
x
|o '(('(2(qI  
 R '( O v

Captulo 4. Operadores
,.  +GO | +   x  G x  v
R
,8  x  x 
 xx %)* + ? + . v ? .? x
,8 K  x GZ,8R 
 G2 R)* pg_operator v   x RO  x pg_operator
x ,8 
 x )* ,8  )*  x k
 )* )* x RG(O$ + ,8  w 
 R   x    v
O
R  $
  x R| H  ,. x ,8 x ,8 x 2RO x 

1MGG 3  
SELECT oprleft, oprright, oprresult, oprcode
FROM pg_operator WHERE oprname = ||;
oprleft|oprright|oprresult|oprcode
-----+-----+------+----25|
25|
25|textcat
1042|
1042|
1042|textcat
1043|
1043|
1043|textcat
(3 rows)

#  O  G  x x 


,8|      x  x )*o  & 
)* Z
select * from emp where salary < 40000;

R)* x    O  G  x   )*e 


O$ .  G,.RG)* x  v  x ,8 o x o

x ,8  x   )* )* x R x  


x R  '( o$2E

select * from emp where int4lt(salary, 40000);

psql

  x  x ,8)* x  nn q)*&G  v

Lexical Precedence

#+ +  x  x x o,8.  x ,8 o


o,8  ,8 q  x R GH2G v #q)*$

  e O$ GR  x  x  y)* )*y,8.  x ,8 *2 x ,8  


 v R 
$,.GG,8)*)*  x ,8] x   R  v ?OI)* $ | |  x 
I
R  x  x x ,8.  x ,8    x R
+ ? G
  x ?
O
I
O v

m)~m)g)krnafnaotarm$nt
rab
ra8ana$f.smna8ra8sIafa)
Elemento

w
k
h
AD

Precedencia

Descripcin

,8 x  ,8|"!# 


8,  x 
 R  
 )* R | 



 G 


  

Elemento

Precedencia

Descripcin


 G 
GG,8'(

 G 
GG,.'(
$
  
$
  

  

G
x /

  )* $ G+  


)* x  x $O 
R)* x ,8 x  ,8 
 x  x ,8 ,8 x
,8)*  x   x 
 
)*    ,8,8 x    2
  ,. x $ 2R,8,. x
G2q%  #"
G2 ##
R( % ##
x R 
+  x +
I&)* G)*
,. x R x  x 
,. x ,8  x ,8 o R
G2    k  x 
  
x 
$,. x
x R,8,. x   ,8
x x  ,.

w ]
##
% ##
IR  + )*+O$ .
w4
~ (% 
# w 
I

 ,8'(
,8'(

 G 

 G 

%


Operadores generales

#] .)* 


? x  x  xx %)*G R ]  R
x R 
q x   R  x )*{ ,8+'( R  R
" )* v

m)~m)gtb84ra$b
ka$rmt
rb
Operador

O
I
l
I

I
O
GG
@@ O
ff

Descripcin

 x ?
}
 x ?  $ }
   }
w 
 }
$
 }
?  
}
 x ,8 x o x 

% w4
)*

Utilizacin

u
u
O
u lI
u O u
I u
I
O u
n2R4n[GG-n"!#gn
@U@ O
n,.8h)*,h'()* hngff
n / ,. / n

Operador

@ ff

fx
@f
@ fx

Descripcin


 ,8)*
 x ,8  x ,8 q
G
2 x 2  qq)*
,"")* x
 x ,8  x ,8 4G

2 x 2  qq)*
,"")* x
,8 x ,8  q
2 x 2  qq)*
,"")* x
,8 x ,8 G q
2 x 2  qq)*
,"")* x

Utilizacin

8,
8,
8,
8,

n  ,8n@ ffn /  / n


n'()6n+f#n v x'()* v xn

n'()6n+fxHn v x%'()*$ v x"n


n'()6nJ@ f#n v x%'()*$ v xn
n'()6nJ@ fxn v x
  ) v xn

Operadores numricos

m)~m)gtb84ra$b
ka$rmntrab+fcd*rs8tb
Operador

@@
/
/
x

5
e

G8
G G.

Descripcin

 ,8R 
,8 HO$ 

  
   
%H x ,8 
   ,.$,. x
" )*
G
 
 x
 x  x ,. $,. xkx R 
#
 R)* x R O$
?   R
 x  x ,8 ,8 x
o,8   
o,i% ,8

Utilizacin

@
@U@

/
9
/(v
x



(v
5 v 
e (v
v e(v
G8 (v
GG8 v

Operadores geomtricos

m)~m)gtb84ra$b
ka$rmntrab+atdyrs8t
b
Operador

Descripcin

Utilizacin

Operador

%"O x  ,8 x

%H x 2 $,. x

,8  (?"R,8 x

Descripcin

,8  (?"R,8 x

wx ,8,8 x

% )*G]  x  x


 
 x 
 x )*$" )*

)
mlm
m
mI
6I
l

IlI
I
}
}8
}8cG

eo e
}rG
}rGG

e
ee

Utilizacin

n  h u u  nEh 
n v  nWh  x 
n  h u u  nEh 
n v  nWh  x 
n4 $ h u u 4 nWh 9x
n v  nWh  x 
n $ h G4 nWh k
n v  nWh  x 
n4 u A u h u u  n
n4 u u h u h u  n
n u  h u A4 u  n

n  nE  x  )
n4 $ h G4 nWh  
H2 GO x q}
n  h u u  nEh ,8IMm[m
n4 $ h G4 nWh ,8R
"  x q? 
n4 $ h u u 4 nWh ,8Rm

  G}
n4 $ h G4 nWh ,8R
"  x q? 
n4 $ h 4 nWh ,8RmI
.,.'($}
n4 $ h G4 nWh ,8R
  x ,8 o x 
n  u nEh ,86,.  &6I
n4 $ u nEh ,86,8  
 o    o }
n  u nEh ,86,.  &l
n4 $ u nEh ,86,8  
Ro I] }
n  u nWh ,8,8  
n4 u nEh ,86,8  
 o G,8'(q }
n4  u nEA ,.6,8   IlI
n4 $ u nEh ,86,8  
Ro x ,8 )* }
n4 u nEh ,.6,8  QP
n4 $ u nEh ,86,8  
wx GO,8o22 GO x 
n4 u G h u G nWh  }
n4 h $ A  nEh ,=RR5
|'(O $ x R }
n u  nE  x }.
n  nE  x 
| x  ,8  }
n4 $ h u 4 nWh  }8cG
n4 $ h u G4 nWh  
x
(
x

x
# 
R  e ,8 ,8 G ,8  een  h u  nEh G'
+
 ,8 }
n u nE x }rG
n  nE  x 
|  }
n u G h u  nEh  }rGG
n4 u G h u  nEA  2G
 x  x  x
n u u nW  x Re
n4 $  nEh ,86,8  
 x R 
e9en  u $ nEh ,8,8  

Operador

fO

Descripcin

,8 

Utilizacin

n
n4 u

 h u
u h

u  nEh  


G4 nWh  


x QfO
x 

Operadores de intervalos de tiempo

R     x R &  )*R x RO


 & x  G
   | & R
" )*
  x  ] x G2ReR x   x R y,.)* ] ])*])*  x  v k
 
O$ .OqR  v

m)~m)gtb84ra$b
ka$rmntrab+naqs4far"
m$4tb+naosadyt
Operador


O
l
I
O
I
I
O
I
l
G
fO
}gI

Descripcin

wx 
 ])* x &
}
4w x R$ )* x  
$

}
wx 
  x  
$H
}
w4x R$   
}
wx 
 ])*
& }
w4x R$ )*& 


}
 x 
 ? x x GO
  
 )*
w4x RO
 ])* x & }
)*  x   x 
 
,8 
% )*  x ] 
x 
 }

Utilizacin

Operadores IP V4 CIDR

m)~m)gtb84ra$bika$rmnt
ra$bie[Mik`
Operador

Descripcin

 x ?


 x ?  $ 
w 
H 

Utilizacine

nu
nu
nu
nu
nu
nu

v uG
v uG
v uG
v uG
v u
v uG

v u(v
v u(v
v u(v
v u(v
v u(v
v u(v

nEh ,8 
nEh ,. 
nEA ,. M
O
nEh ,. 
nWh ,8 KO
nEh ,. 

Operador

I
O
I

lI
l
l
O
IlI
IlI
O

Descripcin

Utilizacine

nu
nu
$
 
nu
nu
  

nu
nu
2Ro,8 x  x  x
nu
nu
Ro,8 x R x  x +  $ n u

nu
 x   x 
nu
nu
 x R  x q  

nu
nu
?  


v u
v uG
v u
v uG
v uG
v uG
v u
v uG
v uG
v uG
v uG
v uG
v uG
v uG

v u(v
v u(v
v u(v
v u(v
v uv
v u(v
v u(v
vu
vu
vu
vu
v u(v
vu
vu

nEh ,8 I
O
nEh ,. 
nWh ,8 I
nEh ,. 
nWh ,8 MlI
nEh ,. 
nEh ,8 l
nEh ,8 
nEh ,8 l
O
nEh ,8 
nEh ,. IlI
nEh ,. 
nEh ,8 IlI
O
nEh ,8 

Operdores IP V4 INET

m)~m)gtb84ra$bika$rntrab+ie[oi|^z
Operador

O
O
I
O
I
lI
l
l
O
IlI
IlI
O

Descripcin

 x ?


Utilizacin

nu
nu
 x ?  $ 
nu
nu
w 
H 
nu
nu
?  

nu
nu
$
 
nu
nu
  
nu
nu
2Ro,8 x  x  x
nu
nu
Ro,8 x R x | 
$ n u
nu
 x   x 
nu
nu
 x R  x q  
nu
nu

v uG
v uG
v uG
v uG
v u
v uG
v u
v uG
v u
v uG
v u
v uG
v u
v uG
v uG
v uG
v uG
v uG
v uG
v uG

v u(v
v u(v
v u(v
v u(v
v u(v
v u(v
v u(v
v u(v
v u(v
v u(v
v u(v
v u(v
v u(v
vu
vu
vu
vu
v u(v
vu
vu

nEh x 
nEh x 
nEA x 
O
nEh x 
nWh x cO
nEh x 
nEh x I
O
nEh x 
nWh x I
nEh x 
nEh x lI
nEh x 
nEh x l
nEh x G
nEA x l
O
nEh x G
nEh x IlI
nEh x 
nEh x GIlI
O
nEh x G

Captulo 5. Funciones
,.  $ x ,8  x G    x   x   x  v
 x   x  q)* ,8'(q q  $ ,8 x GO x
 v  x   ,8 x   x  
x ] ,8 ,8  x ,8 
$)*
 x R x   x  RO${G O$ G   x
,8)*GO  v

RR  ,8  x 


x G  v   x  x ,.  x 
q ,. )* x   

Funciones SQL

1 x ,.  x qH!]# 3   x 8,  x  ,8,8  x G   x qR x ?"!]#  R  x  x


$" | 
$  x 8,  x  
 x
    x  )* )* x  $,8)2 )  x
x
v
,8  

m)~m)g){cf8st
fa$b ^
Funciones

# 
 list

Retorna

x  #


input  #

w
4

# # input value

" k
expr expr
%k expr A vhvhv D

#(H expr  

Descripcion

 R x

  x
 o 
G x

o )*
 ]#  x

 ]
# 
input O value

Ejemplo


#  
 r" 4P


c2

## 4w )n n
c1

R x o .2 x Hk k c1 O


u %k n)*,8'Bn
q  )*
,8 )%  oG  GO 
 #"dn x )*R,.'Bn
 

Funciones Matemticas

m)~m)g){cf8st
fa$b mad&s8mb
Funciones

I$

Retorna



k h 

R x 



Descripcion

   )* x 2  x
 x  x 
,8 ,8 
  )* x   x
x )*
 x  x 
,8 ,8 
,8 x 
 x
o x RR



Ejemplo

 v $

 x

k v uv 

 x 
x  

R $

Funciones

  x 

Retorna

x R
GO

x 

String Functions

H!]#  x 
2 x RO

,'($R" v

$

Descripcion

8,  x 
ORq x  x R 
o x RR x 
,. x 
q x  x R
R x qq x G

Ejemplo

 

x G
GO v G

x ,8  x  + R],8 x  x R" |G,. ,8 v   x |2 x )* G)* x  $ 


x 8,  x G
 2R
G+#+ | %"R]2OR $OH!]#  x 8, '(

m)~m)g) ^ RMrsfv{
cf.stfb
Funciones

,8'(  x '( x  x 
,8'(,
x 
RK  x '(RO x 

Retorna

Descripcion

  x
 IR  G"R
  x
 I  G

Ejemplo

 kORO x 

2R x 

,8 x 
qG
)* x %,8  $
$ )*,8 x oR)*(
HR
 ,.$ o 2 ,8 x
 x  G"R
,8 ,8 
RO x  R"R
,8 ,8 
O,8,8G| 
x G"R

 kGOn% n

,.RR  x '( x  x 
2 R  x 4RO x  x
 x 

x 

 2R x 
 x 
A ) x hDA  x hD

 x 

 x 
RO )*A  G  x QGERO  x Q
 GEW'BD
A RO x D )2RO x 
.
 G"

#)*
  
v   x 2 x
,8O R|O 

,8'(  x  '(n Rn


,8'(  x  '(n I24n

,8R$  x '(n I24n


2 R  x nn x
n%)&n
 RO x n%)&n
)  $
 )*R'^n+n )
n%")*+n

,8 x  GORq x  nR)&n


)*%,.  

x ,8  x Gq R x   x


 GqOR R"R
,'( ,8'(
 $ x R x )* x ROq )* )* x R| $ x ,.  x  oG"R"!#
v

m)~m)g){cf8st
fa$b+nao
a)$4t
Funciones

,8'(4R$

Retorna

,8'(

Descripcion

Ejemplo

8,  x 
ORq x G"R ,8'(OnRO x n
R ,8'(

Funciones

,8'(4
G,.'($

Retorna

x R,.$4R

R

  RRh x hR

R

 RO )*R"RhR"

R

R"R2RhR



 IRh x RhG"

G"

 )*Rh



,8'(

 G"Rh x Ahh x hD R"


R"R,8'(

G"

R"RG,8'(

G"

R O x  
RIR"R )*hR

R"


,'(,.'($


,8'(


,'(

$,8'(G

Descripcion

.,  x 
q x

,'(o ,8'(
O )*GOo Go 
,8 q q
)*%,.  
G   x  ,8O$,.REG
  $
  q 
  x 
R 
,8 ,8 
G,. ,8O$,.REG
  $
  q G
R"R
 ,. $o x  R"R
,8 ,8 
   x  ,8,8GE
  ,8'(o 
  x 
R 
,8 ,8 
,8R ,8,8GE
  ,8'( 
R"R
G"RO$ 
,8 ,8 
,8 x 
Rq,8'(R 
R"
,8 x 
Rq$,8'(Z
R R"
,8 x  GORq,8'(,8
o x 

Ejemplo

,8'(O
G,8'(
n
,8'(Z x n
x ,8n'()*6n
  n'( ?n n}8}in

  )*n" )&n n+n


2 R  x n'( R'Bn n n
O \n'( ?n n+n

OR )* n )*"n n+n


 ROn'( HR'(n
G"Rn,8'(RO x n
G"RW,.'($
n
,8'(Z x n
 x  Rn u  nn u n
n)n

,. x 
q,8'(? 
 ,'( n,.'($

,'(
 x  n
,8 x  GORqG"o  
,('  n
2R x n

,'(

#)* k  x ,8  x  ,8 ) x    x kR*RO$R$O x 



)* x R+,8'(
 ,8'( v

Funciones de Fecha/Hora

# x ,.  x   ,8'(("kGk x  ,. x I x R k'(O)*  x ]$O


)* x   ?
O + $
"% )* v

m)~m)gkma6Wsdya9{cf8s4tfb
Funciones

Retorna

Descripcion

Ejemplo

Funciones

Descripcion

,8 x 
qq2R )*

Ejemplo

R )* x
G
 $R )*h GR )*

)*+
(

n x ^n n u 
u nWh $R )*

RR )*R )*

R )*

,8 x 
ORq )q R
RR )*
) n x ^nEh $2R )*
*

RR )* R

R )*

,8 x 
q R
RR )*

 )*G RR )*

Retorna

 )*

RR )* RhR )* G )*






RORRh RR )*

R
)*n x ^nEh G )*

R
)*nR nWh R

,8 x 
ORq $R )* 
G )*G n u $ 
nWh $R )*
n nEh R )* 5
,. x  ,8'(

R=n ^n n x #nWh GR )*



RORRh )*G2 x

,. x q'(O

RORn'( 4n n
'(
)* x 6nEh R )* x

RR x ,8n)* x 'Bn n x ^nWh  )*


RR )*
RR x ,.Rh $R )*

,8'(o x ,8 

 x R )*



x  )* x }

 x
Rn x L
nWh  )*

x  RR )*


 



x '(  x }

 x
Rn x L
nWh RR )*

x R )* x
 



x '(  x }

 R )* )*G2 x

G  )*

,. x 
qo R )*

R )* x   )*

 )* x

,8 x  GORq
R )* x

 x Gn
'(nWh  )*G x
 R )*n
'(nWh  )*G x
 )*G2 x n
'( O6nEh G  )*

Ok  x ,8  x  date_part  x date_trunc( ]


)* x    x 2G9
G4n
)* x 'Bng n'( nj)* x RnH^,8 x n ,8)* )*G2,8  G ,8 x R 
M ,8 n,. x  nB)*    x )&n:)*   ,8 x n)* ,8,8 x n v date_part 
)*  ^n$OG x $($  + )* x 
,.'Bn$OG x $(  x Z  
u 4$O $R )* nG,8'Bn x &G
RR
o2G
x RO x ,8 O 4K
 )*G2 x

Funciones de Formato
Author: Written by Karel Zak 1 on 2000-01-24.

# x ,8  x G  )*kG x x  k,8 x I x  '(O$)*  x $],8 x



OR 
 | RR
G HR )* x $$ x )* , qR )*R ,8 x 
 
R )*G 2 $R
| 
x  v

m)~m)g){cf8st
fa$b+na{
trd*mt
Funciones

R ,8'( RR )*


R"

Retorna

R"

R,8'( )*G2R)* R "


R"
R,8'( x $R
 

Descripcion

Ejemplo

,8 x  GOR x )* ,


 x 
,8 x 
qRO x 
RR )*

,8'( u (v
n $   gn
 RR )*n ,
$ u nRn  x
|+| k^n
 R\n ,
$ n)n x
|+| n
R )*)* n
, G nRn] x
|+| n

8,  x  GORq RR )*


 x 
R ,8'(n x ^nEh $R )*
nk u w Hn
,8 x  GORR )*)* ,8'( x k
o x 
nk u w Hn
x
x

x
,8 
q  "  ,8'( u Rn  n
o x 
,8 x 
R
,8'( u v
 " oRO x  n $  n

R,8'(

G"

R,8'( x )* ,.
R"
R $R )*R
R"

R"

R $:R$

R

,8 x  GORq x 
R

RR )*$)*R
R"

R

,8 x  GORq x 
R )*)*

R x )*G"R
R"

x )* ,

,. x 
qRO x 
x  )* ,

RR )*

 x  )*n u G(v


n)n  G  n

O +  x ,.  x   )*RGH2G


x 
)* x R] O)*$ ,8  v

m)~m)g){t
rdymscrabmrmonmasdya4tXmr" arb8sfg
Format-picture

k
u
k
w

Descripcin

('  H 


'( H 
)* x R 

u u $
u u 

Format-picture

"
"H

||
|+|
|+
|

%
 x R'
)* x '

 x
)* x

 +









Descripcin

 

$2$  
x ,8'( G 
)*$ 
R ,8 x ,8)*
)*+   
% R )*   R H(
%  )* 
R H$(
% R )*   R H$(
x )*
q,8)* R G)*G2  G
  ,8,8GE+ x )*%2,8  
x )*
q,8)* R G)*G2  G 
 )*&,8,R x )*%,8  
x )*q,8)* R G)*G2 4 G
  ,8,8GE+ x )* x %,. I
x )
q$
.
  H)*  ROG
 + ,8,G| x )*%2,8  
x )*q
  H)*G2  G (G
 )*&,8,R x )*%,8  
x )*q.   H)*G2  G
  ,8,8GE+ x )* x %,. I
)*+ u u 
x )*q,8)* G     R
  ,8,8GE+ x )*%2,8  
x )*q,8)* R    RGO 
 )*&,8,R x )*%,8  
x )*q,8)* G     R
  ,8,8GE+ x )* x %,. I
x )*q$
.
  H  $  R
  ,8,8GE+ x )*%2,8  
x )*q
  H   RGO G
 )*&,8,R x )*%,8  
x )*q.
  GH    R
  ,8,8GE+ x )* x %,. I
 o H( $ u $
o H)* u Gu
o  )* x  u 5$" O u
2G)* x o )*G
x %)  ) x o x (
,8 x R  o    
|R   x   +   x  u u ~
 $OR
)* xkx %)*O$)* x  w  ww 5 w O 
2 G
x
2G
x
)*  
(
(

%" q  )*R ,8 GO)* R x + R *k v 2 IG 
q x  x  $ O)*$ ,8  v gn n+  R
  v

m)~m)g)cwGabm$rmqt
rd*ms.c(rabmrmonmIa6Ks4d*aqtXmr" Barb8st
fg
Sufijo


%

R'

"

Descripcin

)*    x $ 



x )*  x H  

x )*  x H x( GO &

 )*
,. x )* $ 
  
)* ,8R  v %'(
% $ %(% w 
% $ %( Ro ,8 
 x   x ,8 ,8 xkx 
| 2$  v  2$ 
,.)*O )* G) x
)* ,8  v
 )* q x  )* )* x 
x 

Ejemplo


 x '
%
%
 x R' 

H

nonH  2$ ,8)*  Qoo"OI)* vnooHkoo" w ooHn


nwn( x q,8)*   2$   x R,8  v "

 GG,8
nHn  
|  oo"KOI)* vnoo" |+  x R'oo"Hn v$v
G"Z,8'( R
"!]#yRR"R2 x nwnk(R"Rk x R ,8)*   
)*$   x  
  e
oG
R x  x GORG ,8)*-k
)*: ,8  $OI)* vnKkG   $ |+| n vv

m)~m)g){t
rdymscrabmrmofcd&~arKsf wt
m$WfcdyarsX
timr
a$rb8st
fg
Format-picture

v  
$,8)*)*


Descripcin


 &R x  (,8 x  x %)*G
,8 ,8  q    x  x
  x  G o,8  x   x ,8
,8)* $] x   ,8  x
  x ,8 ,8
 x R ,8 )*
O$ Z q )*  
R x o
  x G
R 
 x  x  
O$,.-R
R x o
  x G
$ 
,8 x G  x 
)* x  o ,8 G
 )* )* x G 4 o ,8 

Format-picture

w
#

+
% &R'



Descripcin

 x R ,8 )*H o ,8 


$O Z q + 2q ,8 
R x oG  x )* x  x   ,8 x
,8 ,8 o x %)*Q 
 x o  x )*| x   ,8 x
,8 ,8 o x %)*QP  2R
GH!]#
 x   x
 x o  x )")* x  x  
2 ,8 x G2G,8 ,8 q(GH!]#
 x   x
R x o x %)*G],8)* x %)*
)* x  x %)* ? x R u $
,8 x 
Rq x %)* x %)*G  x 
x ,8 x 
R  x %)*)* x +
q,8
x %)* ,8 )*  "!#
 x   x
 u x u ex 5$(R x o x $ 
)*    ,8  u x   x n x nHG
x %)*  n n  G+ nn v 
,8'( x    nnH x 
,8 )*I x "OI)*   v  v
x )*,8  x R ,. v $'( x 
  v

 
 x   x  O)*$ ]
n nRn#jnvn w n"  x  x ,8'( xx )*G5G,8'(O u
n G n   ,.

-12

$ (R,8'( u Rn w G n   ,8

12

v ,8  x )* q Hn w nH G  x  Mn n x ,8 q  x q
o& )*  
n n v

m)~m)g)ztXmr" afa)ady:t
b8g
Input

R,8'( x k n]$.k u w "n


R,8'( x k n .$ u w $gn
R,8'(
v u 4n  v $ n
R,8'(
v u 4n v $ n
R,8'( v u n v n
R,8'( u Rn   v n
R,8'( u Rn  $ v n

Output
Tuesday

, 05:39:18

Tuesday, 05:39:18
-.10
-.1
0.1

0012.0

0012

Input

R,8'( n  n
R,8'(
4n  n
R,8'( n o n
R,8'( u )n  n
R,8'( u )n $ n
R,8'( u v )n $ v $ n
R,8'( u v )n $  $ n
R,8'( u v n G   n
R,8'(
4n  )n
R,8'(
4n  w n
R,8'( n  w n
R,8'( n#  n
R,8'( n  n
R,8'(
4n  n
R,8'(
4n  n
R,8'(
4n   n
R,8'( n# $ n
R,8'( n | n
R,8'( n | n
R,8'( (v n | n
R,8'( n  'Bn
R,8'( n  x )*G  n
R,8'( v )nK: ,8 )*K G
R ,8 )*K v $ n
R,8'( u R n  G n
R,8'( u v  n   n
R,8'( u v $ ) n $ n

Output
485
-485
4 8 5
1,485
1 485
148.500
148,500
3 148,500
485-
485-
485
+485
+485
-485
4-85
<485>
DM 485

CDLXXXV

CDLXXXV
V
482nd
Good number: 485
Pre-decimal: 485 Postdecimal: .800
12000
12400
125

Funciones Geomtricas

# )*{ ,8 x RH"" " x GHR'(  x  x *,8 ,8 o  x  x x 
 x
,8 x I x   x ,.  x  x  
|$  v

m)~m)XgR{cf8st
fa$bjkatd*Irs8mb
Funciones

Retorna

Descripcion

Ejemplo

Funciones

.

Retorna

$

Descripcion

.,. ,8 



 ,8 ,.  

"h



,8 x R4

 x 

,8 x    
x ROG,.,8 x 
,8 x   
,8 x R GHGIR

,8 x R4,8 , 

 x 

,8 x  HGRG

 )*GI,8 ,8 

$

 )*R G,8 ,8   


)*G
ROn4  v  En h ,8 , 

'( '(



$)*(
 ,8H  ('  
,8 x   
'(R n4  h u u  Wn h 

,8  R'



 ,8O$ }

,. 
 n  h u u h  nE '

 x '



 R }

2
 x nA6  h u u h  D nEh R'

  x '( 



  x  I    x    x '(n


u  u I nEA  2G
)* x 

  x '($'



  x  RR    

,8 2G4$'

R'

,8 x 
RqR'
,8 


 x nA6  h u u h  DnEh R'

 x  h 

 x 

x ,8,8 x

 x Rn
u  u I nEA  2G
n4 h
 h  nWh  

 x R'

x 

x %)* q x 

 x R'

R'

,8 x 
RqR'
 x

q GG,.R x 
 

Ejemplo

Gn $ h u u  En h 
Gn $ v  En A ,. ,8 
"n  h u u  n n v v h  n
,8 x
ROn4  h u   Wn 
,8 x
ROn4  v  nEh ,8 , 

  x '(n4  h u u h   En h '

 x nAh  u u h $ D nEh R'



 x n4  h u u h  nEh R'

Funciones

  4,8 , 

Retorna



Descripcion

k R'(4



R)*('(  x 

   H,8 ,8  

Ejemplo


 n  v  En h ,. ,8 

k R'( n  h u u  Wn h 

m)~m)g){cf8st
fabnao8t
f
arb.sfnaqstbjkat
d*rs8t
b
Funciones

",8 , 

Retorna

" x h x 



,8 x 
Rq x 
,8 x   

"
 x



8,  x 
R 
 x ]
,8 x   
n  h u u h   En h  
 x

,8 ,. GI

,8 ,8 

,. x 
qq,. ,8  

,8 
,8 n  h u u  En h 

,8 ,. GI x h

,8 ,8 

,8 x  GORqo,8 ,8  

,8 
,8 n G nEh  x  v 

 4

 

,8 x 
Rq   x   
n4
u  u I nEA 
 

 4 x Rh x 

 

,. x 
qo 

R'(  x

 x 

,. x 
qo'

 x ,8 ,. 

 x 

,8 x
 qo x R
,8 x  

 x Rn  v  nWh ,. ,8 

 x  h 

 x 

.,  x
 qo x R
 x GO ,8,8 x

 x 
 x

 x 

,8 x R   x 

 x n
u  u I nEA  2G

n  h  nEh  2G


 x 4


 x

,. x 
q  x  

,8 xku  x 


  x n  h u u I nEA 



Descripcion

8,  x  GORq,8 ,8  
,8 x   

Ejemplo

n  v  Wn h ,8 ,8 
n G nEh  x n u u nWh  x 

 2G
n
u  nW  x n u  nEh  x 
R'(n  h u u h   Wn  
 x

 x n $ h u u h   En h  


 x

Funciones


 x 4,8 ,8 

Retorna

  x

Descripcion

Ejemplo



 x npts ,8 ,8 


 x

,8 x  GORo  x  

 x u n  v  En h ,8 , 
npts


 x 4'

 
 x

,8 x 
qq  x  
 x n  h u u h  nEh $'

8,  x 
Ro 
 x  

,8 xku  x 


  x n  v  En ,8 ,. 

m)~m)g){cf8st
fabnao.c(ms $m8s
fjkat
d*rs8m
Funciones

Descripcion

 G2R' 
I (v uq )

Ejemplo


.OR 
 x   x

,8 x 
Rq v u

 x


K

n G h u u A   En h  
 x

O ($'(R'

'

,8 x 
 v u
R'


 G
R'(n u u u  nEh R'

O 

 
 x


 x

,8 x  GORq
v u

 x


 G

n u u  En h 
 x

Descripcion

Ejemplo

 '(R'

Retorna

'

 
R'(n u u u  En h R'

Funciones PostgresIP V4

m)~m)g){cf8st
fab8tb.rab8i[

Funciones

$ ,8,8 

Retorna

$ ,8 x 

G"

'(2R x 

R

G"

8,  x R 
o 
 
 ,8, x  ,8 8, n u v u$ v uv n
,8)*G"R
,8 x R 
o 
  
 ,8, x  ,8 ,8 n u v u$ v uv n
,8)*G"R
 o  G,.,8 x
'(2,.)*R
'( Rn u v u v u(v n

Notas

Funciones

)*-  x ,. 

Retorna

x 

Descripcion

8,  ,8  q   x   
 x G)*-

Ejemplo

)*-  x  x 

x 

,8 ,8  o   x  R 
 x G)*-

)*
-  x n u v u v u
v n

x R)*-
 x G

R"

,8 x  o x )2- x  R


,8)*G"R
)* - n u v u v uv n

)*
-  x n u v u v u
v n

u(v )*  Z --


eo =v R,8 v ,8

Captulo 6. Conversin de tipos


#?,8 x   "!#   x G x R x ,8  x $ )* x R x G
 )*,8   G x RR 
 Rq x x )* )*kG"G2 x|v R
o]
 x  ,8   ($OG$ $
  x  ,. x  x 
 x  G x G+R  v
 x )* ,8'(q,8 x  $O  x  x ,8 R],8)* x +  R   G)*,8 x )*k 
,8 x 
 x R  v " x )* ,8 x 
 x )* ,8  $ R
& G
 ,8G ?G2  R ?  x ,8 x    v   R Z   x I $ 
x    x )*   x ,8 x 
 x R  V$O
,8   yG] x  x   ,8,. x k ])*,8 x )*,8 x  x ,.  x ] ,. x 
2 x
o  x 2R
G v  O R$2 ,8,8  x ,8 x   x R x  
] G
  
 x     |
)* R x )* x( )*,8 x    R
,8 ,82 x ,8  x O$ |GO)* R  v
#  )* &R  x )* G  Go  O R)*G"$,.R 2$ 
 o,8 x 
 x )* ,. Ro qR  v

Conceptos generales

H!]# x   x  I,8 x x   x ,8 x o O


 v  ,8  R  x o,8  
x   ] $
] R)* x ,8)*e],8)*,8)*2)*  2$ v 
  x  x  )* R  x 2  
o)* ,.'(*)*$o x *"  

)* )* x ,8  x   ~ v ? ] x R q)*   $+G
 O,8 x 
 ZR 
 x Z   x  G x  x O)
 x  Z
$2R x R+)*OIZ
 x 
x )*'(   ,8
GO)* R x  .2  x ,8 x R    x R)*$,. $ 
  x ,8 x G2  )* )*)* x o ,.G ,8 x  R +  x  2 $O  v
H x  $ ? ,8  ,8o  )* x  {G" ,8 x  ,. x ,8,.R x
)* x R " x G G2,8  x  x )*]$ K],. $ v #e)*Oe k 
  x   x ,. x 
  x ,8  x $ x  )*  v (  x 
I]   x
,8 x "!]#GO)* RG,. ,8 x )*| R ,. x ,8  x $ v )*,8 x )*G& 2$ 
2R
Go x  ,8?H x $  GH,8)* x ,8,8 v &OI)*  o,8 x   R(
tgl=> SELECT text Origin AS "Label", point (0,0) AS "Value";
Label |Value
----+--Origin|(0,0)
(1 row)

  x  ,8  x $  ]G"


R  x  v " " x R  x ]|,8 ,8  x R x ,8
GR  x - x  x Z$2  x  q x ,8  )* x R v  x R  +G 
+R,8)*
 ,8O )*$   x R v
ke,. R,8 x R ,8,8  x  x )* x R o x H!]# ,8  G
  x  R x $

 $+ ,. x 
2 x qR + x H x $   
 
O)* RqR x G".  x G ,. x  . o x   )* x ,8)*
,. x O$ .   )* x R v
# )* (+ x ,.  x 
O x  H )*q R + +,. x     . ?  x
,. x I x   x ,.  x  v #$  )*  x ,8  x q  x  x x e)*
)*
 ,8  G2?*,8 $ 
 ,8 x   RG2G,. ,8?  x  GR y $
,.  x +   x  G x G G)* v

 ,8
x  
x

GIR 
+ q,8 x   R
x o G,. $O,= x H!]# w " % x o   $ +  x ,8 x   R x x R  v
#]  x  x  ,8 x   Ry G2GI  
 ,8 x 
 ? $
,. ) x + HGRG 
  w " % v
 x   R+ kw
]G *
R     (  x k ,8 , x kw H# %  x
G,.Gq,.)*y x % x ,8,8 x R x R ,8 ) x $2 ]R  ,8 k,8  2  k"
# % G
 x =R R +,8 x 
OR o x ,8 x I x R x )* v
,8'(q  o o ,8 x 
O x R  x  o  x ,8 x 
 x ,8  x  x ,8   

 x  x    
2 R)*  x ,8  x GGO .  v kk$ 

|'(G  R ,8 x  ZG
  +,8 x GO x $O|  x )*OI+ $Z,8 x 
 x ,8  x 
 R  x R + x $ H!]# ,8)*)*  x R x G
GO v
 x   (   ,8 x  x ,. x 
R o  x ,8  x  ,8 x 

 x o R)* x x  
)* x ,8)*  oO  x   $)* x  )* )*
)* x      x  v H,8 x   ],.     x ,8 x  ],8 )* 
,8O R Go x  x ,8 x ],8 x GO x 
  2G  G x   ( 
k)* x  v 2Rk2 )*  O)*$,. x   ? x   (? Go O$q 
2   $  o,8 x  x o k x  ,8   )* R  x k R   x 
    ? )* )*+,8,8K ,8+ )* x oR x 2 x  v
 x  $ R
 ] x  
,8  ,8  x $)*  I 2R)*o 
,8 x  ,8Rq,8,8  | | x Z"!# v k,8 x ,.],8G
   +  x 
  x RO x  x )O ,8)* ,   x  v  q,8R ,. x  ",8,. x
o 2G4 ( x  R  x  x KR   &G
,8   $O G|)* q 
 x R] o,8 x  $ v  ] K I  x  +q  K   K
 G"  x )
  G   x   
 x  $ &  x 
 ,8 x  
,8 x   x    x eG 2 $O    x  
O,. x x Q% x ,82 ,8 x
)*  x ROq
 q
R  x  x $O oR   x q 2  eGO x )*  q
 x x  v
#  x )* 

R  x  x   q ,8  x ,8 x  e x ,8R ] 
  xe ,8  + q G)*  x +
 $  x $)* 
,. x   
 ,8  x     x R,.$O  xe $,.  )* x  x  x R x $( 2 $O  x 
,8 K,8 x|v

Guidelines
%"    ,8 x GO x oR G2R x  (  x  x  x R  GO
 x ,.  

0 #,. x 
2  x  )* ,. R x k GO x  x G x x ,.] x   $  x  x R
)* ,8   v
0 #&   x |ZH  O $  |,8  &H x  G  x ]  x ,8 x ,8 )*  x
RqO  $  x $ R $ | x x  ?   x R  |I
 q   v
 x R o  x ,8 x R )*,8  2 R  x  
   x &,. x 

R 2 G)*   x +(   +  RH2 k2  ],8 x GO x
 x G,.G2$O  v
0 #qR o  x q    x eG2R x  ,8  x   v  e x  2RG
x R  x q   x  o x( )*,8 x q + ,8  x  x R KRo q  
,8
,8  ,8 O R   x k $ ,8  x  )* ,8 $2$  x  
x ,8  x G   x   x  x ,8$  v
0  G
GO'(+ x ,.] G x $   OI,8 R+2 x ],8 x 2  R x 
x ,8G2 R,. x 
2 x )* ,8 k   v kG2R)* x   x ,8 x 2  RG2Rk  x
,8 x 2R   q q
G2R x  $G 2 x  x ,8o ,. x    G G GO

 x 8,  x 2 )*  G)*k] x 


 x   +k x G  x ,8  x  ,8 x 
 x
x(x G., G2$O |  x ]  ,8 x   R v
 ,8  x  )* x G(  x k,8 x    x O)* )* x 
  x k,. x 
2 x )* ,8 
$O x  x ,8 x  x  x ,8(   k  x  x  x ,8 x  ,. R,. x   
 ]
)* x R,8,8Z x  $    q x 
 x ,8 x x 
G  x x ,8)* x q,. x 
2 x )* ,8   x   x ,8 x  x R 
 v

Operadores
Procedimiento de conversin

karm$ntr&naoa)mIcm8sf
u(vwx ,8,8  x  x  ,8o  x I q,8R x G,8R 
]  )*R v
 v " ( x 
)* x Rk  x GO$ + x  k x - x  x  x  x ,8 )*

q+ )* )* 
q]
)* x  v
vw4x 
R  )* x Hk ,8 x I 2R"$,.R,8 x x  |,8 
 x qq{H)* )*o
|,. x )* R 
 v H H ]'(  $ x  x ,8| x  GOR 

)* x R x G$OH  x  $ & 2qq  v

v ~ 2,8oG)*R&=R  v
 v
,8 x   R  +O$ .,8 x GH)* )* x )* v
v " 2 '( x O$  x       ]  x  ]  
2G O$  x o x ? GR  x    O$  v
, v  R  ZGO$ .Z,8 x  ZR RZ)*$G" ,8 Z |  v $ 
  x '(I G ,8 R+ Ro2    x Ro v "  
G  x
,. x  R$  GR    G  v
v " $ % x  )* x q  x RO +?K x - x  x K,8G
  ?,8 x  R 
 x  ,.)* G x x )* ,.
RO x 

G)*R ,.
 2G4  x  v " '(
x q)*,8  ,8R $2)*|  x R   x ]ZG" 2 $O  x 
x GOZ
 o ,8,8 x ,8O,8R x   G G  ,. q x )+ 2R v
H  *G2R x R x k,8R $ x R x ,8$2  x  *   
,. ) x   x R q  )* x RoK x - x  x v
 v ,8]G(,8 x  Rk,. x  q=R Gq R )*G",8R
=R R x 
K   ,8 ,8R  |,. ) x  
 v " $ 


 )*|  x ,8 x  $ x  G  x x  x  x  x ,8|2
 x q x
 v

Ejemplos
Operador exponente

H k'( x  G" x  x R  x k x (,8R 


R)*]
)* x  v
G")* x $ $2  x q x   x ,8 " x 
 )*&$ )* x R& x  G". x R
,8 x   
tgl=> select 2 ^ 3 AS "Exp";
Exp
-8
(1 row)

R)* x GO"( x   ('(,8 x ,8 x 


 x R )*GO 
 ,8 x   R+
 
  x Rq
tgl=> select float8(2) ^ float8(3) AS "Exp";
Exp
-8
(1 row)


tgl=> select 2.0 ^ 3.0 AS "Exp";
Exp
-8
(1 row)
Nota: Esta ultima forma es la que tiene menos sobrecarga, ya que no se llama a funciones para hacer un conversin implcita de tipo. Esto no es una ventaja para pequeas
consultas, pero puede tener un gran impacto en el rendimiento de consultas que abarquen muchas tablas.

Concatenacin de cadenas

x ]2 x R o )*    R x RO$


=R$,8 x  o$  x )*{ ,.,.)*e,8 x
 ,8)* OIG"R x   v #,8  x   x )*{ ,.$,. x  * x G2,8 ,82 x
I 2R &,8 x  +GO |,8 x  G x  v
x  )* x R x ,8 ,.$
tgl=> SELECT text abc || def AS "Text and Unknown";
Text and Unknown
----------abcdef
(1 row)

 x  R,8GH x   ()* o H 2R % x  ?  x ,8 H ?R
 x )
|
)* x  v H " R )* " x GO  G
? x R
],.)*   v

 x ,8 x ,8 x ,8 x R + x G2G,8 ,8G


tgl=> SELECT abc || def AS "Unspecified";
Unspecified
------abcdef
(1 row)

 x ,8'( x x  x  R x ,. 


  R.  x '( x ,8 ,.$
R  x  ,8 x    v G)* x GOG
 x $  & ,. x R   

,8 x  G G  + x  
qR + 
)* x |2 x    x )*{ ,8 v  

HKR  GK Zo $+,8  x |  x )*{ ,.GG"R$oq,. x    v
Nota: Si un usuario define un nuevo tipo y define un operador || para trabajar con el,
entonces esta consulta tal como esta escrita no tendr xito. El analizador tendra ahora
tipos candidatos de dos categoras, y no podra decidir cual de ellos usar.

Factorial

OI)* ]  2Ro x x GG2 x G  R  v %"OG  ,8  x  )* x G$H  ,8R 
+  x  o+ x R v ,8R o +GO .Z +ZR  x  )* x R
x ] x   ,8R  "
R)* x  x R,8)*k  v " G,. o x  
)* x R x )*{GO ,8 x  x 2RGq x R x R],8 x GOR G2R$ )* x Rk x  x R
q oG$ $,. x  ,8R  v
tgl=> select (4.3 !);
?column?
----24
(1 row)
Nota: Por supuesto, esto conduce a un resultado matemticamente sospechoso, debido
a que en principio el factorial de un nmero no entero no est definido. De cualquier
modo, el papel de una base de datos no es ensear matemticas, sino ms bien ser
una herramienta para manipular datos. Si un usuario decide obtener en factorial de un
nmero real, Postgres intentar hacerlo.

Funciones
zmcm8s
fnaocf8sf
u(v~  2,8o x  x R qG",8Rq x ,8R 
]  2R)*, v
v~  2,8o o)*R| x   v

 v ,8 x  2R R   x ,8  x &,8 x )* 2) x )*,8 x ")* )*
x %)* qH )* x  v
v "  '( x  x ,. x  x   $   R Z   x  +   x
2G,8 x GOR 2$  ,. x Z H +R  x ]   x ,8 x 
  v
, v  k  $ x ,8  x ,8 x  I 2R)*G" ,8 k ]  v
 ]R 2 x '(I  ,. R R2    x R] v " ( 

  x ,8 x  R oG2Rq H   G,8 x GOR  v
v " ",8  
 q  +$ )* x R&  x  2 x  ] ,8 x ,8 ,8 
,8 Z
)* x Z + x  ,8 x   x ,.$OZ,8)*  x x 
)* ,.$RO x 
G)*G ,   x  v H H'($ x )*$,.  ,8R G
)*  x    x +G  O H  ,8o x |  

  G,.,8 x ,8,8 x k  2G+   ,8 2 x R x )* 2R v "
2 ]'( x ,8R  x  x ,8&  x GK ]   ,8 ) x  
 x  q
q x RGO q  ,8 x ,8  v
 v ,8?,8 x  $*,8 x ?=R R R )*G",8RZ,. ZI 2RG
K ]  q,8 ,8G
 q ,8 ) x  G2  x R  v H H'($
)*  x ,8 x  R2 x '($ x x  x  x R x ,8+q  ,8 x  v

Ejemplos
Funcin factorial

H '( x  x ,8 x ,8O $&  x  x |,8R , v 


  G2RZ $
 
  x R+,8 x   $,8 x 
 x  )*R ,.$)* x 
)* x ] x  o
 x 
tgl=> select int4fac(int2 4);
int4fac
----24
(1 row)

G '(,8'( x  )* ]&GH x   ?


tgl=> select int4fac(int4(int2 4));
int4fac
----24
(1 row)

Funcin substring

k  x ,8  x  substr ,8 G  x , v " x  )*  x   x  
H )* x R8$ R 
x  (v
H   )* ,8 x x ,. x  x R o,.$  x  oR 2 x  ,8 ,8RR R R 
 ,8R)* x Rq,8 x  9% x ,8 x ,. x ,. x  Rq R Z
tgl=> select substr(1234, 3);
substr
---34
(1 row)

H  q,8  x & G,.  (o,8)*]R 


,8'(G,8)*  Z x ,.$2]  
 x 
 x oR $ x  x ,.GG x   Z x  x ,8 x 
  o$R R=
tgl=> select substr(varchar 1234, 3);
substr
---34
(1 row)

 
qGRO x  O) H x  $ ?(
tgl=> select substr(text(varchar 1234), 3);
substr
---34
(1 row)

Nota: Hay algunas estrategias en el analizador para optimizar la relacin entre los tipos
char, varchar y text. En este caso, la funcin substr es llamada directamente con una
cadena varchar en vez de hacer una llamada para realizar una conversin explcita.

R6j?9Bi?j^??)&)Xj^^?Bh))g)BR??))j-?BBh)9XB??QM+
tgl=> select substr(1234, 3);
substr
---34
(1 row)

"4?&BM6Mh4ihX&
tgl=> select substr(text(1234), 3);
substr
---34
(1 row)

Resultados de consultas
)J)XL)c)X\)
B  X^6\6M+)XlX^4"4?h)
B g BX6)?l?BBh9XB?H?9+"6?jd?4ih4&B)j?vg"6?R
B J "6?h)L?J#l?jBhhhj \&J?XB)$d)"iBR$4i?Rw)
ij&B?jB?hKBjBXM?BBhBXjB)rBBi?j&v6\6[?Q?B?
ijg?&lBj&"$+?[$?j)"&4Bj6J?&"[+B&"$
?vj6BQ^Bh"lijL??B?h

Ejemplos
Almacenamiento de varchar

)X)ij?&B8X?))J8Xj&&c)"XB)\)?6??BhijB6?^)6
"6?)BQh?BMjh)&Bv)X
tgl=> CREATE TABLE vv (v varchar(4));
CREATE
tgl=> INSERT INTO vv SELECT abc || def;
INSERT 392905 1
tgl=> select * from vv;
v
--abcd
(1 row)

Consultas UNION

[ijB6"Xi?j
 
  )?L? 4iBh[#iRB^2 &) j??2[B)
?j?6?Bhr^L"4?h)


)J)XL  
B  &J46?j
h?jr6L?4B?X)hj?r4?h)B
B
  B?hX)r"6?h)M?rX?)6?
  )r6\h)?)4h??r?&
i?R6?  Q?X?&B9M"6?h)J
Ejemplos
Tipos sin especificar
tgl=> SELECT text a AS "Text" UNION SELECT b;
Text
--a
b
(2 rows)

UNION simple
tgl=> SELECT 1.2 AS Float8 UNION SELECT 1;
Float8
---1
1.2
(2 rows)

UNION transpuesto

jh?j4 
  6^j)Rh6h)6$M?jrh?$?M?&X?)6M8

!
"

tgl=> SELECT 1 AS "All integers"


tgl-> UNION SELECT 2.2::float4
tgl-> UNION SELECT 3.3;
All integers
-------1
2
3
(3 rows)

lBl6)hl)?hB)?lB)BR??))jr$#?l6r6X
&%w&hj'%h?dB")(
j"d46#4&)?# i?J?#Q?v XB?XQ"X?l6)Q J)B)?))j +*
XR??r&jg26v&w% &hj$
% ?^X)B^B)X&j Bv6?4iX?j&)"2B
R?,
tgl=> CREATE TABLE ff (f float);
CREATE
tgl=> INSERT INTO ff
tgl-> SELECT 1
tgl-> UNION SELECT 2.2::float4
tgl-> UNION SELECT 3.3;
INSERT 0 3
tgl=> SELECT f AS "Floating point" from ff;
Floating point
----------1
2.20000004768372
3.3
(3 rows)

-

Captulo 7. Indices and Keys

B44M)"[?&R??#4

#4BB)BXv)h)6v4j&RBi . B6Bj?v4)(
BdR?Xj?&B$i?)6$Rh?h60/^B?X)" 64 )r)??iR?jB$?#"J.(
?l4?4
B)"j?Rl6
/^??"6?K??1 /^$&)BX6?BXv)hl)B
?B6?jLh?&r)" ?BX")6^?dhB"6BXjB?B?X

 /^l j&rjB?B?i4r&R4B4
2d)X2)$5)JB76?Qj9Bd?B4&)"8JX?4 )lX?& B)&98
Xj?& &) )?6&B)Q))6jX?)4j)h i?R ;: 4)hjX?)62?26 h
6X?8hB[j)h$896& j[)?X?)?B4 3 j+)&?4["?B4
jC (Q?Bh4
/^j? 6^hB
X?)69 8JhB?[j)jMX?)6[?Bi?4
Xj&)?j cih?B9 j j ( hQ?Bint4_ops
44 <  Bv)?-4Rj X?)6?BvR) (
"j?hM4RjHX?)6 jKB)c4?#
>X@ ?XX)$ 5))#?B4Q? B jhB["6?j-l6 (iB4BX?j
2=3 j

)J??#8jB9&j")h?hr26?B?2X?)6 +  B6BX?jB)c?B?i4$X)d
68jR?#)6)Xi46
8)2)6dj)j
BR) /Lj?Bj&)??^"?"
6j&M)B6&)h?^hQ)?QB4 hQhBM)6)h
243

6h"["jc?2"4Jh4Q)B B)6C)XX6[&hB[ j6XBR?B?X  B


"H)XX6&4Bj?-)2?&?4&Bh)?jlB  B&)&(c)MB?&(XBX"BX9h4
 B "4 )XX6&hBd?&?4&Bhr6RB)"^h46?BA2h&)&BUrRR?6??
)??B C  BB)6#)XX6
&4Bj ?$R#?&?&4B)h?j  ?D /L?& BU ??B)BRB?B
EQ&Bh?ChBQ)??B&[6C6?4? &?B?X)hQB)H)?-jhB6Q)Xi4&hB
)"??^B)&?MRB ^Bj-BRc9hL9j?&?)4?j?X)??^)$? c[X)6
/L?hB
K+)&?R6h)?rB)6L)XX6&4Bj6
/^??-XjB?M6?B&"v?B?i49? 6X)G
/^BB
 B 6h"2h?&?)F
)8?B+dRh?h??Bcj?#?dMij&)?6^6?B8jBMH JI
& IK; K) LK& L
)hd? j6" @  Bd?h4iBX
j &i?R6QJ ?B?XQ B
D /L4 hB ?B)
X)?48box
Xj"?BR8M /^Bh )?O
Nj)h?B
j?B
+Xh?Bl" bigbox_ops
j?B &?h???X)h?B-)??jB)B 6)Xh?j c4?) (
F
Nj)?BM (j?BJXj"?B)4
chBM4?d
/^B?X^j"XhB???M?)  P P;PP
B?H6Rrj?)"hXj^6B?8
j)jX?)6H6) (
$  B
poly_ops
jhr"iM?B?X
) bigbox_ops
polygon
/^??)XjB?J6?B9Rlh4?B
/^BBB)[?B+
 B 6h"9jh?&?)&
)h???B?#?^Xj&)?jL6?BQBjH II
; QRI
. QRL
& LL
; S; T)K Q Q
/^??XjB6?K?BvMBR8?BV
/^B4B-)8?B+
 B jh4vj?&?RU
)h???B?#?^Xj&)?jL6?BQB j)h
=
Z
 "Bh?iJB?B 
WX RiX62&4Bj 6jh2&?Y (Xj??B+ [h
64&)vMJX?4
l6\
[ ]_^ `7ab[ c0d hQ"&jc )^?B
j)hvX?)6?6r jvXB6h"ih?B ?B?X8j ?B R)-)B
 B
int24_ops
j?B
X&)?6c8)R?B$?B&)h? 4C)??iR?jB c ?&??)?i
6JB?B?X4jdB9)hMhB)B?vMX&)"4L))?B6B?B )?^int42_ops
?
/^?6?X??c"B)?g9 e)BR& 
 B??1
SELECT am.amname AS acc_name,
opc.opcname AS ops_name,
opr.oprname AS ops_comp
FROM pg_am am, pg_amop amop,
pg_opclass opc, pg_operator opr

f

WHERE amop.amopid = am.oid AND


amop.amopclaid = opc.oid AND
amop.amopopr = opr.oid
ORDER BY acc_name, ops_name, ops_comp

Keys
Author: Written by Herouth Maoz 1 This originally appeared on the Users Mailing List on
1998-03-02 in response to the question: "What is the difference between PRIMARY KEY
and UNIQUE constraints?".

Subject: Re: [QUESTIONS] PRIMARY KEY | UNIQUE


Whats the difference between:
PRIMARY KEY(fields,...) and
UNIQUE (fields,...)
- Is this an alias?
- If PRIMARY KEY is already unique, then why
is there another kind of key named UNIQUE?

J?&)j
6#? hBl?6-6hd?4B?Lv6X?1/ 3 j
+)&? jX?) <(
X?hQB&?Bh? ?B8Jj

k  Xj&?B)?jLc?B)BhB?vhQ/^?^?Bh??BQBM"1/
: 6?&?

D B6?&?#R&?B?dXB6)?B 3 j
R&?

HB)lXj??X?jBj-??& 6 <  Ri#i1(
??X?j#?r?Bh?4 82B?9B&hJ /^B?i#?
B9?&)!
6 l  B?
68?$6
?^4?h?c
/L4c4hR&)J??i)h?jL"4?"B))X^X??4ih?
/^??)?6QB)9B?B)&
m 1
E BM
n 9hB)j$B&Rv?B
/^BV
/^RBHh2&? 9 Xj??X?jo
/^??r)?h2?Bh?
?
D B&XB)"J
6BM /MR?^BRc$ /^[X??4ih?jBBR&
%  ? X?BX< %wiB$B
B)4 ) ) ?BMjBM#B)BdBBMh)  pqq4 ?rBj
jhB6$6?XBvXj??X?j ?9BR& EQB"4 j"l& 6v6"@ /^?B?B hB
)h)6hB)B)&M)"9B? < m 1 /^hjB#jhB$h)?l?&hBv)hR[4?hM
B ij??Xh?Br)?MvBMXj??X?jj
^)& H  BR& /^?#?B4hi?4B
(
r "ih)6?hM?B8B?4hBMX??4ih?j#B)&MjBjRih)??vBBMX1
??X?jX
s 3 j-R&??j&jlX?8[XB)B$hB BR& jB$X??Xh?Q "j
%  ? X?BX< %$
% ??jM %w?_
/^??H6h??H8hB^6)&X??4ih?jBjB?t
/^?hCL?h i"B
B)& H : ?B8RrhBMB)&?B?+hB) BUu
v

U
:

?&Ro64w
2
x

-y

r6#jH?4B??B8B1/

)B#"?4?BQ?


r?&j66h?jB)"BJhQ)
Bj?#BJ)??1/z  )
x
x

lB?M4?H
: "6d))8)?hB)?RiX6vBM"1/
6 cB?
x : ")h4?)6Q?jB8)B4)"F
!




"





x
x

w
/^B8BBj& (B?B{
6rR B#+??X???d6RB)" k  6BRnE??
j#&6B46RB&hB)J?B?X
)"M?&?&Bh)h?&(4BB k  4
Bj<(
BMBM?&?4&Bh)?jB)&"?QBM"?4?jB
4 /^4L)LhBM)h)6 9 j6"
j)??1 / Bj& (B?M?B?X6Rc?B?X46^lB"X k  6)"
)Y/^)BY(

 Bj#&RQ4QR? RBQXj&?c)?jdjc?X?&B6)6?hhBM)ihB)
j j& B-B)[)#?B&hB6[Xj?&B <  B2?B+ )"9&"?L)?&?4&Bh (
?jB)J)?|
/^B?i Ri W_*[
r h ?&j"h#X)6[Xj&&B?#4?
dvBl&"vhX?Bh? 4 j& W_*[
r &R?cvjC)??jB)&)6"66X
)
64?BCR
66h" ? &)? &&j M  B}
/^??B)d4X?)ij&&)B-j
+)&?
:

CREATE MEMSTORE ON ~ table 

COLUMNS ~ cols 

B??rBjB)^4?6?BQX&&)B\6J)8+)&?4

)XM
/^B4X")hlQ?&)R
6#vB?Qij&?B)h?H?6BM/^B4
?hB k  6X?X)h?j4 ?-6)LhB))?BQ? X")hijBj
hB)B["w?4cRB
)hMhB{
6?j?B8hQ&j"MhX?BB)^64B?)j6X)X
s
/^)B8dXj&?B)?jjr4?
/^B?i?lBj
B?^)[L6XjB)
jB?rj
64i)#"??&
BUJB)MQ4i?Q)BB?B
()h6J6h)c"??BQB)Bij&?B (
?jX
s m 1 /^h)?Jj
/^)Bcv& 6BM"h?4c4jhX?Bj) B?B)Mv4jchB
&)Bj WX*[ r "jc?4H?
j
(JM?B)^?B+)&8?&)?B) r}r  W_
X&&)B
)&?Bh???B WX*[
/^?hBjK-j
6B1 /L\
r /^B?X i"4)4?B?i4{
)6LjdhBM)XB)cjdB)M4BB?B&RB?)6LjLJX?
X&?B)h?j
, 6
c?4)B" 44?4Bi4

Partial Indices
Author: This is from a reply to a question on the e-mail list by Paul M. Aoki 2 on 1998-0811.

)XX)$5 ?8) ?B??M[66 h)?<8KhB&66?8B 


"?iR 1 jh46jh )?R?B?X/^?h )?h)CJi?X)h
??


r B jHRJ PP J)?Rg?B?i4r6?B6?B?<(X?)6M"?Xh
 Bl&)?&&j?)h?j$)h?)B?B?XM?hB? 4?K)?KhBl?Mj)9 6#hB)-i)
"h)?^2)?B4Q R?B?BLlX4h)?)B /^Bd??)?cQrhB
/^Bj?
R?8)B 6hhB^)66X?)h 6)X@ h?&^X6h9 n8  B")"8jc2"4)6Blj1 84
X$ C XD 9 f-.f Hh)??
B
j)   BLB)?
 B^&)XB?B4??)h^RB  Rh?)H?B?Xl?6&
)$R?Bv6?X?j /^B?X&?B?X$

-??
ni)B Ljh?&?))?j /^B?X
?B?X2

6< nX 8J BhB^Rh9hB)?Bcj?8X??B|
/^B)"J?X)h6&)hiB
:

/^$6?)4?

6&#6X
/^) 3 2Bj6
/^B)"L?B )R6dhBiKhB
"?4&
)")6?X)??8)B)?j h8B9X"6B?B^&)4?)??R#?</ "j?&6
)??u
/^? ?hi4B
Xj
))&hvRB &?)  B4^)"? hBd4BRiR4
B)""?&jB$6)BRj"?B) k  hJ9 8B4@ BU
6 (B)""?w
/^?
?)C 6@(j2+hB6?^h4)X)6hB6?4ih??46?&)h?LhXBB?j?r6X"
; f;f ))B jH&j"M?B&)h?
 BC 6X$ C XD l f-.f  ^l"iM

Notas

-

B B 4j&Sj&)? jB ) ?
B ) 16YS $ '6?4 &* 

Captulo 8. Matrices
Nota: Este debe convertirse en una captulo sobre el comportamiento de los matrices.
Voluntarios? - thomas 1998-01-12

6h"r&?99? )h?hj$Bl?B6h)BX?[6R#B?j$X&^B[&)h?
&???&4B6?)Rr?B?8h 2cR?Rg?  4li"46$&)h?i4KrX)??JY(
[?Bi?Bv?jB?jJK6)? ' )M??6hRH6^6RJ?&4lX"&j
BX?)6XL&)h?X ?j
)6
CREATE TABLE SAL_EMP (
name
text,
pay_by_quarter int4[],
schedule
text[][]);

ijB6? )? X")$BMX?)6


??)&) :  e &r XjBMX)4B$h?v 5)
B)&+Bl&)h?lB??&4B?jB)B9h?^ [)MeMe))4+24"6Bhl4
6)?)?2?&6))4&?)2lB &)? ?&B6?cB))$h?l  5)j6XB?
XR"J4iBhvB)?^4&)B)c4&?) l : Bj[B)X&j )?BO
ab @c])8
# \6viRB68R"i)?&4Bj28B8&)?)BX)&?9cR?"B"
??) ?j86))&jXj X&R 
64 XjBX
?4B6\K6hB 4&
?"iBM ?6?B)?rM6M???)M)M?B?X?)??))H6"X)


INSERT INTO SAL_EMP


VALUES (Bill,
{10000, 10000, 10000, 10000},
{{"meeting", "lunch"}, {}});
INSERT INTO SAL_EMP
VALUES (Carol,
{20000, 25000, 25000, 25000},
{{"talk", "consult"}, {"meeting"}});

r4ih 6"???Rv?QXcc4Bi?j&RB&4Ri?j)6)[&B1Q)[?)
&)h?X66h 6-B#&)h?L ?&4BjX?B)#Xj )  CB)??)#Xj
)4w
 : Bj)Bj&j[B)XM)?B)[XB6?Rv6j : e 0r} ?&"B&jl(
)&j2X& )XX4L?&4B BL?)2&R?X2^?L   68XB6?h
"6d?j[Bj&4[^?jl&?R2Xl)j[iR&?R"C4CH6B Y (
&6"M 
SELECT name
FROM SAL_EMP
WHERE SAL_EMP.pay_by_quarter[1] ~\
SAL_EMP.pay_by_quarter[2];

+----+
|name |
+----+
|Carol |
+----+

6??4BMXjB?h9"XMjRljh"iiH?&6"jj
?jr4&?)j

-

SELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP;

+----------+
|pay_by_quarter |
+----------+
|10000
|
+----------+
|25000
|
+----------+

R&Y 4j&jMRiX)?)?&4Bll?6?Bh)"X?jB[?l&)?ld6M(
&)h?X  6h&XjB6?&"X#?&l4?&BhCd?)Bd ??)#?
?&"jr)#?)?96&RB


SELECT SAL_EMP.schedule[1:2][1:1]
FROM SAL_EMP
WHERE SAL_EMP.name = Bill;
+-------------+
|schedule
|
+-------------+
|{{"meeting"},{""}} |
+-------------+

Captulo 9. Herencia
XBh?Bl?R$iR?)?4$9? 4h)j$2j
 "i&jMj$X?)6 C lX?)6
R&Y48X?) ^)h)?&capitals
BhR?X?)6
B44H

capitals

CREATE TABLE cities


name
population
altitude
);

(
text,
float,
int

cities

- (in ft)

CREATE TABLE capitals (


state
char(2)
) INHERITS (cities);

"")  "$hj2?j[)?j2B)&4
 6X)jBB^?B6h)BX?L
j?)?jB+)??hBM?9X?)6 capitals9 j?J8j )?QB)&Mr+h+L
)hlBR?[ jh4) X)cities
BR :l

 ?jB?h#cR?4? H h?l)h?h
j?)?j
N)hc ?J)h6R&Y BR?cR& &"j9QBhR
Njh)B
[?v"X?6?j . : 4&)
h?Bl )h?hLh)j6)hv&6Q
6R)K^hBX ;  capitals
j6"2B^i?RB4")B?B^ )?)
h)HX?)66lBXjB?h$B)X4 4BX? )BhlhR?)H?B6)BX?)
B
X?)6X&v9j)?)?Bh)BX?)6r4XB?B4
Nota: En realidad, la jerarqua de la herencia es un grfico dirigido y acclico.

 h4&??26??Bh9ijB6?[BXBh2h)r?)
X?)r6?h))
2B2)?hY(
d\ PP ?4&)
SELECT name, altitude
FROM cities
WHERE altitude > 500;
+-------+-------+
|name
| altitude |
+-------+-------+
|Las Vegas | 2174
|
+-------+-------+
|Mariposa | 1953
|
+-------+-------+


h"d?Rg)vBXjB)
?Bj&4lj)?)X?)i6?BX?B#?)X(
?R?26RB^46)?X)??)R)2^C)?h?BX?&^? PP ?4B?
XB6?96$ #?, 

SELECT c.name, c.altitude


FROM cities* c
WHERE c.altitude > 500;

lM??Q6??Bh@
+-------+-------+
|name
| altitude |
+-------+-------+
|Las Vegas | 2174
|
+-------+-------+

-)

|Mariposa | 1953
+-------+-------+
|Madison
| 845
+-------+-------+

|
|

)#g4&$l6)$
?B?il[?lXB6?l24??R)696"
 j)?)2X?)626cities
4 jM6\&Q??^?2\)")#8B44BX? <r cities
XB)
M?)r"B4
[c&
)B)??))v \  u ^ B&?4d?
???)Ri?j^\
)R)9 #gXj&j"6RXj&484 1,X

Captulo 10. Multi-Version Concurrency Control (Control de


la Concurrencia Multi Versin)
?hY (w6?  jBX"BX  Bh" r  MB8 XB?X))B))B8)Q&\)
?)$"6h)X?B4 2Bl)92)h #BhBL&?h?6)? -)? r Y6B4,
B"j"X?jB)v?9??&Bh)X?^) jh4
r

Introduccin

?"iBi?^?8&)j$ #?8h"26?6h&)2)698Rj98R ?j


)L4XjB"jLXjBi"BX?) j6"l&)B?4Bd?#XB6?64Bi?L?l)hjQ
&?Q&?h?c46?j 9  6Q6?B?KXM&?4B) ijB6?9B9)6 )h?RX)
)B6)XX?L9B[?&)d?$Rj
B2)"XdR\
X))iXJX&86c
?4&&))6c6? 4BMX4B^-6)#)X)?2)j28B) jMh
 6L?lv?Qh)c)XX?j&c4v)h?BXjB?6hB[&6rX)6)jMJ
?M)Xh)??Ri?j8$h)B6)XX?XjBX"Bh 48?M&?6&?M$)h6"jjX?1 (
B)BlXC [$XC ?H?XXg)MX)M66?L?9)6)h
(
 2?ci?R?"4Bi?94B"&??6?#^c&j?82?j^r24#?j ?M
j r F ?)vdBXc?h& ?4ihR$d)hQBCBh)  X& N?X
Xd?? ?c)$9?[6X?h29)h$L96h2&j^?l?4XlBBX
?49?6X?hM?4X?BBX9?49??X
:

Aislamiento transaccional

6)c) : 
9
k  BriR"B??4Kr)?6?)&?Bh9hRBRiX?jB)l & (
X?vr"-BXB
4Q6hB?jHvX4B Bh"
h)B6)Xi?jBHXjBi"Bh

 6jrB4iBjB6)Bj
6X


?X)X%w6i?Rl%
lB)B6)XX?8?$)h6X?jJ-BhRBRiX?jBQ44RJ)4BQX6)
?X)BQ"J??4
[B^h)B6)Xi?j ?Q8?)j9"?)&4BQB)M#?<#?&BXB
MB)^6?Q&j?iRjBhRBRiX?jLX6)
?X{%w)Bh)6&%
lBQhRBRiX?j&c4?c[v\Xh)$BvijB6?)4cj??BLXj)hh#[(
?)lL6)?6)XCBdijB?X?j 8M 4#BXB#^hRv?)v
R?6)XL?XB?i?jLB)^?Q?B6)RJHhM)B6)Xi?j^X6)
jX)h"^B?c4?2R??R&?BLdX"6jB?Bh )XX?B4M626i?#&)
)\


\^)
)X\&)\Qi)
Lectura "sucia"

Lectura no
repetible

Lectura
"fantasma"

-)

Lectura "sucia"

XhBX6)
 Xhi6)
 Xh"h??
???)R?


j ??
^v6??
8Qj??
8Qj6??

Lectura no
repetible

j 6??
j??
8j??
^j??

Lectura
"fantasma"

j 6??
j??
j6??
8Qj6??

6h"j "4i ?XX6)B??R??R&?BQ4?R??)?

Nivel de lectura cursada

 ?{?X)4 BB?B9)?6?)&?4BLjX84

6h"  )B^Bvh)& (
6)Xi?jC6^h4ihL4C68B???^XB6?dj?c)h[XR[RB[8?
XB6?X&BR) lBBXM
B)hw
%w6X?jl %JB?X)&?jQhRBRiX?jBX& (
X"iBX6)jRB?Mh4XX?jd?XB6?h
BBv?4c4?QJ
BijB6?&?4B)M[\XQB4i?R4X? ) u
 ^   gj
 ) \}@   u 4hv6?B^)Xh)??RljBvh)B6)iX?j
XBX4B9B^i6))+BhBX?[6Bv)B6)XX?d[?BhBhl)XhR??)6
?M6)wM?hMh)B6)XX?Q$X6 l)" '  8X)6[  )"44?Mh)B6)C (
X?L69MJjXK2X)&?)K?[? 9  LX)6M6X66c?9?
j)@ #?l+?hj
\&?jB#B6?#j)lj$?QjQh)BRiX?jB?QXB6?h
6$"h4ih)
6h? [
X&Jj)$$? B$? 6)?6)Xr?XjB?X?
M [?lXjB?h i ?lB4c2?j?[?l6)h?)XM?[XB?X?jBj6
)X)??4)v))v&)"XJ)M4H)Xh)??))B)

 4BQ4&i4BQv?M"6?)BMl?v\Xi?j 
0 \ $ 
X ij&B
XB6?RBBQM)8R 46)j)B6)XX?B4XjBX"Bh

Nivel de aislamiento serializable

8XUg XC ?X"j"6?jBd4KB?K&R2)?hQR??)?B hRB)XX?jB) ; )B


BLhRBRiX?jC6hL KB?K4?)??R)?B?LXc?hd6?8?jl)h2X6)
)Bh9Q?8)B6)XX?ij&?BX BBXLQBK)hj26X?j2BK?j[X)&?
)B6)XX?B4vXjBi"BhlX6)jQ)BhL?#hXX?j L?#)B6)XX? j[?
RBj4h9B?c4c&?[?2\Xi?j#9hRB)XX?jB
4#6?+ij&^6c?)$h)B6)iX?1 (
B 44^\X))^4)j)R^6?)8?)HXBX"B4&Bh
-Bd?d4c4?^j9BLijB6?LRB?d\XX?j8BLX?)X?j 
 
u  ^
)  +
}M O) u B6h[6?B8)X)??)42jBlh)& (
6)Xi?j ijBX"4BlBdX6))g?4Bh)B6)iX?j&vh)hQ[)X)??)R
4h
?Q6)QQv?jh)B6)XX? 6vX6l#)" ;  X)6#lQ)"i?)& (
6)Xi?jQ6v"ji4$iR&?R ?8? ;  4-X)6vB8h)B6)XX?
XBX4B6 i6)B)B6)XX?^6?)??))?$6))MXj^j&B66\


ERROR:

Cant serialize access due to concurrent update

jB&h)B6)XX?j 6?)??))?dBJd&j?i)[?R8X)&?)48[h)
)B6)XX?B44J) rM?hRBRiX?jL64?)??R)? B)9&4)
Nota: Tenga en cuenta que los resultados de la ejecucin de SELECT o INSERT (con
una consulta) no se vern afectados por transacciones concurrentes.

--

Bloqueos y tablas

6h"M"Xl)?j&jl?j&RlijB"j?)$)Xi4dXBX4BvQ?j
)h &h)?) C: ?BM[4hjM&jjM[?j#?j)?" 6h")h&(
?X)&4Bv)BhMv?\XX?vBX?)4i?jBc&?Bh)vj"j96"j(
X?B)
J)M46)jrj?)r)??X)X?B4 9  j$?j
&jj$M?8+i4
) : iX6 B"  C 6cR??8^)B6)XX?86)B?4B^B)6?M)X?j
?h)B6)iX?j
: 4&$M?4Xh)&Y L6962X&Rh?X?LdX?6?9)2XjB"j?))X4l (
6H
?Xh& 6X?
?)K)B)K
R?RKvh\Xj&)? $  hr
h
6jB8&)"XBM?B&4?)h)&Bh6) $M8?v #[Q)XhR??)

Bloqueos a nivel de tabla

XX6 B4"  jC6


l&jQ?Q)??l)h&R?X)&Bh 6j )?RM6)Q?4B
ijB6?)) J 6"v??d6hv?4Q6) [Ld^B)d\XR
BX?))6?j
N?Xj
Xj : Xi46  +X??  C 6
 j&
:

/
W 1

BR"  j+6
: ??8_ 
\}M O  u  \, _  )9X?))X?jB

ROW SHARE MODE


N?Xj
XjL?j
&jj  +X?6?c  C6 : XX6  X?6?  j+6
 B^Xj&

IN

/ 
W 1

X?6?  j+6
 vR?"   u ^  
X  \,X  )M4i?R4X?B4

IN ROW EXCLUSIVE MODE


)" W M /  + X??  C6  X ?6?c  C6Q : C(
 Bji9Xjd?j
&jj B)"  jC 6 B
i4  +X??  jC 6

c)"  j C6
)Q4i?R4X?B4
 #)?4" \u"$ ^ ) \, _ 
IN SHARE

MODE
N?X X ?^&jj W M/  +X??  C 6 B)" W M/  +X??  C6
 h  Xj&
C6
 X?6?  j+ 6v : Xi4  +X??  j
c)" W M /  +X??  C6
 Qh&  \, _ R4X?)w)X?B4

IN SHARE ROW EXCLUSIVE MODE

-f

h QXj&N?XlXQ?&j W M/  +X??  C6 B)"  jC6 BR W 1/  X?)(


?  jC6  X?6?c  C6Q : iX6  +i?6?  C6


+i?6?  j+6
 Qh&  \, _ R4X?)w)X?B4

IN EXCLUSIVE MODE
C6 W M/  +X??  jC6 B)"  jC6
 B
lX&N?ih2Xv?-&j W M/ B)"  j
BR W 1 /  +i?6?  jC 6  +X??  jC6 : X X6  X?6?c  C6


XX6  ?6?  jC6


 Qh&) 1,X \ , _  \   \@X
/ B)"  jC 6 W M/  +X??  jC6 B)"   C6 B)" W M/  +X ??<(
 Bji9Xj W M
 C 6  +i?6?  j+ 6Q : Xi4  +6?6?c  C6
:

Nota: Slo AccessExclusiveLock bloquea la declaracin SELECT (sin FOR UPDATE).

Bloqueos a nivel de fila


 6$?l
?46 "ji4X)B[X)&j?BhB$BM?68Rih)??).(
jML) d&)"Xj)v6
)X)??Rj6 j6"B#"h?B2&&&j?
B?BB[?B&)X?j#6"?)$&j?iR)
^4h&8B8?B9Y #?&$J)94
&"lM?R?jR)r6?^?BX"&BhQM?j
&

d&Rj+hB2Li4B9V

\"@   u &j?iR9?)r?R$6?C (
X?B))&R"i4Bj?)6+R&jvM6M6i??)8^j?6X
 j
?
[B?M?2B8)X92?j
)hrijB6?) +  h
j#6)j
R
?4)K6i?h)

l l
U
B?X)&c

Bloqueo e ndices

B jh4$"J"X?B24?j^)9?Xh&6X?h92Rj
dR?R
BQjX")9#)X)M4jQ )Xi4v) #?B?iM?&J?&Bh)Q48 6h"
#B?XjL&)B\)jr ?6??Bh&)B&
 jr?"iB4rh?{
:

B?XXA2 

W (  4
^?r?4 
#B?X&rh?  j&)?X?jXg4X?6?c?)R)XX6
?X&6i?h  B ?jL?4Bl?)6) 2[?lX?))6?j&6[B)
\X)

fy


B?XB)6

QLK?j ^B?c4K)?BLJ)8)XX6&?Xh& 6X?h  -?


?B ?)H6) ?)?BB)9?Q"ji4RJ
 ?jjrB?j$)?B"ji4&\HXBX4BX??jr?jjr
B?c4\
#?B?XJ"v4^"jX)U
%wBj
&h9 %

"i
rRv?jj
B?c4+r)?B$X)h?X?X+X??\)Ql?K)Xi4j
M?X&6X?h l $?jj 69??4cRd2X)?B&?))&4B4)4

Mgh?
#?B?X64?B6h)vQ6iR
#B?X h""j"X?jB ? &)8R?&XBX"BX? 6? "X)
%w6)
 !
&hjl %

Chequeos de consistencia de datos en el nivel de aplicacin

cd^?)[?X)[ j6"[B?jR?l)h6J? hB i4Bd4B?c4


d)?6?)&?BhC#?hRBRiX?jBH?jRj?<#jjlB&)B6)XX?  6
6"6X?jrjj l  LhR
)?RwR+6B2?2
4?9j_

\ 6hB
6?B?X969?9")?&4B4?6h9^&&c4dM6j?c?vLh?&
6) MQQ?8X?)X?j &?h)B6)XX?j X&4B))BB \&?jB-Q?
?M6 $"j?  j)jHl)X)??RX?jB-?)B6)Xi?jXjBi"Bh )Bh
{
4h6M??9X)lQ6M)"
)[)6R69[?l+?hBX?v2BQ?vd"h?lXjBv)Xh)??))X?jB X&(
X"iB6H$ #?&6)
) 
\@ ) u B4i?Rw)X?h?  \
,X &)$)Jj?) C  h8hB6#XBh[X)B86h"$4BjB 6
6 48h)BQ)J??iRi?jBB)X? 6h"???R)Blj&Q4?R??)?
Nota: Antes de la versin 6.5 Postgres usaba bloqueos de lectura, as que la consideracin anterior es tambin vlida cuando actualice a 6.5 (o superior) desde versiones
anteriores de Postgres.

Notas

B &)?U cR?S6 "

f

Captulo 11. Configurando su entorno


6 6Xi?jhR j"$Xj&[ijB)-6^"J?l4BjBj$&jl  6)
)??X)6?jBQd?B4)#d)? j ^)&L 6"QB?X"X)&4B
?B6)?)vv))ci4 H  jB?hM?
A2)#?M : &?B?6)jHv?)Bh) ?B6h)?)X?
)MKX&?B6h)?) 6"
6h"llB)??X)X?ji??4BM g6?  &)?jh 6j? BX6?h#)C (
X6^?dJ)hi??4B88?L?B6)?Ri?jCC\&?)??X)X?jCX??B8[K&M (
B?jQ?B4)Xh?c
, ) ?&J??X)?)^X6)^R&?"&j^ j6"^6 B
?B6)?)d44?psql
4ihj?
? &)"jBvc4QJ?"Xh?
$ #?/usr/local/pgsql
l6h???j$4JB&"v4J?"6j?jB jh"4
/usr/local/pgsql
6 ^4)?&BhL?B6R?)  jv?jX&RB 6h"v6L?B6)?R 4 ?"Xj?
C  Bl4dXBh224 B)?H6?"Xh?))hd
6/usr/local/pgsql/bin
B4? H???RdBd)?BhL4 4' 6?  B4??h)HX&

B4' #
csh tcsh
B)?


set path = ( /usr/local/pgsql/bin path )

 #4BiB4"
X&

96 ?"Xj?L46jB) i B6vB[)?)B9 B[6B??

.login

4;B)?
sh ksh bash

$ PATH=/usr/local/pgsql/bin:$PATH
$ export PATH

)gic"
86d?"6h?QJjB) H* M)Bj8)4?)B$)6&?"&jr
BLB.profile
R?-?"6h? ?  6h"9^6 R ;: 4&)6BBR4&2"iX4&(
4&Bl4 4"BX?!
)XBR B8cR?4?Q6B?Y8R)XBRBcR?R?
vBhB1 ^?#?)"dv6hX&Bh R -B4B?4BvX&?4)&4BQ
??&
)4[j"$Xj&[&?X)-68)h
M )$ #?$Xc?h)-?)H)?B)H
&)B)gF
lB?[M6X?86d6B?)B4MijBh?BR
cB)&?B?h)r26 6??#BLXBL?)X6) Xj&d?B4&r4 4ihjjY (
)) hBQv")??4)
)?Bv)"l&) . 
\&?j64J6?j
l)6l; (
jBv&)?B"4&h)gB4i4?h)v44i?X)rJ)?jrl?v)?)?2[BhjB
A m 
 X 4B&"L^?d&)?BL6?L?#)6^^)hj  #cR?4?L
BhB A W vh)&Y 6BX4)? .  i6h?vB94h 864
?B4B)BX)$B)??X)X? "4i?[&B66\l"
Q?XlQB4
XBXh)XQ
' * $ #?$XjB?h)-?B&?)h)&c
ij4+)&?B?6h)
6d?h?QJ)Mpostmaster
)4)6 6dBjBQ6h9ij46R&BijB)

f

Captulo 12. Administracin de una Base de Datos


Nota: Actualmente esta seccin es una copia disfrazada del tutorial. Ser necesario ampliarla. - thomas 1998-01-12

96)KjXlUUX)XHC?Xgr"6B6)?Mj?26?jLcRM?9?B6h(
?)X?# j6"6j)?B)$)6 9)h ?B6h)?))$Jd4
R&?B?6))$J
h6B))??))MjX [X)XK)HU
X)-)iX H  "6B6)???Rd?9)
(
&?B?6)X?#2?424c&j&Bhd#262i"4[?[)692Rj + : 6)?
6? )K????v)X")-B4c))6)jw
QB4cjr6)? [
R?[hBM?jh?$?c??4?l$")??4)-?M&)$ #M$?)?)"
)&?B?6)h?)
 6"6+"Bj&R?&B2B84B[?j &?6& ????$
6?h&j)h?cvMj)&?c?hRK?jiR
A2) #?M : &?B?h)j j6" k  hRM46j
h?XjrXjL&Rr4)??
 

Creacin de Bases de Datos

))6 )j6X")4B"[ j6"ij8gXj&)B i"))\Ri;\)=


HQ???h)?2B4XBlR$6&?Bh6hR?&?6& BX?j  jh4
createdb

)?K ?Y #?B9X&)B
jj
 &h 6"v6h) Xj?BJ)vQi)??Q?
Bi?jB[R)?2
 Rij&)B[r6J+)$ X jh"4i[B)
hB?v????QJH)g6 ()?l)MX")-)6)h
)i"4B
)6)j-??R&)u
)&?

)?B?
Y #?B
ij&)Bj64X?


% createdb mibd

QJ)MhBHg&?6&"6?)v4B"l

psql

6i?

* CREATE DATABASE mibd;

B ?4B&4
????BX6)?J)&X"4vB)6#)h6Kc4&r6??Bh

&B66\@
% createdb mibd
WARN:user "your username" is not allowed to create/destroy databases
createdb: database creation failed on mibd.

6h"?M&?hX")-X)??H& &"Q R4)h^^4?jK6


6v)j&)h?iR&Bl)&?B?6)j [?)6vl)hMQ)X48vi"4 < j
B&" ?)r)64 )hij&B)RHjBM?v6RL??&?h)jrMB
?B?h#hj)j R X)Rih4

f)

Ubicaciones Alternativas de las Bases de Datos

$j6??2X")Bl)92)h$4?)r?"Bh[c2[6h?B)8)
Xhd)Bhv??Bh)?)X?j <W X"[Qi)? XjB6?h?)6lvRj
9B4XB^"R?&Bl^h), 49&jjMQ?8)6)j6BQ&RB84-?)
jB6X")?)6MRj4&?h?j)XX6l)g&hj
 )?i)X?jB)?4BR?)M)6rM)j
6MX"4dj#"=?)&?Q
B8c)?)?QQ6h)8-iR&?B&)j?)K?)jBQ)?&Ri4B)?
)629)hj +  6[cR?)?26R89B)6?LB?lRB 2))BXr
&hj$Lc?)r)[Bl)Bhl42&?h?
4X?v462?li4BlB)) (
&?B?6)jjh4 9  B6?h9Xjd4)&?B?h)j?jiR6j"M?X)X?jB
"Xj& (
)))L)628Rj ) 8486)MX)??4MB&"88)?)?Q)??
)?B?X)M?ji)?42)?hB)?jc)B68"4ij&?B86)MBj&"2Q)?)?
X^g"4g\o
A * :1: M)?h)HXjB?jBrij^h)r)?)?i


Nota: En versiones antiguas de Postgres, tambin se permita el uso de nombres absolutos de fichero para especificar diferentes locales de almacenamiento. Aunque es
preferible el uso de variables de estado ya que da mayor flexibilidad al administrador local para gestionar el espacio en disco, tambin es posible usar caminos absolutos para
especificar ubicaciones alternativas. La Gua del Administrador discute como activar esta
funcionalidad.

$R)B4v6?)&[?B?)X)??$X)&?B#)?)?v[6)
)B9 ?M)44^)gB)j)?Bj
X)&?Bj)?X?B)?4 '  )?X)X?jB)?4BR?)
86K"Rw))\XRB

initlocation
)8X"4MC)")?&)Xc)&?Bh&6)B?^)?)? A * :1:[ )89 (
9\&?^h?B9B)?j
)64"6
+?69L
Q6X?? 4K8)/alt/postgres
?M?8XBhL4-R&?B?6)/alt/postgres
jM j6" J j6?j$ (
&BhR6 ?9Y #?BX&)c6)6X?
% initlocation $PGDATA2
Creating Postgres database system directory /alt/postgres/data
Creating Postgres database system directory /alt/postgres/data/base

)2X"4Bl)699)j$4#)"2)?&)XB)&?4B8)?hB)h?c
)?-M?MY#?BMij&)Bj6)M4g??Bhij&)BU

A * :1:l

% createdb -D PGDATA2 mibd

QJ)MB)XH?v&?6&)h?H

psql

4X?

* CREATE DATABASE mibd WITH LOCATION = PGDATA2;

RB2h?B
+????2BX6)?2)
i"4)J)6-$)j6$R??Bh &4BhM

% createdb mibd
WARN:user "your username" is not allowed to create/destroy databases
createdb: database creation failed on mibd.

j 4?jX)4??B8+?6M8&jj?9)6M)hrB8?4B)j?R)6?j#)
Bh)K84v6X??H86?"Xj?j6)c4?6??c@
% createdb -D /alt/postgres/data mibd
ERROR: Unable to create database directory /alt/postgres/data/base/mydb
createdb: database creation failed on mibd.

Acceso a una Base de Datos

lBMB)Mi"4vB9) )hj)4 )XX4??)6??Bhr j&)

\X)BM?j-"j)&)&jB?"4 j6" jJh?


?&?
?Bh"X?hR?h)-h4ih)Kij&)Bj k  ?B4Rih?)&Bh psql
2 6X??4B"j)&L  ^^?#??"$#?d^6h?B) 
 k  6h#?
4&?hB?)BX&)Bj k  6  "X??B?jK"6?h)JjK&B66\Kc4?
86d"j)& H  6h?B4)6M?6ihM&))&??)&Bh4L?M4iX?j7
nCn
"R)BX
)[44?&4B)?j \&?j #69&)B) C  c6
$4)Xh?cRvRpsql
?9)6Rjr&?#6X??4Bv4jij&)BU

2

% psql mibd

46)?)lX^j6??4BM&4B6\@
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: mibd
mibd=>

6#9 #?&j??B?X#4
&jB?jQ?6iXB&#4X??l? k 
"6jB
 Bh"#v)"QQhR6hdQ&)Bh?BQ&B?hc < jR&
X?j2v6X)vQX&?4BX Xj?8)v?Bc4h?)@& psql
h4&?jJ
hBK)6"?96?Bh)+?r c)?jrXj&)Bj k   6h"jH&4?QM


mibd=> \h

lB#L4&?BdL?B"jX?[6QXjB6?h)v
XBhB?v)j4?jH 6"6X??B

)"i#dh)\K8)6)9

mibd=> \g

6l? ?XR6c?jK$"X6)-6L?  gh&?BM6L?lX8JB


^X&)gBdB4i4?h[BX&RB &gM
"X6)2)h&)h?X)&Bh[?j ?j
Mh&B#XjdBh8Xj& 9 )9?psql
44?X?jB
9Rh?MLic"+?)&
& 3 ?XB4jR^ ?B"jX??)?BhRih?)&BhR6X?, 


mibd=> \i miFichero

f)

)6)??

psql

Q"i6)HlB?+R6X?

mibd=> \q

B)??)) [?vB)$"44-6^6B?+$Xj&)Bj R$j"jij&)Bj


lpsql
6?c6X?o &?BhR\XhQ6  ?j94?j k  6v4l6) ??"<(
&Bh84Ri?# ?)BX&6)X?jBh)?)j"9B)2Y#?B4)6 ; j&Bh)?[QB
Y#?B4 ?B?X)^ij
 9  jQ?vM)R)XM6) ?)j))B)6hg
?2Y #?B262?BjR l )2ij&Bh)?$)?)
Y #B)r8Bh"BlY #B26
{
& .
Privilegios para Bases de Datos

Privilegios para Tablas



*

Destruccin de una Base de Datos

6 [HR&?B?6)jM^?^)68^)hjl&J4h"??LRB 
6??BhMX&RBo[B?)
% dropdb mibd

6&"h?^ #?X)&4Bjj[?[XB"
lB?d)6ji?R2XjC?^)68)h9 B
j)4H"X46)&RBM 4BXBvij^&iB9J4&?h)X?


f-

Captulo 13. Almacenamiento en disco


626XX?B4i4[4r6i? C cijB)lR?89?Bj&)X?j#? 3 : k C j?&(
R?j9n(BBj&) ppq ( P) (


ff

yy

Captulo 14. Instrucciones SQL


6Ll?#?B&)X?j ^"\"4Bi?L)d?)l?B6"XX?l k  6j))l
6h"


ABORT
Nombre
ABORT

M?)B6)XX?^^X

Synopsis
ABORT [ WORK | TRANSACTION ]

Inputs

^jB

Outputs
ROLLBACK

4BhM4c4?l64rXj&?h)QXjL4?h

NOTICE: ROLLBACK: no transaction in progress ROLLBACK

jBvB)h)c)XX?jBr48X6Q)Xh)?&Bh

Descripcion
6B)XM?[)B6)XX?L#X6^X)2hR$?)
Rih??))X?jB
BXB)
jH?9hRB)XX?jL6R86X)h)B) 9  hXj&)BQ4r?4B?XQ4LXj&jh)&?Bh)
X&)B \ X\  k p) Q6M"6B j?)&4BMj))jBB?6j?iR
X X

Notas

lh???X \ O$

)Mh&?B)H?hjR&B B9)B6)Xi?j

Utilizacion
))jh)Kj?j
X)&?
ABORT WORK;

Compatibilidad


SQL92

69X&)Bd4Bl+B6?j 6h" k  "64B2r))jB$B?6h?X) \ 


44jij&)B k p) ?)?Bh

_ \

MODIFICAR GRUPO
Nombre
MODIFICAR GRUPO

: B)?-6)?jM8"??&?B)-6)?j "

Synopsis
MODIFICAR GRUPO nombre AADIR USUARIO nombre de usuario [, ... ]
MODIFICAR GRUPO nombre ELIMINAR USUARIO nombre de usuario [, ... ]

Entradas
nombre
 jB&"Mg"Q9&j?X)

nombre de usuario
l6)? c)M6KB)?jv4??&?B)jr4" H 

?jr8+?6?

Resultados
MODIFICAR GRUPO

y

4BhM"X??B6?McR?)X?j8Mij"X

jB&"$(

Descripcin

6
6)
X)&?)4+ BR?6R?j$"2[??&?c)(
?^" 6 ?v?r)&?B?6)j")6 )j86)K69j"
: B)?6)?[ JvB[X"$6 6)?
)?&Bh4??&?B)-6)?
^vB6?B?X9M6M??&?BMR6)?v4^j&?6&
l6)X
]_cc7\]_^7`8) i"R8"lBl
[ ]_^ ` \]X^`L) ??&?B)K
"
O $M$\ } \ 

Forma de uso

: B)?K6)?jr9^"U
MODIFICIAR GRUPO personal AADIR USUARIO karl, john

??&?B)Kd6)?vML"


MODIFICAR GRUPO trabajadores ELIMINAR USUARIO beth

Compatibilidad
SQL92

^[+?h
?Mj"  $M$\} \

 k )p)$ XBXJ[
"?RH6?&??)

MODIFICAR TABLA
Nombre
MODIFICAR TABLA

j?)irM?)&j?X)i?jBrh)?)

Synopsis
MODIFICAR TABLA tabla [ * ]
AADIR [ COLUMNA ] columna tipo
MODIFICAR TABLA tabla [ * ]
MODIFICAR [ COLUMNA ] columna { SET DEFAULT valor | DROP DEFAULT }
MODIFICAR TABLA tabla [ * ]
RENOMBRAR [ COLUMNA ] columna A nueva columna
MODIFICAR TABLA tabla
RENOMBRAR A nueva tabla

y;

Entradas
tabla
 jB&"M^h)?+?6BhM)M&j?X)?
columna
^&"M B9ij?&B9BQ9+?64B
tipo


??B4c9Xj?&B

nueva columna
^QBj&"M)MB9X?&B99+?hBh
nueva tabla
^QBj&"M)M?9R?

Resultados
MODIFICAR

4BhM"X??B?Mij?&B2Q?h)?M6MB"Bj&)

ERROR

4BhM"X??B6?M)?v?9X?&B9BvjLcR??)

Descripcin

O $M$\ , _ X)&?[?v4B?X?j9Bvh)?l4?64B + ["4


B )$B9B4cX?&B9?)?M)Bv?&?6&96?Bh)?MXAADIR
]_cc
COLUMNA
lo c J dj"
?L4&?h^jB24??&?B)9?v)?"[J
COLUMNA
iih #?&ij?MODIFICAR
&B 8
 h6&
&?j8)?j4jvXhC6? 6&R??X)4&?)
??B)$l?B62B) C [i?R?
X)6l2BBj&"[9Bvh)?

^[Blij?&BvX)&?2?&[6[&RENOMBRAR
j?B2B?B^2?Rj ijB4B?jM4
?9R?M)X)B 9 * 6M&jj?9h)?9?9Xj?&B[J&RBXj&?6&8?J
R& Bv46) rM6hMij&)Bv6\XR
l6hd 4H4X"4j4hh)?)jKX)&?)Kd64&
Notas

B)?RMX?)
&6)jK?M6 &?h?
COLUMNA
$$6??4Bv Bj&$
Bh)? ?B?i $?Mj"Q4rh4Xh)6$6j
6
R?Qhj)?))?R 6486hl??48?\)") #?66B. 8RK4ih4
)h?h8BL6[ B)?8[8"Bj&)8B?BBv9?) 6i?R4 C  6^6?&"


6 $B)XKiRB[ B)$v&j?iMLR?[8B6"X?)6  Bv)9#?


?)"B)^?\)") #64BMXj&
SELECCIONAR nueva columna DESDE SuperClase*

B#BX?BR)&J"v?)6X?)4B))&J"?LR?Lv6vBXBh)
8?96"X?)6
 ?"44B$?&?&Bh)X?jBR?)i?R6?)jKX[v??&?R))?MB
X?&BQ6)&?B)R l642R$?v"
 O @\,X )
jB?jH)?"4KjPONER
2&VALORES
)-)" POR
[6DEFECTO
QhB
R&Y 4^M)X)??R)H?Rr??BRr+?64Br?j
Bj
)?"4j4 46j+RB
`[_)c
l6h ^4[X")j9L?X?)6d)#j9X)&?)[44& 1
W 4B&)
XR??)h$$64&M+iR)?j[
6?64&B[6&?? '  F

)0 $X
)w
`X Bw$ @ ?4BM&)r?Bj&)X?L?)B"4Bi?R66Bh
* ?' #R9 \
,X )lBv6i?Ji?j&) R&??l9?jMR&Bh )?Y (
j

Moda de uso
) B)?KB9Xj?&B9?J :WXFm : W B9h)?&
MODIFICAR TABLA distribuidores AADIR COLUMNA direcciones VARCHAR(30);

)"Bj&)KB9X?&B94?64BM
MODIFICAR TABLA distribuidores RENOMBRAR COLUMNA direcciones A ciudad;

)"Bj&)KB9R?+?hBh@
MODIFICAR TABLA distribuidores RENOMBRA A proveedores;

Compatibilidad
SQL92

["
6hv)6&?vXj&?v+XX?j9lBLjjhv?jc;(
COLUMNA
?"4vj9AADIR
XC
?&?)X?jB6-ij&C6L4??X &RQ)? 1 L"
MODIFICAR
4h^6&?6?c^X&?4
COLUMNA
k pR 46X?X2)?B)$X))X?4$R?iB)?4$) O $M$\ O, _ j"< (
BMBQ4h)^j)@ #??"XR&B jjh))j j6" k  


yR

MODIFICAR TABLA tabla AADIR definicin de limitacin de tabla


MODIFICAR TABLA tabla ELIMINAR LIMITACION limitacin { RESTRICT | CASCADE }

: B)?rd??&?B)
BQ??&?h)X? lh)?vXj&#BQ??&?h)X? [ij&";(
i?jBg?&?)X?jB?X)g8???)X?j#9"4d4h;B) + )9X")H8??&?B)B
??&?)X?j
B?X)4X"4[??&?B)
#B?X
B?Xj4"64ih?)&Bh
X]_cc
a b [cdM < RQX)&?)$j)X?)6vv??&?h)X?jB9B4i4?h"X")$&"X4)
?
)?)cQj"jr))&4"jR?9_
]Xc clo cd"4

jh4&?)J)??&?B)HiR?????)X?jd48B9h)?
distribuidores

CREAR TABLA temp COMO SELECCIONAR * DESDE distribuidores;


ELIMINAR TABLA distribuidores;
CREAR TABLA distribuidores COMO SELECCIONAR * DESDE temp;
ELIMINAR TABLA temp;

MODIFICAR TABLA tabla ELIMINAR [ COLUMNA ] columna { RESTRICT | CASCADE }

 ??&?B)B
X?&B$B
h)?  j?4B&4BXRr4??&?B)B
Xj?&)
?6hBh?9R?M6K"X"RQ"4iRgR&
CREAR TABLA temp COMO SELECCIONAR did, ciudad DESDE distribuidores;
ELIMINAR TABLA distribuidores;
CREAR TABLA distribuidores (
did
DECIMAL(3) DEFAULT 1,
name
VARCHAR(40) NOT NULL,
);
INSERTAR DENTRO distribuidores SELECCIONAR * DESDE temp;
ELIMINAT TABLA temp;

)2X?)6?)l)L"Bj&)MX?&B)lR?R[j+4B?jBl)
k  pR BQ?Rr"jc4


j6" k 

MODIFICAR USUARIO
Nombre
MODIFICAR USUARIO

j?X)K??Bj&Ri?jd?XBh96)?

Synopsis
MODIFICAR USUARIO nombre de usuario
[ WITH PASSWORD palabra clave ]
[ CREATEDB | NOCREATEDB ] [ CREATEUSER | NOCREATEUSER ]
[ VALID UNTIL abstime ]

Entradas
nombre de usuario
 jB&"Mg6)?QXh)??)^6&j?X)j
palabra clave
 B9)?)w9X?)MM46)M4^69XBh

FWX:F*[
 FWX:F*[
 6h)9X?)6?)B ?X)Ri?RQ 6)?)X4R49vRj
g 6M64i?X FWX:*[ j6)?QjMB?6"?))6)j
l6)B! W_:*[ 69B?4[2#)?8?[iR)6?)&X"))6r
)j
FWX:F  W
 FWX:F  
W

 6) X?)6?) h&?B)&6J6)?d6hv)h?))Lli"4rBjM6(


?jX&?6& ' hMjX?^B)X$4KR&))+)?l84")?l<(
)6)-j4Bi?&9j)?)"6?Xi?jB)XX6

abstime
 QXBQiji?jB)?&4B?Bj)4?v?)?)wX?)lv4hv6R?

J?)w

Resultados
MODIFICAR USUARIO

4BhM"X??B6?M&?X)X?jdXj"Xh

ERROR: MODIFICAR USUARIO: usuario "nombre de usuario" no existe

B66\
r"j"X??96)+6)?96X?X)2B2+?6
l?)6rr)h

yR

Descripcin

O @$\   \$ 6$J) X)&?)-?j)h?j ?MXBhM$86;(


?# j6" k 
 j?&6"6)?&vB8)6)j94vX)&?) Y(
???j
4iBRMiRi?)dM)?R4
X?)MXL69j" l"?B)?&4B?j
R?jr6j?Q4^X)&?)-d"j?)?Ri?)
l6)$_
]Xc o]zo]_a^ RX"4 B&6)?
[ ]_^ `@c)])??&?B)
^6)?

Modo de uso
)&?)-?9R?)X?)c ^6R?U


MODIFICAR USUARIO davide CON PALABRA CLAVE hu8jmn3;

)&?)-?9)??4ML6)?vB)6M?XB


MODIFICAR USUARIO manuel VALIDO HASTA 31 En 2030;

)&?)
?)??vl)?#BRh?XB)64i?X)BdQ)h?))X?j
+?4[R?j?99 r )Q ppq 6)B?9)jB[Bj)?99h?B Bj
&)M1  U


MODIFICAR USUARIO chris VALIDO HASTA 4 May 12:00:00 1998 +1;

)KL6)?Q?9X)4X?)d i"R-hj)?jrQB)r)6 )j


*

MODIFICAR USUARIO miriam CREATEUSER CREATEDB;

Compatibilidad
SQL92

^B)#"4  $M$\ \$

R?jrM??&?&4B)X?j

 k pRB< h)B)$\?8B?X?

BEGIN
Nombre
BEGIN

&?4B)B9)B6)XX?^^&jQ4BX)B)

Synopsis
BEGIN [ WORK | TRANSACTION ]

y-

Inputs
EO W v
W_:  
:u


R?)RX?)jX?BR? ^Qh?B^Xh

Outputs
BEGIN

6v?B?KXMB9B4cM)B6)Xi?j^B6?QXj&B))

NOTICE: BEGIN: already a transaction in progress

 hQ?B?iMMB9)B6)XX?86h^""6 ' Mh)B6)XX?jL48i6QB


cMR 46R

Descripcion
-4ih 6" k  \X?))B6)XX?B44lX)r@?X)iR h)&?Qi1(
BX?#ij&R
)Rhjij&&?D^4j"j96?6&R9v)6vv)j6 < j)9R?)w)6
X)26)L96)?d h4ih)84Jj?[)B6)XX?LXj&&?K62\X(
L?&??X?)&4B8)B)HK6)h6H?d\XX?8+?jR8h"&j
\X8C"j??)C 6   ?B?X?dB^)B6)Xi?j 86)?&C&j BX)iB (
jj j?jM46)j 26)?jM46 [&Xj&)B 
 [\X))
BLhRBRiX?jB?X^B)68 4??X?h&_
^}aK& ]_^ @ QX
hrJ&RjQ?8\< (
XX?j .  jM46)j&&jd4BiRB)^6l\Xh)&&XBd&))?jjj"l?
)B6)XX?^6R' gXj&&?"?"B2)Xh?c?46?B?X)?2 F  8M?6X l 
\XX?L&???4 6)j
B"9B2hRBRiX?jdh)&?d
"?9)
?XB6?64Bi2X)BQ6MX)&?)8&XB)rh)?)"?)X?jB)4
jh" k   W_: *

B?
&R??R&?B jQ6h  ?R8)B6)XX?B^4
 r}r
0* jjB9?)$XjB?h) Bh"89?lhRBRiX?j#6?^h?B2#XBhl?j
X)&?2XjB6??R2RB9Q?^h4iX?jCQ?8XB6? J : -6B2h???))

_\  \X$   uX$  

\$X _ \66 )
 )2XjB6?)[4-h?
$ 6HB4i46?)2R??R&?B&8hRBRiX?jB2&)9?"6 J
)W
:
 :[0  6?hB)  XB?j8X)&?jXB6j??)j8)BhL#?
)B6)XX?lBh Xj&?BX
"4?&Bh)B4Hr?$\Xi?jQ+?&J6) * r
8B9h)B6)XX?^6?)??)4?
H?#)B6)XX?6h#XB6jh?R j6" k  )6Rw#dh)v?)l)XR??)< (
X?B[6R BXB)96HB 8B?BBL84??)2? 6   )2hRB)XX?jB2h?BC?
"J?44h)BR : 
* )h&i)ijB6?hBh))?6?)Q)?
Notas

4&?)6$ ^lXh  )M?Bj&Ri?j8)&??R6j"$?jv h)?)H)Bh B


)B6)XX?
lh???X_
^}a _
] ^ @ QXh)4&?BRBhRB)XX?j
W

y;f

Utilizacion
)X&4B))Kc2h)B6)Xi?j^6)?
BEGIN WORK;

Compatibilidad
SQL92

 #B)#B?BX&RB 
 ^
  B4hB6? [?Bhv j6" k r
$ 4??X?h^ k p) 8g?[?B?i?Ri?j9B[)B6)Xi?j#6?4&"26h2?&??iv^4
4&?B)vvijLL4h) \ O$ QXj \ X\
Nota: Muchos sistemas de bases de datos relacionales ofrecen una caracteristica de
autocommit como una comodidad.


X?j?Q)?R
h???))l)v?"iBh"jj?hj k  &Y(
 kl4d)?6) )BEGIN
^L6dX?)6)i4"6d8?)l)B6)XX?B[6)B?X)
XRBvh)6?))??X)X?jB)6M)j
k pR R&?^4?"  W
: 
:l
 J)M4H4B?jM)?6?)&?4BvM)B6)C (
X?^j4 46

CLOSE
Nombre
CLOSE

?^Xj

Synopsis
CLOSE cursor

Inputs
cursor
 jB&" M^i6K)?vXR

C y

Outputs
CLOSE

4BhM4c4?l64X6Hi4)l+?j6)&Bh

NOTICE PerformPortalClose: portal "cursor" not found

h9)?hM6M6j

cursor

B6hX?)vQ9B6?QX)

Descripcion
??4l?"X"6^)6X?)X&&Xj
)? * 62l6QX<(
)B KXjhcB6&?4 j)X?B4266??Bh[ 4 [ X6jM?
6HX4)BXRBvBQcM4HB4i4?h)
l&X?jl?&??i?hM\Xh)dJ)lX)vXj R?4hLi)B#BQh)B6)XX?j4
4&?B)Mj \ O$ v \ )_ \
\

Notas

6h"vBCh?B#  6R dXj  ) 4??X?hM8- i6[dXjB6?


)?lX)BlrX?)4 lh???ig6R ^\  RX?)w)KdXj

Utilizacion
HgX6j??)Bj&&
CLOSE liahona;

Compatibilidad
SQL92

\

4hh)?&BhMX&J)??MXj k p)B

CLUSTER
Nombre
CLUSTER

jj"i?jB)?6Q )?&)XB6\)")li6h?Bc)j6c?

Cl

Synopsis
CLUSTER indexname ON table

Entradas
Nombre del indice
 jB&"M^?B?X
table
 jB&"MB9h)?

Salidas
CLUSTER

j)")&?4BvB?)Q+?h6)&Bh

ERROR: relation ~ tablerelation_number 

inherits "table"

M1"uMU{Mu1C''+XH {9'g;1' )90;)+'H)D +$U;'99)


+$+'M"uMU{M
ERROR: Relation table does not exist!

M1"uMU{M; ''C $<F;HX'Y'+FMX+X' F$,' '+


''$F9 ',+<$9,+,U' 'CMtu1U\M

Descripccion
)6)Bj6
&)B9 jh4
)"?[X?)664i?X)j
)"jR?&))&Bhd ?B?Xd64i?X)
B?XddBR
1 ?table
indexname
6?Q4B?vM

classname
 B)lBX?)6 6M)")46?X)&BhM"jBB))6)Bj 8??Bj&Ri?j
-?B?X J  K)"R&?B&4[6)h?X   Cj)2R?))6c&?BhR[^?^X?)68
)X)??4))+?jiR&?j$B^6&R")j ^2B)X2B?B&?BhB^9&)BhB
)R-B)-?B6h)BX?)K9h?))X)??R) w RB?"X4))?)
&)B)?&Bhh4ih)BQ4jij&)BvB
\ 

Notas

9R?[Rih)?&Bh62X)92Blh)?94&)ij#4j"L?B?Xg9(
$624B&l[6 Bj&"2??B) j
46[)RBjj ? "&?6j XBXY(
jrvh"?B?XMJ?"8X)Bl6M\X4R")&?4BQX?64?B
 8?j
X)6^M)XXBrMB9??B)j?))?)hj4&4BM4B"lMB?R)R
"4&)X)v?j9Rj4?R-v?h)?BM?&jh)Bh R ? Rj


?4B 4BBX?v[)XXl)?Bj)h &) [vjhj6jdB)L&?B?X[2?


)R4BX?)R4gv \ )
vh"&?R94CH \ )
[)L4[C?jliRj[C?jl^h???))[
?B?Xl)v4hRr&iBR??B4)MlBR?Rj#&B?X)?j$[&?B?Xv?c
&???49??BRX?)Qij?BX? \ 
))v"QB?B?X
?Bh?X4hh)d)?B)vd?6X$)#??&#??B&X ?#Xj?Bi?4
j)$?R$h)$??B) 2X?BX?4")?i&Bh[4h[#?[&?6&v)?B[
jR?R)Bj)Bv)Xi4j?6XQRi4?)Bv?MijB6?
m )ljr&)B4R))J)-)j H  MJ?&4Xj8gX&RB \ 

"jBBl?vh)?lj??B)JXj&?vj"B)X?jB?B?i[[64i?4 .  hv4
6J?4B$lR?R-RB"r?)??B)-6
)l
6i)B64)?R)?$h)?
#j"#2?B?i4gL6BB?jRB9?lh)?l46v6"iB))?) BhR 4h)4
)?B)rR?)h?)6RM6hM&8B)B2)?B9M?6X"XB4)iR??B
&? + 6"?4BlBvX)XBg"^?v&)j?Q[Bvh)?v)B[BdX)[
?X)XB
vh&)BR)")K)hjrh???))
SELECT columnlist INTO TABLE newtable
FROM table ORDER BY columnlist

??)94Xj?89j"BR6?d 6"rd?2X?)6?V WX* W C)9B)X


X?BX???j
?B?X4+94
&XB8&))J?))h6j"B)j 9* 6
#?&)?#?\)-h???)  
, _ 
 )#"Bj&)2Xj&
?8)?8?\)c 4i"i)MX)??4?B?X J  KB?X&"?4&^42B6QXB6temp
)
?

*d+ * 9)B4#)4?)B4 F 
?26)?J"9?2&)j?l?j
)h9B)86?j4B)B6)6M???Rj?B?XM+?6Bh
Nota de traductor: Un ndice agrupado es aquel que llegado al final de su rbol b-tree
no contiene un puntero a una pgina de disco en la que est la tupla, sino la propia tupla.

Utilizacion
")&?BhQ ?"?)X?j8&?))6)Bj ^d)h?hQ6)?)?
:

CLUSTER emp_ind ON emp;

Compatibilidad
SQL92

^QBRQB?Bd4h)hv?B6\ \ 

4 k p)B

COMMIT
Nombre
COMMIT

)??R?h)B6)XX?^)Xh)

Synopsis
COMMIT [ WORK | TRANSACTION ]

Inputs
EO W v
W_:  
:u


R?)Mi?Rc X?jB) ^Qh?BM4 4ih

Outputs
COMMIT

4BhM4c4?l6?9h)B6)iX?j86M")??49ij^+?

NOTICE: COMMIT: no transaction in progress

jBvB)h)c)XX?jBr48""6

Description
")??)? )B6)XX? )X) M j^?j8iR&?^"4??))j8jv?  )&(
6)Xi?j 6jC???428?)2h)2h)B6)XX?B46J 68))Bh?)^6XB6) 6 K6
"X$B9iR?MM?)?B
\ O$

Notes

)KJ)?))KX?)E W v W_:  : F


  6 Q&)6?)2?Bj&R?)64[4
6Hj&?h?)
l6\
]X^ M Q_hR)RHBh)B6)Xi?j


C

Usage
)B)XKjj
?jrX)&?jr4&)B4B4J
COMMIT WORK;

Compatibilidad
SQL92

k pR 6?844i?X?)j
&)6
&BhX&R??

COMMIT

COMMIT WORK

H H?&)6)jh)Y(

COPY
Nombre
COPY

j?9)hj4B"XB"jrQ)?)

Synopsis
COPY [ BINARY ] table [ WITH OIDS ]
FROM { filename | stdin }
[ [USING] DELIMITERS delimiter ]
[ WITH NULL AS null string ]
COPY [ BINARY ] table [ WITH OIDS ]
TO { filename | stdout }
[ [USING] DELIMITERS delimiter ]
[ WITH NULL AS null string ]

Inputs


 :W
 R&?24BX&j)&?4B^&)h82X)&j6gjR)B[jj ? )hj
)?&)XB)6 v?6MX&v4\hr?BR?j6)^?)KXj&hh
table
 jB&"MB9h)?M4?6hB


*[

EO
m


j?9j?Bh?X)Kj4h4?BhBoB?X 
* c)X)?

filename
 "9)6j?4Lj)lB?2giB4"Q4B)Q6)??
stdin

JX?X?9B)c?4BM^XBXhQh&?B)

stdout

JX?X?9R??^ijBXQQh&?c)

delimiter
 X)Xh??&?h?riR&4B)Q6)??

null print
lB
X)iB
)""4iBh)J)?j")  r  cR?Bc4 4ihU
r)966?)6&(
 RK))jBB?h?X) 9 "i?H\&?j)B9iRB\N
^
)C#?
Nota: En una copia de entrada, cualquier dato que coincida con esta cadena ser
almacenado como un valor NULL, por lo que debera asegurarse de usar la misma
cadena que us para la copia de salida-

Outputs
COPY

X?96MXj&?hQ6)?6)Xh?)&Bh


ERROR: reason

X?9)??lj?9)4L?B?X)48j&B66\M"

Descripcin

\
& )hBh" h)?) 6"vXB"jg6?h& )"XB?6h)&(
) \
?B?X$)R4?j 6h"-
?$26i?
r2$QXB"  RiB4B
r6-?'4X4&B$???$)$+6?h[+Bj&" Xj&?hlB 
6X?X)6

6l4JBl?hJ6?  J6v6X?i
?R??iRi?j^X??B)g6?jKJvc?X6)
Notes

stdin

?j9RjM)

stdout

MR?)X?)c
 : W j??2MMjjr?jr)jr6 )?&)XB8v?)^X&vM(
h4jH?B)?4Q?)
ij&[4h  624H?l&RHR?9$+Xj&jh)&?Bh
B&)  ""6?RB8rcR?&B9j)?)^?j$XB"r4B<(
R6^)v&)r)B)BM4hM^)ihjHMB ?j
)hj4L9#
-4ihX)B[6 XJ?M84h[$6M8R?R %+ %wXj&v??&?R  


C)

??&?h)j$4lX)&?)6[j X)??4$j"diR4X
&?4)B#?v)?)vX?(


 A *)
r
&W+  $X))X4"$B"8?j X)&
)j$9"6?4
X?BX??Hij^j??&?h)jH6)84Bi4)jB" ij&???)
m 8QB)XQ?&"U$ ?C ?'?"M4 X)?? )?8Xj2)?"496)??j
j \
lX)Ri\C ?H?? )?$Q?$6$))Q ?B6)?j)?"4
[B?[)4i4j
6"X)??4XB"QM)
 g6c?jHBX6?9?jr4&?6j
?6Q4X??6 ij^6MXj&)B
?vR?)li?RcV

!A * 
r
U)W 6X?XQ&X)Rihi$v6l6)vR[?Y (
&?R$Bh"vX?&B)  v46X?X)&)?jX))Xi"M ?QX)BQ??&?R)
6?vM6)j?&KX))ihi
Sugerencia: No confunda COPY con la instruccin \copy de psql.

\
B^?BXl"4?[Bc)XX?jB jX84#?)$Xj?&B) ?#&Rjg
?BX)K"X&?Bj?J)R
\
4?4B?R9j)X?B4?& 4"j < hBJjXv"?4&)44
X)6d \
M\ J"L4J6?Bjj$66h6vRX?4?&Bhv&?X)
 X)d \
X F d6)6d)??&?)2)BXj?
)???
* ?8[24B?"iih?^9)6\84?j 6h" B^
B&)?&Bh[4
&?6&Q4g?"Xj?l )hvg6)?4g"6?)[ ij?)-gXB"
%
%
?  B)?M?Bj&Ri?j8?d")rJ4^RM?)L"6?h)Bl?B64)[foo
)
B)X)[X
K6)?&?B)? ;  C4h8X)6jJ4 ?)M

H?QB)?R4' #M6)6M?"9X&J?9h)gXfoo
c4' #M6 $PGDATA/foo
j4?jhR)
6X?X)-?rXB"jrMij?)
 jMXB"j6)jMXj&#)"&BhM) \
4&4??$L6
)iX4??lJ
)?[&)?B[4?j9)692Rj+d? ?Xj ?X)?4$8##?6h&
XB""4
 )B#&LB8XB4?j F 
J 64i?X8 iB4"&4\h?cj?XB
iB4Q96X??2d?[&R?BvjB624D 9\X)B846?hB8#?2& (
?B9g6)?

File Formats
Text Format

)Bl6M6 \
tX 6?^?jX?
 :W RjiB4v4B)lBX)?
?Bh)BX?)K BQ6j???B)X X)QBQv?)Xj?&B)M R?jK4))vj
gX))XK?&?)j H jrX))X4??&?h)j4?BhBj
?X))ih"ir?BhB
LXj?Bi?)ij??&?Rr6L"Xi)KiR)XhM)L))[ %+%w   j
)?"ir)h?hv6LX)B4hhQB4)jH?BX?jL6)??)6ji?R
X&X)lB#2?M?jMl)h?h .  vBi?j 2)??Q)v&h?#Bd$ #
)hHB)KjX)4X4))h)9 8;4h6B)lH^X&RB \

 g&)hQ)i)?B6)BX?9


~ attr1 \~ separator \~ attr2 \~ separator  ... ~ separator \~ attrn \~ newline 

g?Bh?iRH66?9^j?BX??Q ?9??B)RX)Bv 6X?i{EO


m 
*[
\
4B, #C6)??8^?86)??86h)B)4?)Q^XB"jJB?)B
)8?B?L %+ %wrBh6?jv8CX))X^6)?h^??BdCB
??B#6R)-X)B4&?B6 R?? g ?&??)&Bh6 F
6h#?B 
B2)??96)B)hR6)9B2)?B?28dB6?j$j#d
??B)XXj&2?Hh"KJ?&"jKX))6h"-B??B4 R
?B?X)BRvRiB4" w ?
&)"gj \
4&?BRQ#ijBh?B)i?j4&?B)Q?)J??iRi?j 4?jH6
BXBh  3 RBMM BXB" 69X)BM?B?X9gLXB"
 Ri)4ihJR
?B?$h?B
h"K6?B?KX)jK44i?R? lliR)XhJR
?B (
???4)+$""i4BXj&v)4ijB6X?) %+) % '  giR4X-h)?)j-
"B"44B[X&B[)[?Bc4h?[dh)?)j +  X))Xir#[??B[6["J+ (
6BXj&&B^R?B? v??B   )B6QX)"4Rj9Qh+
B^4BR
 jh4 BX6?R[XB?4BX)4X4)2?Bh?[J)
)))6)KM6X)"8)4i)B)&4B  4i4Bi?
%+ %-6?&"
6v?B"h)QX&&B)?Bc4h?&iR)F
% %wjX&R????) < 
6?X?L&)B)jX
%+)  %


Binary Format

BX)6^ \
X$ 
?jMJ?&4j X)"84 BXB"^4[BB&4
Q?B6)BX?)24 -iB4 ) -B"&2X"jB4KX&RB \
O_$
?
B)6l[6l4Bi4B"9J&BXB"  j"LX)jjhR[[rX)B^2?)
6B&"v?B6RBi?R 9  jr"4h)Bh)j^jic"Q6?B))
 cj&R^)[i)[?B6h)BX?v#BXB"L4$X&L6? ^j62[4h[j&R
#6l6?$ 5)C ? C [ @  RX)Bh?)QB4RiR" 486?6?B 6
Bj&?B)^?B R ^?9RRgM6?
 

\)Br


?B )

4! QX 

^j?BX??Q4XB"

?B )
?B )
?B )
?B ) ?B R
(

Alineacin de datos binarios

B&"Q ?)

)X)?
 jB?hj)j ??9)h
?Bh?X)j6g6M6X?X)
B&"lM)h?hB?
B&4"M)h?h6RXBh)Bv6
X"
I
h?)h0
L

j"9?j &( 6g?j)?j  462)??B)#"J2i)h"8h


 j9)h?hQiR4X"6R??B)"j2v 6j?&h ; ?^&Rj'#
?) j)&)?B)6hj?M)h?h&)"4[&l6lR??B)4&"jM
XR"^h ^j6vv?jM)?jMl?jB?hK#))?l?B "64?j[?
?B?h&)h?hM 8+?)$&R?X
6j#6?&?&4B2i)B)
ijBh?B)$?&4B
?v?&R?

C -

Usage
J6??4BQ\&?dX?QBh)?QQ?6)??v6)B)hj6)B#BQRQ?X)
X&v??&?h)jX)&U



COPY country TO stdout USING DELIMITERS |;

)X?R)h dXB"[B?[?M)?%ijBM%+
COPY country FROM /usr1/proj/bray/sql/country_data;

lR) #B&h4&?d[)h RXj)l6rXj?)j vBvh)?l6


vMh?B^?96XBX?h&?B)X?L^??h?&9??B)H
m

AF
AL
DZ
...
ZM
ZW
\.

stdin

AFGHANISTAN
ALBANIA
ALGERIA
ZAMBIA
ZIMBABWE

j
&?6& Rj+Xj&8R??[4dj&R8?B)?LB[&)?B  ?B)Y qcC j
)h268&6)ChR24?h)9ij-ij&)B|[B?   Lh)?Lh?B8"
X)&jl 8cJ?&484
^B6B^
l  j) ?)$?) h?Bd)?
B?4d4c4"iiX)& char(2)
^j6X&84X)& text 62"??4BXLB?$BRh
)?X)B4)H?j
X)h"v4r4gX)&Q 4hQchar(2)
"Xi?Qj6d?c?h



355
006
A
\0
L
\0
G
...
\0
\0

\0 \0 \0 027
\0 \0 \0
A
N
I
S
T
\0 \0 006 \0
B
A
N
I
\0 006 \0 \0
E
R
I
A
\n
\0 001 \0 \0
\0 \f \0 \0

\0 \0 \0 001
F \0 \0 017
A
N 023 \0
\0 \0
A
L
A 023 \0 \0
\0
D
Z \0

\0 \0 \0 002
\0 \0 \0
A
\0 \0 001 \0
\0 \0 \v \0
\0 001 \0 \0
\0 \v \0 \0

\0 \0 \0
F
G
H
\0 \0 002
\0 \0
A
\0 002 \0
\0
A
L

\0 \0
\0 002
\0
Z

A
M
\0 006
B
A

A 024
\0
Z
E

\0
\0
I

Z
\0
M

B
\0
B

I
\0
W

\0
W

Compatibility
SQL92

^Q4?6h?96B4Bi? \

4 k 7p)B

C f

CREATE AGGREGATE
Nombre
CREATE AGGREGATE

BMB9BBX?^M)")

Synopsis
CREATE AGGREGATE name [ AS ] ( BASETYPE = data_type
[ , SFUNC1 = sfunc1, STYPE1 = sfunc1_return_type ]
[ , SFUNC2 = sfunc2, STYPE2 = sfunc2_return_type ]
[ , FINALFUNC = ffunc ]
[ , INITCOND1 = initial_condition1 ]
[ , INITCOND2 = initial_condition2 ] )

Entradas
name


jB&"M?M BX?jd)44Q9X"i)

data_type
 j?v)hQB)&4B)g6j jMj6M BX?jd)44

sfunc1
 MBX?8 6h)[ h)BX??j8$B ??R&)6$)X) X)&[BvB?
6^?LX?&BBh  &Bdc)?4?Lh?
ij&QJ?&H)"&Bl4X)&JvXj&6Bv)"sfunc1_return_type
&4B
sfunc1_return_type
 j?v?v?J?&4BX?jd )BX??j

sfunc2
 MBX?8 6h)[ h)BX??j8$B ??R&)6$)X) X)&[BvB?
X
M?9X?&B2j? l j&9B2cR?)? M?
)"&BhlB?iQ? B9)?)?$j&?6sfunc2_return_type
&?
sfunc2_return_type
 ?v?hvj?M4B9BX?^Mh)BX??j

ffunc
 vBX?

B)J??)&)v)XBh?$hM?X)&j2BhR  6hv&(
i?j["4i??cj-)"&Bh?j-h?j

sfunc1_return_type sfunc2_return_type

initial_condition1
 jc)?jK?B?i)j)Mj)"&4Bl?9?&BX?^MhRBi?6?j

y

initial_condition2
 jc)?jK?B?i)jj)"&4BlM?6B9Bi?j^hRBi?6?j

Outputs
CREATE

4BhM4c4?l64Xj&)BvMXj&?h6)?)Xh?)&4B

Description

4&?h9[#6)?8^")&4hB?lBX?B;(
??)  6h"49B?B&B4cRBX?B42Q)44 : ?BR2BX?jB9
)i)R8h?2RQXj&

4h)^?6jB??2
min(int4)
avg(float8)
?l?h?X?j)6 X 2Bd
B h?
86[B4X6?[BvBX?2)"<(
B&6Q"j"X?B)cQ6)6Q-Xj&)B \
_
 ) u )
"J"6?jB)?RrX))6h$ #?6?X)6)B)
lB
BX?l)"KJ"4?BB)6
h4-BX?B46jKBX?B4Krh),
(
X??j^M6h)


\u  u

sfunc1

sfunc2

sfunc1( internal-state1, next-data_item ) --> next-internal-state1 sfunc2( internalstate2 ) --> next-internal-state2

QB9BX?LB)gMX)?X?j

ffunc

ffunc(internal-state1, internal-state2) --> aggregate-value

6h"X"vB)6hQjM)?)? h&j)?4?))) #Bij&

)
&)BhB"6?RJj?B4&)?H6)jKXj&[)"&BhjHJtemp1
?)HBX?temp2
BK
)BX?6?

 6)BX?B4rMh)BX??j^B)^hBH?)??Bh
Jj?)J4J
d4
?

j )"&Bj 
?sfunc1

)?jJ?hMsfunc1_return_type
6B4?J
 temp1
column_value
sfunc1_return_type
v
6MRQX&Q?&data_type
4HR&BhQ4L?M"+?&??)&)M

sfunc1
2  )"&4BM)?jJ4c4? sfunc2 B
6 temp2 4?J sfunc2_return_type
2  -)"&Bh9R
?$Bi?jlriR?i?BR)B$r6 temp1 temp2 26Qc)?j
4c4?2
6-h?[R
 6"B[BX6)?)&Bh
$B
data_type
6?Q46X?X)vj  :[  
2 3
 :  3   24r6X?X)L6Lj?#6J)&R BX?jBM[hRBi?6?j&
6h)lj^6X?X))
2

lB8BX?Q)"4)B&Q"? j? BL&2XjB?X?B9?B?i?R?6JB
)X)Bi?j^ h)BX??j 9 6)664i?X)Q)?&)XB)Q8?)6$)h

X&viR&h?Qh+
Notes

l6 \  u

 )6XB)-BX?B4
R"4
 6??v64i?X)
BX?jBMv)")dv4B) ?6)ijB?B)X?B4
Bi?jB26)^dBi?jBMB)? j$h??l BX?j&l)")
"?" 3    B BX?j?BX4&BhM4"B 3  $ 3
 : 3 count
 
&?Bh)l#?#BX?j ^)"44
"?" 3   B#BX? L)?+ (
X?BJ"B 3   B 3
 :  3   sum
^?[Bi?j9)")
"?")Bh
?)BX?B426RdXj&#B 3
 : 3   BQBi avg
2?c?6?jBJ)
"X?6C4?h)   CX)??MX)6jJ)-&BjlB^?)2BX?B4[Q6)
$4B?RRX)?? 3    hBKjX"6jB?Bh\

!
  *[B

Usage

)64RX)0#???)BX?B4KR"[?A2?r4
`"
C[
 
U)c)\&J?M6Q&)X&?4j

"j)&)c`i"w$@

Compatibilidad
SQL92

\u!  u
\
u
7 
) u

4HB 4hB6?j)?Bh

4 k p)B

6h"^2+?h
? j"

CREATE DATABASE
Nombre
CREATE DATABASE

"B9B4cM) M)h

Synopsis
CREATE DATABASE name [ WITH LOCATION = dbpath ]

Inputs
name


MB&"M?)6)jrMi"4)

dbpath
lc[?X)X?#)?4BR?2)[)&)i4B?[B[R9)hj$6?h&
)"6B?j  K&))?4BMJ6??
Jj?&)

Outputs
CREATE DATABASE

4BhM4c4?l6?9j"86MX&J?MR?6)Xj?R&B

ERROR: user username is not allowed to create/drop databases

#4Bl4
c??4?4JX?) W_:*[ )i"4v)6Q#)j 
m 
_]Xc oO
] wo]_a^

ERROR: createdb: database "name" already exists

hQjX"6jB9)6 )j??)&)

name

+?6

ERROR: Single quotes are not allowed in database names.


ERROR: Single quotes are not allowed in database paths.

BL&XjB4BrX&???)6?&? .  6hd
 v)69[)j
?&"6i?B??$)name
?jdbpath
rX)B$6B?gX"48g?"Xh?[ ?MR
)h4)8\XR6M&jv4"

ERROR: The path xxx is invalid.

Bv)??)8&) )h^ci1(
 [J)B?j4BX)&?B^6X?iR
& ' &"4 ?M"M?Bhj\vldbpath
)6"6$$?)?4? 4BjB
?MB9BXBv""BX?4?6h

ERROR: createdb: May not be called in a transaction block.

h?BLBh)c)XX?jd?4Q4??X?h# \XX? B J L??)&R2


H ?&4vBMh&?B) ?9)B6)Xi?j

\u7 u,X

ERROR: Unable to create database directory xxx.


ERROR: Could not initialize database directory.

 hj&B66\v6h)&&)M?&"?)X?jB)jMXj ?BX?Bh94&?6j6j"[
?"6h?[r)j6i?BX?Bh 6)X?94Q)?6ij4Qj"jH"?4&)Kv+6?6h<(
&M
iB4j '  6)?lh[+6hMX?B[6?-$)6$ )hj
 hBH)XX6v9??jX)??))X?j^6X?iR

Description

X4QBQBQ)6ll)j 6" k 
. X4j J)l
6H4j"?4)w?Q?B9)6 )j
96X?iR69Bv?jiR??))X?#)?B)h?l)4jjr\&?jj)?&)XBR?v(
68QRj2 ?6i&?44B   8"^QB)4M?&"4)8XjC?8"4
C ?XX
\u" u, _

 ?"h^XjB?4BBR)?)hv?)BhQ6Q?B"hQX&&B)?)?l
BhB)96XjBX?9jHJjX6v6?j 9* M4h9&)&?B?6h(
jHM?MR)h \"X-ijBhjj"?)?X)??R)i?jBM486
Xi)R  lB4?Xi?j Q6)?&Q6hcj\&?j0 B A * :1:[ B 6cY (
j6 ij&??)lXj
X6  Bl6$BRi$jXj
ALLOW_ABSOLUTE_DBPATHS
684&?h)&Y  ?[
Bj&"2"^)6?h6?B?X)j[MB^)8)
?Bi?Q B
B
/usr/local/pgsql/data

Notas

B9+B6?j^j?B6h 6h"
l6"j)e)B)R) )M??&?BR?)6M )j
 c"j)&[X"hL4 6i?6B?BXjBh"?dR?4r262ij&)BjjL
6?BX?MjXjh9 #?
 +?h )6XhMj"v6?)v?B?) v?j9)hj?&??X)j944-6#
?X)??R)X?BR?B)h?cR)M?))6$)j6X?X)Xj^B&"$"h
)6?h6dJ4 4ih6j?LB[)?R?92cjB^XBjX?[4B"X66Y (
j$4l6 4JX?X)v)vB?ji)??R)X? )?hB)? -4Q?
A2?)&Y (
B?6)jHR&R?Bj&)X?
\u7 u, _

Uso
)X4)-B9B)6M)hjJ
olly=> create database lusiadas;

)MX"4B9B)6 )h^^)"9)?hB)h?c

~/private_db

$ mkdir private_db
$ initlocation ~/private_db
Creating Postgres database system directory /home/olly/private_db/base
$ psql olly
Welcome to psql, the PostgreSQL interactive terminal.
(Please type \copyright to see the distribution terms of PostgreSQL.)
Type \h
\?
\q
\g
olly=>

for help with SQL commands,


for help on internal slash commands,
to quit,
or terminate with semicolon to execute query.

CREATE DATABASE elsewhere WITH LOCATION = /home/olly/private_db;

CREATE DATABASE

Compatibilidad
SQL92

^#4?6hlX&RB \u" u, _
 k  4h)B)-4 \
_ ^)O

 k p)B. JXj&)Bd?)?Bhv

CREATE FUNCTION
Nombre
CREATE FUNCTION

Br9B./ BXh?

Synopsis
CREATE FUNCTION name ( [ ftype [, ...] ] )
RETURNS rtype
[ WITH ( attribute [, ...] ) ]
AS definition
LANGUAGE langname

CREATE FUNCTION name ( [ ftype [, ...] ] )


RETURNS rtype
[ WITH ( attribute [, ...] ) ]
AS obj_file , link_symbol
LANGUAGE C

Inputs
name


BMB)&MjB9BX?j^vX4)

ftype
 B[)2h9j- BXh?R"&Bh + 

B2?B-h$&)L9)62jrij&?
 6gjrX)4
?B?X)h$hB)B2cih?&RiXJ$)"&Bh$-R?&(
c)?d6Xd)opaque
XB)

rtype
 BM48)hMh H 

BMhBh &) 4i?L)rMR RXj&?



Xj
&?J?B?iR-BRB
BX?j/^??
 B
48setof
6Bjtype
c?4&)opaque
)hBKB)^9setof
6?B?M?

attribute
: 8jh?B)gJ?X jB?Bj&)?j8)jchBBih?jBR4LKj?&?R)?j H 

B
B?l)h?rX"4B?26j8?
?B?X)4HB)jhB

iscachable
BXh?l)Y /^)K"hB-Br6)&r"6iscachable
?/^Bv?v
Br6)&r?Bg)?- X?
4rBj)h)4?jM 6$jjB4' /^?6?Bj&R?j#Bj?"6h?^"6B
?d?hrR)&44H??6h l  BMj?&?R6

6B1 //^BhB?J?r6)
iscachable
v. (\)?)hX)?jjBhBMBX?j

definition
: 6h?BvB?BvB BXh?&8RhB&4)B?BQBj8B$?)B)
c&)l
)&?B4B)BX?j B)&hBv) h#) j4h4iH?4cR k  ij h+H?

"XBR?RB)

obj_file link_symbol
 B?Hj hB Qi?R
?H68 jB)&?X)??M(??&6  ?)B)$BX?jB
/ B hB8BXh?CBR&8?B  ?)BRQ6"XijQ?[BjB6)&8R2B
^
B)&jghB k  BX?j  B6?B
?BB)&B?XjB)?B?B
B9B)&?X)??^?R)?2j4\X)B obj_file
?$hB[j4h4iDB ??&L
6 6&j
/ B?i^?BM6)&MRhBMB)&MjJhBlink_symbol
^
BX?jL?LhB  ?)B)6"XXj
langname

&)C7
B B
B
B
B
BjB
B/^B"B
B?hBBR&#
plname
i"i)hd"Cji4sql
R?)internal
BR  _]X
c c oboo\plname
cLj4)??

Outputs
CREATE

B?
?r"4BL?BcMij&&)B#Xj&?4r6XX6??

Description

)??1 /^ jh4 4r^"?hr[ BXh?/^?hvR)46


6B?XRB?r4H?r"44#)BM1/^BHBBMBX?j
\u|M \X$ 

Notes

4 4h8B9XB)4?dB
`X B" @ `w BC [  X
U)dhB?B j6"
?
Bih?BHhBK?B&)h?L /^??BhB)gBX?jB
l6 \ M F_$  hQ"jL4 ( BdBX?jB
6h")??1 /^HBXh?
%wjc4?j)?BM %8XB)?ihB
6)&B)&riRlr6Qj6R
?h\"4Bj BXh?B6[?Bv)HhBlB)
?h?BXR"&BjhJ $  B?)X???[&6
47
/^?LX)?j^
RB  (?)B)Bih?c)B1 /^
internal
BXh?BX)BBjBRc
hB$6)&  B)&
/L?hBjcX)6?B["K)j??& 6
 /^
?&  internal
 [4R"BBRi?
B4 ?h"iB  BR&HJ+)&?i6
hB
)"&4B
))BjJhB  B)&6)B4d6X?hB6B)&4r?LB :[ X?)6Mj \ 
u
W


-hB :[ X?)2? ?&h#hB \uGM \X$  )66&hB
B)&MjBB BXh?L?rhBM6)&M)hB k  B)&
E B#?j)?B k  BX?jB\
/^?  (?)B)9BXh?B6?[Ri  (?)BR
?B6)BX
jB
Bih?v?h?BXjB)&)B6
B
)?hB)h?crj hB QX?)6
?dhB \ u
M  \_$  6Bh)lhB6"MBRJ?j) k  BX?jB$B)&4
)" "6j?dvBMXj"4iB)&?X)??Q??, 6#j4\X
: BXh?LX)BBjB"h86cB)?
@  \X$ 

Usage
vi"4hM6?&? k  BX?jX


CREATE FUNCTION one() RETURNS int4


AS SELECT 1 AS RESULT
LANGUAGE sql;
SELECT one() AS answer;
answer
---1

B?Q4)&J?^X")h[  BX?j CX)???BCdjBLj #6(6")h 6B)"


??R ' B?rJ)h?X?)-jh?BX)?X?)4MiB4+6v??B)Bd"4B W   ?JhBXBC6
???[BBX?jl))&hw-?-X"X
?-?B4BvB6?v Fm  vXBh)?B


CREATE FUNCTION ean_checkdigit(bpchar, bpchar) RETURNS bool


AS /usr1/proj/bray/sql/funcs.so LANGUAGE c;
CREATE TABLE product (
id
char(8) PRIMARY KEY,
eanprefix char(8) CHECK (eanprefix ~ [0-9]{2}-[0-9]{5})
REFERENCES brandname(ean_prefix),
eancode
char(6) CHECK (eancode ~ [0-9]{6}),
CONSTRAINT ean
CHECK (ean_checkdigit(eanprefix, eancode))
);

B?$+)&?X")h$[BX?jBRJj$9XB6?4/^4#hB26B
lXj&?+)BhBl?BhBRJlj?B < B[ BXh? ?M?&?&Bh dQB(
&?X)???j)4\XHhB)w
/^)X&J?? j  6jX 3 j 6h"hB Q
XB6?^BX?j8)j&)h?iR??iRhB6jBih?^B)hvBRc B6)& B)&)hB
"Ch4)B j?j)?B?vc)cj?)?   BdBih?j BR&L?Qj?) 
?cB4ijB# BhB LX?)6?^hB k  4B?h?


CREATE FUNCTION point(complex) RETURNS point


AS /home/bernie/pgsql/lib/complex.so, complex_to_point
LANGUAGE c;

B  4iR?)h?^jJhBMBih?^?
Point * complex_to_point (Complex *z)
{

Point *p;
p = (Point *) palloc(sizeof(Point));
p->x = z->x;
p->y = z->y;
return p;
}

Compatibility
SQL92

?

\u7@  \X$ 

jh4r?)B)+4B?j

SQL/PSM
Nota: PSM stands for Persistent Stored Modules. It is a procedural language and it was
originally hoped that PSM would be ratified as an official standard by late 1996. As of
mid-1998, this has not yet happened, but it is hoped that PSM will eventually become a
standard.

k   r \u7M \X$  B)rhBM??1/^?B86B)0


CREATE FUNCTION name
( [ [ IN | OUT | INOUT ] type [, ...] ] )
RETURNS rtype
LANGUAGE langname
ESPECIFIC routine
SQL-statement

CREATE GROUP
Nombre
CREATE GROUP

"L"QB4c

Synopsis
CREATE GROUP name
[ WITH
[ SYSID gid ]
[ USER username [, ...] ] ]

-

Entradas
name

gid

jB&"Mg"

L696)d)d4??9B&4? 4" j6(


 dX?)6?
" k  j"SYSID
QB 9 gQ6hX?)?94jX?jB)
 #X)6^2B^44iX)4cB&"^? 4c"g2)6?BR[B&4"L&Rj
R?B)v&)B+&4)B B

username
[BQ??68[?6)?j9Q?BX??

)B4 ?BX??j
^4"

4" ; j6)??4B Q+?h?

Salidas
CREATE GROUP

4BhM44?l6?&"M?9j"8h&?B9X^+?

Descripcion

&?
X4-"[Bl4Q? )

)h '  B6?h ? ?
j)&?B?6hRJ)9?Bj&)X?B
j"68M"
)9"4[9R&(
?X?) '  6j"^6?R&BhM6K\XRj^6R?v)&?B?6)h?c
l6
^[ aMa0 ]G\]`)^ J) X)&?)?MJB4Bi? $"l
[]X^` \]_^7`
)Mj)K^"
FWX:F A W 

Uso
"i)^"JQ)X?


CREATE GROUP staff

"i)^"JQX^&?"j
CREATE GROUP marketing WITH USER jonathan, david

;f

Compatibilidad
SQL92

?) 44X?X)X?jB k p) Bd+?62?v?B6"XX?c \)u" \  + Jij&(


Xl ? W j?
6?&??)H)jijBXhQ "j


CREATE INDEX
Nombre
CREATE INDEX

jB6"? #?c?iM64iBR?

Synopsis
CREATE [ UNIQUE ] INDEX nombre_indice ON tabla
[ USING nombre_acceso ] ( columna [ nombre_operador] [, ...] )
CREATE [ UNIQUE ] INDEX nombre_indice ON tabla
[ USING nombre_acceso ] ( nombre_funcion( r">columnale> [, ... ]) nombre_operador )

Entradas
!
k 

"jXr4R6?64&$ij&"6+?h[)?"4-??X)jl?rR?
i)&(
 ^i"^#B?XL6Hd?6h)h6rX)LLd6^;B)CRj  
?BBhj
?B6h)Hv)X)??R)-)j??X)jB))8^"
nombre_indice
 jB&"M #B?X64 i"4)

tabla
 jB&"M?M)?J)M?M6M?"X")- #?B?i

nombre_acceso
 -Bj&"j&vRiX6dQQh???)))Q#?B?X < h
)Xi4^2XhL4 )UWX

 j6""j"X?BQh"  hlRiX6^)


?# B?X6XB)?

W_
B9?&&Bh)X?L?jrh"R?XjBi"BX?  4B&)&(c)
WW_

&?&4B9"i6)B)-h???))BQg)?j?h&Q )?X?jLX)4?X
\A2h&)

y

m :lm

[B9?&?&4B)X?j^?)?6?jB??B)?4r  ?/^?

columna
 jB&"MB9Xj?&B9?9h)?

nombre_operador
lBX?)6M 4)j"ir)6ji?R 
&)rRhv)MjB4&)h)??

nombre_funcin
lBvBX?jB?Qj$4J)?jl4c?l&)?j
v24$?&(

+

Salidas
CREATE

j&B66h?v64 #?B?XM6B9X")BQXj7+?h

ERROR: Cannot create index: index_name already exists.

"6BM6M4"jK6j?&j??X"4 #B?X

Description

\u7$ ^

ijB6"B  #B?X

nombre_indice

^?

tabla

4JX?X)

Sugerencia: Los ndices se utilizan principalmente para incrementar el rendimiento de


una base de datos. Sin embargo, un uso inapropiado de los ndices dar lugar a una
base de datos ms lenta.

??&4 6?B)+?&6h))Bh6?jiR&X?)R$#B?X 6 46X?X)


X&Bj&"MvX?&B8B8X?&B4v4B h)&Y BX?)6vvj(
j4vRjX?) lB#X?)6L^4)"l6Lh???))d64i?X)9?vJ)"4
 6$???)))v)!
#B?X$Rh?X?R  -h?R
#B?X h"
j"$4B"j
[X)h"M e)4 $ #?[???R)$?lX?)6
86hQi?R2lj)j"?BX?
Bi?jBvX&R)X?j )84B4jMint4_ops
vX)"1 e)h .  X?)6vvj)j"
iihQ4r?9)Jj?4)6h?vM)h
#?G
#?B?ivXj&"6?)#vB
 ?6B86?Bh)?&6h))B46Q&
Bi?j4B? j-+6)?
)??X)$B[[&))h?hH
B
B?XvX?)6 C  6jMURg ?" >Xnombre_funcion
?XiU$#h???))2)lXjB6?
)XX6
M
R?&dRj2)6)j[Cj)j"l8B&)?&BhL"4?$ #?4)?M Ch?
)B6&)X?j8))??X)??9)6)h


6h""jjX?jBMhj$)Xi42h"h"
QBR8R ?X#B?X6XB(
?j < jv)Xi4d"[9B?&?4&BRi?jv?"4Mv)?XjBX(
"iBX?Q  4B&)&(c)  J4j#2)XX6d"9?&?4&B4B)??#lR$(
?X?j#X)h?X[4h)BR
A2h&) +  
4j8)XX6B)6#rBl?&?4&& (
Ri?j8$?)?46?jB??B)?  ? /^? H r BX?jB)&jr?jr)?j?h&jrh???))j
6?)&4B)?B?X)Hjj
6hr
jj
M)XX6Q6j#Xj&?h)&Bh9?B (
&?X6)QBvBX6?h)^4Hj??))jJ?j?X)&BhX&vgX)6RJH\&?j
?jr
4jj
)XX6lB)6L6)h?X
Notas

Rh?&?))jrXB6?h)H 6h"KijB6?) $6h$6)BV


#?B?X-h"r
d)??4&"M#)h?hQ?B4)Q6?Bj?i)Q^B[Xj&))X?
M???XMBv?j
6??4B JI
& IK K& LK0 L
 6D (
#B?X
^4h?MRj
: &)X?)6MX6h9jc6JR7
(box)
"4 ;  ^?"BX?^Bh"8??R22
6i)^Xj"4caja
B)[
8X6\LBRi?
)\jJ)?&?H+i4X?B4r bigbox_ops
B
Nh)BhMM6M?6^"ji?K^&Y (
???X)X?jB66&)l "4h)28Xj"B)Rl^Bh"
Nh)BhL& )B H4
X)&)X)QB62"X4B?j[9R?"4   PB P;PP B?)49X)< (
)2 &)jJ$ #?^6???R)
 ^X?)6^8JR"i

bigbox_ops
poly_ops
6j
#B?Xrh4 ^Rj

poligonales
 Kjh?&?))jM^XjB6?h)[ 6h"[XjB6?)886^???R)B C?B?X
h"^6?&"^8)h?h?B4)&6 L?Bj?i) BLX&R)X?j
???XMBQ?r6??Bh JII
; QRI
. QRL
& LL
; S; T)K Q Q
#?B?X
 Kjh?&?))jM^XjB6?h)[ 6h"[XjB6?)886L???)RB&
B)66?&JQQ)?#
#?B?XQ6 Q?Bj?i)4B^X&R)X?j
???XMgj)j
=
j #)XX6 
#?B?X48&?Y (X?&B B
: Xh)?&BhKj? 
W_ 6J|
486X?X)KB)6h
ZX?)
lh???X\
[]X^`ja b [cd )??&?B)Hj
#B?X
6h???))J)9XjB6"?_
#?B?X4
6" (
 9X?)64)j"i
j9?B &")??RXj&int24_ops
))X?B49XBh)j9?Bh8 X)??X)X?jB9vijB6?)
6jF
#?B?X-j"$)jK?Bh$44v6Jij&))j
&??)&4B4
X^)h?B int42_ops
^?)ijB6?)
 6??4BM??6h94?Xc4c4?c jr?Bj&"4r 4). 


SELECT am.amname AS acc_name,


opc.opcname AS ops_name,
opr.oprname AS ops_comp
FROM pg_am am, pg_amop amop,
pg_opclass opc, pg_operator opr
WHERE amop.amopid = am.oid AND
amop.amopclaid = opc.oid AND
amop.amopopr = opr.oid
ORDER BY acc_name, ops_name, ops_comp

Usage
)X4)- #?B?XM^gX)&

ttulo

^?h)?

pelculas

CREATE UNIQUE INDEX ndice_ttulo


ON pelculas (ttulo);

Compatibilidad.
SQL92

 B94hB6?jL4j?BhM
^QBRQ^X&RB \u7$ ^  k p)c
FWX:F
 *  

6"

CREATE LANGUAGE
Nombre
CREATE LANGUAGE

BMLB4cv?B6\M)BX?jB

Synopsis
CREATE [ TRUSTED ] PROCEDURAL LANGUAGE langname
HANDLER call_handler
LANCOMPILER comment

Entradas
W 

*
6X?X##&)B?J?)2)#?B6\dv6"1 8vX?h
TRUSTED
B"X2LR?BQ????)QB)rBX?BR??)6"RR&(
^?)$"6?Xi?jB 9)XX6 c6l)?)2 j&??lBjBX)c"4?6h)4
?Bh4j6?L6R?jij&????L24")? 6h"j)???R)
6?4B6\MRX"i)KB4cRrBX?B4rX&Qg?B6\{
B  BU

langname
 Bj&"#4B4c?4B6\#"ji4?&Bh) ^C6#?"BX?) &)MX?)
&?& X?) dB&"9c?4Bh l
 d?B6\["ji4?&Bh)B^4
4J4B?HB?j
?4B6\?BXj) jh"4 9 jh4

m :  * W

call_handler

4BBj&[[Bl BX?j "?&Bhl"?6)[l6


? ?call_handler
)&))M\X)K?jr"ji4?&?Bh )

comment
 g)"&B

?X)4B 4?B4h)jM)h?h
LANCOMPILER
 Q?8
BL4B)
???)
;: Xh)?&Bh j6"2B&hLANCOMPILER
pg_language
6R?v)MB?BML

Salidas
CREATE

hM&B6)M?hQ6jj?B6\MX4)JQij +?

ERROR: PL handler function funcname() doesnt exist

hM"K4c?hQ6j?BX?

cBBXjB)

funcname

Descripcin

lh???))B \u  ^  6)?


6h"vd"4?6)9 B4c
?B6\[ jh4 : XjB?B)X?jB?) Bi?jBM#JjXB?&?Bj{%w?$%<(
d4B?j #4h2c4c^?4B6\ C c6)?^4B?c??4?j.(

")?

j6")"?h)-LBQ?4B6\

Escritura de manipuladores PL

B&)B?J?Rr2??)&)R$)l&?c6\[JjX?&Bh)B26
6X?^&
?B6\8Xj&??)&X&|B  B"4?6)B  j64[ij& BLBX?j 6?C)")(
&Bh2 ??B&4Kh?&RJXBhBjM)h?[B&4B?2&4l(
X?iR <  6h&?8K&RB??)jQ??)&)R968??)&)#?"X)&4B
X&vB9 BX?jL6XB6?h)
v&Rj?j)"&4BjK4Q6J&?B?X)jKv?$??)&)$X)B2B$ & (
X? ) L"X?&?BL?4$4&J?B6\l"?#jrJ&)B??)
6vh. (
Xh)


 )B2-??)&)4)6jrh?46 B?X[)"&BH;
* R4\h
h &R9?9B)99JjXB?&?B
' j2?[4&)
?Bj&Ri?jL
6j?4BXBh)^jBpg_proc
h"l?j)  "B  ? * R
2  RB4v??R&)6^46h98 BX?jB6-?l)"&Bjl6 
* 
j4h4^2?vBhR
4c"ji4?&?BhgB& &"^2)"&Bhj4B"< (
)jM?BX? ) pg_proc
4?)"&4BjB4h"ih 3 &$ KR?Q8Bh"
Lj?4)BQjB2BX?jL?Bj&64gcR?K"hBlg)?
   
k 

^RB(

"6jB6)???)&)B??)j??)&R)
j4B?2Bh)
??))Kj)"BQ?JrM"jBj"ji4?&?BhQ??)&R 9 9Xpg_proc
?)6? :l 
v?
\
ut
@  \_  4-"jXJ?&?4B&4h))6)Q )h?h
R?
4&?&2X1(
 66J+h9B4v4)?B6\r"X?&BRprosrc
pg_proc

&8   X? +B["h2ldXB"QLX)??4hlXj22??B?[RB)B?
MB)XK84)??

Notas

lh???X \u7M \X$ 

 )Mi"i)KB9BX?j
lh???X \    ^ )??&?BR?B6\"ji4?&?Bh
)M)r?Bj&Ri?jX

W 4#?R ?9R?
pg_language

Table
= pg_language
+-----------------+-----------------+-----+
|
Field
|
Type
+-----------------+-----------------+-----+
| lanname
| name
| lancompiler
| text
+-----------------+-----------------+-----+

| Length|
|
|

32 |
var |

lanname |lancompiler
-----+--------internal|n/a
lisp
|/usr/ucb/liszt
C
|/bin/cc
sql
|postgres

 "
 !# $%$'&)(*+-,/.0# &/1 24365879&/& :-+-1 &/$;3=<>. 3?%# +@&/$'+-A4# CBD$"1 $E. 3?27$'1 ,/(*,/$;+-F82GH1 $'I4$EGC$'3
3J$'A4,/GKF3=;1 2L$'+%M 2GCF8A43J$'G>$'+%$;&N&/$'+-A4# CBD$6OPQORS:-$'3J$'1 QF821 G>&/G>7.0'7,/1 1 $;GUTV3?$;GKF3?,/797,/2+-$'G
1 $&/G W8# +-7,/24+-$;GX1 $OYP6O[Z
\V7F# &/(*$'+-F$'R&/G)1 $;] +-,/7,/2+-$'GU. ^3=X# +_&/$'+-A# `B$X1 $a. 3J27$'1 ,/(*,/$'+-F24G)+-2b. # $'1 $'+VGC$'3 (*2c
1 ,/] 79^1 'Ga# +-Hd$'ef!# $g:-+hGC,/1 2_793J$';1 GZ

Uso

i GCF8f$;Ga# +-H. &/^+-F8,/&/&/H. ^3=# +j(*^+-,/. # &/1 23>$'+hOPQO[k


#include
#include
#include
#include
#include
#include
#include
#include

"executor/spi.h"
"commands/trigger.h"
"utils/elog.h"
"fmgr.h"
/* for FmgrValues struct */
"access/heapam.h"
"utils/syscache.h"
"catalog/pg_proc.h"
"catalog/pg_type.h"

Datum
plsample_call_handler(
Oid
prooid,
int
pronargs,
FmgrValues
*proargs,
bool
*isNull)
{
Datum
retval;
TriggerData
*trigdata;

lm^n

if (CurrentTriggerData == NULL) {
/*
* Llamado como una funcin
*/
retval = ...
} else {
/*
* Llamado como un procedimiento "trigger"
*/
trigdata = CurrentTriggerData;
CurrentTriggerData = NULL;
retval = ...
}
*isNull = false;
return retval;
}


2 &/(*$;+-F8$V# +-2GH. 2724Gf(*,/&/$'Gg1 $_&//+-$;G1 $_741 ,/A42F,/$'+-$'+!# $_GC$'3Q-1 ,/1 ;Gf$;+d $;eE1 $
&/24Gw. # +-F82GX. ^3=H72(*. &/$'F3>$;&OM 7&/&:-+-1 &/$'3SO $'H w LhaJh. ^3=H,/+-W823Jc
(*7,/4+hGC2I3J$6792(*2%72(*. ,/&/3?&/2E$'+h# +h(*41 # &/2%73JA I4&/$Z
2GGC,/A# ,/$;+-F8$'G724(*+-1 24G $'+-F24+-7$'G3?$;A,/GCF3=+b$;&'&/$'+-A#NBD$a1 $a. 3J27$'1 ,/(*,/$'+-F2G1 $>(*# $'GCF83?-k
CREATE FUNCTION plsample_call_handler () RETURNS opaque
AS /usr/local/pgsql/lib/plsample.so
LANGUAGE C;
CREATE PROCEDURAL LANGUAGE plsample
HANDLER plsample_call_handler
LANCOMPILER PL/Sample;

Compatibilidad
SQL92
 w " VhhLVhE$'GU# +-6$'F8$'+-GC,/+%1 $wM 24GCFA3J$'GZJh2b$',/GCF8$X# +-GC$'+-F$'+-7,/ V
a VhhLVhj$;+ N 4Z

CREATE OPERATOR
Nombre
CREATE OPERATOR

lm

$'] +-$g# +j+-# $;d 2_24.0$'3=^1 243)1 $g# GC# 3?,/2

Synopsis
CREATE OPERATOR name ( PROCEDURE = func_name
[, LEFTARG = type1 ] [, RIGHTARG = type2 ]
[, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
[, RESTRICT = res_proc ] [, JOIN = join_proc ]
[, HASHES ] [, SORT1 = left_sort_op ] [, SORT2 = right_sort_op ] )

Entradas
name

i &24. $;3=1 243)f1 $'] +-,/3=Z`'^+-GK$g(*^GwI4?BD2%&/24Ga73?7F8$'3J$9Gw.0$'3=(*,/F,/1 2GZ

func_name

fW8# +-79,/+j# F8,/&/,/e^1 g. 3?f,/(*. &/$;(*$'+-F8^3>$'GCF$2. $'3?1 23`Z

type1

i &F,/. 2*1 $_&/". 3?F8$L,/e!# ,/$'3J1 %1 $;&2. $'3?1 23R4GK, . 3J279$;1 $Z i GCF8%2. 7,/4+1 $'I4$'3?EGK$;3
24(*,/F,/1 H. 3?g# +h2. $'3?1 23U# +-3?,/2E.0243U&/f1 $'3J$'7:-4Z

type2

i & F8,/. 2.03=V&/%. 3?F8$L1 $'3J$S7:-%1 $;&024. $;3=1 243R4GC, . 3J247$'1 $4Z i GCF8E2. 7,/+1 $;I$;3=_GC$'3
24(*,/F,/1 H. 3?g# +h2. $'3?1 23U# +-3?,/2E.0243U&/f,/e!# ,/$'3J1  Z

com_op

i &792(*(*# F8^1 243U. 3?g$'GCF$g24. $;3=^1 243=Z

neg_op

i &+-$'A^1 243). 3?f$'GCF$2. $'3?1 23`Z

res_proc

fW8# +-79,/+j$'GCF8,/(*1 243?f1 $3J$;GKF3=,797,/+jGC$;&/$'7F8,/df. 3?g$;GKF$g2. $'3?1 23`Z

join_proc

?J??`?J???? : $BD24,/+GC$'&/$;7F8,/d,/F8T$;GKF,/(*F243gW8# +-7F8,/2+@W823F:-,/GL24. $;3=F23`Z ?J?`??J??? 


W# +-7,/+h$'GCF8,/(*1 23U1 $9

\ h
i
+-1 ,/7f!# $g$;GKF$g2. $'3?1 23)GC2. 23=FH# +j^&/A23=,/F(*2%:-GC:-cBD24,/+-9Z
left_sort_op

. $;3=^1 243)!# $g23J1 $'+-f$'&F,/. 2E1 $61 F2_1 $g&/g. 3?F8$,/e^!# ,/$'3J1 g1 $$'GCF8$2. $'3?1 23=Z

right_sort_op

. $;3=^1 243)!# $g23J1 $'+-f$'&F,/. 2E1 $61 F2_1 $g&/g. 3?F8$1 $;3J$S7:-H1 $$;GCF8$g2. $'3?1 23=Z

lm^

Salidas
CREATE

$;+-GK`B$g1 $;d # $;&/F82VGC,4$;&42. $'3?1 23)$'Ga793J$91 2_792+h',/F82Z

Description

 w Eh w h1 $;] +-$w# +V+-# $'d2b24. $;3=1 243R



Z i &# GC# 3?,/2b!# $w1 $'] +-$w$'&^24.0$'c
name
3=^1 243GC$g724+-d,/$'3?F$g$'+hGC#. 3J2. ,/$'F3,/2Z
$;Gb# +-jGC$'7# $'+-7,/h1 $%:-GCF8hF83J$',/+-F"T1 24Gb58^< 73?7CF8$;3J$'Gb724+@79# ^&/c
i &)2. $'3?1 23
!# ,/$'3?f724(*I4,/name
+-^79,/+j1 $&/2EGC,/A4# ,/$'+-F$k
c 9H w"k

Nota: No se permite ningn caracter alfabtico en un nombre de operador. Esto permite a Postgres analizar la entrada SQL en elementos sin requerir espacion entre cada
elemento.

& 24. $;3=1 243a U$'GQ724+-d$'3?F,/1 2"V V $'+&/L$;+-F83?1 R. 23a&/2"!# $bGK2+$'+724+-GC$'7# $'+-7,/
i 4
$'!# ,/d&/$'+-F$'GZ
M 243a&/2"(*$;+-24G6# +-2"1 $H i 4 \V 2h h \La1 $'I4$'+GK$;3 1 $'] +-,/1 2GZ9M 3?b24. $;3=1 243J$'G
I4,/+-3?,/24GCR(*I42G1 $'I4$'3?+*GC$'3w1 $'] +-,/1 2GZSM 3=L2. $'3?1 23?$;GQ# +-3?,/24G. 23w&/_1 $'3J$;79:-^R GC24c
&/(*$'+-F$V i 4 \La1 $'I4$;3=EGC$'3X1 $'] +-,/1 2R4(*,/$'+-F3=^Gf!# $L$'+24. $;3=^1 243J$9G# + 3=,/2Gg. 243X&/
1 $'3J$97:-HGK2&/(*$'+-F$g h \La1 $'I4$'3?/gGK$;3U1 $;] +-,/1 2)Z
1 $'I4$H:-I4$'3wGC,/1 2h. 3J$'d,/'(*$;+-F8$V1 $'] +-,/1 2j# F,/&/,/c
^(*I,/;+-R $;&-. 3J247$'1 ,/(,/$'+-F82
func_name
e+-1 2% waLhaJh
Tj1 $'I4$fGC$L1 $;] +-,/1 2".03=L7$'. F;3X$;& +- (*$'3J2h7243?3J$'7F82E1 $
3JA # (*$'+-F24Gw5I4,/$;+j# +-2_2E1 2GC<CZ
i &>2. $'3?1 23H72(*(*# F81 243b1 $'I4$'3?/hGC$'3H,/1 $'+-F8,/] 71 2GK,>$;N,/GCF$j# +-24R. ^3=j!# $M 24GCFA3J$'G
. # 1 ,/$'GC$*,/+-d $;3=F,/3h$'&623J1 $'+1 $&/24G24.0$'3?+-1 24GjGC,&/21 $;GK$;-Z-M 23h$=BD$'(*. &/2Ra$'&2. $'3?1 23
3J$9c8(*$'+-243Jc8!# $;R VV R1 $'I4$;3=H. 3J24I4I4&/$'(*$;+-F8$HF8$;+-$'3a# +2. $'3?1 23a724+-(*# F1 23a3J$';c
(*T4243Jc8!# $ VV Z $_$'GCF8%W823=(*^R4$'& 24.0F8,/(*,/e1 243X1 $_724+-GC# &/FGf.0241 3?/_792+-d$'3?F8,/3Q&/,/I3J$;c

(*$'+-F$k
"0,0,1,1"::box



MYBOXES.description


MYBOXES.description



"0,0,1,1"::box

i CG F82.0$'3=(*,F8$E&/%$=BD$'7# 7,/4+1 $_741 ,/A42*. 3?%# F8,/&/,/^3GC,/$'(*. 3J$_&/" &/F8,/(*"3J$'. 3J$9GC$'+-F8^79,/+@T


GC,/(*. &/,/] 7H&/A42E$;& 24. F,/(*,/e1 243=Z

lm

$hW823=(*jGK,/(*,/&/^3R GC,>$'N,/GCF$h# +2. $'3?1 23f+-$'A41 23H$;+-F82+-7$'GV1 $'I4$'3?GC$'3f,/1 $'+-F,/] 79^1 2)Z

# .024+-A4(*2Gg!4# $b# +*2. $'3?1 243RN3J$';c8,/A# &/R R$'N,/GCF$'RTF8^(*I4,/'+# +*2. $'3?1 23a3J$';c
+-24c8,/A4# &/R Z i & +-$;A^1 243U. $'3?(*,/F8$6&24. F,/(*,/e1 23)GK,/(*.0,/] 73
NOT MYBOXES.description === "0,0,1,1"::box


MYBOXES.description !== "0,0,1,1"::box


, $;& +-2(*I43J$E1 $_# +2. $'3?1 23X792(*(*# F1 2436$'GHGC# (*,/+-,/GCF83?1 2R M 2GCF8A43J$'Gg&/2I4# GK7%$'+$'&
7F8;&/24A42Z , $'G6$'+-72+-F83?1 2h$L+-2hF,/$'+-$b +# +*724(*(*# F1 23X;&-(*,/GC(*24R4$;+-F82+-7$'G&/V$;+-c
F83?1 L1 $'&072(*(*# F81 23X$'G7F8# &/,/e^10E.03=VF8$;+-$'3X$'&03J$'7,/$'+73J$';1 22. $'3?1 23w792(*2GC#
724(*(*# F1 23`Z i GKF2EGC$g.0&/,/79f^& +-$'A41 243R^F(*I4,/'+ Z
i GCF82h$'GQ.03=L. $'3?(*,/F,/3a&/_1 $'] +-,/7,/+1 $L1 24G62. $'3?1 23J$SG6!# $bGC24+*72(*(*# F81 23J$'GQ1 $H&/2G
+-$'A41 23?$9G"1 $71 *# +-21 $&/2Gh24F3J24GZ i &X. 3?,/(*$'3L24. $;3=1 243V1 $'I4$'3?/1 $'3L1 $'] +-,/1 2GC,/+
# +72(*(*# F81 243g2*+-$'A41 2358724(*2GC$'". 3J2.-,/^1 24<`Z^P6# +-1 2*$;&GC$'A4# +-1 2*2. $'3?1 23$'G
1 $'] +-,/1 2R GC$h1 $;I4$"+-2(*I43=^3H$;&U. 3?,/(*$'3J2792(*2$'&U72(*(*# F81 23H2+-$;A^1 243=Z i &U. 3?,/(*$'3J2
GC$'3=g7F8# &/,/e;1 2_792(*2%# +h$'W8$'7F2_&/F$'3?&Z`5 i +"M 2GKFA3J$;GX-Z ;R$'GCF82_F8(*I4,/;+jW8# +-7,/2+-H. 3?
GC,/(*. &/$'(*$'+-F$g!# $g(*I42Gw2. $'3?1 23J$9GwGC$g3J$'] $'3?+"& 2F83J2<`Z
2G_GC,/A4# ,/$'+-F8$;GEF3J$'GL$'GC. $'7,/] 71 243J$9G_$'GCF8+. 3J$;GK$;+-F8$'GL.03=j# N,/&/,/^3f&>24. F,/(*,/e1 243f1 $
724+-GC# &/F8^Gh&X3J$';&/,/e3_# +-,/2+-$'Gj58/B2,/+-GC<`Z M 2GKFA43?$;GhGK,/$;(*. 3J$*. # $;1 $$'d&/# 3V# +-# +-,4+
58,Z $Z R9. 3J247$'GC+-1 2b# +-67&/# GC# &/72+%1 2G d3?,/I4&/$'G1 $XF8# . &/G>GC$'. ^3=;1 GU. 23# +%2. $'3?1 23
!# $g3J$'F243?+-2V# +jI4224&/$'^+-24<-. 23>GC# I4GKF,/F8# 7,/+,/F$'3?F,/d " "b`Z=\L1 $'(*GCRM 24GCFA3J$'G $;G
7. 'eH1 $H# F,/&/,/e3U# +&/A423=,/F(*2%:-GC:-cBD24,/+-UGK,/A4# ,/$'+-1 2E&/GX&/+-$'GX1 $% \LM '8GC,/+j$'(*c
I43JA 24R1 $;I4$hGCI4$'3HGC,>$'GCF8$;GKF3?F8$;A,/j$'GV. &/,/7I4&/$Z i GV&/A423=,/F(*2@:-GC:-cBD24,/+ g7F# ^&U$'G
GC24&/(*$;+-F8$7243?3J$'7F2@. 3?24.0$'3?1 243J$;GE!# $3J$'. 3J$9GC$'+-F8^+F$'GCF8G%1 $,/A# &/1 1 1 $'(*^GE&/
,/A# ^&/1 1@1 $'& F8,/. 2*1 $%1 F821 $'I4$_GC,/A+-,/] 73g,/A4# &/1 1@"+-,/d$'&)1 $EI4,/FGH1 $E&/"3J$'. 3J$9GK$;+-F8c
7,/4+1 $'&)F,/. 2Z58M 2436$=BD$'(*. &/2R # +@F,/. 2*1 $%1 F2!# $%792+-F,/$'+-$hI4,/FGb+-2*# F8,/&/,/e^1 2Gb!# $%+-2
F8,/$;+-$'+3J$'. $93J79# GC,/+. 3?VF8$'GCFGf1 $_,/A4# &/1 1. 241 3?/V+-2GC$'3Q# GC1 2$'+$;& :-^GK:-cBD24,/+ <CZ i &
,/+-1 ,/71 23 \ "i ,/+-1 ,/7%& 24.0F8,/(*,/e^1 2431 $_792+-GC# &/F8GH!# $E# +:-GC:"B2,/+. 24# 1 $EGC$'3
# F8,/&/,/e^1 2_1 $W8243?(*HGC$'A4# 3?f. 23>$;GCF8$2. $'3?1 23=Z
$W8243?(*f. ^3?$97,/1 R^&/2Gw1 24G 2. $'3?1 23?$;G>1 $23?1 $'+",/+-1 ,/7+"& 2. F8,/(,/e1 23U1 $6792+-GC# &/F8G
GC,&/Q$'GCF83?F$'A4,/6(*$;e7&/3JcD243J1 $;+-3 $'G)# F8,/&/,/eI4&/$wTL!4# $X2. $'3?1 23J$'G)1 $;I$;3='+_GC$'3 # F8,/&/,/e^1 24G
. 3?f23?1 $'+-3)&/GX7&/GC$'Ga1 $g&/2GQ1 24Ga2. $'3?1 23?$;GZK 24Ga24. $;3=^1 243J$'Ga1 $g23J1 $'+h1 $'I4$'3?/;+jGK$;3
GC# (,/+-,/GKF3=^1 24GGC2&/(*$'+-F$V. 3?_# +*2. $'3?1 23w1 $L,/A4# &/1 1 R T1 $;I4$'3=+*3J$;W$;3,/3=GC$VV24.0$'c
3=^1 243J$9Gw(*$;+-243Jc8!# $g. ^3=&/24GwF8,/. 2Gw1 $&/H. 3?F8$Q,/e!# ,/$'3J1 gT%1 $'3J$97:-H3J$'GC. $'7F8,/d;(*$'+-F8$4Z
, 2F83?Gf$'GCF83?F$'A,/^GH1 $_# +-,/+GC24+724+-GC,/1 $'3?1 Gg. 3?7F8,/7GCRM 24GCFA3J$'Gf79^(*I4,/3=%$;&2. F,/c
(*,/e1 23 $'+%F,/$'(*. 2L1 $Q$=BD$'7# 7,/4+%.03=6# F8,/&/,/e^3=&/^GUTV3?$;!# $'3?,/3=^+E$'GC. $'7,/] 77,/4+E1 ,/7,/24+-&
7# ^+-1 2# +2. $'3?1 23VGC$'*1 $'] +-,/1 2Z \LW8243?F8# +-1 (*$'+-F$'R)&/72(*# +-,/1 1,/+-d $;GKF,/A^1 243?
,/+-d$'+-F8_+-# $;d ^Gg$;GKF3?F8$;A,/G61 $V# +-,/4+,/+-W83J$'7# $'+-F$'(*$'+-F$'RT&/EA4$'+-$'3?&/,/1 ^1-1 ,/1 L1 $
$'GCF83?F$'A4,/G>1 $'] +-,/1 Ga. 23>$'& # GC# 3?,/2E+-2%(*$;3?$;7$6&/H724(*.0&/$=BD,/1 13J$'GC# &/F8+ F8$Z
G61 2G &/F,/(*G. ,/$'e^G61 $L&/_$'GC. $'7,/] 77,/+$'GCF+*. 3J$'GC$'+-F$'G6. 3?V!4# $V$'&02. F8,/(*,/e^1 23
. # $'1 $'GCF8,/(*3U&/24GaF(*-2Gw1 $6&/24Gw3?$;GK# &/F1 2GZ , # +-H7&/# GC# &/f1 $&/HW823?(*-k
MYBOXES.description



"0,0,1,1"::box

$'GCF8Q. 3J$'GC$'+-F$w,/+E&/6 7# &/,/] 77,/+-R;$;+-F82+-7$'GCM 2GCF8A43J$'GU. # $;1 $wF8$'+-$;3 !# $Q$;GCF8,/(*3 &/QW83?779,/+
1 $%,/+-GKF+-7,/GL$'+
 V i !4# $hGCF,/GKW87$'+&/j7&/# GC# &/-Z jW8# +-7,/4+
1 $'I4$
GC$'3># +-LW8# +-79,/+j3?$;A,/GCF3=1 H5&/2E!# $bGC,/A4+-,/] 79b!# $HT4L$;GKFH1 $'] +-,/1 b# F8,/&/,/res_proc
e^+-1 2" w
Lh ?h"<8R7$'. Fb3JA# (*$'+-F2G61 $'&-F,/. 2h7923?3J$'7F82hTj1 $'d# $'&/d$b# ++-# ($'3J2j$;+. # +-F2

lm^


2 F8^+-F8$Z i & 2. F8,/(*,/e^1 2436GK,/(*.0&/$'(*$'+-F$"&/&/^(*%h$;GKF%W8# +-79,/+-R . GC+-1 2&/$E$'& . 3?(*$'F3J2
R;RRTb(*# &/F,/. &/,/7Q$'&3J$;GK# &/F1 2H. 23 $;&F(*-2H1 $w&/X3J$'&/^79,/+V. 3?X24I4F$'+-$'3 $;&1 $;GK$;1 2
+-# (*$'3J2V1 $g,/+-GKF+-7,/Ga$'GCF8,/(*^1 2)Z
P6# +-1 2h(*I42G24. $;3=^+-1 24G1 $'& 24. $;3=^1 243w724+-F,/$'+-$;+*d ^3=,/I4&/$;G61 $L,/+-GCF8^+-79,/^R4$'&-2. F8,/(*,/c
e1-243a1 $;I4$f$'GCF8,/(*3a$;&F(*-2"1 $f&/L# +-,/4+3?$;GK# &/F+-F$ZC bW8# + 79,/+_BD24,/+-^. 3J2473J$'F23=+-3[
24F3J2h+-# (*$'3J21 $;79,/(*^&0!# $VGC$'3?_(*# &/F,/. &/,/71 2. 23X&/G673J1 ,/+-&/,/1 ;1 $'G1 $L&/^Gg1 24G7&/GC$'G
$'+-d# $'&/FGa$;+h$'&79(*. # F2E1 $'&F(*-2V$'GC. $'3?1 2Z
f1 ,/W8$'3J$9+-7,/f$'+-F3J$&/HW8# +-79,/+
my_procedure_1 (MYBOXES.description, "0,0,1,1"::box)

TE$;&42. $;3=1 23


MYBOXES.description === "0,0,1,1"::box

$'GH!4# $'M 24GCFA3J$'Gf,/+-F8$'+-F"24.0F8,/(*,/e3624. $;3=^1 243J$9GbT*. # $;1 $_1 $'7,/1 ,/3Q# F,/&/,/e36# ++-1 ,/79$E. ^c
3=%3J$;GKF3=,/+ A,/3$;&$;GK. ^79,/21 $EI4 GK!4# $'1 "79# ^+-1 2. 3$'7$'+24. $;3=1 243J$9GZ ,/+$'(*I43JA2R+-2
GC$g,/+-F8$'+-FL24. F,/(*,/e3UW8# +-7,/2+-$'GCR T%GK2+$?B$;79# F1 Ga(*$'1 ,/^+-F8$gW8# $'3?eHI43J# F8-ZC\L1 $'(*GCR&/G
W8# +-79,/2+-$'Ga. # $'1 $;+"F8$'+-$;3>7# &/!# ,/$'3)+- (*$'3J2_1 $g3JA# (*$;+-F82G (*,/$'+-F83?Ga!# $g&/2GX2. $'3?1 2c
3J$'G $'GCF8+"3J$;GKF3?,/+-A,/1 2Gwg# +-2%2E1 2GZ

Notes
a$;] ;3=GC$&w7. /F# &/2GC24I43J$2. $'3?1 23?$9G"$'+&/G" v|?s-}?4VX|??} |_tYL. 3?(*G",/+-c
W8243?(*7,/4+ ZSa$'] '3?GC$LEhhh w h. 3?_I423=3?3w2. $'3?1 23?$9G1 $'] +-,/1 2Gf. 23X$'&
# GK# ^3=,/2V1 $g# +-fI4GC$1 $1 F82GZ

Utilizacin Usage

i &GK,A# ,/$'+-F$H792(*+-1 2"1 $;] +-$# ++-# $'d2%2. $'3?1 238R3J$;'c8,/A4# &/1 1 R. 3?f$;&F,/. 2"1 $g1 F2
V Z
CREATE OPERATOR === (
LEFTARG = box,
RIGHTARG = box,
PROCEDURE = area_equal_procedure,
COMMUTATOR = ===,
NEGATOR = !==,
RESTRICT = area_restriction_procedure,
JOIN = area_join_procedure,
HASHES,
SORT1 = <,
SORT2 = <
);

lx

Compatibility
SQL92
 w h wah,/GhM 2GCF8A43J$'G"$'F8$;+-GC,/24+ Z :-$;3J$,/G%+-26 wah w h

GCF8F$'(*$'+-F,/+ 4Z

CREATE RULE
Nombre
CREATE RULE

$'] +-$g# +-H+-# $;d g3J$'A&/

Synopsis
CREATE RULE name AS ON event
TO object [ WHERE condition ]
DO [ INSTEAD ] [ action | NOTHING ]

Inputs
name

i &+-24(*I43J$g1 $&/g3?$;A&/gf73?$;3JZ

event

i d $;+-F8$g. # $;1 $GC$'3

object

I;BD$'7F-. # $;1 $GC$'3

select update delete

table

table column

insert

condition

PQ# &/!# ,/$'3?H7&/# GC# &/ N  h


2
. # $;1 $'+h. 3J$97$'3>$;+&/# A43>1 $
i i Z
new
# +-Ld3?,/I4&/$f1 $H,/+-GKF+-7,/ ?J CG ,/$'(*. 3J$f
!# $b# current
+-Vd3?,/'I4&/$H1 $H,/+-GKF+-7,/L$'GQ1 (*,/GC,/I4&/$
$'+ N XZ

action

P6# &/!# ,/$;3=L7&/# GC# &/ N XZ


2
. # $'1 $'+.03J$S7$'3w$'+&/# A3w1 $b# +-_dc
3=,/I4&/$1 $,/+-GKF+-7,/ ?J CG ,/$'(*new
. 3J$!# current
$# +-*d3=,/^I4&/$1 $,/+-GCF8+-7,/*GC$'*1 (*,/GC,/I4&/$$'+
XZ

lx^l

Salidas
CREATE

$;+-GK^A$1 $'d# &/F8$gGC,&/f3J$'A4&/f$'G 73?$;1 g72+h',/F82Z

Description

& M 2GCF8A43J$'Gb}?t4u|?|JsJV. $;3=(*,/F$E!# $E# +-j7F,/24+&/F8$;3=+-^F8,/d%GC$'"3?$;'&/,/e^1 %$'+# .01 F8$;GKR


i
,/+-GC$'3?F8GQ2"1 $;&/$'F8$;GQ$'+F8I4&/Gw2"79&/^GK$;GZ\V7F# &/(*$'+-F$fGK$H# F8,/&,/e+3J$'A4&/Gw. 3?L,/(*.0&/$'(*$'+-F3
d,/GKFG 1 $gF8^I4&/GZ
i &'GK,A+-,/] 71 2b1 $a# +-Q3J$'A4&/X$'G!4# $Q7# +-1 2g# +-6,/+-GCF+-7,/Q,/+-1 ,/d ,/1 # ^&$;G)77$'10,/1 R7F8# c
&/,/e1 ;R ,/+-GC$'3?F1 b2"I4243?3?1 R$',/GCF8$H# +-V,/+-GCF+-7,/V7F# &58. ^3=H72+-GK# &/FGCR7F8# ^&/,/e'7,/2c
+-$'G TEI423?3=1 24GC<T_# +-g+-# $'df,/+-GCF8^+-79,/g5. ^3=67F8# &/,/e^'7,/2+-$'GwT_-1 ,/1 24GC<`Z ,N$'&
$'GC. $'7,/] 7102$'+&/j79&/# GC# &/ T@&/
$'GC. $;79,/] 71 h$'+&/j79&/# GC# &/hevent
hi c
i GC24+d$'3J1 ;1 $'3?GQ. ^3=b&/L,/+-GKF+-7,/Lcondition
79F# &&/V. 3?F$
1 $b&/L3J$'A4&/L$;GQ$=BD$'7# F81 -Z
\V+-F$'GCR;GC,/+%$;(*I43JA2R;&/2G d ^&/243J$'G1 $6&/2G>7(*. 2G>1 $Q&/,/action
+-GCF8+-7,/67F8# &T 2_&/6+-# $'dg,/+-GCc
F8^+-79,/fGC2+hGK# GCF,/F8# ,/1 2GX. 23
T
Z
current.attribute-name new.attribute-name
. 3?F$
1 $&/3J$'A4&/GC$$=BD$'7# F8724+$'&a(*,/GC(*2,/1 $'+-F,/] 79^1 243L1 $724(*+-1 2T
F83?+-GC77,/4action
+"!# $g$;&792(*+-1 2_1 $# GC# 3?,/2E!# $g7# GCE&/f^79F,/d7,/4+ Z

Notas
G . $;3=F,/+-$'+-F$w&/6.03?$;79;# 7,/4+_792+E3J$;A&/G 1 $ N wZ ,^$'&(*,/GC(*2L+-2(*I43?$w1 $w7&/GC$w2Hd3?,/I4&/$
i )
1 $H,/+-GKF+-7,/E. ^3[$'7$L$;+$'&
RN&/
Tj&/_. 3?F8$
1 $L&/V3J$'A4&/R GC2+
724+-GC,/1 $'3?1 2GF821 2Gf1 ,/W8$'3J$'+-event
F$'GF# .0&/Gcondition
Z $_W23?(*E(*Gg. 3J$'7,/GK^action
R
T
GC2+&/G
+-,/7GbF8# . &/^Gb!# $hGC2+724(*.03=F,/1 Gb$;+- F83J$%79&/^# GK# &/GZM 243g$=BD$'(*new
.0&/24R &current
GbGC,/A# ,/$'+-F$'GV1 2G
3J$'A4&/'GaF8,/$'+ $'+&/g(*,/GK(*HGC$'(*^+-F8,/7-Z
ON UPDATE TO emp.salary WHERE emp.name = "Joe"
DO UPDATE emp ( ... ) WHERE ...

ON UPDATE TO emp-1.salary WHERE emp-2.name = "Joe"


DO UPDATE emp-3 ( ... ) WHERE ...

P61 V3J$'A4&/E. # $'1 $LF8$'+-$;3Q$;& FA2. 7,/2+-& i \


Z ,/+*$'GCF$_F8^AR4&/
GK$;3=E3J$;'c
&/,/e1 _$'+^1 ,/79,4+& 792(*+-1 21 $_# GK# 3?,/27# +-1 2$'&
$;+&/". action
3?F$
event
1 $&/H3J$'A4&/g^. 3J$Se^79+>Z`\V&/F$'3?+-F8,/d(*$;+-F8$'R^&/H.03=F$
GK$;3=H3J$;'&/,/e1 fcondition
$'+h&/# A^3U1 $;&
724(*+-1 21 $;&U# GC# 3=,/2Z i +@$'GCF8$" &/F8,/(*279^GK2&/,+-GKaction
F$'124WwF:-$h# GC$'3f724(*(*^+-1XZ +@F8:-,/G
&/F$'3U7GC$'R;F8:-$
. # $'1 $GC$'3)&/H. &/^I43=79&/^d $
Z
action
NOTHING
P6# +-1 2gGC$a$'&/,/A4$a$'+-F83J$>&/24GGK,/GCF$'(*G)1 $a3J$'$'GC73,/F8# 3?XTb3J$'A4&/G 1 $a,/+-GCF8+-7,/X. 3?w# +-X.0&/,/79c
7,/4+j. 3?F8,/7# &/3U1 $f# +-L3J$'A4&/R3J$'7# $'3J1-$'GC$f!# $f$'+$;&GC,/GCF8$'(L1 $f3J$'$;GK73,/F# 3=^R
GC$
current
3J$'] $'3[$gf&/H3J$;&/7,/4+"T"^&/A# +-2Gw7# &/,/] 71 23?$;Ga(,/$'+-F83?Ga!# $f$'+h$'&GC,/GKF$'(*H1 $g
,/+-GCF+-7,/G
GC$3J$'] $'3J$6f# +-H,/+-GCF+-7,/H58F8# . &/<`Z
i GH(*# T,/(*. 23?F8+-F$E+-24F3g!# $E$'&GC,/GKF$'(*"1 $E3J$'$'GC73?,/F8# 3?%+-# +-79"1 $;F8$'7F3?%+-,. 3J279$;GCc
3=%3J$;A&/Gf79,/3J7# &/3[$;GZM 23g$=BD$'(*. &/2R-^# +-!# $"71 %# +-"1 $E&/GfGK,/A4# ,/$'+-F$'Gb1 2Gb3J$'A4&/Gg792+
7$'. F'1 ^Ga. 23UM 2GCF8A43J$'GCR$'& 724(*+ 1 2%1 $3J$'72A,/1 7# GC3=g&/f79^/1 1 $M 24GCFA3J$'GHk

lx

8'* 8' 8* D


94         ?
CREATE RULE bad_rule_combination_1 AS
ON SELECT TO emp
DO INSTEAD SELECT TO toyemp;
CREATE RULE bad_rule_combination_2 AS
ON SELECT TO toyemp
DO INSTEAD SELECT TO emp;

i GCF8$,/+ F8$'+-F2%1 $2I4F8$;+-7,/4+j1 $1 ^F82Gw1 $;GK1 $ i

M.03?2d2473?g&/g79^/1 f1 $6M 2GCF8A43J$'GZ

SELECT * FROM emp;

G +-$'7$'GC3?,/2*F$'+-$'3g. $;3=(*,/GC21 $E1 $'] +-,/7,/4+1 $%3J$;A&/Gb$;+@# +-h79&/^GK$%. 3?". 21 $'3g1 $'] +-,/3
i b
# +-*3?$;A&/$;+$'&Z $1 $'I4$# F,/&/,/e3V$;&w72(*+-1 2hLh T!L#"V. 3?(*21 ,/] 793
$'GCF82Ga. $'3?(*,/GK2GZ
i & 2I'BD$'F2E$;+j# +-g3?$;A&/ +-2_. # $'1 $GC$'3)# +-+-H3J$'W8$93?$;+-7,/ff# +h3?3=;T%T_+-2%. # $'1 $QF8$;+-$'3
. 3?'(*$;F83J2GZ
\V. ^3F8$X1 $'&79^(*. 2b24,/1 R;&/2G>F83?,/I4# F82GU1 $;&GC,/GKF$'(*6+-2L. # $'1 $'+_GC$'3 3J$'W8$'3J$9+-7,/1 2GU$'+E+ ,/+-c
A +_&/# A30$'+V# +-3J$'A4&/-Z i +-F3?$ 24F3=^GU792GCG)$;GKF2bGC,/A+-,/] 7!4# $Q&/G)W# +-7,/2+-$'GU1 $w,/+-GCF8^+-79,/^G
58. 243a$?B$;(*. &/2hR
1 2+-1 $
$;GQ# +-_7&/GC$'< +-2j. # $'1 $'+GC$'3a&/&/^(*1 GQ$;++-,/+-A +
emp
&/# A^3U1 $;+-F83J2V1 foo(emp)
$# +-H3J$'A4&/-Z
i & GK,GKF$'(*%&/(*7$;+-%$'& F8$'F21 $_&/%3J$'A4&/ET&/2Gb. &/+-$;Gf1 $_72+-GC# &/F8"724(*2^F83?,/I4# F82Gf1 $
F8$;NF2)Z i GCF82*,/(*.0&/,/79h!# $%&/"793J$'^79,/+1 $E3J$'A&/^GH. # $'1 $EW8&/&/36GC,)&/"3J$'A&/"(*GHGK# Gbd3?,/G
,/+-F8$;3=+-G 3J$'. 3J$9GC$'+-F7,/24+-$'Gw$'79$;1 $9+j^&/A +hd&/243U!# $g$'Ga1 $'& 23J1 $'+"1 $g# +-g. A,/+- Z

Uso

7$'3!# $ (

2IF$'+-A4f$'&(*,/GC(*2%CBD# GCF8$g1 $6GK^&/3?,/2E!# $


$82$k

CREATE RULE example_1 AS


ON UPDATE emp.salary WHERE current.name = "Joe"
DO UPDATE emp (salary = new.salary)
WHERE emp.name = "Sam";

\V& (*,/GC(*2*F8,/$;(*. 2*!# $$824$E3J$'7,/d$_# +`B# GCF$%1 $_GK^&/3=,/2R $'& $'d$'+-F82GK$;3=%d$'3J1 ;1 $'3J2T*&/
,/+-GCF8+-7,/L7F8# &-1 %
$ $82$bT&/L+-# $'dV,/+-GCF8^+-79,/V. 3J24. # $;GKFL$'GCF8+1 ,/GK.024+-,/I4&/$'G. 3?b&/G63J# c
F8,/+-^Gw1 $g$?B$;79# 7,/+ ZM 23 &/2%F+-F82R$'GCF8$g+-# $;d 2EGK&/^3=,/2_$'GXGC# GCF8,/F# ,/1 2%$'+j&/H. 3?F$g1 $g77,/4+
1 $6&/g3?$;A&/!# $$'G GC# I4GC,/A# ,/$'+-F$'(*$'+ F8$g$=BD$'7# F1 -Z i GKF2E.03?2. A4$;& GC&/3?,/2_1 &
$ $2$6 ^(Z
$ $824$g7# +-1 2E$'G 77$'1 ,/1 2k
7$'3!# $g ,/&/&2I4F8$'+-A4H$'&GC&/3?,/2V1 '
CREATE RULE example_2 AS
ON SELECT TO EMP.salary
WHERE current.name = "Bill"
DO INSTEAD
SELECT (emp.salary) from emp
WHERE emp.name = "Joe";

lx^m

$'+-$'A43 (
 $824$a$;&;779$;GK2g&;GC&/3?,/2f1 $>$'(*. &/$'^1 24G $'+L$'&'1 $;. 3?F8;(*$'+-F2H1 $ 7&/e;1 2f5
1 $'d# $'&/d$6$;&4+-2(*I43J$g1 $'& # GC# 3?,/2E7F# &/<`k
current_user
CREATE RULE example_3 AS
ON SELECT TO emp.salary
WHERE current.dept = "shoe" AND current_user = "Joe"
DO INSTEAD NOTHING;

P63J$93># +-fd,/GCF8H1 $$'(*. &/$;1 24G F3=^I4CB^+-1 2_$;+j$;&1 $'. 3F(*$'+-F$g1 $UBD# A4# $;F8$;GZ
CREATE toyemp(name = char16, salary = int4);
CREATE RULE example_4 AS
ON SELECT TO toyemp
DO INSTEAD
SELECT (emp.name, emp.salary) FROM emp
WHERE emp.dept = "toy";

21 2Gw&/2GX+-# $'d2Gw$;(*. &/$'1 2G 1 $'I4$'+h:-7$'3)-Z ;f2_(*$'+-2GZ


CREATE RULE example_5 AS
ON INERT TO emp WHERE new.salary > 5000
DO UPDATE NEWSET salary = 5000;

Compatibility
SQL92
& 72(*+-1 26 waV $'Gj# +-@$'F8$;+-GK,/+1 $*M 2GCF8A43J$'Gjh2$'N,/GCF$&/GC$'+-F$'+-7,/
i Q
 w V j$'+ 4Z

CREATE SEQUENCE
Nombre
CREATE SEQUENCE

P63J$'# +-H+-# $;d gGK$;79# $;+-79,/g1 $gA$;+-$'3?1 23U1 $6+-# (*$'3J24G

Synopsis
CREATE SEQUENCE seqname [ INCREMENT increment ]
[ MINVALUE minvalue ] [ MAXVALUE maxvalue ]
[ START start ] [ CACHE cache ] [ CYCLE ]

lxx

Entradas
seqname

i &+-24(*I43J$g1 $# +-HGC$'7# $'+-7,/f!4# $GK$;3=f73J$';1 -Z

b7&/# GC# &/


$'GQ2. 7,/24+-&Z*)V+d ^&/243a. 2GC,/F8,/d2h:-3?L# +-LGC$'c
79# $;+-79,/bGC7$'+-INCREMENT
1 $;+-F8$'R# +-2hincrement
+-$'A4F,/d 2":-^3=b# +-bGK$;7# $;+-7,/L1 $;GK7$;+-1 $'+-F8$4Z i & d&/23 . 243
24(*,/GC,/2+$;Gw# +-2E58<`Z

increment

minvalue

_7&/# GC# &/E24.079,/2+-&


1 $'F$'3?(*,/+-E$'&0d&/23Q(*,/+-,/(*2!# $V# +-
GK$;79# $;+-79,/a. # $'1 $aA4$'+-$'3?MINVALUE
3=Z i &'d&/230minvalue
. 2302(*,/GC,2+_$;GXTfc^+'+;+w. 3?wGC$'7# $'+-7,/G
GC79$;+-1 $'+-F$'G T%1 $'GC7$'+-1 $;+-F8$'GCR^3J$'GC. $;79F,/d'(*$;+-F8$Z

maxvalue

)VF,/&/,/7$6&/g7&/# GC# &/g2. 7,/2+-&


. 3?1 $;F8$'3?(*,/+-3$'&d &/23(*,/c
(*2%. 3?f# +-bGK$;7# $;+-7,/-Z`M 243 MAXVALUE
2(*,/GC,/2 +jGK2maxvalue
+j+;+,+HTEcH. ^3=gGK$;79# $;+-79,/^GXGC7$'+-c
1 $'+-F$'G T%1 $'GC7$'+-1 $;+-F8$'GCR^3J$'GC. $;79F,/d(*$'+-F$Z

start

H7&/# GC# &/b24. 7,/2+-&


:-^I4,/&/,/F8b&/HGC$'7# $'+-7,/L.03=H!4# $H72(*,/$'+-7$H$'+
79# &/!4# ,/$'3V&/# A43=Z i &wdSTART
&/23V1 $start
,/+-,/7,/2. 243L24(*,/GC,/2 +$'G
. 3?GK$;7# $;+-7,/G
minvalue
GC79$;+-1 $'+-F$'G T
. 3?g&/^Gw1 $;GK7$'+-1 $;+-F8$;GZ
maxvalue

cache

H24. 7,/2+
. $;3=(*,/F$f!# $f&/24Gw+-# (*$'3J24Gw1 $g&/HGC$'7# $'+-7,/HGC$'+j&/2;BD1 2G
cache
5.03?$9&/&/27F8$;CACHE
1 <)T*&/(*
7$'+-1 24Gg$'+(*$'(*23=,/%. ^3=%# +77$'GC2(*Gg3=.0,/1 2)Z i & d&/23
(*,/+-,/(*2V$;G)Q58GC24&/2bGC$X. # $'1 $aA4$'+-$'3?3 # +_d ^&/243 71 Xd $;eR,Z $ZGK,/+_77:-$'<TH$'GUF8^(*I4,/$'+
$'& d&/243U. 23U2(*,/GC,2+ Z

P6 P6 i
%. &/I43%7&/d$V5-4$'T.h23J1 <)P6 P6 i . # $;1 $VGC$'3Q# F# &/,/e1 _. 3?_. $'3?(*,/F,/36%&/EGC$'c
79# $;+-79,/a792+-F8,/+-# ^3 7# +-1 2f$;&^d&/2301 $
2H$'&'1 $
:-XGC,/1 2H&/7+-c
maxvalue
e1-2. 23Q# +-_GK$;79# $;+-79,/VGC7$'+-1 $'+-F$L2
1 $'GC7$'+-1 $'+-F$L3J$'GC. minvalue
$;79F,/d'(*$'+ F8$Z ,0$'& &/,/(*,/F8$
$'GU&/7+-e^102R'$'&NGC,/A4# ,/$'+-F$6+-# (*$'3J2LA4$'+-$'3?1 2bGC$'3?7# &/!4# ,/$;3=6!# $Q. 3?
minvalue
2
GC$'fF24(*^1 2E724(*2E. 3J24.0,/'1 2Z
maxvalue

Outputs

CREATE

$;+-GK`B$g1 $;d # $;&/F82VGC,4$;&472(*+-1 2_$'Gw$?B$;79# F1 2V724+h$',/F82Z

ERROR: Relation seqname already exists

,&/fGC$'7# $'+-7,/H$'GC. $;79,/] 71-bT4f$;N,/GCF8$4Z

ERROR: DefineSequence: MINVALUE (start) cant be >= MAXVALUE (max)

,$'& d&/23>1 $6,/+-,/7,/2%$'GC. $'7,/] 79^1 2_$;GKFfW8# $'3?f1 $3?+-A42)Z

lx^n

ERROR: DefineSequence: START value (start) cant be < MINVALUE (min)

,$'& d&/23>1 $6,/+-,/7,/2%$'GC. $'7,/] 79^1 2_$;GKFfW8# $'3?f1 $3?+-A42)Z

ERROR: DefineSequence: MINVALUE (min) cant be >= MAXVALUE (max)

,$'& d&/23>(*,/+-,/(*2ET%(*,/(*2EGC2+,/+-72+-GK,/GF8$;+-F8$'GZ

Descripcion

 w 0/ !1hV h_,/+-F3J241 # 7,/3?Q# +-+-# $'dQGC$'7# $'+-7,/6A4$'+-$;3=1 243?X1 $X+-# (*$'3J24G1 $'+-c

F83J2"1 $f&/L7F8# &I4GC$b1 $f1 ^F82GZ i GCF82h,/(*. &/,/7L&/V73J$'7,/2+$H,/+-,/7,/&/,/e7,/2+1 $H# +-V+-# $;d 
F8^I&/g1 $g# +-H&/,/+-$'H724+j$'&+-2(*I43J$
ZK fGC$'7# $'+-7,/HA4$'+-$'3?1 23?fGC$'3=H.03?2. ,/$'1 '1
1 $'& # GC# 3?,/2E!# $g$?B$;79# Ff$'&724(*^+-1 seqname
2)Z
$'. GC# $'GX1 $b!# $HGC$b73J$'H# +-bGC$'7# $'+-7,/RN. # $'1 $f# F8,/&/,/e^3 &/bW8# +-79,/2+
. 3Q24I4F$'+-$'36# +-j+-# $'d2*+-# (*$'3J2*1 $E&/"GC$'7# $'+-7,/-Z^ "W# +-7,/2+
nextval(seqname)
currval(seqname)
. # $'1 $GC$'3V# F,/&/,/e1 *. 3?*1 $'F$'3?(*,/+-3V$;&X+-# (*$'3?.1 $'d# $;&/F82. 23_&/*# &/F8,/(*&/&/(*1 
1 $'GC1 $&/fGC$'7# $'+-7,/H$'GC. $;79,/] 71 $'+"&/HGC$'GC,/24+h$'+h7# 3?GK2Z` fW8# +-7,/24+
nextval(seqname)
. # $;1 $bGC$'3a# F,/&/,/e1 L. 3?b724+-] A4# 3?3w$'&d&/243w7F# &
setval(seqname,
1 $'d24&/d$'3?g$;&
1
$6&/GC$'7# $'+-7,/f$'GC. $'7,/] newvalue)
79^1 Z` gGC,/A# ,/$;+-F8$&/&/^(*1 g
nextval(seqname)
d&/243)1 1 2V(*Ga&/fGC$'7# $'+-7,/f1 $g,/+-73J$'(*$'+-F2Z
)VF,/&/,/7$# +-H724+-GC# &/F8H58!# $;3=T4< 792(*2
SELECT * FROM sequence_name;

. 3?2I4F8$;+-$'3)&/24Ga. 3?(*$'F3J2NGw1 $Q# +-fGC$'7# $'+-7,/-Z=\L. 3?F8$Q1 $2I4F8$'+-$;3U&/2G . 3?(*$'F3?2G>23=,/c


A,/+-^&/$'GCR^. # $'1 $# F,/&/,/e3
SELECT last_value FROM sequence_name;

. 3?X24I4F$'+-$'30$'&# &/F,/(*2Ld&/2430GK,A+-1 2b.0243 7# &/!4# ,/$;3 . 3J279$;GK2b$;+_$;&GC$'3?d,/1 243 58I47-4$S+-1 <`Z
F82_24I4F,/+hF8:-$g&/^GKFd&/# $&/&/27F8$;1I4T%+-TEI4*7 -4$'+-1XZ=. 3?'(*$'F3J24Ga!# $g. # $;1 $'G # F8,/&/,/e^3
$j# F8&/,/eI4CBD2+-,/d$'&w1 $I4&/24!4# $. 3?:-I4,/&/,/F3L(*# &/F,/. &/$'G"&/&/^(*1 G_GC,/(*# &F8+-$;G%*# +
A$;+-$'3?1 23`Z

lx

Atencin
Se pueden obtener resultados inesperados si una configuracion de cache mayor que uno es utilizada por un objeto secuencia que sera usado concurrentemente por multiples procesos en el servidor (backends).
Cada proceso en el servidor (backend)asignara valores de secuencia
"cache" succesivas durante un acceso al objeto secuencia e incrementara el ultimo valor (last_value) del objeto secuencia en conformidad
con esto. De este modo, el siguiente uso de cache-1 de nextval dentro de ese proceso en el servidor (backend) devolvera simplemente los
valores asignados sin tocar el objeto compartido. Asi pues, los numeros asignados pero no utilizados en la sesion en curso se perderan.
Mas aun, aunque se garantice por multiples procesos en el servidor
(backends) la asignacion de distintos valores de secuencia, los valores
pueden ser generados fuera de secuencia cuando los procesos en el
servidor (backends) son tenidos en cuenta. (Por ejemplo, con una configuracion de cache de 10, el proceso A puede reservar valores 1..10
y devolver un nextval=1, entonces el proceso B puede reservar valores
11..20 y devolver un nextval=11 antes de que el proceso A ha generado
un nextval=2.) Asi, con una configuracion de cache de uno es seguro
asumir que los valores de nextval seran generados secuencialmente;
conuna cache configurada mayor que uno solo podrias asumir que los
valores de nextvalue seran todos distintos, no que seran todos generados de un modo puramente secuencial. Tambien, last_value reflejara el
ultimo valor reservado por cualquier proceso en el servidor (backend),
tanto si ya ha sido devuelto por nextval como si no.

Notas
a$;(*,/F8GC$gf$;GKF1 2_hh/ !1hL hh. 3?f$;&/,/(*,/+-3># +-fGC$'7# $'+-7,/-Z
P61 6. 3J279$;GK2V$'+"$;& GK$;3=d,/1 23U58I427 -$'+-1 <-# F,/&/,/efGC#j. 3J24.0,/g77:-$6. ^3=&/(*7$'+-3+-# (*$'c
3J24GQ^GK,/A4+-1 2GZ9 2GQ+-# (*$'3J2G6!# $H$'GCF8+$'+&/L77:-$H.0$'3J2"+-2jGC2+# F,/&/,/e1 2"$'+&/VGC$'GC,/2+
$'+"7# 3=GC2_GK$g.0$'3J1 $'3+-R1 ^+-1 2_72(*2%3J$'GC# &/F81-2Ed7,/2GK$;+j&/gGK$;79# $;+-79,/ Z

Uso

P63J$9H# +-fGC$'7# $'+-7,/HGC79$;+-1 $'+-F$&/&/(*1 

R^724(*$;+-e+-1 2_$'+" k

serial

CREATE SEQUENCE serial START 101;

$;&/$'77,/24+-$6$'&GK,/A4# ,/$'+-F$g+-# (*$'3J2E1 $6$'GCF8fGC$'7# $'+-7,/


SELECT NEXTVAL (serial);
nextval
----114

)VF,/&/,/7$$'GCF8gGK$;79# $;+-79,/H$;+"# +-

i k

INSERT INTO distributors VALUES (NEXTVAL(serial),nothing);

lx^

P62+-] A# 3?3)$'&d ^&/243)1 $g&/fGC$'7# $'+-7,/f1 $;GK. # $;Gw1 $6# +jP M 

CREATE FUNCTION distributors_id_max() RETURNS INT4


AS SELECT max(id) FROM distributors
LANGUAGE sql;
BEGIN;
COPY distributors FROM input_file;
SELECT setval(serial, distributors_id_max());
END;

Compatibilidad
SQL92
 w / !1hV h$'Gw# +-b$'F8$;+-GC,/24+1 $g&/$'+-A4# CBD$HM 2GCF8A43J$'GZh2E:-T"$'GCF1 2%6 V
a3
/ !
1hV hh$'+ 4Z

CREATE TABLE
Nombre
CREATE TABLE

P63J$'# +-f+-# $'dHF8I4&/

Synopsis
CREATE [ TEMPORARY | TEMP ] TABLE table (
column type
[ NULL | NOT NULL ] [ UNIQUE ] [ DEFAULT value ]
[column_constraint_clause | PRIMARY KEY } [ ... ] ]
[, ... ]
[, PRIMARY KEY ( column [, ...] ) ]
[, CHECK ( condition ) ]
[, table_constraint_clause ]
) [ INHERITS ( inherited_table [, ...] ) ]

Entradas

i M \V)
$"73J$'j&/F8I4&/jGK&/2. 3?$'GCFGC$'GC,/4+-RT$'GV$'&/,/(*,/+-^1 # F24(*^F8,/7(*$'+-F$j72+$'&
] +j1 $f&/bGC$'GC,/4+ Z GXFI4&/Ga. $'3?(*+-$'+-F$'GX$;N,/GCF$'+-F8$;GQ724+j$'&4(*,/GC(*2j+-2(*I43J$f+-2"GK2+
d ,/GC,/I4&/$'Ga(*,/$'+-F3=^Gw&/fFI4&/$F$'(*. 23=^&4$;N,/GCF$Z

lx

table

i &+-24(*I43J$g1 $# +-H+-# $;d f7&/GC$2_F8^I&ff73?$;3=Z

column

i &+-24(*I43J$g1 $# +h7(*. 2Z

type

i &'F8,/. 2H1 $'&;7(*. 2ZM # $'1 $ ,/+-7&/# ,/3 $'GC. $'7,/] 71 243J$9G 1 $ 3?3=^T ZP62+-GC# &/F8$a&/X v9|Js }J?4V
Q|?J} | t4^). 3?f(*Ga,/+-W8243?(*7,/4+hGC2I3J$6F8,/. 2GXTE3=3?;TGZ

i \4)L
value
)V+d&/243X. 2361 $;W$;7CF82. 3?E$'&07(*. 2Z'P62+-GC# &/F8$_&/E7&/# GC# &/ i \4)L . ^3=V(*G
,/+-W23?(*7,/4+ Z

column_constraint_clause

b7&/# GC# &/V2. 7,/24+-^& 1 $f3J$'GCF83?,/77,/24+-$;GQ572+-GCF83?,/+-F< $'GC. $'7,/] 7L# +-L&/,/GCF8L1 $f3J$'GCF83?,/7c
79,/2+-$'G1 $b,/+-F8$'A43?,/1 12j724(*.03?# $;IV!# $V&/G+-# $'dG6,/+-GC$'3J7,/2+-$'G27F# &/,/e;79,/2+-$'G
1 $'I4$'+GCF8,/GCW87$'3Q. 3?"!4# $"&/h,/+-GC$'3J7,/4+2*&/h^79F# &/,/e;7,/4+F$'+-A4"'N,/F2ZP6^1 %3J$'GCc
F83?,/779,/+1 $'I4$$'d&/# 3?GC$j*# +-$'. 3?$;GC,/4+I4242&/$'+- Z4\L# +-!# $ N ^3?$;!# ,/$'3J$j&/
. 3?f3J$'W8$'3?,/3=GC$6b$;GC$g79^(*. 2EGC4&/^(*$'+-F$'RM 2GCF8A43J$'G
column_constraint_clause
.
$'3?(*,/F8$!# $*(* &/F8,/. &/$;G"7(*. 24G%GK$;+3J$'W8$;3?$9+-7,/1 2G"1 $'+-F3J21 $# + +-,/7279^(*. 2
792+-GCF83?,/+-F=ZCP62+-GK# &/F$g&/H7&/# GK# &/g792+-GCF83?,/+-F-.03=g(*Gw,/+-W823=(*^79,/+ Z

table_constraint_clause

_7&/# GC# &/_2. 7,/24+-^& P \ $'GC. $'7,/] 7_# +-_&/,/GCFE1 $b3?$;GKF3?,/797,/2+-$'G1 $L,/+-c
F8$'A43?,/1 1"!# $6&/G>+-# $'dG>,/+-GC$'3J7,/2+-$'G 2L&/G>7F8# &/,/e^7C,/24+-$;Ga1 $'I4$'3?+EGCF,/GCW^79$;3 . 3?
!# $# +-*GK$;+-F8$'+-7,/,/+-GC$'3?F62@# . 1 F8$F$'+-A4',/F82ZP61 3?$;GKF3?,/797,/+1 $'I4$GC$'3L$;d ^c
&/# 1 # +-$;N. 3J$'GC,/+I4242&/$'+--Z $h. # $'1 $'+3J$'W8$93J$'+-7,/3b(* &/F,/. &/$'G_7 (*. 2GE72+
# +-_ +-,/7E3J$'GCF8 3?,/779,/+ Z 4&/2jGC$V. # $'1 $L1 $'] +-,/3X# +-E +-,/7E7&/# GC# &/VM \L)6
 5 i 
58# +-3J$'GCF3=,/77,/4+E1 $XF8I4&/< +-1hM \V)7
 5 i 
. 243 FI4&/SM \L)7
 5 i 
5# +-h3J$'GCF83?,/77,/4+1 $"7(*. 2column
<wGC24+@(*# F# (*$'+-F$j$;N7&/# T$;+-F8$;GZP62+-GK# &/F$j&/h7&/# GK# &/
1 $3J$'GCF83?,/77,/4+"1 $gFI4&/f. ^3=(*Gw,/+-W823=(79,/+ Z

"i 8
inherited_table
Q7&/# GC# &/2. 7,/24+-^& hi 8 $'GC. $'7,/] 79Q# +-Q724&/$;797,/+%1 $w+-2(*I43?$;GU1 $wF8^I4&/61 $
&/Gw7# &/$;Ga$;GKFHF8^I&/H:-$;3J$'10HF21 24Gw&/24Gw79^(*. 24GZ ,4^&/A +j7(*. 2E:-$;3?$;1 '1 2E. 3J$97$
(*G>1 $X# +-gd$'eRSM 2GCF8A43J$'G ,/+-W8243?(*g1 $X# +"$'3?3J243=ZM 24GCFA3J$'G . $;3=(*,/F$6# F2(*F8,/7(*$;+-c
F8$aX&/XFI4&/w73J$''1 X:-$'3J$'1 ;3 W8# +-7,/24+-$'G1 $ &/GF8I4&/^G GC# . $'3?,/23J$'GX$;&/&/X$'+L&/ B$;3=^3?!4# 
1 $:-$'3J$'+-7,/-Z
Aside: La herencia de funciones se realiza siguiendo las convenciones del Common Lisp
Object System (CLOS).

Salidas

CREATE

$;+-GK`B$g1 $;d # $;&/F82VGC,4&/HFI4&/$GC$g:-f73J$'1-2E72+;N,/F2)Z

lx^


ERROR

$'+-GCCB$X1 $;d # $'&/F2LGC,N&/g73J$'7C,/+"1 $Q&/FI4&/gW8&/&/-Z i GCF$6(*$'+-GCCBD$d,/$'+-$X+-23=(*&(*$'+-c


F8$_72(*. -1 2. 236&/A4 +F$'F82$'. &/,/79^F8,/d24R72(*2)k
!4# $H27# 3=3J$g$;+jF,/$'(*. 2"1 $g$=BD$'7# 79,/ERROR:
+-RGK,4&/HF8^Relation
I4&/H$'GC. $'7,/] table
791 fT
already
exists
$'N,/GCF$$'+h&/fI4GC$g1 $61 F24GZ

ERROR: DEFAULT: type mismatched

, $'&0F8,/. 21 $V1 ^F82G62$'&0d&/23X. 243X1 $'W8$'7`F82+ 27243?3J$'GC. 2+-1 $L&0F,/. 2j1 $V1 F24G1 $b&/
1 $'] +-,/7,/4+h1 $'&7(*. 2Z

Description

 w 48 ,/+-F3?21 # 7,/3?E# +-%+-# $'d%79&/^GK$L2F8^I&/_$'+&/EI4GC$_1 $V1 ^F82Gf7F# &Z; 



F8^I&/GC$'3=g. 24GC$'1 f. 23>$;&4# GC# 3?,/2E!4# $,/+-F83J21 # 79$6&/HGK$;+-F8$'+-7,/-Z
P61 
. # $'1 $EGC$'3g# +F8,/. 2GC,/(*. &/$'R-# +@F,/. 272(*. &/$=BD258GK$;F8<a2*# +F8,/. 23?3?T Z'PQ1 
F3=,/I4# type
F2_. # $'1 $6GC$'3)$'GC. $'7,/] 79^1 2L. 3?gGC$'3)+-2E+-# &/2R^TE. # $;1 $F$'+-$'3)# +"d ^&/243). 23U1 $;W$;7F82R
$'GC. $'7,/] 7102%.0243)&/Hoa:u 99t4|?t4u<
p ;4=!>@?*Q A6Z
Nota: Al igual que en la versin 6.0 de Postgres, consistant array dimensions within an
attribute are not enforced. Esto cambiar probablemente en las versiones futuras.

7&/# GC# &/24. 7,/2+-& hi  $'GC. $'7,/] 79# +-72&/$'779,/+1 $+-24(*I43J$;G%1 $7&/GC$'G_1 $
&/24Gw7# ^&/$'Gw$;GCF8H7&/GC$g:-$'3J$'1 H^# F2(*F8,/7(*$;+-F8$gF241 24GX&/2GQ7(*. 2GZ ,7# &/!# ,/$'3>+-24(*I43J$
1 $f7(*. 2%:-$'3J$;1 102"^. 3J$S7$H(*GX1 $b# +-bd$'eRM 24GCFA3J$'GQ,/+-W823?(*L1 $f# +$'3=3J23JZM 2GCF8A43J$'G
. $'3?(*,/F8$6# F82(*F,/79^(*$'+-F8$6f&/f7&/GC$673J$'1 :-$'3J$;1 3W8# +-7,/2+-$'Ga1 $7&/GC$'G GC# . $'3?,/243J$'G $'+
&/UBD$'3?3J!# 61 $6:-$'3J$'+-7,/-Z 6:-$'3J$'+-7,/61 $QW8# +-7,/2+-$'G GK$X:-7$6GC,/A4# ,/$'+-1 2L&/G>72+-d $;+-79,/2+-$'G
1 $'& PQ24(*(*2+ ,/GK. I;BD$'7F TGCF$'( 5PQ V <JZ
P61 h+-# $'dFI4&/27&/GC$
$;GL793J$'^10^# F2(*F8,/7(*$;+-F8$"792(*2@F,/. 2Z M 243HF8^+-F82R
# +-E2(*^Gf,/+-GCF8^+-79,/^Gf1 $L&/%table
79&/^GK$LGK2+# F82(*F,/79^(*$'+-F$_# +F,/. 2T. # $'1 $;+*GK$;36# GC1 G
$'+"2F83?C
G BED4;Lz >4z8C
o ?F7AG?H , ?GC$'+-F$'+-7,/Gw w 4
8 wZ
. .h,/F8:h+-2V,/+-,/F8,/&1 ^F842Z )V+-F8I4&/+-2_. # $;1 $6F$'+-$'3)(*G
:-$6+-,$ .FI4&/$,/G 73J$';F8$'1hG g:-$'^#
1 $g^H79^(*. 24Gw53J$;&/(*$'+-F$'R$'GCF82"d,/$'+-$f&/,/(*,/F1 2". 23a$'&4:-$'7:-2"!# $H$'&4(*N,/(*2"F(*-2
1 $# +-HF# . &/f1 $'I4$GC$;3>(*$'+-23>!4# $IT4F$'GC<R'. $'3J2_$;GKF$g&//(*,/F$g. # $'1 $GC$'3>72+-] A4# 3?1 2
"# +F8(*^-2*(*$'+-23H$;+@&/A4# +-2GVGC,/F,/24GNIZ )L+-"F8I4&/h+-2. # $'1 $EF8$;+-$'3g$'&(*,/GC(*2+-2(*I43J$
!# $g# +-fFI4&/f1 $7F&/2A2_1 $'& GC,/GCF8$'(* Z

Clusula DEFAULT
DEFAULT value

ln

Entradas
value

24Ga. 2GK,/I4&/$;GXd&/243J$;Ga. ^3=&/H$'. 3J$SGC,/+


i \J)V 58d&/23U.0243U1 $'W8$'7F82< GC24+ k

K # +j&/,/F$'3?&
K # +-HW# +-7,/+h1 $g# GK# ^3=,/2
K # +-HW# +-7,/+h+-,/&/1 ,/7

Salidas
h,/+-A4# +--Z

Descripcin
7&/# GC# &/
i \4)V GC,/A+-*# +-d&/23L. 23V1 $'W8$'7F2# +7(*. 258F3=^d ;GE1 $# +-
7(*. 2*$;+@&/hGC$'+-F8$;+-79,/jP6 i \ i \L i <?Z i &)F,/. 21 $"1 F82*1 $E# +d&/23
1 $'] +-,/7,/4+@1 $"
. 23U1 $;W$;79F2V1 $'I4$723=3J$'GC. 2+-1 $'3)& F,/. 2%1 $1 ^F82V1 $&/H1 $;] +-,/7,/+1 $;& 7(*. 2)Z
)V+-w2. $;3=7,/+_1 $>,/+-GC$'3J79,/+V5 i <!# $w,/+-7&/# T4Q# +_7(*.02fGC,/+_# +Vd&/243-$'GC. $'7,/] 71 2
. 23 1 $'W8$'7F2%GC,/A+-^3=b$'&d ^&/243 0
)V &79^(*. 2%GC, +-2hGC$b&/$f. 3J2. 23?7,/2+-b# +d&/243a$;N. &/c
7,/F82Z ,0$;& d &/23X. 243X1 $;W$;79F2j$'G# +
GC,/A+-,/] 7%!# $_!# $L$'Gf# +d&/23Q72+-GKF+-F$Z
literal
,$'& d&/23U. 23)1 $'W8$'7F82L$'G # +-
2V# +-
GC,/A+-,/])7
!# $g1 ,/7:-2Ed&/23U$;Gw$;&41 $&/fW8# +-niladic-function
7,/4+j$'GC. $'7,/] 79^1 g$'+h$;& (*24(*user-function
$;+ F2E1 $&/g,/+-GK$;3J79,/+ Z
T_1 24GaF,/. 24Ga1 $gW8# +-7,/24+-$'Ga+-,/&/1 ,/7Nk
+-,/&/1 ,/7() i
P&)V i ) i ) i
PQ24+-GC# &/F$g&/GwW8# +-7,/2+-$'GwPL)V i ) i
i ^ ") i
F21 d/g+-2EGK2. 23=F1 G

 i  ) i
F21 d/g+-2EGK2. 23=F1 G
+-,/&/1 ,/7w1 F$'F,/(*$
P&)V i \ i

PQ24+-GC# &/F$g&/GwW8# +-7,/2+-$'GwPL)V i \ i

P&)V i i

PQ24+-GC# &/F$g&/GwW8# +-7,/2+-$'GwL


P )V i i

ln^l

P&)V i i \
M

PQ24+-GC# &/F$g&/HW8# +-7,/+hP&)V i i \


M

+ &/wd$'3?GK,/+V7F8# &;58d-Z ;<RKM 2GCF8A43J$'G)$;d &/  F821 G &/G $'N.03?$;GK,/2+-$'G . 2301 $'W8$97F82H$;+L$'&'(*24c
i L
(*$'+-F2$'+!# $E&/EFI4&/E$'Gg1 $'] +-,/1 -ZSM 23F+-F24R&/GW8# +-79,/2+-$'Gf!# $_GC24++-2+-c77:-$'^I4&/$'
724(*2
. # $;1 $'++-2. 3J21 # 79,/3X$'& $'W8$;79F21 $;GK$;1 2Z;M 3=_$'& 79^GK2. 3Jc
F8,/7# &/3 CURRENT_TIMESTAMP
1 $aF,/. 24G 1 F$ F8,/(*$aRGC$a. # $'1 $>F83?I4CBD3 GK2I43J$a$'GCF8$>724(*. 23?F8(*,/$;+-F82b# GC+-1

2 M i c

\ )L E i OY+-
2 .h:O NX$'+L&/# A3 1 O
$ M i J
\ )H O+-P2 .hQO Nw
2 M i J
\ )V &
P )V i i \
M!N Z
4
i GCF82LW8# $'3?eM 2GCF8A43J$'G>g72+-GK,/1 $'3=^3)& g724+-GCF+-F8$6792(*2V# +% F8,/. 2VGCF83?,/+-AETVGC792+-d$'3?F8,/3?&/g&
d&/243)F8,/($'GCF8(*.$;+jF,/$'(*. 2_1 $$=BD$'7# 7,/4+ Z

Uso
M 3=jGC,/A+-^3L# +d&/243H724+-GCF+-F8$72(*2@d&/23L. 23b1 $'W8$'7F82. 3?&/2GE7(*. 2G
+-1
did
R'TE# +-H79^1 $S+-H^& 79^(*. 2
k
number

CREATE TABLE
did
number
total
);

did

video_sales (
VARCHAR(40) DEFAULT luso films,
INTEGER DEFAULT 0,
CASH DEFAULT $0.0

M 3=6GC,/A4+-3# +-fGC$'7# $'+-7,/g$',/GCF8$'+-F$672(*2_d&/23). 2431 $;W$;79F2L. 3?$;& 79^(*. 2


R'T_# +
did
&/,/F8$;3=& .03=$'&7(*. 2
k
name

CREATE TABLE distributors (


did
DECIMAL(3) DEFAULT NEXTVAL(serial),
name
VARCHAR(40) DEFAULT luso films
);

Column CONSTRAINT Clause


[ CONSTRAINT name ] { [
NULL | NOT NULL ] | UNIQUE | PRIMARY KEY | CHECK constraint } [, ...]

Entradas
name

)V+"+-2(*I43J$3?I4,/F83?3?,/2_1 1 2Vg&/f3J$'GCF83?,/779,/+"1 $,/+-F$'A43?,/1 1

, +-2EGC$$'GC. $;79,/] 7


RGC$bA4$'+-$;3=H1 $f&/2GQ+-2(*I43?$;GQ1 $f&FI4&/bT"7(*. 2GCRN&/2"!# $HGC$'A4# 3=H# +-,/7,/1 1. na^3=
me Z

name

ln

#)L

i &79(. 2E. # $'1 $724+-F$'+-$'3Ud ^&/243J$'G>0)V XZ2R GCFf$'Ga&/f2. 79,4+j. 243U1 $'W8$'7F2)Z

#
)V
i &>7(*. 2+-2. # $;1 $h72+-F8$'+-$;3bd&/23J$'GL#)L XZ i GCF2$'!4# ,/d ^&/$j&/3J$;GKF3=,/77,/+1 $
79^(*. 2_P hi &
P 55
#
)V <`Z

)V
M

column

i
i &47(*. 2"1 $'I4$g72+-F8$;+-$'3a# +d&/23 +-,/72)Z i +jM 2GCF8A43J$'GQ$;GKF2"$'GXW823?e102".0243a(*$;1 ,/2
1 $&/f73J$'7,/+",/(*. &//7,/FH1 $# +h/+-1 ,/7$g +-,/72EGC2I3J$6&/HF8I4&/-Z
\L)S5 i 
i GCF8$X7(*. 2L$'G># +-g7&/d$X. 3=,(*3=,/^R;&/2V!# $6,/(*. &/,/7!# $&/6# +-,/79,/1 ^1j$'G>W823=e^10. 243
$'& GK,/GCF$'(*"T*!# $E2F83?GgF8I4&/Gg. # $'1 $;+ 72+-] 3$'+$'GCF$_79^(*. 2724(*2,1 $'+-F8,/] 71 23
+-,/792_. 3?f&/24Ga3J$'A4,/GCF83J2GZ`PQ24+-GC# &/F$gM \L)T
 5 i @. 3?g(*^Gw,/+-W823=(*7,/+ Z

constraint

f1 $'] +-,/7,/4+j1 $&/H3J$;GKF3?,/797,/+ Z

Descripcin
Q79&/^# GK# &/624.079,/2+-&N1 $Q3J$'GCF3=,/77,/4+_58P a\ <$;GC. $'7,/] 763J$'GCF83?,/779,/2+-$'GU2Ld$'3?,/] 79
!# H1 $'I4$'+79# (*. &/,/3w&/^G+ # $;d ^GQ,/+-GC$'3J79,/2+-$'G62h&/GQ^79F# &/,/e;7,/24+-$;G.03=L!# $b# +-V2. $'3?c
7,/4+1 $",/+-GC$'3J7,/4+@21 $"^79F# &/,/e7,/+@F$'+-A4',/F82ZPQ1 h3J$'GCF83?,/779,/+@1 $;I4$"$;d &/# ^3=GC$E
# +-%$'. 3J$'GC,/4+I4242&/$'+- ZPQ24+# +-" +-,/79"3J$'GCF3=,/77,/4+GC$_. # $'1 $;+3J$'W8$93J$'+-7,/36(* &/F,/. &/$'G
F3=,/I4# F24GZ i & # GC2V1 $M \L)7
 5 i 724(*2_3J$'GCF83?,/779,/+%1 $6F8I4&/$'G>(*# F8# (*$;+-F8$6,/+-792(*c
. F,/I4&/$724+h$'&# GC2E1 $6M \L)T
 5 i @724(*2_3J$'GCF83?,/779,/+h1 $7(*. 2Z
)V+-H3J$'GCF3=,/77,/+$'Gw# +-L3J$;A&/H72++-2(*I43J$kK# +2I;B$;F82 N *!# $fT4# 1 Hb1 $'] +-,/3 72+B# +-c
F82G1 $bd&/23J$'G6d&/,/1 2G6. 24+-,/$;+-1 2&/(*,/F8$;GgL&/24Gg3J$'GC# &/F8^102Gg1 $L&/G62. $'3?7,/24+-$;G i R
)VM \ i 23 i i i GC2I43?$6# +-HF8I4&/-Z
i ,/GKF$'+_1 24G>(*+-$;3=^G)1 $X1 $'] +-,/33J$'GCF83?,/779,/2+-$'GU1 $Q,/+-F$'A43=,/1 ^1XkJ3J$;GKF3=,/77,/2+-$'GU1 $XF8^I4&/R;!# $
d$'3J$S(*2GX(*^Gw1 $;&/'+-F$'RT%3J$;GKF3=,/77,/2+-$'G 1 $g7(*. 2R^!# $g. GC(*2Gwgd $;3`Z
)V+-H3J$'GCF3=,/77,/+1 $f7(*. 2%$;GX# +-b3J$'GCF83?,/779,/+j1 $f,/+-F8$'A43?,/1 11 $'] +-,/1 H724(*2".03=F$f1 $g&/
1 $'] +-,/7,/4+E1 $Q7(*. 2RST_&/A4,/79^(*$'+-F8$QGC$Q72+-d ,/$;3=F$6$;+%# +-3J$;GKF3=,/77,/+E1 $QF8I4&/Q+-1 6(*G
GC$'3U73J$';1 -Z` Ga3J$;GKF3?,/797,/2+-$'Ga1 $7(*. 2E1 ,/GK. 2+-,/I4&/$'GaGC24+ k

M \L)S5 i 
i 4i i hP i
)V ) i
P hi PL5
#
)V
Nota: Postgres todava no soporta (en su versin 6.5) restricciones de integridad especificadas por REFERENCES. Se acepta la sintaxis pero se ignora la clusula (disponible,
en cambio, a partir de la versin 7.0)

ln^m

Restriccin NOT NULL


[ CONSTRAINT name ] NOT NULL

"3J$'GCF83?,/779,/+@ #)V $'GC. $'7,/] 7h# +-h3J$'A4&/h!4# $h2I4&/,/Ah!# $h# +7(*. 2792+-F$'+-A4
+-,/7(*$'+-F$Vd&/243J$'G6+-2j+-# &/2GZR GCFE$'G6 +-,/7(*$'+-F$_# +-_3J$'GCF3=,/77,/4+*1 $V7(*. 2RT+-2GC$
. $'3?(*,/F8$6792(*2%3J$'GCF3=,/77,/+"1 $F8^I4&/-ZZ
Salidas
status

ERROR: ExecAppend: Fail to add null value in not null attribute "column".

i GCF8$X$'3?3J2430247# 3?3J$X$;+EF,/$'(*. 2b1 $X$=BD$'7# 7,/4+_79# +-1 2bGK$w,/+-F$'+-Fg,/+-GC$'3?F830# +Ed&/23


+-# &/2_$'+h# +h79^(*. 2E!# $g72+-F8,/$;+-$g&/H3?$;GKF3?,/797,/+" 0)V XZ

Descripcin

Uso

$'] +-,/3U1 2G 3J$'GCF83?,/779,/2+-$'G 1 $Q79^(*. 2_ #)L j$;+"&/fF8^I4&/


R^# +-f1 $Q&/G
distributors
7 # ^&/$'G GK$+-24(*I43?-k
CREATE TABLE distributors (
did
DECIMAL(3) CONSTRAINT no_null NOT NULL,
name
VARCHAR(40) NOT NULL
);

Restriccin UNIQUE
[ CONSTRAINT name ] UNIQUE

Entradas

P a\
name
)V+-f$;F8,/!# $;F8H3?I4,/F83?3?,/g1 1 gH# +-f3J$'GCF3=,/77,/4+ Z

lnx

Salidas
status

ERROR: Cannot insert a duplicate key into a unique index.

i GCF8$H$'3?3J243U279# 3?3J$f$'+F,/$'(*. 2"1 $f$?B$;79# 7,/+GC, GC$H,/+-F8$'+-FL,/+-GK$;3=F3 # +d &/23a1 # c


.0&/,/791 2_$;+j# +h7(*. 2Z

Descripcin

3J$'GCF3=,/77,/4+U)L ) i $;GK.0$'7,/] 7# +-3J$'A4&/!# $2I4&/,/A*# +A3J# . 2@1 $# +-22(*G


7(*. 2Ga1 $g# +-gF8I4&/fg792+-F$'+-$'3Ud &/23J$'G +-,/724GZ
GL1 $'] +-,/7,/2+-$'GE1 $h7(*. 21 $h&/^G_72&/# (*+-GV$'GC. $'7,/] 79^1 GL+-2F,/$'+-$;+. 23J!# ",/+-79&/# ,/3
# +-Q3?$;GKF3?,/797,/+E 0
)V E72+-GKF3=^,/+-F.03=XGC$'3 ,/+-7&/# 1 24GU$;+E# +-Q3J$'GCF83?,/779,/V
+ )V ) i Z
)V R4+-2d,/2&/%&/
$;+-$'3X(*Gf1 $V# +d&/236+-# &/2$;+# +7(*. 2GC,/+&/%3J$'GCF3=,/77,/4+ #
3J$'GCF83?,/779,/
+ )L ) i Z?5 :-,/G>1 $'d,/F$'G>W83J24(F:-$ N 61 $'] +-,/F8,/2+-R^I4# F,/Ga6(*23?$QGC$'+-GC,/I4&/$
724+-d$'+-F,/24+ Z $'$F:-$gGC$'7F8,/2+j24+h724(*.0F8,/I4,/&/,/FT"W8243)(*23J$g1 $'F,/&/GZ <CZ
P61 3J$'GCF83?,/797,/+1 $79(*.0T
2 )V ) i 1 $'I4$+-2(*I43?3V# +7(*.02!# $$'G%1 ,/GKF,/F8 +-21 $;&
724+BD# +-F82_1 $7(*. 2Gw+-2(*I43?1 2Ga. 23)79# ^&/!# ,/$'3>2F3=3?$;GKF3?,/797,/#
+ )V ) i 2VM \L)
5 i @1 $'] +-,/W8G . 23>&/fFI4&/-Z
Nota: Postgres crea automticamente un ndice nico por cada restriccin UNIQUE, para
asegurar la integridad de los datos. Vea CREATE INDEX para ms informacin.

Uso

$'] +-$Q# +-63J$'GCF83?,/77,/4+_1 $w79^(*. 2%)V ) i . 3?6&/QFI4&/1 ,/GKF3?,/I# F243?GZ? G)3J$'GCF83?,/77,/24+-$;G


$7(*. 24)V ) i GC2&/2%GC24+j1 $'] +-,/1 G GC2I3J$6# +h7(*. 2_1 $&/HFI4&/-k
1
CREATE TABLE distributors (
did
DECIMAL(3),
name
VARCHAR(40) UNIQUE
);

&/2E!# $g$;!# ,/d&/$H&/fGC,/A4# ,/$'+-F8$f3J$'GCF3=,/77,/4+"1 $F8^I&/ k


CREATE TABLE distributors (
did
DECIMAL(3),
name
VARCHAR(40),
UNIQUE(name)
);

ln^n

La restriccin CHECK
[ CONSTRAINT name ] CHECK
( condition [, ...] )

Entradas

)V+h+-2(*I3J$g^3=I4,/F3=;3?,/2E1 1 2VH&/f3J$'GCF3=,/77,/4+ Z

name

condition

P6# &/!4# ,/$'3 $'. 3J$SGC,/+"724+-1 ,/7,/2+-&d&/,/1 6!# $XGC$Q$;d &/# $XQ# +%3J$'GC# &/F8^1 2HI4242&/$'+-+-2Z

Outputs
status

ERROR: ExecAppend: rejected due to CHECK constraint "table_column".

i GKF$X$'3?3?23 279# 3?3J$X$'+%F,/$'(*. 2V1 $Q$?B$;79# 7,/+"GC,N&/A4# ,/$;+%,/+-F$'+-F8,/+-GC$'3=F3# +%d&/23


,/&/$;A&N$'+h# +j7(*. 2_GC#NB$;F82%f# +-g3?$;GKF3?,/797,/+hP hi PL5%Z

Descripcin

E3J$'GCF3=,/77,/4+*P hi P&5$'GC. $'7,/] 79_# +-%3?$;GKF3?,/797,/+GK2I43J$V&/2GHd&/23?$;Gg.0$'3=(*,/F,/1 2GH$'+# +


7(*. 2Z` f3J$'GCF83?,/77,/4+"P hi P&5F8(*I4,/;+jGC$g. $;3=(*,/F$724(*2E3J$'GCF83?,/779,/+"1 $FI4&/-Z
G%3J$;GKF,/779,/2+-$'G"1 $7(*.02P hi PL5 1 $ N GC&/2. # $;1 $'+GC$;3V1 $'] +-,/1 G"GC2I43J$*# +
7(*. 2h1 $V&/VF8I4&/R TGC2&/(*$'+-F$V. # $'1 $;+*3J$'WD$'3?,/3?GK$L_# +*7(*. 2Z;M 24GCF8A43J$'G+-2jF8,/$'+-$L$'GCF8
3J$'GCF83?,/779,/+ Z

Restriccin PRIMARY KEY


[ CONSTRAINT name ] PRIMARY KEY

Entradas

P a\
name
)V+h+-2(*I3J$g^3=I4,/F3=;3?,/2E. 3?f&/f3J$'GCF3=,/77,/+ Z

ln

Salidas
ERROR: No se puede insertar un valor duplicado en un ndice nico.

i GKF2H279# 3?3J$a$'+LF,/$'(*. 2H1 $w$=BD$'7# 7,/4+VGC,^&/A# ,/$'+L


,/+-F$'+-F6,/+-GC$;3=F30# +Vd&/24301 # . &/,/71 2
$'+"# +-H724&/# (*+-HGC#NBD$'F8Hg# +-H3J$;GKF3=,797,/+jM \V)W5 i UZ

Descripcin
b3J$'GCF83?,/779,/+1 $H7(*. 2"M \V)U5 i $;GK.0$'7,/] 7L!# $L# +7(*.02"1 $b# +-LF8^I&/LGC24&/^c
(*$'+-F$6. # $'1 $6724+-F$'+-$;3)d&/23J$'G> +-,/724G 58+-2L1 # . &/,/71 2GK<TV+-2V+-# &/24GHZ= 61 $'] +-,/7,/4+"1 $6&/
724&/# (*+-L$'GC. $'7,/] 79^1 b+-2jF,/$'+-$H!# $L ,+-79&/# ,/3a# +-L3J$'GCF83?,/779,/+$;N. &/7,/F8L #
)L . 3=
GC$'3U,/+ 79&/# 1 f$'+h# +-H3J$'GCF83?,/77,/4+"M \V)T
 5 i UZ

&/2_GK$6. # $'1 $$;GK. $;79,] 73)# +-H +-,/79g79&/^d $6. 3=,/(*^3=,/f58M \V)W
 5 i  <-. 243UF8I4&/ Z

Notas

M 24GCFA3J$'GV73J$'# F2(*F8,/7(*$;+-F8$j# ++-1 ,/7$j +-,/72. 3?GC$'A4# 3?3f&/,/+-F8$;A3?,/1 11 $j&/2G


1 F24GZ`58 $'g&/HGC$'+ F8$'+-7,/fPQ i \ i i <

Q3J$'GCF83?,/779,/+%1 $X7&/d$Q. 3?,/(*3?,/Q58M \L)7


 5 i  <1 $'I4$X+-24(*I43?3 # +%72+B# +-F2L1 $X7(*c
. 2Gf!# $E+-2*GC$'+72+-F8$'+-,/1 24GH.0243+-,/+-A4# +-"24F3?h3J$;GKF3=,/77,/7
+ )L ) i 1 $'] +-,/1 2GH. 236&/
(*,/GC(*FI4&/R0T4!4# $h. 3J241 # 7,/3?/h# +-1 # . &/,/77,/+1 $h+-1 ,/7$'GL$'!4# ,/d&/$;+-F8$'GLT# +-GC2c
I43J$S73JA4%1 ,/7,/24+-^&$'+F8,/$;(*. 2*1 $E$=BD$'7# 7,/4+ Z ,/+$'(*I43JA424R M 2GKFA3J$;GH+-2&/21 $'GC:-I4,/&/,/F
$'GC. $'7/] 7'($'+-F8$4Z

Clusula CONSTRAINT para tablas


[ CONSTRAINT name ] { PRIMARY KEY | UNIQUE } ( column [, ...] )
[ CONSTRAINT name ] CHECK ( constraint )

Entradas
P a\
name
)V+h+-2(*I3J$g^3=I4,/F3=;3?,/2E1 1 2VH# +-f3J$'GCF3=,/77,/4+h1 $6,/+-F8$'A43?,/1 1XZ
 R ZZZ
i &w +-24(*I43J$1 $&/24Gh7(*. 2G". 3?*&/24Gh!4# $*1 $;] +-,/(*2Gj# ++-1 ,/79$ +-,/72T9R). 3?&/
M \L)S
 5 i R^# +-H3J$'GCF3=,/77,/4+h #
)V XZ

column

P hi PL55
<
constraint
)V+-f$;N. 3J$'GC,/+hI4242&/$'+-fHGC$'3)$'d&/# 1 2_724(2%&/f3J$'GCF83?,/77,/4+ Z

ln^

Salidas
G>. 2GC,/I&/$;GwGC&/,/1 ^G>. 3?g&/f7&/# GC# &/f1 $63J$;GKF3?,/797,/+"1 $FI4&/G>GC24+h&/G (*,/GC(*Ga!# $. 3?
&/G . 3?F8$;Ga723=3J$'GC. 2+-1 ,/$'+-F$'Ga1 $&/f7&/# GC# &/H3J$'GCF83?,/779,/+"1 $679(. 2)Z

Descripcin

)V+-L3J$'GCF83?,/779,4+1 $bF8^I4&/_$'G6# +-V3?$;GKF3?,/797,/+1 $b,/+-F8$'A43?,/1 11 $;] +-,/1 1GC2I43?$b# +-22j(*G


7(*. 2Ga1 $g# +-gF8I4&/fI4^GK$4Z` G 79# ^F83J2Vd 3?,/7,/2+-$'G 1 $g3J$'GCF83?,/77,/24+-$'G 1 $6F8I4&/fGC2+ k

)V

) i
P h
P 5
i L
M L
\ )S5 i 
i bX5 i 
Nota: Postgres todava no soporta (en su versin 6.5) las restricciones de integridad
FOREIGN KEY. El compilador entiende la sintaxis de FOREIGN KEY, pero solo imprime
un aviso e ignora la clusula. Las claves ajenas pueden ser parcialmente emuladas por
medio de triggers (Consulte la sentencia CREATE TRIGGER).

Restriccin UNIQUE
[ CONSTRAINT name ] UNIQUE ( column [, ...] )

Entradas

P a\
name
)V+h+-2(*I3J$g^3=I4,/F3=;3?,/2E1 1 2VH# +-f3J$'GCF3=,/77,/4+ Z
column

)V+h+-2(*I3J$g1 $# +h79(. 2E$'+h# +-fFI4&/-Z

Salidas
status

kCP6+-+-2F0,/+-GC$'3?F-f1 # . &/,/7F$'-4$'T%,/+-F2EH# +-,/!4# $,/+-1 $'0Z


i a f
i GCF8$H$'3?3J243U279# 3?3J$f$'+F,/$'(*. 2"1 $f$?B$;79# 7,/+GC, GC$H,/+-F8$'+-FL,/+-GK$;3=F3 # +d &/23a1 # c
.0&/,/791 2_$;+j# +h7(*. 2Z

ln

Descripcin

63?$;GKF3?,/797,/+)V ) i $'GC. $'7,/] 796# +-f3J$'A4&/6$'+%&/g!4# $6# +"A43?# . 2L1 $Q# +-2 :-$L)V ) i
724+-GCF83?,/+-F)GK.0$'7,/] $;Gf%3J# &/$_F:-FUEA43J24# .2W>2+-$E243Q2(*^Gf7(*. 2Gf1 ,/d $;3=GC2Gf1 $_# +-%Fc
I4&/H. # $'1 $g72+-F8$'+-$;3 GC24&/2Ed &/23J$'Ga +-,/792GZ i &72(*. 243?F(*,/$'+-F2"1 $g&/H3J$'GCF83?,/779,/+j1 $gF8^I&/
)V ) i $'GQ$;& (*,/GC(*2h!# $b.03=b&/L3J$'GCF83?,/779,/+1 $H7(*. 2RN792+&/b. 2GK,/I4,/&/,/1 11 ,/79,/2+-&
1 $.0&/,/793?&/2Vf(*Ga1 $# +h7(*. 2Z
P62+-GC# &/F$g&/fGC$'77,/4+jGC24I43J$&/g3J$'GCF83?,/797,/+h1 $7(*. V
2 )V ) i . 3?g(*^Gw1 $;F8&/&/$;GZ

Uso

$'] +-$g# +-f3J$'GCF83?,/77,/4+h1 $FI4&/)L

i $'+h&/fF8^I4&/f1 ,/GCF83?,/I4# F823=Gk

CREATE TABLE distributors (


did
DECIMAL(03),
name
VARCHAR(40),
UNIQUE(name)
);

Restriccin PRIMARY KEY


[ CONSTRAINT name ] PRIMARY KEY ( column [, ...] )

Entradas

P a\
name
)V+h+-2(*I3J$g^3=I4,/F3=;3?,/2E. 3?f&/f3J$'GCF3=,/77,/+ Z
 R ZZZ
24Ga+-2(*I3J$;Gw1 $6# +-2E2E(*Ga7(*. 2Gw$'+"&/HFI4&/-Z

column

Salidas
status

kCP6+-+-2F0,/+-GC$'3?F-f1 # . &/,/7F$'-4$'T%,/+-F2EH# +-,/!4# $,/+-1 $'0Z


i a f
i GCF82"27# 3=3J$f$'+F8,/$;(*. 2"1 $f$=BD$'7# 79,/+GC,&/A# ,/$;+,/+-F$'+-F8L,/+-GC$'3?F83># +d&/23a1 # c
.0&/,/791 2"$'+# +7(*.02jGC#NBD$'F2jL# +-V3J$;GKF3?,/797,/+1 $H79&/^d $f. 3?,/(*3?,/L5M \V)
5 i  <`Z

ln^


Descripcin
b3J$'GCF83?,/779,/+M \V)Y5 i $'GC. $'7,/] 7V# +-L3J$'A4&/H$'+&/L!# $H# +A3J# . 2"1 $H# +-2h2"(*G
7(*. 2Gb1 $"# +-hFI4&/j. # $;1 $"72+-F8$;+-$'3gGC4&/2d&/243J$;GH +-,/724GV58+-2*1 # . &/,/71 2GK< T+-2+-# c
&/24GZ^ Gf1 $'] +-,/79,/2+-$'GH1 $_7(*. 21 $E&/2Gb7(*. 2GH$'GC. $'7,/] 71 2GH+-2*
+-$'7$'GC,/F%,/+-79&/# ,/3g# +-
3J$'GCF83?,/779,/+" #
)V j. 3?gGC$'3>,/+-7&/# 1 f$'+h# +-H3J$'GCF83?,/77,/4+"M \V)S
 5 i )Z

_3J$'GCF3=,/77,/+1 $LF8I4&/VM \L)6


 5 i $;GgGC,/(*,/&/3QE&/E3J$'GC. $'7F,/d V3J$'GCF83?,/779,/+1 $V7(*c
. 2R 724+*&/L. 2GK,I,/&/,/1 11 $b$'F8$'+-1 $'3=&/%
 .h,/F:*F8:-$b1 1 ,/F,/24+-& 79^. 'I4,/&/,/FT2W$'+-72(*. GCGC,/+-A
(*# &/F8,/. &/$792&/# (*+-GZ

P62+-GC# &/F$L&/VGC$'779,/+*GC24I43J$b&/_3J$'GCF83?,/77,/4+1 $b7(*. 2jM \L)U


 5 i . 3?L(*G6,/+-W824(*^c
7,/4+ Z

Uso

P63J$9H&/G F8I4&/G ] &/(*GXTE1 ,/GCF83?,/I4# F823=Gk


CREATE TABLE films (
code
CHARACTER(5) CONSTRAINT firstkey PRIMARY KEY,
title
CHARACTER VARYING(40) NOT NULL,
did
DECIMAL(3) NOT NULL,
date_prod DATE,
kind
CHAR(10),
len
INTERVAL HOUR TO MINUTE
);

CREATE TABLE distributors (


did
DECIMAL(03) PRIMARY KEY DEFAULT NEXTVAL(serial),
name
VARCHAR(40) NOT NULL CHECK (name  )
);

P63J$9H# +-fF8^I&/g792+j# +j^3=3?'TE1 $H1 ,/(*$;+-GK,/2+-$'Gk


CREATE TABLE array (
vector INT[][]
);

$'] +-$Q# +-3J$'GCF83?,/779,/+E1 $XFI4&/')L ) i . ^3=Q&/6F8I4&/6] &/(GZ? GU3J$'GCF83?,/77,/24+-$;G>1 $QFI4&/


)V ) i .0# $;1 $'+hGC$'3)1 $'] +-,/1 GaGK2I43J$# +-2E2_(*Ga79^(*. 24Ga1 $&/HFI4&/-k
CREATE TABLE films (
code
CHAR(5),
title
VARCHAR(40),
did
DECIMAL(03),
date_prod DATE,
kind
CHAR(10),
len
INTERVAL HOUR TO MINUTE,
CONSTRAINT production UNIQUE(date_prod)
);

l

$'] +-$g# +-f3J$'GCF83?,/77,/4+h1 $7(*. 2_P hi PL5Ek

CREATE TABLE distributors (


did
DECIMAL(3) CHECK (did > 100),
name
VARCHAR(40)
);

$'] +-$g# +-f3J$'GCF83?,/77,/4+h1 $FI4&/fP hi P&5Ek

CREATE TABLE distributors (


did
DECIMAL(3),
name
VARCHAR(40)
CONSTRAINT con1 CHECK (did > 100 AND name > )
);

'$ ] +-$V# +-E3J $'GCF3=,/77,/4+*1 $LF8I4&/_M \L)Z5 i . ^3=V&/EF8^I&/V] &/(*GZ' ^Gg3J$'GCF3=,/77,/2+-$'G


1 $FI4&/fM \L)S5 i . # $'1 $'+"GC$'3U1 $'] +-,/1 G GC24I43J$# +-2E2E(*Ga79^(*. 24Ga1 $&/gF8I4&/-k
CREATE TABLE films (
code
CHAR(05),
title
VARCHAR(40),
did
DECIMAL(03),
date_prod DATE,
kind
CHAR(10),
len
INTERVAL HOUR TO MINUTE,
CONSTRAINT code_title PRIMARY KEY(code,title)
);

'$ ] +-$_# +-%3J$'GCF83?,/779,/+1 $V7(*. 2M \L)65 i . 3?E&/EFI4&/E1 ,/GCF3=,/I4# F243?GZ ^Gg3J$'GCc


F83?,/77,/24+-$'GX1 $f79^(*. 2"M \L)Y5 i GC2&/(*$'+-F$bGC$H. # $'1 $'+j1 $'] +-,/3a. ^3=H# +7(*. 2E1 $
&/fFI4&/f58&/24GaGC,/A# ,/$'+-F$'Gw1 24Ga$=BD$'(*. &/2GwGC$'3?+"$'!# ,/d&/$'+-F$'GC< k
CREATE TABLE distributors (
did
DECIMAL(03),
name
CHAR VARYING(40),
PRIMARY KEY(did)
);

CREATE TABLE distributors (


did
DECIMAL(03) PRIMARY KEY,
name
VARCHAR(40)
);

Notas
P6 i \ ih \V iX hi  $'G # +-H$'F8$'+-GC,/+^& &/$'+-A# `B$g1 $6M 24GCF8A43J$'GZ

l^l

Compatibilidad
SQL92
\V1 $;(*'G 1 $a&/w FI4&/wF$'(*. 23=&'d,/GC,/I4&/$a&/247&/(*$;+-F8$'R N w1 $;] +-$># +-XGK$;+-F8$'+-
7,/X
PQ i \ i
b \V i M a\L) \L i RT_24. 7,/2+-&/(*$'+-F$f# +-H79&/^# GK# &/ P
 k
CREATE GLOBAL TEMPORARY TABLE table ( column type [
DEFAULT value ] [ CONSTRAINT column_constraint ] [, ...] )
[ CONSTRAINT table_constraint ] [ ON COMMIT { DELETE | PRESERVE } ROWS ]

M 3=LFI4&/G6F8$;(*. 243?&/$;GKR &/_GC$'+-F$'+-7,/EP6 i \ i b \V i M a\L) \V i +-2(*c


I43=b# +-_+-# $;d LFI4&/Vd,/GC,/I4&/$LL24F3J24G67&/,/$'+-F$'GQTj1 $'] +-$b&/24G67(*. 2G61 $H&/VFI4&/LT&/^GQ3J$'GCc
F83?,/77,/24+-$'GZ

Q79&/^# GK# &/624.079,/2+-& P


8 1 $XP6 i \ i" i M \V) \L i $'GC.
$' 7,/] 79QGC,N&/
F8^I&/HF$'(*. 23?&1 $'I4$gd79,/^3=GC$g1
$f3J $'A4,/GCF83J2GX71 fd$'eb!# $fGC$f$=BD$'7# F8b# +P
 2" +-2Z
,4GC$H24(*,/F$b&/b7&/# GC# &/ P
8 RGK$fGC# (*$H&/b24. 7,/+. 23 1 $'W8$'7F24R P

i i i Z

M 3=73?$;3# +-HF8I4&/gF8$'(*. 23?&k


CREATE TEMPORARY TABLE actors (
id
DECIMAL(03),
name
VARCHAR(40),
CONSTRAINT actor_id CHECK (id
) ON COMMIT DELETE ROWS;

Clusula UNIQUE

150)


^g$'GC. $'7,/] 7f&/A4# +-Gw. 2GC,/I4,/&/,/1 1 $'G 1 ,/79,/2+-&/$'Ga. 3?
)L
$'] +-,/79,/+j1 $3J$'GCF3=,/77,/4+"1 $F8I4&/-k

[ CONSTRAINT name ] UNIQUE ( column [, ...] )


[ { INITIALLY DEFERRED | INITIALLY IMMEDIATE } ]
[ [ NOT ] DEFERRABLE ]

$'] +-,/79,/+j1 $3J$'GCF3=,/77,/4+"1 $79^(*. 2)k


[ CONSTRAINT name ] UNIQUE
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]

l

i k

clusula NULL

h3?$;GKF3?,/797,/+#)L 583J$'&/(*$;+-F8$%+-2$'GV# +-3J$'GCF83?,/77,/4+-<a$;G_# +-j$'F8$'+-GC,/+M 24GCFA3J$'GL


^w,/+-79&/# 1 X. 23 GC,/(*$'F3=X792+V&/X79&/^# GC# &/X #
)V wZP62(*2b$'G$;&d&/230. 23 1 $;W$;7F82
. 3?g7# &/!# ,/$'3U7(*. 2R^GK#. 3J$'GC$'+ 79,/f$;G 3?$;1 # +-1 +-F$Z
[ CONSTRAINT name ] NULL

clusula NOT NULL

^g$'GC. $'7,/] 7f&/A4# +-f. 24GC,/I4,/&/1 1^1 ,/79,/2+-& . ^3=f #)L Xk


[ CONSTRAINT name ] NOT NULL
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]

clusula CONSTRAINT

^j$'GC. $;79,/] 7&/A4# +-. 2GC,/I4,/&/,/1 11 ,/7,/2+-&U. 3?3J$;GKF3?,/797,/2+-$'GCR TF8(*I4,/;+1 $'] +-$
3J$'GCF83?,/779,/2+-$'G 1 $^GKGC$'3?F,/24+-GwT%1 $1 24(*,/+-,/2Z
Nota: Postgres todava no soporta ni dominios ni assertions.

)V+-E^GKGC$'3?F,/24+$'Gg# +F8,/. 2$'GC. $'7,/&01 $_3J$'GCF3=,/77,/4+*1 $V,/+-F8$'A43?,/1 1T792(*. 3?F8$_$;& (*,/GK(*2

$'GC. 7,/2V1 $+-2(*I3J$;Gw72+j2F83?Ga3J$'GCF83?,/779,/2+-$'GZ ,/+h$'(*I43JA424R^# +-HGCGC$'3?F8,/2+h+-2E$;Gw+-$'7$'GCc


3=,/^(*$'+-F8$X1 $;. $'+-1 ,/$'+-F$X1 $Q# +-. 3?F8,/7# &/3 FI4&/6I4GK$X72(*2_GC2+%&/G>3J$'GCF83?,/779,/2+-$'GCRSGCN!# $
c8;H. 3J24. 23J7,/24+-f&/HGC$'+ F8$'+-7,/HP6 i \ i \ N i 724(*2E# +(*;F821 2E&/F$'3?+-F,/d 2
. 3?g1 $;] +-,/3U# +-f3J$'GCF83?,/779,/+ k
CREATE ASSERTION name CHECK ( condition )

Ga3J$'GCF83? ,/779,/2+-$'Ga1 $g1 2(*,/+-,/2"GC$H1 $'] +-$'+72+&/^GwGC$'+-F$'+-7,/GXPQ i \ i

\ k
i

a$;GKF3=,/77,/+j1 $1 2(*,/+-,/2>k

\ 2%\L c

[ CONSTRAINT name ] CHECK constraint


[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]

$'] +-,/79,/+j1 $3J$'GCF3=,/77,/24+-$;Ga1 $gF8I4&/-k


[ CONSTRAINT name ] { PRIMARY KEY ( column, ... ) | FOREIGN KEY constraint | UNIQUE constraint | CHECK constraint }
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]

l^m

$'] +-,/79,/+j1 $3J$'GCF3=,/77,/24+-$;Ga1 $g79^(*. 2)k

[ CONSTRAINT name ] { NOT NULL | PRIMARY KEY | FOREIGN KEY constraint | UNIQUE | CHECK constraint }
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]

)V+-f1 $'] +-,/79,/+h1 $3J$'GCF3=,/77,/4+h1 $6,/+-F8$;A3?,/1 158P

a\ < . # $;1 $724+-F$'+-$;3># +hF83?,/c


I4# F82h2h7&/# GK# &/ i i a\L i T 2h# +-_7&/# GC# &/_1 $'& (*241 2h,/+-,/7,/&01 $H3J$'GCF83?,/77,/4+-R $'+
7# ^&/!# ,/$'3)243J1 $;+ Z

i i a\L i

CG ,/A4+-,/] 76!# $Q&63J$'GCF3=,/77,/4+_1 $'I4$aGC$'3 72(*. 3J24I41 X1 $'GC. # 'G)1 $X&/Q$?B$'7# 7,/+E1 $w71 
GK$;+-F8$'+-7,/ N XZ

a\L i
i i a
GC,/A+-,/] 7E!# $V&/Ed$'3?,/] 77,/4+1 $'&-7# (*. &/,/(*,/$'+-F21 $b&/E3J$'GCF83?,/77,/4+.0# $;1 $LGC$'3w.0&/c
e1-2E:-GCF8H(*^GwF3J10$;R^. $'3J2_+-2E(*GwF3J1-$g!# $g$'&] +-& 1 $g&/f7F# & F83?+-GC77,/4+ Z

i N& (*21 2V1 $63J$'GCF3=,/77,/4+E. 3=671 63J$'GCF83?,/779,/+%F,/$'+-$GC,/$'(*. 3J$Q# +"d ^&/243,/+-7,/&N. 23)1 $'W8$'7F82
!# $gGC$$'GCFI4&/$'7$. 3?f&/f3J$;GKF3=,/77,/+j^& . 3=,/+-7,/. ,/2_1 $g&/fF3=+-GC77,/+ Z

\ ^
8 L
i \ i

GK,/A4+-,/] 79%!4# $'R1 $'GC1 $V$;& .03=,/+-7,/. ,/21 $V&/EF3=^+-GK77,/+-R&/E3J$'GCF83?,/779,/+1 $'I4$bGK$;36724(*c


. 3J24I41-f1 $'GC. # 'Ga1 $&/H$?B$;79# 7,/+h1 $71 gGC$'+ F8$'+-7,/ N wZ
\ ^
8 L
i 4i a i

GC,/A4+-,/])7h!4# $'R072(*2GK$%$'GCFh^&). 3?,/+-7,/. ,/2*1 $"&hF3=^+-GK^797,/+-R0&/"724(*.03?2I47,/+@1 $


&/E3J$'GCF83?,/779,/+. # $'1 $LGK$;3Q.0&/e;1 E:-GCF8%(*^GfF3J10$'R. $'3J2+-2(*GfF3J10$V!# $_$'+$'&
] +-^& 1 $&/f7F# & F83?+-GC77,/4+ Z GC$'R^!# $g&/g3?$;GKF3?,/797,/+". # $'1 $6GK$;3U,/+-7# (*. &/,/1 H. 23
&/A# +-gGK$;+-F8$'+-7,/ N $;+h# +j. # +-F2%,/+-F$'3?(*$'1 ,/2E1 $g&/fF83?+-GC77,/4+-R. $;3?2V+-2%&] +-&
1 $&/f(*,/GC(*-Z

Clusula CHECK

^E$'GC. $'7,/] 79%^&/A# +-%7. 7,/1-1@1 ,/7,/2+-&. ^3=EP hi P&5F8^+-F82$;+&/%3J$'GCF3=,/77,/24+-$;G


1 $FI4&/f724(*2_$'+h&/H1 $7(*. 2Z

1 $'] +-,/7,/4+h1 $63?$;GKF3?,/797,/+h1 $FI4&/-k
[ CONSTRAINT name ] CHECK ( VALUE condition )
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]

lx

1 $'] +-,/7,/4+h1 $63?$;GKF3?,/797,/+h1 $7(*. 2k


[ CONSTRAINT name ] CHECK ( VALUE condition )
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]

clusula PRIMARY KEY


^g$'GC. $'7,/] 7f&/A4# +-Gw. 2GC,/I4,/&/,/1 1 $'G 1 ,/79,/2+-&/$'Ga. 3?g&/HM
$'] +-,/79,/+j1 $3J$'GCF3=,/77,/24+-$;Ga1 $gF8I4&/-k

\V)W5 i ak

[ CONSTRAINT name ] PRIMARY KEY ( column [, ...] )


[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]

$'] +-,/79,/+j1 $3J$'GCF3=,/77,/24+-$;Ga1 $g79^(*. 2)k


[ CONSTRAINT name ] PRIMARY KEY
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]

CREATE TABLE AS
Nombre
CREATE TABLE AS

PQ3J$'g# +-H+-# $;d fFI4&/

Synopsis
CREATE TABLE table [ (column [, ...] ) ]
AS select_clause

Inputs
table

i &+-24(*I43J$g1 $# +-H+-# $;d fFI4&/ffGC$;3>73J$S1 -Z

l^n

( [&/F,/. &/$'G +-24(*I43J$'G 1 $6792&/# (*c


i & +-2(*I3J$61 $6# +-f72&/# (*+--Z $6. # $'1 $'+%$'GC. $;79,/] 73\
+-f# GK^+-1 2E# +-H&/,/GCF8H1 $+-24(I3J$;Gw1 $72&/# (*+-H1 $'&/,/(*,/F1 f. 23U792(*GZ

column

select_clause

)V+ VGC$'+-F$'+-7,/V1 $H72+-GK# &/F_d&/,/1 -ZK $'] '3=^GK$H i i P . 3?V:-&/&/^3a# +-V1 $;GK73?,/. c
79,/+h1 $&/HGC,/+-FN,/Ga. $'3?(*,/F8,/1 -Z

Salidas
$;] ;3=GC$f w 48 T%]/ . 3?g:-&/&/3U# +hGK# (*3?,/2_1 $. 2GK,/I4&/$;Gw(*$'+-GCc
a
B$;Gw1 $6GK^&/,/1 -Z

Descripcin

 w J8a 4/. $'3?(*,/F8$"# +-FI4&/GC$'3f73J$'1-j. 3?F8,/3f1 $'&)792+-F8$;+-,/1 21 $h# +-



F8^I&/h$',/GCF8$'+-F$Z i !# ,/d&/$h$;+W8# +-79,/2+-(*,/$;+-F82-k= = oOAz^JADHR .0$'3J2*!# ,/eGL72+# +-
GC,/+-F8,/Gw( Ga1 ,/3J$'7F84Z

CREATE TRIGGER
Nombre
CREATE TRIGGER

PQ3J$'g# +j+-# $'d2E1 ,/GC. 3?1-243

Synopsis
CREATE TRIGGER name
{ BEFORE | AFTER } { event
[OR ...] } ON table
FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE
ER">funcBLE>
( arguments )

Entradas
name

i &+-24(*I43J$g1 $# +h1 ,/GC. 3?1 23$',/GKF$'+-F$Z

table

i &+-24(*I43J$g1 $# +-HFI4&/-Z

l

)V+-2_$'+-F83J$

event

i R

i i i 2)VM

\ i Z

funcname

)V+-fW8# +-7,/4+jGC# (*,/+-,/GCF83?1 H. 23U$;&# GC# 3?,/2Z

Salidas
CREATE

$61 $'d# $'&/d$$'GCF8$(*$'+-GCCB$GK,$'&1 ,/GC. 3?;1 243UGC$g:-f73J$'1 2V792+h',/F82Z

Descripcin

 w aJhh ,/+-F83J21 # 7,/3# ++-# $'d21 ,/GC. 3?1-243Q$'+&/EI4GC$b1 $V1 F24Gg7F8# ^&Z i &

1 ,/GC. 3?'1 23HGK$hGC247,/3724+&/j3?$;&/7,/4+
T$=BD$'7# F8^3&/W# +-7,/+$'GC. $'7,/] 79^1 
relname
Z
funcname
$6. # $'1 $g$;GK. $;7,/] 73U!# $f$'&1 ,/GC. 3?1 23UGC$f1 ,/GC. 3J$1 $g7# &/!# ,/$;3=H1 $$'GCF8Gw1 24GaW8243?(*Gk
+-F$'GH58 i i <>1 $E!# $"&/"2. $'3?7,/4+GC$'",/+-F8$'+-F1 "$'+# +@3J$'A4,/GCF83J258+-F$'GH1 $%!4# $"&/G
3J$'GCF83?,/779,/2+-$'G>GC$72(*. 3J# $'I4$'+%TE?#
/ >RL hwa"2Eh a"GK$;+",/+-F8$;+-F81 24GC< 2_1 $;GKc
. # 'Ga58\ 4 i a< 1 $g!# $f&/H2. $'3?7,/4+h:-T4HGC,/1 2%,/+-F$'+-F8^1 H58. 243U$=BD$'(*. &/2%1 $'GC. # 'Gw1 $g!# $
&/Gb3J$'GCF3=,/77,/24+-$;GLGK$;+@72(*. 3J24I41 ^GbT1 $h!4# $j?#
/ R L hw 2h :-T^+
GC,/1 2j72(*. &/$'F1 2GC<CZ , $'&-1 ,/GC. 3?'1 243wGC$L. 2+-$V$;+(*3J7:-V+-F$'G61 $;&-$'d$'+-F24R 'GCF8$b. # $'1 $
GC&/F83-&/624. $;3=7,/+_. ^3=X$;&3J$'A4,/GKF3J2H7F# ^&^2b7(*I4,/^3 $'&^3J$'A,/GCF3J2H!# $X$'GCF8I4Q,/+-GC$'3?F+-1 24GC$
58GK&/2%. ^3=H&/Ga2. $'3?7,/24+-$'GX?#
/ ThV hw <`Z ,$'&1 ,/GC. 3?1 23>GC$f1 ,/GC. 3?f1 $;GK. # ;G
1 $'&4$'d$'+-F24RF821 2GQ&/2GQ79^(*I4,/24GCR,/+-79&/# T4$'+-1 2h&/b &/F8,/(L,/+-GC$'3J7,/+-R 7F# &/,/e'7,/+2"I423=3?c
1 2R^GK2+jd ,/GC,/I4&/$'GC. 3?g$;&41 ,/GC. ^3=;1 23`Z
a$;] ;3=GC$H_&/2G67(
. _ F# &/24G1 $ M T 3?,/AA4$'3?GQ$'+*&/LA4<
# _ _ v|?s-}?4Vh }v }?pVH?} |Qt4
. 3?g( Ga,/+-W23?(*7,/4+ Z

Notas
 w aJhh $'Ga# + b$;NF$'+-GC,/+j1 $;&&/$'+-A# `B$gM 2GCF8A43J$'GZ
&/2_$'& . 3J24.0,/$'F83?,/2V3J$'&/7,/24+-^1 2_.0# $;1 $73J$';3># +h1 ,/GC. 3?1 23U$;+"$'GCF8H3J$'&/;7,/4+ Z
GCF8X&/Qd$'3?GC,/4+_7F8# &^58d Z +'<8R9&/G)GC$'+-F$'+-7,/GU1 $w1 ,/GC. 3?1-243J$;G)+-2b$'GCF+V,/(*. &/$'(*$'+-F1 GZ
a$;] ;3=GC$HEhha?h" . 3?V2I4F8$;+-$'3w,/+-W8243?(*7,/4+*GC2I43J$b72(*2I423=3?3a1 ,/GC. 3?c
1 23?$;GZ

Uso

P62(*. 3J# $'I4GC,N$;&N741 ,/A42L1 $X1 ,/GCF83?,/I4# ,/1 243$'GC. $;79,/] 71 2b$',/GCF8$Q$'+_&/gF8^I4&/1 $X1 ,/GCF83?,/I4# ,/1 2c
3J$'G +-F8$;Ga1 $-1 ,/3)2E^79F# &/,/e3# +-H] &/f$'+h&/2GX] &/(*Ga1 $g&/fF8^I4&/-k
CREATE TRIGGER if_dist_exists
BEFORE INSERT OR UPDATE ON films FOR EACH ROW

l^

EXECUTE PROCEDURE check_primary_key (did, distributors, did);

\V+-F$'G 1 $g7+-7$'&/3# +h1 ,/GCF83?,/I4# ,/1 23>2E1 $g7F8# &/,/e;3>GC#741 ,/A42RI23?3=g791 f3J$'WD$'3J$;+-79,/g$'+
&/24Ga] &/(*GX1 $6&/fF8I4&/ k
CREATE TRIGGER if_film_exists
BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW
EXECUTE PROCEDURE check_foreign_key (1, CASCADE, did, films, did);

Compatibilidad
SQL92
h2E:-^T% aa ?hh $'+ N -Z
i &)GC$'A4# +-1 2$=BD$'(*. &/2$'. &/,/71 2*F$'3?,/243?(*$'+-F$h.0# $;1 $E,/(*. &/$'(*$'+ F83?GC$hF(*I4,/'+# GC+-1 2
# +-f3J$'GCF83?,/77,/4+h1 $ i b`
5 i 57&/d$QW23>+-$;< 724(*2_$'+ k
CREATE TABLE distributors (
did
DECIMAL(3),
name
VARCHAR(40),
CONSTRAINT if_film_exists
FOREIGN KEY(did) REFERENCES films
ON UPDATE CASCADE ON DELETE CASCADE
);

+ 7# ^&/!# ,/$'3 7GC2RN&/^GX7&/d$'GwW823=^+-$'GaF821 d/H+-2%$;GKF+j,/(*. &/$'(*$;+-F81 ^GX58:-GCF8H&/Hd$'3Jc


i h
GC,/4+h-Z <$;+hM 2GCF8A43J$'GZ

CREATE TYPE
Nombre
CREATE TYPE

$'] +-$g# +j+-# $;d 2_F8,/. 2_1 $g1 F24G I4GC$

Synopsis
CREATE TYPE typename
( INPUT = input_function,
OUTPUT = output_function
, INTERNALLENGTH = { internallength
| VARIABLE }
[ , EXTERNALLENGTH = { externallength

l

[
[
[
[
[
[

|
,
,
,
,
,
,

VARIABLE } ]
DEFAULT = "default" ]
ELEMENT = element ]
DELIMITER = delimiter ]
SEND = send_function ]
RECEIVE = receive_function ]
PASSEDBYVALUE ] )

Entradas
typename

i &+-24(*I43J$g1 $'& F,/. 2EHGC$;3U73J$';1 2)Z

)V+hd&/243)&/,/F$'3?&/R$'& 7# &$'GC. $'7,/] 79f&f&/24+-A4,/F8# 1,/+-F$'3?+-f1 $'&+-# $'d2EF,/. 2Z

internallength

)V+hd&/243)&/,/F$'3?&/R$'& 7# &$'GC. $'7,/] 79f&f&/24+-A4,/F8# 1$'F$'3=+-g1 $'& +-# $'d2EF,/. 2Z

externallength

input_function

i &+-24(*I43J$g1 $# +-gW# +-7,/+-RN73J$';1 f(*$;1 ,/+-F8$ w Lha?h"R&/g79# &72+-c


d /, $;3=F$&/2Gw1 ^F82Gw1 $;GK1 $GC#W823=(*g$'NF$'3?+-ff&/HW823=(*g,/+-F8$'3?+-H1 $F,/. 2Z

output_function

i &+-24(*I43J$f1 $f# +-LW# +-7,/+-R 73J$';1 b(*$'1 ,/+-F$fP6 i \ i )VhP hR&/V7# &4792+-c
d /, $;3=F$L&/2G1 F82G1 $'GC1 $bGK#W823=(*V,/+-F8$;3=+-EV# +-EW8243?(*_72+-d$'+-,/$'+-F$V. 3?_GC$'3w(*2GCc
F83?1 2GZ

element

i &F8,/. 2_793J$'^102_$'Gw# +h3?3?T'$'GCF82_$'GC. $'7,/] 7f$;& F8,/. 2E1 $&/2Gw$'&/$;(*$'+-F24Gw1 $'& 3?3=^T Z

delimiter

i &793?7CF$'3U1 $'&/,/(*,/F1 23U. ^3=f$;& 3?3=TNZ

default

i &F8$'F82_. 23>1 $'W8$97F82_!# $fGK$6(*24GCF3=3. 3?g,/+-1 ,/73U1 F82G +-2E. 3J$;GK$;+-F8$'GC

send_function

i &+-24(*I43J$g1 $# +-gW# +-7,/+-RN73J$';1 f(*$;1 ,/+-F8$ w Lha?h"R&/g79# &72+-c


d /, $;3=F$L&/2G1 F82G1 $L$;GKF$VF,/. 2jE# +-_W8243?(*E^1 $'7# '1 V. 3?_GC$'3wF83?+-GC(*,/F,/1 24Gg_2F83?
(*!# ,/+--Z

receive_function

i &+-24(*I43J$g1 $# +-gW# +-7,/+-RN73J$';1 f(*$;1 ,/+-F8$ w Lha?h"R&/g79# &72+-c


d /, $;3=F$"&/2GL1 F24GH1 $"$;GKF$hF,/. 2h# +-hW8243?(*h1 $'7# 1 ". 3?"GC#F83?+-GC(*,/GC,/4+1 $;GK1 $
24F3=g(*!# ,/+-Hf&/HW823=(*f,/+-F$'3?+--Z

l^

Salidas
CREATE

$;+-GK`B$g!4# $GK$61 $'d# $'&/d$GC,$'&F8,/. 2_:-HGK,/1 2E73J$''1 2E724+h',/F2)Z

Descripcin

 w Oa . $'3?(*,/F$V& # GC# ^3=,/23J$'A,/GCF3=^3X# ++-# $'d2F8,/. 21 $V1 F24G1 $_# GC# 3?,/272+

M 24GCFA3J$'G6. ^3=VGK$;3X# GC1 2j$'+&/EI4GC$L1 $b1 F24G67F# ^&Z i &0# GC# 3?,/2j!4# $L1 $'] +-$V# +*F,/. 2GC$
724+-d,/$'3?F8$"$'+GC#. 3J2. ,/$'F3?,/2)Z
$'GL$'&>+-2(*I43J$h1 $%1 $'&)+-# $'d2F,/. 2T@1 $;I4$"GC$'3
+-,/72E1 $'+-F3J2_1 $&/24GaF8,/. 2Ga1 $'] typename
+-,/1 24Gw. 3?g$'GCFfI4GC$1 $g1 ^F82GZ
 w O
a +-$'7$'GC,/F%$'& 3J$'A,/GCF3J21 $_1 24GgW# +-7,/2+-$'GH58# GC+-1 2j73J$'F$VW8# +-79F,/24+-<U+-F$'G
1 $1 $'] +-,/3_$'&aF,/. 2)Z 3J$'. 3J$9GC$'+-F8^79,/+1 $# ++-# $'d2F8,/. 2I4^GK$$'GCF*1 $'F8$;3=(*,/+-^1 . 243
RN&/E7# &-724+ d ,/$;3=F$V&/_3J$'.03?$9GC$'+-F7,/4+$'F8$;3=+-V1 $'&-F,/. 2jE# +-_3J$'. 3J$9c
GCinput_function
$'+-F8^79,/+%,/+-F$'3?+-R^# F8,/&/,/e^I4&/$Q.0243)&/24G 2. $'3?1 23J$SG TVW8# +-79,/2+-$'G 1 $'] +-,/1 G>.0243)$'&NF,/. 2Z`hc
F8# 3?&/(*$'+-F$
$=BD$'7# F86&/F3?+-GCW23?(*7,/4+%,/+-d$'3?GC-ZJ\V(*I4G>W8# +-7,/24+-$;GKR
&/H1 $g$'+-F3=^1 output_function
fT"&/H1 $gGC&/,/1 H1 $'I4$'+hGC$'3>1 $;7&/3=;1 Ga. 3?fGC# (*,/3 # +-2%2%1 24Gw3JA# (*$'+-F2G
1 $F,/. 2E
9Z
opaque
2GX+-# $'d24GwF8,/. 2GQ1 $f1 ^F82GXI4GC$g. # $'1 $;+GC$'3U1 $f&/24+-A4,/F# 1*]NB^RN$;+7# T42%79^GK2
$'Gw# +$'+-F$'3J2". 2GC,/F8,/d24RN2"F8^(*I4,/'+. # $;1 $'+jGK$;3 1 $f&/2+-A,/F# 1d3?,/I4interna&/$SRN$'+7# T42
llength
7GC24RNM 2GCF8A43J$'G6GC# (*$L!4# $L$'&-+ # $;d 2hF,/. 2hF8,/$;+-$L$'&-(,/GK(*2jW8243?(*F2h!# $L$'& F8,/. 2h1 $H1 F24G
9ZKM 3?L,/+-1 ,/73>!# $b# +F8,/. 2"$;GQ1 $H&/24+-A4,/F8# 1*d ^3=,/I4&/$;R
GC# (,/+-,/GKF3=^1 2". 23aM 2GCF8A43J$'GCR
text
GC$g1 $'I4$g$'GC. $'7,/] 73
792(*2
Z` H3J$'. 3J$9GC$'+-F8^79,/+j$'F8$'3?+-HGC$
$'GC. $'7,/] 7f1 $W823=(*finternallength
GC,/(*,/&/3U# GC+-1 2E&/f.0&/I43?fVARIABLE
79&/^d $
Z
externallength
M 3=_,/+-1 ,/736!# $_# +F8,/.02$'Gg# +3?3?'T*T. 3?E,/+-1 ,/73Q!# $E# +F,/. 2F,/$'+-$_$'&/$;(*$'+-F24Gf1 $
3?3=;T9R0,/+-1 ,/!# $j$'&>F,/. 21 $'&)$'&/$'(*$'+-F21 $'&U3?3?T# GK+ 1 2&/j. &/I43?j7&/d$%$'&/$'(*$;+-F`Z M 23
$=BD$'(*. &/2R. 3?g1 $'] +-,/3U# +j^3=3?T_1 $$'+-F$'3J2Ga1 $g79# F3J2LI4TF$'Ga5,/+-bF +<8R^$'GC. $;79,/] !# $
ELEMENT = int4

M 3=H,/+-1 ,/79^3a$'& 1 $;&/,/(*,/F81 243 bGC$'3a# GC1 2"$;+3?3?'T4G61 $f$'GCF8$HF8,/.024R


GC$b. # $;1 $
]NB3)f# +j73=;7F8$;3>$'GC. $'7c_ ] 72Z i &1 $'&/,/(*,/F1 23U. 23>1 $;W8$'7F82V$'Ga&/f724delimiter
(*H58 <JZ
,
.079,/2+-&/(*$;+-F8$'R:-Tf# +_d&/230. 23-1 $'W8$'7F821 ,/GC. 2+-,/I&/$w$;+V7GC2g1 $a!# $a# +V# GC# 3?,/2f!4# ,/$'3=
&/A4 +_. F3?4+_1 $wI4,/F $'GC. $'c7 _ ] 72b. 3?X$'. 3?$;GC'3 1 ^F82G)+-2b. 3J$'GC$'+-F$'GZ i GC. $'7,/] !# $Q$;&d&/23
. 23U1 $;W$;79F2V792+h&/H. &/I43?g7&/d$
Z
DEFAULT

dePfhgQiWjck(lgQm<ink
oepqrtsLuOvxwzy{xy|t}x~uvx{x*v~ |(v{xQv|tQ}xrtJ*v2~wuO|t{xut@~|<@utJvxwz*v*u(*v2yv!wut{|tQut{uOvx{Qx
*}vx{xvxQvx{xPeiLSjck(lgQmLi!k
oecp

2G3JA4# (*$'+-F24G24. 7,/2+-&/$'G


T
GK2+# GC1 24G
7# ^+-1 2E$;&. 3J2A3?(*f1 $. &/,/7send_function
7,/4+j!# $f1 $'(*+-1 f&/24receive_function
GXGK$;3=d,/7,/24GwM 24GCF8A43J$'Gw3?$;GK,/1 $$'+j# +-
(*!# ,/+-1 ,/W8$'3J$S+-F$Z i +%$'GCF8$Q7GC24R'&/(*!# ,/+-$'+%&/g7# &GC$6$=BD$'7# F8M 24GCFA3J$'G>. # $;1 $Q# GC3
# +W823=(*^F82. ^3=%$;& F,/. 2*1 $_1 ^F82GH1 ,/W8$'3J$'+-F$_1 $'& # GC1 2$;+&/"(*!4# ,/+-h3J$'(*2F-Z i +$;GKc
F8$b7GC2$'G72+-d $;+-,/$'+-F8$L792+-d$'3?F8,/3X&/24Gg,/F$'(*G1 $L1 ^F82GgV# +-EW8243?(*E$;GKF+-1 3a7# +-1 2jGC$
$'+-d,/$'+1 $'GC1 $_$;& GC$'3?d,/1 236& 7&/,/$'+-F$_T*724+-d$'3?F8,/3?&/2GH1 $'& W823=(*^F82$;GKF+-1 ^3Q& $'GC. $;z7 _ ] 72
1 $&/H(*!4# ,/+-L7# +-1 2_$'&GC$'3?d ,/1 23>3J$;79,/I4$6&/24Gw1 F82Ga1 $'GC1 $$'&7&/,/$'+-F$Z ,4$;GCF8GaW8# +-79,/2+-$'G
+-2_$;GKF+"$'GC. $'7,/] 71 GCR;GC$6GK# (*$6!# $$'& W823=(*^F82V,/+-F8$;3=+-2V1 $'& F,/. 2V$'G 7$'. F8;I4&/$$;+"F821 G
&/Gg3J!# ,/F8$;79F# 3=^Gf1 $_(*^!# ,/+-"3?$;&/$'d$'+-F$'GZ'M 23$?B$'(. &/24R &/2GH73?79F$'3J$9GHGC,/(*. &/$'Gf+-2*GC$
F8,/$;+-$'+!# $L792+-d$'3?F8,/3wGC,0GK$b. GCL1 $'GC1 $L# + # +-c +_V# +
i P6GCFF8,/2+-R4. $'3J2"(*# 7:-2Gf2F83J2G

F8,/. 2GaIG _YZ

l

R ,/+-1 ,/7!# $&/24GE24.0$'3=^1 243J$9G%T@W# +-7,/2+-$'G%!4# $# GC+


i & A@24. 7,/2+-&/R
PASSEDBYVALUE
$'GCF8$"F8,/. 21 $"1 F24GV
1 $'I4$'+@. GC3g&/2GE3JA4# (*$'+-F24GL. 3J$'W8$;3?$9+-F$'(*$'+-F$j. 23bd&/23f!# $j. 23
3J$'WD$'3J$;+-79,/ Z $'GC$Q79# $;+-F861 $X!# $6+-2L. GC,3 _ Q. 23d &/23 F,/. 24G 7# T63J$'. 3J$9GC$'+-F8^79,/+%,/+-F$'3?+-
$'G 1 $(*Ga1 $g7# F3?2LI4T4F8$;GZ
M 3=H+-# $;d 2GQF,/. 24GXI^GK$;RN# +# GK# ^3=,/2". # $;1 $f1 $'] +-,/3 2. $'3?1 23?$;GKRW8# +-7,/24+-$;GQTh724+BD# +-F82G
# GK^+-1 2_&/^GwW87,/&/,/1 1 $9Ga. 3J24.0,/1 'Ga1 $'GC73?,/F8G $'+h$'GCFfGC$'779,/+ Z

Tipos de Array
i ,/GKF$'+%1 2GaW# +-7,/2+-$'G A$;+-$'3?&/,/e1 ;G ,/+-7923?. 243?1 ^GKR;3=3?T4,/+%T_3?3=^T;24# F . 3?&/f73J$';c
7,/4+3=.0,/1 H1 $gF8,/.024GQ1 $f^3=3?T%1 $H&/2+-A4,/F8# 1d3?,/;I&/$4Z i GKFGQW8# +-7,/24+-$;GQ24.0$'3=^+$;+3?3?TG
1 $7# &/!# ,/$;3UF,/. 2%M 24GCA43J$'G $',/GKF$'+-F$Z

Tipos de objetos grandes

)V+F8,/. 2M 2GKA43J$'GL3J$'A4# &/3GC&/2. # $;1 $"GC$;3H1 $%&/2+-A,/F# 1^"IT4F$'GZ ,)+-$'7$;GK,/F# +F8,/. 2


(*T4243b1 $'I4$73J$'3H# +F,/. 21 $2I;B$;F82A43?+-1 $Z i &a,/+-F8$;3=W87$j.03=$;GKF2G%F8,/.024GE$'GCF8(*c
. &/,/(*$'+-F$g$'. &/,/71 2_$'+#A! U v|?s-}?L% }v[-}?pHVJ} | t4SZK H&/24+-A4,/F8# 11 $gF241 2GX&/2G
F8,/. 2Ga1 $2I;B$;F82%A43=^+-1 $$'GaGC,/$'(*. 3J$ \L \L i Z

Ejemplos

i CG F8$E724(*^+-1 2*73?$;%$'& F8,/. 2*1 $E1 ^F82GHI42T*1 $'GC. # 'Gb# GC"$'& F8,/. 2*$;+@# +-"1 $'] +-,/7,/4+1 $
7&/GC$k
CREATE TYPE box (INTERNALLENGTH = 8,
INPUT = my_procedure_1, OUTPUT = my_procedure_2);
CREATE TABLE myboxes (id INT4, description box);

i GCF8$72(*+-1 2_793J$;g# +hF8,/. 2E3=3?;T%1 $&/2+-A4,F# 1d3=,/^I&/$6724+h$'&/$;(*$'+-F82Ga$'+-F8$;3?2Gk


CREATE TYPE int4array (INPUT = array_in, OUTPUT = array_out,
INTERNALLENGTH = VARIABLE, ELEMENT = int4);
CREATE TABLE myarrays (id int4, numbers int4array);

i GCF8$72(*+-1 2_793J$;g# +hF8,/. 2E1 $2I'BD$'F2%A43=^+-1 $T_&/2%# GKg$'+h# +-H1 $'] +-,/7,/4+h1 $g7&/GC$k
CREATE TYPE bigobj (INPUT = lo_filein, OUTPUT = lo_fileout,
INTERNALLENGTH = VARIABLE);
CREATE TABLE big_objs (id int4, obj bigobj);

Notas
2Ga+-2(*I43J$'Ga1 $F8,/.024Ga+-2E. # $;1 $'+"$'(*. $;e'3U. 23U$;& 793?7F$'3A# ,/+hI4CB2_58<T_GK&/2%. # $;c
1 $'+"F$'+-$'3)# +-H&/2+-A,/F# 11 $gg73?7F8$;3[$'GZ i GCF82_$'Ga1 $'I4,/1 2Vf!# $gM 2GKFA3J$;Gw73J$'gGC,/+j,/+-W8243Jc

l^l

(*3 # +F8,/. 2"3?3?T". 3?H71 bF8,/.02"I4GK$f72+# ++-2(*I43J$f!# $b72+-GC,/GKF$L$;+$'&+-24(*I43J$f1 $'&


F8,/. 2_I4GC$. 3J$'7$91 ,/1 2E1 $6# +A4# ,/4+hI4CBD2Z
a$;] ;3=GC$fhhO
a . 3?gI423=3?3)# +hF8,/. 2_$'N,/GCF$'+-F$Z
$'_F(*I4,/'+ wa4Vh6a?h"R  aah wahT$'& 7(
. _ F# &/21 $ I;BD$'F24G
b3=^+-1 $'GCR^O ^3?A $ I;BD$'7F8GCOR$;+j v|?s }J?4V_ }Jv[-}Jp9HL?} |>t4;Z

Compatibilidad
SQL3
 w Oa $'Ga# +h$'&/$'(*$'+-F2E1 $ Z

CREAR USUARIO
Nombre
CREAR USUARIO

PQ3?$;+-1 2V# +j+-# $;d 2_# GK# ^3=,/2_1 $I4GC$g1 $1 F82G

Synopsis
CREAR USUARIO nombre de usuario
[ CON
[ SYSID uid ]
[ PASSWORD palabra clave ] ]
[ CREARDB
| NOCREARDB ] [ CREARUSUARIO | NOCREARUSUARIO ]
[ EN EL GRUPO nombre de grupo [, ...] ]
[ VALIDO HASTA abstime ]

Entradas
nombre de usuario

i &+-24(*I43J$g1 $'& # GC# 3?,/2)Z

uid

l

_23J1 $'+
. # $;1 $LGC$'3X# GC1 _. ^3=V$'GC792A4$'3X$'&0,/1 $'+-F,/] 71 243X1 $L# GC# 3?,/2M 2GKFc
A3J$  "1 $'SYSID
&# GC# 3?,/2b!# $XGK$X$'GCFQ793J$'^+-1 2)Zh2b$;GU+-1 Q+-$'7$'GC3?,/2H!# $Q7923?3?$;GK.024+-1 X
&/24G,/1 $'+-F,/] 71 23J$'G 1 $a# GC# ^3=,/2GU1 $O)L R9.0$'3J2f&/A4# +-G).0$'3=GC2+-G)$;&/,/A$;+_(*+-F$'+-$'3
&/24Ga+- (*$'3J24Ga,/A4# &/$'GZ
, +-2_GK$$'GC. $'7,/] 79R'GK$g# GC3?f. 23U1 $'W8$'7F82V$'&+- (*$'3J2E(*^Ga^&/F82_GC,/A+-1 2_(*Ga# +-2)Z

palabra clave

M ,/1 $6&/. &/I4379&/^d $X1 $'&# GC# ^3=,/2Z ,N+-2Ldg6# GK3^# F$'+-F,/] 797,/+%. 23. &/I4379&/c
d w
$ . # $;1 $Q2(*,/F8,3)$;GKFQ24. 7,/+-R'1 $X2F83?(*+ $'3=Q$;&# GC# 3= ,/2b+-2LGC$'3?Q79^. eQ1 $w792+-$'7F3
792+$'& GC$'3?d ,/1 2361 $_# F8$;+-F8,/W87,/+*1 $_. &/I43?'Gf7&/d $4Z ,/3?$L$'+. A4:-I4-Z 724+-W858;<>2&/
b# ,/f1 $'& 1 (*,/+-,GKF3=^1 243). 3?g(*^Ga1 $;F8&/&/$;Ga1 $6724(2E# GC3U(*$;79^+-,/GK(24GX1 $6# F$'+-F,/c
] 77,/+ Z

P6 i \
i
P6 i \ i

i GKFG_43J1 $;+-$'GV1 $'] +-$'+&/7. 7C,/1 ^11 $# +# GK# ^3=,/2. 3?73J$'3HI4GC$'GV1 $j1 F24GZ
, GC$E$'GC. $'7,/] 7"P6 i \ i R-$;&# GC# 3?,/2*1 $'] +-,/1 2*F$'+-1 3?%. $'3?(*,/GC2*. 3="73J$';3GC# G
. 3J24. ,/GaI4GC$'Gw1 $f1 F82G*Z )L GK^+-1 2% P6 i \ i *GC$f1 $'+-$;A3?Hb# +# GC# 3?,/2"&/L7c
. 7,/1 '1@1 $L73?$;3QI4^GK$;Gg1 $V1 F82GZ , GC$_2(*,/F8$_ $;GKF%23?1 $'+-R4 P6 i \ i GK$_# GC

. 243)1 $'W8$'7F2)Z
P6 i \
i ) i
P6 i \
i ) i
i GKFGa243J1 $;+-$'G 1 $'F$'3?(*,/+-+hGK,f# +j# GC# ^3=,/2VGC$g&/$g. $'3?(*,/F8,/3?f73J$'3+-# $'d2GX# GC# 3?,/24GZ
i GKFL24. 7,/+*:-3?+1 $;&-# GK# ^3=,/2h# +GC# . $'3J# GC# 3?,/2j!4# $V. 21 3=L. GC3a. 23w$'+-7,/(*V1 $
F821 G%&/^G%3J$'GCF83?,/7,/24+-$;G"1 $77$'GC2)Z ,XGC$24(*,F8$$'GCF8*23?1 $'+GK$72A$'3?*&/23J1 $'+1 $
P6 i \ i ) i @72(*2%d ^&/243). 23>1 $;W$;79F2V1 $'& # GC# 3=,/2Z
nombre de grupo

i & +-24(*I43J$1 $j# +A43J# . 21 $'+-F3J21 $;&>79# ^&aGC$72&/247& # GC# 3?,/2@724(*2# ++-# $;d 2
(*,/$'(*I43J2)Z

abstime

Q23J1 $'+V\L \ \. 2+-$X# +Ed&/2430I4GC24&/# F2VQ&/QW8$'7:-Q$'+E&/Q!# $X&/6. &/I43


79&/^d $L1 $'&0# GC# 3= ,/2. ,/$'3J1 $VGC#d&/,/1 $'e-Z , GC$_2(*,/F8$_$;GKF%23?1 $;+*$'& &/24A4,/+d ^&/1 3=V. 3?
GK,/$;(*. 3J$Z

Resultados
USUARIO
CREAR

$;+-GK`B$g1 $;d # $;&/F82VGC,4$;&472(*+-1 2_GK$g72(*. &/$'FfGCF8,/GCW87F243?,/(*$'+-F$Z

Descripcin

P6 i \V) )V\H -^1 ,/3=# ++-# $'d2# GC# 3?,/2@# +$=BD$'(*. &/21 $hM 2GCF8A43J$ N XZ$;GC$
&/jb# ,/h1 $'&\V1 (*,/+-,/GCF3=^1 243g. ^3="(*GL,/+-W823=(*^79,/+GC24I43J$%$'&(*+-$=BD21 $"# GC# 3?,/24GLT&/
# F8$;+-F8,/] 77,/4+ Z $'I4$GC$'3# +"GC# .0$'3J# GK# ^3=,/2V1 $6I4^GK$;Ga1 $Q1 F24G . 3?6# GK^3)$;GKF$72(*+-1 2Z

)VGC$ BDJ;Vz >4z8Co ?FQ)n ?VFaz D . 3?j7(*I4,/3f&/. ^&/I43=h7&/d$jT@&24GV. 3?,/d ,/&/$;A,/2GE1 $j# +
# GK# ^3=,/2R 3
T ;4FDVX
=!F. 3?b$'&/,/(*,/+-3wV# +# GK# 3?,/2Z )LGKJ
$ hh?4?LhL . c
3=%^-1 ,/362*$;&/,/(*,/+-3"# +# GC# 3?,/21 $E2F83J2GHA43J# . 24GZM 2GCF8A43J$ N d,/$'+-$E724+# +@GC73=,/.0F
~`}?ps8?t|J?}!4# $QF8,/$;+-$6&/(*,/GK(*W8# +-79,/2+-&/,/1 ^1h!# $Q$'GCF8$Q792(*+-1 2L581 $X:-$'7:-2R'&/&/(*g6$'GCF$
724(*+-1 24< . $'3J2V. # $'1 $6GK$;3>$=BD$'7# F8^1 2_1 $'GC1 $&/f&/,/+-$;b1 $724(*+ 1 24GZ

l^m

Modo de uso

P63J$93># +h# GC# 3?,/2EGC,/+h. &/I43?g7&/d$k


CREAR USUARIO jonathan

P63J$93># +h# GC# 3?,/2E724+h. &/^I43=79&/^d $4k


CREAR USUARIO david CON PALABRA CLAVE jw8s0F4

P63J$93)# +h# GC# 3?,/2_72+h# +-g. &/I43?7&/d$'R^7# T4g7# $'+-Ff$'Gad &/,/1 g:-GCF8g$'& ] +-& 1 $'& ^Z
h2F8$'GC$!4# $g# +GC$'A4# +-1 2E1 $;+-F83J2V1 $'&-2_;f&/H79# $;+-F8f+-2_$'Gad ^&/,/1 -k
CREAR USUARIO miriam CON PALABRA CLAVE jw8s0F4 VALIDA HASTA 1 En 2002

73?$93U# +-f7# $'+-F8g792+j&/f!# $g$'&# GC# 3=,/2_. # $'1 g793J$93>I4^GK$;Ga1 $61 F24Gk
CREAR USUARIO manuel CON PALABRA CLAVE jw8s0F4 CREARDB

Compatibilidad
SQL92
h2E$;N,/GCF$&/H243J1 $;+h w 4/ $'+ 4Z

CREAR VISTA
Nombre
CREAR VISTA

P62+-GKF3J# ,/3># +-HFI4&/fd,/3=F# &

Synopsis
CREAR VISTA vista COMO SELECCIONADO query

Entradas
vista

i &+-24(*I43J$g1 $&/gd ,/GCFH!# $gGC$gd gf73?$;3JZ

lx

)V+-f72+-GK# &/Fb$'+

consulta


,/+-1 ,/7f&/^Gw72&/# (+-GXT_] &/^Gw1 $g&/gd ,/GCF-Z
,/3?, BDGC$fH&/L23J1 $'+ i i PQP h\H. 3?f(*Gw,/+-W8243?(*7,/4+GC24I43J$g&/2GQ3JA# (*$;+-F82G
d &,/1 24GZ

Resultados
CREADA

i &(*$'+-GCCB$3?$;79,/I4,/1 2_GC,&/Hd ,/GCFfGC$g793J$;gGCF8,/GCW87F243?,/(*$'+-F$Z

ERROR: Relacin view ya existe

i GKF$g$'3?3J243)279# 3?3J$6GC,4&/fd,/GKFH$'GC. $'7,/] 71 gT4f$',/GCF8$g$;+j&/gI4GC$1 $1 ^F82GZ

AVISO creado: el nombre atribuido "column" tiene un caracter desconocido

6d ,/GCFgGC$'3?73J$91 6F8$'+-,/$;+-1 2L# +-g724&/# (*+-792+%# +%73?7F$S31 $'GC72+-247,/1 2LGC,N# GCF8$'1
+-2E&/2E$;GK.0$'7,/] 7-Z`M 23>$?B$;(*. &/24R$'&GC,/A4# ,/$'+-F8$792(*+-1 2_1 f# +$;3=3J239k
CREAR VISTA vista COMO SELECCIONADO Hola Mundo

(*,/$'+-F83?G !# $f$'GCF$724(*+ 1 2E+-2%&/2_:-7$k

CREAR VISTA vista COMO SELECCIONADO Hola Mundo::texto

Descripcin

 LV/ 1 $;] +-,/3?# +-d,/GCF81 $h# +-F8I4&/2@7&/GCGZ i GKFd,/GCF8+-2GC$(*F8$;3=,/&/,/c



efW8/GC,/7(*$'+-F$Z i GC. $'7,/] 7(*$'+-F$'R^# +-H724+-GC# &/FL3J$;$'GC793?,/FfA$;+-$'3?H# F82(*F,/79($'+-F8$g# +-
3J$'A4&/g. 3?f(*+-F$'+-$'3)&/Ga24.0$'3=^79,/2+-$'Ga$=BD$'7# F8^1 'Ga$'+h&/fd,/GCF8-Z

Notas
h23=(*&/($'+-F8$;R^&/Gwd,/GCF8HGC2+h1 $GC4&/2E&/$'7F8# 3?-Z
)VGC$&/g243J1 $'+h ?LZ
V/ . 3?f1 $'GC:-7$'3[GK$g1 $&/Hd ,GKF-Z

Modo de uso

P63J$93># +-fd,/GCF8H72+-F8$;+-,/$'+-1 2EF21 Gw&/^Gw. $;&//7# &/G 1 $P62(*$'1 ,/-k


CREAR VISTA clases COMO
SELECCIONAR *
DESDE pelculas
DONDE clase = Comedia;
SELECCIONAR * DESDE clases;

l^n

codigo |ttulo
|did| date_prod|Clase
-----+-----------------+--+-------+-------+---UA502 |Bananas
|105|13-07-1971|Comedia
C_701 |Theres a Girl in my Soup|107|11-06-1970 Comedia

|Dur
| 01:22
| 01:36

Compatibilidad
SQL92
^g$'GC. $'7,/] 7f&/A4# +-Gw7. ;7,/1 1 $'G $'GC. $;79] 79G . ^3=&/H243J1 $'+06 HZV/ k
CREAR VISTA view [ columna [, ...] ]
COMO SELECCIONADO expresin [ COMO nombre de columna ] [, ...]
DESDE tabla [ DONDE condicin ]
[ CON [ CASCADA | LOCAL ] COMPROBAR OPCION ]

G 7&/# GC# &/^Ga2. 7,/2+-&/$'Ga. 3?fF821 2Gw&/2GX724(*^+-1 24G N gGC24+ k


P

M \V M P
i GKFH2. 79,/+h$'Ga. 3?f:-7$'3)d,/GKFG 3J$'+-24dI4&/$;GZ 21 24Gw&/24G i \L@ i \V
$'+"&/fd,/GCF8gGC$;3=+"772(*. 3J24I41 2G . 3?gGC$'A4# 3=^3 !# $g&/2Gw1 F2GaGCF,/GCW^79$;+%&/G 724+-1 ,/c
79,/2+-$'Ga1 $'] +-,/1 G $'+h&/HFI4&/-Z ,+-2E&/2_79# (*. &/$;+-R&/H3?$;+-24d7,/+"+-2%GC$'3?f$=BD$'7# F81 Z

P6\V
P62(*. 3J24I43)&/H,/+-F8$;A3?,/1 11 $$'GCF8gd ,/GCF-Z
P6\ Pw\ \

P62(*. 3J24I43X&/V,/+-F8$'A43?,/1 11 $b$'GCF8Vd /, GCFET7# &/!# ,/$;3Qd,/GCF8_1 $'. $'+-1 ,/$'+-F8$4ZSP6\ PQ\Hc
\GC$gGC# (*$GC,+-,PQ\ P6\ \+-, 6
P \LGC24+j$'GC. $'7,/] 71 'GZ

DECLARE
Nombre
DECLARE

$'] +-$g# +j7# 3?GC243U. 3?g77$'GC2_H# +-fFI4&/

Synopsis
DECLARE cursorname [ BINARY ] [ INSENSITIVE ] [ SCROLL
] CURSOR FOR query [ FOR { READ
ONLY | UPDATE [ OF column [, ...]

l

] ]

Inputs
cursorname

i &+-24(*I43J$g1 $'& 7# 3?GC243UfGC$'3># GC1 2V$'+hGC# I4GK$;79# $;+-F8$'Ga2. $'3?7,/24+-$'G 4i P ZZ

"\V)
M 3J2d247f!# $f$'& 7# 3?GC243UF83?,/A4f1 F24Ga$'+"W8243?(*F2EI4,/+-3?,/2E$;+hd $;ef1 $W823=(*F2EF$'F82Z
i  i
V. &/I43?_7&/d$V,/+-1 ,/7+-1 2!# $_&/2Gf1 F2Gf3J$'7# . $'3^1 24Gg1 $'&07# 3?GK236+-21 $'I4$'+
GK$;3)^W$;7F8;1 24G . 23)79F# &/,/e7`,/24+-$;Gw1 $;GK1 $Q2F83J24G . 3J27$'GC24G 2V79# 3?GC243J$'GZ=f!# $&/24. $;c
3=7,/+1 $H&/2GQ7# 3?GK23J$'GX27# 3=3J$g1 $;+-F83J2%1 $f&/GwF83?+-GC77,/24+-$;GKR$'+jM 24GCFA3J$'GX$'GCF8$fGC,/$'(*c
. 3J$6$'Ga$'&7GC2)Z i GKFf. &/I43?g7&/d$+-2EF8,/$'+-$$'W8$'7F82Z
PQ

^j. &/^I43=h7&/d $",/+-1 ,/7+-1 2!# $j&/2GV1 F24GL1 $;I$;+GC$'3H3?$;7C# . $'3?1 2GL$'+(* &/c
F8,/. &/$;GE] &/G_. 243L79^1 24.0$'3=^79,/+ i P Z !# $$'GCF2@$'GEGK,/$;(*. 3J$j. $'3?(*,/F,/1 2. 23
M 2GCF8A43J$'G $'GCF8H. ^&/I43=7&/d $6+-2EF,/$'+-$g$'W8$'7F2)Z
query

)V+-L724+-GC# &/F8 &/V7# ^& . 3J2d $;$'3?V&/G6] &/G6VGK$;3XA42d $;3=+-^1 GQ. 23w$'&-7# 3=GC23=ZSa$;c
W$;3=,/3?GC$V& 724(*^+-1 2 i i P
. ^3=_(*T23,/+-W823=(*7,/+^79$;3J7C%1 $_&/2GH3JA4# ($'+-F82G
d &,/1 24GZ
"N


V. &/I43?_7&/d$_,/+-1 ,/7+-1 2!# $_$'& 7# 3=GC236GC$'3?E# GC1 2$;+(*21 2GC2&/2&/$'7F# 3?-Z
 !# $j$;GKF$h$;G_$;&> +-,/792(*241 21 $"77$'GC21 $"7# 3?GC243H1 ,/GC. 2+-,/I4&/$j$'+M 2GKFA43?$;G_$;GCF8
. &/I43H7&/d$+-2EF,/$'+-$g$;W$;79F2Z

i \

)VM

\
i
N b. &/I43?H7&/d $f,/+-1 ,/7+-1 2"!# $b$;& 7# 3=GC23aGC$'3=b# GC1 2". ^3=b7F# ^&/,/e'3aFI4&/GZ
 "!# $E&/h^79F# &/,/e;79,/+1 $_79# 3?GC243J$;GH+-2$'GCFh^79F# &/(*$'+-F$_GC24. 23?F81 h$;+M 2GKFA43?$;G
$'GCF8f. ^&/I43=7&/d $6. 3J24d279g# +j(*$;+-GK`B$g1 $$'3?3J243),/+-W8243?(*F,/d 2Z

column

PQ24&/# (*+ 58GC<)hGC$'367F8# &/,/e;1 GZ' "!# $E&/"7F8# &/,/e^'7,/4+1 $_7# 3=GC23J$'GH+-2$'GCF8"7c
F8# &/(*$;+-F8$"GK2. 23=F1 h$'+M 24GCFA3J$'GL&/j7&/# GK# &/)VM \ i . 3J2d 27j# +(*$;+-GK`B$"1 $

$'3?3?23,/+-W8243?(*F,/d 2Z

Outputs
SELECT

i &(*$'+-GCCB$1 $'d# $'&/F82_GC,4$;& i i P $'G $=BD$'7# F1 2E$;N,/F24GC(*$;+-F8$Z

l^

NOTICE BlankPortalAssignName: portal"cursorname" already exists

i GKF$g$'3?3J243)279# 3?3J$6GC,

cursorname

T4H$'GCFf1 $'7&/3?'1 2Z

i GKF$g$'3?3J243)279# 3?3J$6GC,4$'& 7# 3=GC23>+-2_$'GCF8H1 $;79&/^3=;1 2E1 $;+-F83J2V1 $# +jF83?+-GC7F8,/2+"I4&/247-)Z

ERROR: Named portals may only be used in begin/endtransaction blocks

Description

 L. $'3?(*,/F8$E"# +# GK# 3?,/2*73J$S^37# 3=GC23?$;GKR&/2Gb7# &/$'Gf. # $'1 $'+GC$'3# GC1 2GH.03=
h
3J$'7C# . $'3?3f# +. $'!4# $'+-2+ (*$;3J21 $"] &/G_j&/d$'eh. 3J24d$'+-,/$;+-F8$'GV1 $"# +-724+-GC# &/F8(*G
$'F8$'+-GC-Z 2G>7# 3=GC23?$;GU. # $'1 $;+E1 $'d2&/d $;3 1 F24GUT4gGC$'6$'+_W23?(*F82L1 $XF$'NF2b2L$'+%W82$'(*F2
I4,/+-3?,/V
2 >=!A
o *Z
2Gw7# 3=GC23J$'G 792(*# +-$'Gw3J$'F823?+-+"1 F24Ga$'+hW8243?(*F2EF$'NF2R^THGC$'g\ P 8 #24F3J2E$'GC!# $'(
1 $7241 ,/] 77,/2+1 $;. $'+-1 ,/$'+-1 2$'+792(*2$'&aM 24GCFA3J$'GEI47 -$;+-1W8# $73J$'1 2)Z *!# $&/2G
1 F24GL$'GCF+A4# ^3J101 2GV+-F8,/d(*$;+-F8$"$'+W8243?(*F2I4,/+-^3=,/2R $'&UGC,/GCF8$;(*1 $'I4$":-7$'3f# +-
724+-d$'3?GC,/4+V. 3?a. 3J21 # 7,/30W8243?(*F2fF$'F82Z[\V1 $;(*GCRK&/24GW23?(*F82G 1 $aF8$;NF2fGC24+Vw(*$;+-# 1 2
(*T4243J$'GV$'+F(*+-2@!4# $GC# G_7923?3?$;GC. 24+-1 ,/$;+-F8$'GE$'+W8243?(*F2@I4,/+-3?,/2
Z )L+-d$'e!# $&/
,/+-W8243?(*7,/4+Vd,/$'+-$w$'+VW8243?(*F2bF8$;NF24R&/Q. &/,/77,/+_7&/,/$'+-F$w. 241 3=,/Q+-$'7$'GC,/F3072+-d $;3=F,/3=&/2G
%# +W823=(*^F82I4,/+-3?,/2. ^3=E(+-,/. # &/3?&/24GZ^&/24Gf79# 3?GC243J$'Gf "\V)1 $;d # $;&/d $;+&/2GH1 F82G
$'+"# +-H3J$'. 3J$9GC$'+-F8^79,/+hI4,/+-3?,/f+-F8,/d-Z
P62(*2b$=BD$'(*. &/2R'GC,N# +-6792+-GC# &/F861 $'d# $'&/d$w# +%d&/243 1 $X# +-2L1 $;GK1 $X# +-6792&/# (*+-6,/+-F8$'A4$'3R
# GKF$'124I4F$'+-1 3?,/h# +GCF83?,/+-A1 $"OYO 792+# +7# 3?GK23g1 $;W^# &/FU(*,/$'+-F83?GL!# $%724+@# +7# 3?GC243
I4,/+-3?,/2_# GCF8$;124I4F$'+-1 3?,/f# +hd ^&/24
3 +c8I4TF$,/A4# ^&4g# +j72+-F83J2&/c8\58O \QO<`Z
2G_7# 3?GK23J$'GV "\V)1 $'I4$'+GC$'3H# GC1 24G_7# ,/1 1 2GK^(*$'+-F$ZN\L. &/,/779,/2+-$'G_1 $j# GC# 3?,/2
F8^&/$'GQ724(*2
+-2hGC2+724+-GC7,/$'+-F$'G61 $H&/24G67# 3=GC23J$'GQI4,/+-3?,/24G6Tj$;GK. $;3=^+!# $b&/24G61 ^F82G
d$'+-A^+"$'+hW8psql
243?(*F2EF8$;NF2)Z
3?$;.-3J$'GC$'+-F7,/4+1 $*&/2GjGCF83?,/+-A$'Gh+-$'# F3=&w3J$'GC. $'7F82&/^3?!4# ,/F8$'7F# 3=;R (*,/$'+-F3?!# $
&/3J$'. 3J$9GC$'+-F8^79,/+I,/+-^3=,/.0# $'1 $j1 ,/W8$'3?,/3H$'+-F3?$h1 ,/W8$'3J$'+-F$'GV3J!# ,/F8$;79F# 3?G_1 $j(*!# ,/+-G
T v|?s-}J?|g{4v%}?|?t4?u ^H?uUv}?^?{pL?{4s8v%^
Ss8?|Hv_uYp9|f~`t4?|?s8{4?|bg}JJq}J?|J?{4sp~=v{@qp}?p_uYv|
~`t4}?|?v}?L
| S{4p9}Jv|;Z'M 243Q724+-GC,/A# ,/$;+-F8$;R GC, GC#@(!# ,/+-%7&/,/$'+-F8$VTGC#(*!# ,/+-%GC$'3?d ,/1 243X# GK
1 ,/W8$'3J$9+-F8$'Gg3J$'. 3J$9GK$;+-F87,/2+-$'Gf5$4Z AUZ;I4,/A4c8$'+-1 ,/+-w72+-F83?%&/,/F8F&/$'c8$'+-1 ,/^+-<8R4. 3J24I4I4&/$;(*$'+-F8$
# GKF$'1+-21 $;GK$;3?VGC# G1 F82G1 $'d# $'&/F24G$'+W823?(*F82jI4,/+-3?,/2)Z ,/+$;(*I^3JA2R&/2Gg7# 3?GC243J$'G
I4,/+-3?,/24GQ. # $;1 $'+GC$;3X# +. 2472h(*G6$'] 7,/$'+-F$'GQT4_!# $H:-Tj(*$'+-2G62d $;3?:-$;11 $'I4,/1 2"L&/
724+-d$'3?GC,/4+h$'+h&/HF3=+-GCW8$'3J$9+-7,/Gw1 $1 F24Ga1 $'& GC$'3?d,/1 243)&7&/,/$'+-F$Z
Sugerencia: Si usted pretende mostrar los datos en ASCII, recuperarlos en ASCII le
ahorraran un poco de esfuerzo del lado cliente.

Notes
2G 7# 3?GC243J$'GUGC2&/2E$;GKF+E1 ,/GK. 2+-,/I4&/$'G $'+"&/^G F3?+-GC779,/2+-$'GZ)LGC3 . 3?&H!= z^ER;oDLBYBzA
TFDV4
Hz?EO
o . ^3=g1 $'] +-,/3U# +jF83?+-GC7F8,/2+"I4&/2*7 -)Z
i + N "&/24GL7# 3?GC243J$'Gb$;GKF+1 ,/GC. 2+-,/I4&/$'GLGC2&/2$'+. &/,/77,/24+ $'G N 5 i N <>$'(*I4$'I4,/c
1 GZ i M 2GCF8A43J$'GbI47 -$;+-1+-2*,/(*.0&/$'(*$'+-F# +@72(*+-1 2*$'. &/,/7,/F82h
!
6-# +
7# 3?GC23XGC$V72+-GC,/1 $'3?_I4,/$'3?F2j7# +-1 2j$'GCF$L$'G1 $'7&/3?;1 2)Z ,/+*$'(I^3?A42R
R$;&0. 3J$'. 3[2c
GC$'GC1 23 $'(*I4$'I4,/1 2E1 $ N *.03=HM 2GCF8A43J$'GCR GC24.0243?F8L&/b792+-d$'+-7,/4+1 $H79ecpg
# 3?GC243J$'G HR
,/+-7&/# T$'+-1 2E!# $;&/&/24Gw!# $g,/+-d 2&/# 73=^+j&/2Ga792(*+-1 2G i PQ \V i T M i Z

l

Uso

M 3=1 $'7&/3?3# +h79# 3?GC243;k


DECLARE liahona CURSOR FOR SELECT * FROMfilms;

Compatibilidad
SQL92
^f. $'3?(*,/F8$H7# 3=GC23J$'GwGC2&/2h$'+ N $'(*I4$'I4,/1 2%Th$;+(*21 # &/2GZM 24GCF8A43J$'GQ. $;3=(*,/F$f7# 3?c
GC243J$'GU.03=QGC$'3# GC1 2GU$'+%W823=(*6,/+-F$'3?79F,/d-Z 6. $'3?(*,/F8$X7# 3?GK23J$'GU$'(*I4$;I4,/1 24G>2L(*2c
1 # &/3J$9GQ. 3?H7F8# &/,/e;3a,/+-W823=(*7,/+1 $f&/bI4GC$f1 $f1 F24GZ 21 2G&/2GQ7# 3?GK23J$'GXM 2GCF8A43J$'G
GC24+h1 $GC2&/2%&/$'7F# 3?-Z` f. &/I43?g7&/d$ h\V)$'G # +-H$'F8$'+-GC,/+1 $M 24GCFA3J$'GZ

DELETE
Nombre
DELETE

243?3?f] &/^Gw1 $6# +-fF8I4&/

Synopsis
DELETE FROM table [ WHERE condition ]

Inputs
table

i &+-24(*I43J$g1 $# +-HFI4&/g$;N,/GCF$'+-F8$4Z

condition

1 $GC$'&/$;797,/+h&/f7# ^&41 $'d# $;&/d $6&/G ] &/^GwfGC$'3UI4243?3?1 ;GZ


i GKFH$'G # +-H724+-GC# &/F 
a$'W8$'3?,/3?GK$Q& 72(*+-1 2 i i P . 3?g# +-f(*^T23U1 $'GC793?,/. 7,/+j1 $6&/f7&/# GC# &/g hi c
i Z

l^

Outputs
DELETE
count

$'+-GCCB$H1 $;d # $'&/F2hGC,0&/24G,/F8$;(*G6GC24+*I423=3?1 2G6$',/F82GC(*$'+-F$Z i & d &/23


$;G6&/
count
79^+-F8,/1 1h1 $] &/GaI4243?3=^1 GZ
,
$;GwR'+-,/+-A# +-H] &/HW8# $I4243?3?1 -Z
count

Description

h jI4243?3?f&/G ] &/Gw!4# $GKF,/GCW87$'+"&/H7&/# GK# &/g hi i 1 $&/fFI4&/f$'GC. $'7,/] 71 -Z


, &/_~=v9{4~=v{j5879&/# GC# &/_ hi i <$'GCF8V# GK$;+-F8$'R $'&-$;W$;79F2h$'GI4243?3?3aF821 G6&/G] &/G61 $b&/
F8^I&/ Z i &3J$'GC# &/F81 2V$'G # +-HFI4&/fd&/,/1 R'.0$'3J2Ed7,/Z
Sugerencia: TRUNCATE es una extensin de Postgres el cual provee un mecanismo
ms rpido para borrar todas las filas de una tabla.

M 3=_(*241 ,/] 73&/"FI4&/%# GKF$'11 $'I4$_. 2GC$'$'3Q77$'GC21 $_$'GC73=,/F# 3?%h&/%(*,/GC(*R  GC, 792(*2
77$'GC2_1 $6&/$'7F8# 3?ff7# &/!# ,/$'3UF8^I&/g79# T42Gwd&/23?$;G GK2+&$',/1 2Gw$'+h&/
Z
condicion

Uso

23=3?gF241 2GX&/2Ga] &/(*Gw$'79$;. F82V&/2GX(*# GC,/79^&/$'Gk


DELETE FROM films WHERE kind
SELECT * FROM films;

Musical;

code |title
|did| date_prod|kind
|len
---+-----------------+--+-------+-------+---UA501|West Side Story
|105|1961-01-03|Musical
| 02:32
TC901|The King and I
|109|1956-08-11|Musical
| 02:13
WD101|Bed Knobs and Broomsticks|111|
|Musical
| 01:57
(3 rows)

23=3?g72(*. &/$'F(*$'+-F$g&/HF8I4&/

films

DELETE FROM films;


SELECT * FROM films;
code|title|did|date_prod|kind|len
---+---+--+------+---+-(0 rows)

l

Compatibility
SQL92
^g. $'3?(*,/F$# +72(*+-1 2

i i i . 2GK,/7,/2+ ^1 2)k

DELETE FROM table WHERE CURRENT OF cursor

1 2+-1 $
7243?3J$'GC. 2+-1 $w# +E7# 3?GC243 I4,/$;3=F2)Z i +_M 2GCF8A43J$'GU&/2GU7# 3=GC23J$'GU,/+-F$'3=^79F,/d24G
GC24+h1 $cursor
GC2&/24c8&/$'7F# 3= Z

DROP AGGREGATE
Nombre
DROP AGGREGATE

i &/,/(*,/+-H&/H1 $'] +-,/7,/4+h1 $g# +-fW8# +-7,/+A43J$SA41 

Synopsis
DROP AGGREGATE name type

Entradas
name

i &+-24(*I43J$g1 $# +-HW8# +-7,/+j1 $6A43?$;A1-2E$;N,/GCF$'+-F8$4Z

type

i &4F,/. 2E1 $g# +-HW# +-7,/+1 $A3J$'A4;1 2E$',/GCF8$;+-F8$ZC58'^GK$6&/H v|?s-}JJL*X|??} | t4


. 3?g(*Ga,/+-W8243?(*7,/4+hGC2I43?$g&/2GaF82. 24Gw1 $1 ^F82GK<`Z

dePfhgQiWjck(lgQm<ink
oepe{xQu!*vxv}x|{xvx}y|!}v 2vx}vx~|!}yt|t*|s<t{2yvy'*yQunvCyL|tQywutei<Tjck(lPgQmLink
oep

Salidas
DROP

$;+-GK`B$g1 $;d # $;&/F82VGC,4$;&472(*+-1 2_GK$g$?B$;79# FfGCF,/GKW87F243?,/(*$'+-F$Z

WARN RemoveAggregate: aggregate agg for type does not exist

i GKF$g(*$'+-GCCBD$^. 3J$S7$gGC,&/fW8# +-79,4+hA43=^A1 $'GC. $'7,/] 71 g+-2_$',/GKF$$'+h&/fI4^GK$61 $


1 F82GZ

l^l

Descripcin

hLhh hw $'&/,/(*,/+-^3=LF821 G6&/G63J$;WD$'3J$'+-7,/GQL&/_1 $;] +-,/7,/+1 $b# +-VW8# +-7,/4+


h
1 $XA3J$;A1-2_$;N,/GCF$'+-F8$4Z=M 3?$?B$;79# F3$'GCF8623?1 $;+%$'&N# GC# 3?,/2L7F8# &1 $'I4$XGK$;3)$;&N. 3J24.0,/$'F8^c
3=,/2_1 $'& A43J$'A4'1 2)Z

Notas

)VGC$oFO=c?A!=4?E'FO= ?A!=. 3?f73J$';3>W8# +-7,/24+-$'Ga1 $^A3J$'A41 2Z

Uso

M 3=$'&/,/(*,/+-3U$'&A43J$'A;1 2

myavg

1 $F,/. 2

int4

DROP AGGREGATE myavg int4;

Compatibilidad
SQL92
h2V$'N,/GCF$&/gGC$'+ F8$'+-7,/HhhjVhh hw j$'+ N '&/GC$'+-F8$;+-7,/f$'G # +-f$'F8$;+-GK,/+
1 $&/$'+ A# CBD$g1 $M 2GCF8A43J$'GZ

DROP DATABASE
Nombre
DROP DATABASE

i &/,/(*,/+-b# +-fI4GC$61 $g1 F24G $',/GCF8$'+-F$

Synopsis
DROP DATABASE name

Entradas
name

i &+-24(*I43J$g1 $# +-HI4GC$1 $1 F24Ga$',/GCF8$'+-F$!# $gGC$g1 $;GK^$'g$;&/,/(*,/+-3=Z

l

Salidas
DROP DATABASE

i GKF$g(*$'+-GCCBD$gGC$g1 $'d# $'&/d$6GC,4&/f23J1 $'+"GC$g$=BD$'7# F8fGCF,/GCW^79F23=,/(*$;+-F8$4Z

ERROR: user username is not allowed to create/drop databases

$'I4$bF8$'+-$;3w$'& . 3?,/d,/&/$'A4,/2$'GC. $;79,/^& P6 i \ i . 3?b$'&/,/(*,/+-3wI4GC$'G61 $H1 F2GZ9 $'3

Oo F=z?FXU!?FazDZ

ERROR: dropdb: cannot be executed on the template database

QI4GC$w1 $X1 F82G

template1

+-2L. # $'1 $wGC$'30$'&/,/(*,/+-1 -Zh2b$;GU792+-d$'+-,/$'+-F$X:-7$'3?&/2)Z

ERROR: dropdb: cannot be executed on an open database

. # $'1 $g72+-$'7F83?GC$gH&/bI4GC$g1 $f1 F82Ga!# $f!# ,/$'3J$f$'&/,/(*,/+-3=Z i +hGC#*&/# A^38R:-H1 $


792+-$'7F3w
27# &/!# ,/$;362F83?_I4GC$V1 $V1 F24GCR4T$=BD$'7# F83X$'&072(*+-1 2j1 $
template1
+-# $'d2)Z

ERROR: dropdb: database name does not exist

i GKF$g(*$'+-GCCBD$g279# 3?3J$GC,&/fI4GC$1 $g1 ^F82Ga$;GC. $'7,/] 71 f+-2E$',/GCF8$4Z

ERROR: dropdb: database name is not owned by you

$;I$GK$;3 $'&. 3J2. ,/$'F8^3=,/2_1 $g&/HI4GC$g1 $g1 F24GZ $'3)$'&.03?2. ,/$'F3,/2"+-23=(*^&/(*$'+-F$HGC,/A4c


+ ,/] 7f!4# $F8(*I4,/'+h&/H:-f73J$'^102Z
-

ERROR: dropdb: May not be called in a transaction block.

Q1 $w724(. &/$'F8^3 . 3=,/(*$;3J2H&/QF83?+-GC779,/+V$'+E.03?2A43?$;GK2f+-F8$;G)1 $w. 21 $'3 $?B$;79# F3 $;GKF$
792(*+-1 2Z

NOTICE: The database directory xxx could not be removed.

&/hI4GK$%1 $E1 F2GbW8# %$'&/,/(*,/+ 1 j58h(*$'+-2GL!# $%:-Th. 3J$97,/1 224F3J2*(*$'+-GCCBD$"1 $


$'3?3?23?<DR;. $;3J2b$'&1 ,/3J$;79F243?,/2b1 2+-1 $XGK$X&/(*^79$;+-I4$'+V&/24G>1 F2GU+-2L. # 1 2LGK$;3 $'&/,/(*,/+-1 2Z
$;I4$I4243?3?3?&/2_(*+-# ^&/(*$'+-F8$4Z

Descripcin

hha 48 4/ $'&/,/(*,/+-V&/GQ$'+-F3=^1 GQ1 $f7F&/24A42h1 $H# +-VI4GC$H1 $b1 F82GQ$',/GCF8$'+ F8$


h
T@I423?3=j$'&U1 ,/3J$'7F243?,/2!# $j724+-F,/$'+-$j&/2G_1 F82GZ 24&/^(*$'+-F8$h. # $'1 $"GK$;3b$?B$;79# F1 2. 23b$;&
. 3J24.0,/$'F8;3?,/2E1 $g&/fI4GC$1 $g1 F24G 58+-243?(*&/(*$;+-F8$g!# ,/$;+&/f73J$'<`Z

Notas
i CG F86243J1 $;+%+-2_.0# $'1 $6GC$'3$?B$;79# F1 6(*,/$'+-F3=G>GC$Q$'GCF8792+-$'7F8^1 2Lg&/gI4GC$Q1 $61 ^F82G>24I;BD$'c
F8,/d2Z9M 23X&/2"F+-F24R . # $'1 $fGC$'3a(*G672+-d $;+-,/$'+-F8$b# GC3a$'& GC:-$;&/&-GC793?,/. F }v9q^SR!4# $b$'(*. &/$;
$'GCF8$6792(*+-1 2Z
'GC$a $'W8$'3 F2bO
o F=z?A!=0;L?AG?Hz?E
=%. 3?X(*G),/+-W823=(*7,/+EGC2I43?$w72(*2V73J$93 # +-6I4GC$
1 $1 ^F82GZ

l^m

Compatibilidad
SQL92
fGC$'+-F$'+-7,/Lhhhw 48 4/ $;GX# +-H$'F8$;+-GK,/+j1 $g&/$'+-A4# CBD$H1 $gM 2GCF8A43J$'GC+-2%$',/GCF8$
$'GC$724(+-1 2E$;+ N -Z

DROP FUNCTION
Nombre
DROP FUNCTION

i &/,/(*,/+-b# +-fW8# +-7,/+1 $6# GC# 3?,/2E$;GK73?,/F8g$'+hP

Synopsis
DROP FUNCTION name ( [ type [, ...] ] )

Entradas
name

i &+-24(*I43J$g1 $# +-HW8# +-7,/+j$;N,/GCF8$;+-F8$4Z

type

i &F8,/. 2_1 $&/2GX. 3?(*$'F3[2Gw1 $&/fW8# +-79,/+ Z

Salidas
DROP

$;+-GK`B$g1 $;d # $;&/F82VGC,4&/H23J1 $'+"GC$g724(*.0&/$'F8gGK^F8,/GCW87F823=,/^(*$'+-F8$4Z

WARN RemoveFunction: Function "name" ("types") does not exist

i GKF$V(*$'+-GCCBD$EGC$_24I4F,/$'+-$_GC,/&/%W8# +-79,/+$'GC. 7,/] 79^10%+-2$;N,/GCF8$L$'+&/EI4GC$_1 $V1 F2G


7F8# &Z

lx

Descripcin

M )V"P $'&/,/(*,/+-^3=b&/Ga3J$'W8$S3J$'+-7,/GaH# +-HW8# +-79,/+P$',/GKF$'+-F$ZCM 3=H$?B$;79# F3


$'GCF8L23?1 $'+$;&-# GC# 3=,/2"1 $;I4$bGC$'3a$;&-. 3J2. ,/$'F8;3?,/2j1 $b&/LW8# +-79,/+ ZS 2G6F,/. 24G61 $H3JA4# (*$'+-F82G
1 $w$'+-F3=1 61 $X&/QW8# +-7,/4+E:-+E1 $X$'GC. $'7,/] 73?GK$;R91 1 2H!# $QGK2&/2L&/QW8# +-7,/+%724+_$'&+-24(*I43J$
1 1-24RTE&/24GwF8,/. 2Gw1 $63JA# (*$;+-F82Gw1 ^24GaGC$$'&/,/(*,/+-3?-Z

Notas
'GC$goFO=z?A= >)L^LoOA zD]^ . 3?H(*GX,/+-W823=(*7,/+GC2I43?$f&/b73J$';79,/+1 $gW8# +-7,/24+-$;GQ1 $
A43?$9A41 2Z
h2"GC$b:-^79$;+724(. 3?2I47,/2+-$'G6. 3?Hd $;3=,/] 73a&/2G6F8,/. 2GQ1 $H1 F24GCRN24. $;3=1 243J$9G62"(*'F241 2
1 $77$'GC2V3?$;&/7,/24+-1 24G 724+h&/HW8# +-7,/4+h!# $g:-H1 $6$'&/,/(*,/+-3?GC$Z

Uso

i GCF8f23J1 $'+"$;&/,/(*,/+-H&/HW# +-7,/+h3=,/eg79# 1 3=;1 -k


DROP FUNCTION sqrt(int4);

Compatibilidad
SQL92
hh4Vh ?h$'Gw# +-g$'NF$'+-GC,/+1 $6&/$'+-A4# CB$g1 $M 24GCFA3J$'GZ

SQL/PSM

M
$'G# +_$;GKF+-1 3-. 3J2. # $'GCF82H. ^3=w:-^I4 ,/&/,/F830&/X$'NF$'+-GC,/2+-&/,/1 1%1 $a&/QW8# +-79,/2+-$'GZ
fGC$'+-F$'+-7,/ M )LhP 1 $ M
F8,$'+-$'+h&/fGC,/A# ,/$;+-F8$fGC,/+-F8^N,/Gk

DROP [ SPECIFIC ] FUNCTION name { RESTRICT | CASCADE }

DROP GROUP
Nombre
DROP GROUP

i ,/(*,/+-H# +jA43J# . 2

l^n

Synopsis
DROP GROUP name

Entradas
name

i &+-24(*I43J$g1 $# +hA43J# . 2E$',/GCF8$;+-F8$Z

Salidas
DROP GROUP

i &(*$'+-GCCB$1 $'d# $'&/F82_GC,4$;GaA43J# . 2%$'G $'&/,/(,/+-1 2%GCF,/GKW87F243?,/(*$'+-F$Z

Descripcin

hhhL$'&/,/(*,/+-E$;&0A3J# . 2j$'GC. $'7,/] 71 2h1 $V&/VI^GK$b1 $V1 ^F82GZ9 24G# GC# 3?,/24G1 $'&
h
A3J# . 2_+-2EGC$g$'&/,/(*,/+-^+ Z
)VGC$QOo F=z?A!=' FDXj. 3?g^-1 ,/3+-# $'d24GaA3J# . 2GCR^'T BEDJ;Vz >4z8Co ?F' FHX! D. 3?g7(*c
I4,/3)&/f. $'3?F8$;+-$'+-7,/ff# +hA3J# . 2Z

Uso

M 3=$'&/,/(*,/+-3U# +hA3J# . 2k
DROP GROUP staff;

Compatibilidad
SQL92
h2E$;N,/GCF$$'&724(*^+-1 2%hhhhLj$'+ N ^Z

l

DROP INDEX
Nombre
DROP INDEX

i &/,/(*,/+-H# +j,/+-1 ,/7H1 $6&/fI4GC$g1 $1 ^F82G

Synopsis
DROP INDEX index_name

Entradas
index_name

i &+-24(*I43J$g1 $'& ,/+-1 ,/79$gg$'&/,/(*,/+-3=Z

Salidas
DROP

i &(*$'+-GCCB$1 $'d# $'&/F82_GC,4$;& ,/+-1 ,/7$g$'Ga$'&/,/(*,/+-1 2_GK^F8,/GCW87F823=,/^(*$'+-F8$4Z

ERROR: index "index_name" nonexistent

i GKF$g(*$'+-GCCBD$gF,/$'+-$g&/# A43UGC,

index_name

+-2E$'G # +j,/+-1 ,/79$g1 $&/HI4GC$1 $1 F82GZ

Descripcin

h_?hh!$'&/,/(*,/+-X# +L,/+-1 ,/7$a$',/GKF$'+-F$a1 $'&;GC,/GCF8$'(*X1 $aI4GC$ 1 $ 1 ^F82GZ # ,/$'+L$=BD$'7# F$


h
$'GCF8$6792(*+-1 2R:-H1 $GC$'3)$'&. 3J2. ,/$'F3=,/2V1 $'& +-1 ,/7$Z

Notas
h?hh!$'G # +-H$'NF$'+-GC,/+1 $;& &/$'+-A4# `B$g1 $M 24GCFA3J$'GZ
h
'GC$Qa$'W8$'3UF82_oOF=z?A!=z^4;J=C. 3?f(*^Ga,/+-W823=(*^79,/+jGK2I43J$724(*2E793J$';3U/+-1 ,/7$'GZ

Uso

i GCF8$72(*+-1 2_$'&/,/(*,/+-3?H$'& /+ 1 ,/79$

title_idx

DROP INDEX title_idx;

l^

Compatibilidad
SQL92
^g1 $'] +-$72(*+-1 2GX724+h&/2Gw!4# $g779$;1 $'3H# +-fI4GC$1 $61 F82Ga3?$;&/7,/24+-& A4$'+-;3=,/7-Z
2G+-1 ,/7$'G6GC24+# +-V79^3=7F$S3?/GCF,/79V1 $'. $;+-1 ,/$'+-F$L1 $b&/_,/(*. &/$;(*$'+-F8^79,/+-R4. 23Q&/2j!# $b+-2
$',/GKF$72(*+-1 2Gw2_1 $g] +-,79,/2+-$'Gw$'GC. $'7/] 724Ga. 3?g&/2Gw+-1 ,/7$'Gw$;+h$'&&/$'+-A4# CB$ N 4Z

DROP LANGUAGE
Nombre
DROP LANGUAGE

i &/,/(*,/+-b# +h&/$'+-A4# $=BDH. 3J247$'1-# 3?&1 $'] +-,/1 2E. 23>$;& # GK# 3?,/2

Synopsis
DROP PROCEDURAL LANGUAGE name

Entradas
name

i &+-24(*I43J$g1 $# +h&/$'+-A4# CBD$g. 3J279$;1 # 3=;&$',/GKF$'+-F$Z

Salidas
DROP

i GKF$g(*$'+-GCCBD$g$'Ga1 $'d# $'&/F2_GC,$'&&/$'+-A4# CBD$g$'Ga$'&/,/(*,/+-1 2_GCF8,/GCW87F823?,/(*$'+-F$Z

ERROR: Language "name" doesnt exist

+-2%GC$g$'+-7# $'+-F3?H$'+h&/HI4GC$
i GKF$g(*$'+-GCCBD$gF8,/$;+-$g&/# A^3>GC,$;&4&/$;+-A# CBD$g&/&/(*^1 2
name
1 $1 F24GZ

Descripcin

h h hLV VhhLVh$'&/,/(*,/+-^3=H&/b1 $'] +-,/7,/4+j1 $;&&/$'+-# `B$f. 3J279$;10# 3?&
h
&/&/(*1 2
R^. 3J$'d,/(*$'+-F$3J$'GCA,/GCF3=1 2)Z
name

l

Notas
_GC$'+-F$'+-7,/Ehh h hV6V LhhLbh$'G# + E$'F8$'+-GC,/+*1 $L&/$;+-A# CBD$V1 $
M 24GCFA3J$'GZ
'GC$Qa$'W8$'3F24
o FO=c?A!=, ?^VE!
?E'
=j. 3?g(Ga,/+-W823?(*7,/4+"GC2I3J$6792(*2V793J$'^3 &/$'+-A4# c
B$;Gw. 3J27$'1 # 3&/$;GZ
h2GC$E3J$';&/,/e"+-,/+-A# +-h724(*. 3J2I47,/4+7$'3J7C"1 $_GC,)$',/GCF8$;+W8# +-7,/24+-$;GH2*. 3J279$;1 ,/(*,/$'+-c
F82GQ1 $'GC$;+-79^1 $S+-^1 24GQ.0243a$'d$'+-F2GQ$'GC73=,/F24GQ$;+$'GCF$f&/$'+-A4# `B$4Z9M 3?H3J$'c8:-I4,/&/,/F8^3=&/2GXGC,/+F$'c
+-$'3H!# $j$'&/,/(*,/+ 3LT3J$'73?$93fF241 ^GE&/GVW8# +-7,/24+-$;GKR $;&>F83?,/I4# F82. A^. 3J247OGL. 3J2&/+-A1 $j&/G
W8# +-79,/2+-$'Gj:-1 $GC$'3ECBD# GCF1 2. 3?$;&6+-# $;d 2,/1 $'+ F8,/] 71 243E1 $*2I'BD$'F21 $*&/$;+-F83?1 
. A4&/+-A4# ^A$Q1 $'&&/$'+-A4# CBD$g. 3J247$'1 # 3?;&4+-# $;d ^(*$'+-F8$793J$91 2Z

Uso

i GCF8$72(*+-1 2_$'&/,/(*,/+-H$'&&/$'+-A4# CBD$gM (*. &/$4k


DROP PROCEDURAL LANGUAGE plsample;

Compatibilidad
SQL92
h2E$;N,/GCF$$'&724(*^+-1 2%hh h hVH LhhVLhh$'+ N ^-Z

DROP OPERATOR
Nombre
DROP OPERATOR

# ,/F8H# +h2. $'3?1 23U1 $&/fI4GC$1 $1 ^F82G

Synopsis
DROP OPERATOR id ( type | NONE [,...] )

Entradas
id

i &,/1 $'+-F8,] 71 23)1 $g# +h24. $;3=1 23)$',/GKF$'+-F$Z

l^

type

i &F8,/. 2_1 $&/2GX. 3?(*$'F3[2Gw1 $&/fW8# +-79,/+ Z

Salidas
DROP

$;+-GK`B$g1 $;d # $;&/F82VGC,4&/H2. $'3?7,/+"$'Gw$;N,/F24GC-Z

ERROR: RemoveOperator: binary operator oper taking type and type2


does not exist

i GKF$g(*$'+-GCCBD$gGC$g(*# $'GCF83?fGC,$'&2. $'3?1 23UI4,/+-3?,/2E$;GK.0$'7,/] 71 2V+-2E$;N,/GCF$Z

ERROR: RemoveOperator: left unary operator oper taking type does not
exist

i GKF$g(*$'+-GCCBD$gGC$g(*# $'GCF83?fGC,$'&2. $'3?1 23U# +-3?,/2E,/e^!# ,/$'3J1 2V$'GC. $'7,/] 791 2_+-2_$',/GKF$Z

ERROR: RemoveOperator: right unary operator oper taking type does


not exist

i GKF$g(*$'+-GCCBD$gGC$g(*# $'GCF83?fGC,$'&2. $'3?1 23U# +-3?,/2E1 $'3J$S7:-2%$;GK. $;7,/] 71-2%+-2E$;N,/GCF$Z

Description

hhh wah!# ,/F8# +%24.0$'3?1 243 1 $Q&/I4GC$Q1 $X1 F24GZ?M ^3=Q$=BD$'7# F8^3 $'GCF8$Q792(*+-c
h
1 2V# GCF$'11 $'I4$6GK$;3U$;&4. 3J2. ,/$'F3?,/2_1 $;& 24. $;3=^1 243=Z
_7&/,/1 ^11 $V1 $;3J$'7:-22j,/e!# ,/$'3J1 2j1 $V# +2. $'3?1 23Q# +-^3=,/2j,/e!# ,/$'3J1 2j21 $'3J$S7:-2R3?$;GCc
. $'7F8,d (*$;+-F8$;R'. # $'1 $6GK$;3>$'GC. $'7,/] 71 g72(*2
Z
NONE

Notas
f1 $;79&/3[79,/+jhhh w h$'G # +-H$'F8$'+-GC,/+1 $&/$'+-A4# CBD$g1 $M 24GCFA3J$'GZ
P62+-GC# &/F$g
o FO=z?A=DL!
=!F?ADJF. 23>,/+-W823=(*^79,/+hGC24I43J$7(*2%73?$;'3U24.0$'3=^1 243J$9GZ
i G 3J$'GC. 24+-GCI4,/&/,/1 ^1j1 $'&# GC# 3?,/2_3J$'(*2d$'3)79# &/!4# ,/$'3U('F821 2E1 $77$'GC2_TE79&/^GK$;Ga1 $24.0$'c
3=^1 243!# $f1 $;. $'+-1 ;+h1 $'&24.0$'3=^1 243)!# $gGC$!# ,/FZ

Utilizacin

# ,/Ff$'&2. $'3?1 23U1 $. 2F8$'+-7,/

a^n

. 3?

int4

DROP OPERATOR ^ (int4, int4);

# ,/Ff$'&2. $'3?1 23U# +-^3=,/2_,/e!# ,/$'3J1 2V1 $+-$;A7,/+5

l

< . 3?f$'. 3J$SGC,/2+-$'GXI4224&/$;+-Gk

b !

DROP OPERATOR ! (none, bool);

# ,/Ff$'&2. $'3?1 23U# +-^3=,/2_1 $'3J$979:-2E1 $W87F823?,/& 5

< . 3?

! i

int4

DROP OPERATOR ! (int4, none);

Compatibilidad
SQL92
h2E$;N,/GCF$# +h792(*+-1 2Ehhh w h$'+ 4Z

DROP RULE
Nombre
DROP RULE

# ,/F8H# +-H3J$'A4&/g$;N,/GCF$'+-F8$g1 $&/HI4GC$1 $1 ^F82G

Synopsis
DROP RULE name

Entradas
name

i &+-24(*I43J$g1 $# +-H3J$'A4&/g$;N,/GCF$'+-F8$. 3?g!# ,/F3=Z

Salidas
DROP

$;+-GK`B$g1 $;d # $;&/F82V$'+h7GC2E1 $!4# $g&/f24.0$'3?79,/+hGC$'f$',/F24GC-Z

l^l

ERROR: RewriteGetRuleEventRel: rule "name" not found

i GKF$g(*$'+-GCCBD$gGC$g(*# $'GCF83?fGC,&/H3J$'A4&/g$'GC. $'7,/] 71 f+-2_$',/GKF$Z

Descripcin

hhL E!# ,/Fg# +-3J$;A&/Q1 $'&GC,/GKF$'(*1 $Q3J$'A4&/;G>1 $QM 2GCF8A43J$'GU$'GC. $'7,/] 71 2Z?M 2GKFA3J$;G
h
1 $=BD3?'j1 $h.0&/,/79^3=&/j,/+-(*$'1 ,/F(*$'+-F$hT!# ,/F3=^3=hGC#1 $'] +-,/79,/+1 $"&/24G_7F8^&/24A424GL1 $;&
GC,/GKF$'(*-Z

Notas
f1 $;79&/3[79,/+jhhV j$'G # +-H$'F8$'+-GC,/+1 $&/$'+-A4# CBD$g1 $M 24GCFA3J$'GZ
P62+-GC# &/F$f w L j. 3?f,/+-W823=(*7,/+hGK2I43J$74(*2E793J$';3U3?$;A&/GZ
)V+-fd$'e!# $gGC$g!# ,/FH# +-f3J$'A&/^R'$'&77$'GC2_g&/f,/+-W8243?(*7,/4+j:-,/GCF83?,/79H!4# $g&/f3J$'A4&/g:-T4
$'GC73=,/F2_.0# $;1 $1 $;GK.03J$S7$'3=Z

Utilizacin

M 3=!# ,/F3>&/f3J$'A4&/f1 $63J$'$'GC73=,/F# 3=

newrule

DROP RULE newrule;

Compatibilidad
SQL92
h2E$;N,/GCF$ghhV j$'+ N -Z

DROP SEQUENCE
Nombre
DROP SEQUENCE

# ,/F8H# +-HGC$'7# $'+-7,/f$;N,/GCF8$;+-F8$

Synopsis
DROP SEQUENCE name [, ...]

l

Entradas
name

i &+-24(*I43J$g1 $# +-HGC$'7# $'+-7,/-Z

Salidas
DROP

$;+-GK`B$g1 $;d # $;&/F82VGC,4&/HGC$'7# $'+-7,/fGC$g$'&/,(*,/+-H$'N,/F2GK^(*$'+-F8$4Z

WARN: Relation "name" does not exist.

i GKF$g(*$'+-GCCBD$gGC$g(*# $'GCF83?fGC,&/HGC$'7# $'+-7,/f$'GC. $'7,/] 71 g+-2%$;N,/GCF$Z

Descripcin

h/ !1hL h%!# ,/F8# +-gGC$'7# $'+-7,/gA4$'+-$'3?1 23?1 $X+- (*$'3J2G 1 $Q&/I4GC$61 $X1 F24GZ
h
P62+h&/H7F8# &,/(*. &/$'(*$;+-F87,/+1 $g&/GwGC$'7# $'+-7,/Ga724(*2"FI4&/G $'GC. $'7,/&/$;GKRF3=^I4CBg,/A# &
!# $g&/f1 $;79&/^3=;7,/4+hh 4
8 wZ

Notas
f1 $;79&/3[79,/+jhh/ !1hL hj$'G # +-H$'F8$;+-GK,/+h1 $g&/$'+-A4# CBD$g1 $M 2GKFA43?$;GZ
P62+-GC# &/F$&/f1 $'7&/3=^79,/+h w
/ 
1hV h". 3?g2IF$'+-$;3U,/+-W823=(*^79,/+hGK2I43J$74(2
73?$93U# +-fGC$'7# $'+-7,/-Z

Utilizacin

M 3=!# ,/F3>&/fGC$'7# $'+-7,/

serial

1 $6&/fI4GC$1 $g1 ^F82Gk

DROP SEQUENCE serial;

Compatibilidad
SQL92
h2E$;N,/GCF$ghh/ !1hL hh$'+ N -Z

l^m

DROP TABLE
Nombre
DROP TABLE [Eliminar Tabla]

i &/,(*,/+-HF8I4&/G 1 $6# +-HI4^GK$61 $1 F24G

Synopsis
DROP TABLE nombre [, ...]

Entradas
nombre

i &+-24(*I43J$g1 $# +-HFI4&/gd,/GCF8H$;N,/GCF$'+-F8$g.03=$'&/,/(*,/+-3?&/-Z

Salidas
DROP

i &(*$'+-GCCB$1 $'d# $'&/F82_GC,4$;& 792(*+-1 2_724+-7&/# T42%$',/F82GK^(*$'+-F$Z

ERROR Relation "nombre" Does Not Exist!

,&/fFI4&/f2_d ,/GCFH$'GC. $'7,/] 71 g+-2E$;N,/GCF8$$'+h&/fI4GC$1 $g1 ^F82GZ

Descripcin

h 48 $'&/,/(*,/+-HFI4&/GaT%d,/GCF8Ga1 $# +-HI4GC$g1 $61 F82GZ 2&/2%GC#. 3J24. ,/$;F83?,/2V52P.hc


h
+-$'3?< . # $'1 $f1 $;GKF3J# ,/3w# +-VFI4&/V2"d,/GCF8 Z*)L+-VFI4&/V. # $;1 $bGC$;3ad 7,/1-L1 $bGC# G6] &/GCR. $'3J2
+-2E1 $;GKF3J# ,/1 R^# GC+-1 2Eh aaZ
,-# +-_F8I4&/E_GK$;3Q1 $;GKF3J# ,/1 EF,/$'+-$V# +/+-1 ,/79$LGK$;79# +-1 ^3=,/2R4$'GCF$V1 $'I4$VGC$'3X3J$'(*2d,/1 2. 3?,/c
(*$'3J2Z "3J$'(*279,4+1 $%GC24&2# ++-1 ,/7$"GC$'7# +-1 3?,/2*+-2W8$'7CF$'&792+-F$'+-,/1 21 $h&/hFI4&/
GC# I4T47$'+-F$Z

Notas
P62+-GC# &/F3a$;+ w * 48 *T"V 48 . 3?L,/+-W823=(79,/+GC2I43J$H72(*2h793J$;'3
2E(*21 ,/] 79^3UFI4&/GZ

lx

Uso

M 3=1 $'GCF3?# ,/3U1 24GaFI4&/GCR

cintas

T!   !! Q Jk

DROP TABLE cintas, distribuidores;

Compatibilidad
SQL92
^g$'GC. $'7,/] 7f&/A4# +-Gw7. ;7,/1 1 $'G 1 ,/79,/2+-&/$'G 

M \V i k

DROP TABLE table { RESTRICT | CASCADE }

i P
\VGC$;A# 3?6!4# $QGC2&/2V# +-6FI4&/6GC,/+%d,/GCF8^GU1 $'. $;+-1 ,/$'+-F$'GU2b3J$'GCF83?,/77,/24+-$'G)1 $Q,/+-F$'A43?,/1 1
. # $'1 gGC$'3U1 $'GCF3?# ,/1 -Z
P6\ Pw\ i

P6# &/!# ,/$;3>d,/GKFH2E3J$'GCF3=,/77,/+"1 $,/+-F$'A3?,/1 1GC$'3?/F8^(*I,/$;+h$'&/,/(*,/+-1 -Z


Sugerencia: Por el momento, para eliminar una vista dependiente se debe eliminar esta
explicitamente.

DROP TRIGGER
Nombre
DROP TRIGGER

23=3?f&/f1 $;] +-,/7,/+1 $# +h1 ,/GK.03=^1023

Synopsis
DROP TRIGGER nombre ON tabla

Entradas
nombre

i &+-24(*I43J$g1 $# +h1 ,/GC. 3?1 23$',/GKF$'+-F$Z

l^n

tabla

i &+-24(*I43J$g1 $# +-HFI4&/-Z

Salidas
DROP

$;+-GK`B$g1 $;d # $;&/F82VGC,4$;&41 ,/GK. ^3=^1023>GC$gI4243?3?E723=3J$'7F'(*$'+-F$Z

ERROR: DropTrigger: there is no trigger name on relation "table"

i GKF$g(*$'+-GCCBD$gGC$g1 f7# +-1 2V$'&1 ,/GC. 3?1-243U$'GC. $'7,/] 79^1 2_+-2%$;N,/GCF$Z

Descripcin

hh ?hh I4243?3?3=QF241 ^GU&/G>3J$'W8$93?$;+-79,/^GU$',/GKF$'+-F$'G>Q&/g1 $;] +-,/7,/+%1 $X# +%1 ,/GC. c
h
3=^1 243=Z`M 3?f. 21 $'3U$=BD$'7# F83)$'GCF$H72(*+-1 2_$'&# GC# 3?,/2E^79F# &1 $'I4$GC$'3U$'&4. 3J24. ,/$;F83,/2E1 $'&
1 ,/GC. 3?'1 23=Z

Notas
h ?hh $'G # +-H$'F8$'+-GC,/+h1 $'&&/$'+-A4# CB$1 $M 24GCFA3J$'GZ
h
P62+-GC# &/F$6 wa"a6?hh . 3?Q24I4F$'+-$'3,/+-W823=(*^79,/+"679$;3?7Q1 $X74(*2V73?$;'31 ,/GC. c
3=^1 243J$9Gw58F3=,/A4A4$'3?GK<`Z

Utilizacin

$'GCF83J# T4$g$'& 1 ,/GC. 3?1 23

if_dist_exists

$'+h&/fF8^I4&/

films

DROP TRIGGER if_dist_exists ON films;

Compatibilidad
SQL92
h2E$;N,/GCF$+-,/+-A4# +-b1 $;79&/^3=;7,/4+jhh ?hh $'+ N -Z

l

DROP TYPE
Nombre
DROP TYPE

$'F8,/3?H# +hF8,/. 2R1 $'] +-,/1 2_. 243U$'& # GC# 3?,/24R1 $&/2GX7F&/2A2G 1 $'&GC,/GKF$'(*

Synopsis
DROP TYPE tipo

Entradas
tipo

i &+-24(*I43J$g1 $'& F,/. 2E7F&/2A^1 2)Z

Salidas
DROP

i &(*$'+-GCCB$!# $gGC$g24I4F,/$'+-$gGC,$'&792(*+-1 2_:-fGC,/1 2%$=BD$'7# F1 2V792+h',/F82Z

ERROR: RemoveType: type tipo does not exist

i GKF$g(*$'+-GCCBD$g279# 3?3J$GC,$'&F8,/.02E1 1 2V+-2E:-HGC,/1 2_$'+-724+-F3?1 2)Z

Descripcin

haa 3J$'F,/3=g# +jF,/. 2R1 $'] +-,/1 2E. 23)$'&# GK# ^3=,/2R1 $&/2Gw7F&/2A2Gw1 $;&GK,/GCF$'(*-Z
h
)V+"F,/. 2E. # $;1 $GC$'3U3?$;F8,/3?'1 2E +-,/7(*$'+-F$g. 23>GC#1 # $'-2)Z

Notas
f7&/# GC# &/ M  M i $'G # +-H$'NF$'+-GC,/+j1 $'&&/$'+-A4# `B$gM 2GCF8A43J$'GZ

P62+-GC# &/F$L$;& 72(*+-1 2j w aa . 3?b24I4F$'+-$'3a,/+-W823=(*^79,/+*GC24I43J$f724(*2j73J$S3 F8,/c


. 2GZ
i G3J$'GC. 24+-GCI4,/&/,/1 ^11 $'&0# F243Q3J$'F,/3=;3Q7# &/!4# ,/$'362. $'3?1 23RW8# +-79,/+-RA43J$SA41 2R4(*'F241 2
1 $77$'GC2R^GK# I4F,/. 2ETE79&/^GK$6!# $g# GC$'+j$'& F8,/. 2_!# $g:-HGC,/1 2EI423?3=1 2)Z
,NGK$g3J$'F,/3?g# +hF8,/. 2_. 3J$'1 $'] +-,/1 2R^$'&72(*. 243?F8^(*,/$'+-F2%1 $'& GC$'3?d,/1 243)GC$'3?f,/(*. 3J$'1 $'7,/I4&/$Z

l^

Uso

M 3=3J$'F8,3=3$'&F,/. 2

caja

DROP TYPE caja;

Compatibilidad
SQL3
hhaa $'Ga# +-H7&/# GC# &/f1 $ N -Z

DROP USER
Nombre
DROP USER

$'F8,/3?H# +h# GK# ^3=,/2

Synopsis
DROP USER nombre

Entradas
nombre

i &+-24(*I43J$g1 $# +h# GC# 3?,/2E$',/GCF8$'+-F$Z

Salidas
DROP USER

i &(*$'+-GCCB$!# $gGC$g24I4F,/$'+-$gGC,$'&# GK# 3?,/2_:-fGC,/1 2E3J$'F,/3=^1 2_72+j;N,/F2)Z

ERROR: DROP USER: user "nombre" does not exist

i GKF$g(*$'+-GCCBD$g279# 3?3J$GC,+-2E:-HGC,/1 2E$;+-724+-F3=^1 2E$'& # GC# 3?,/2E1 ^1 2)Z

l

DROP USER: user "nombre" owns database "base_datos", cannot be removed

$'I4$'3?b$'&/,/(*,/+-3a.03=,/(*$'3J2E&/VI4GC$f1 $H1 F82GQ. $;3=F$'+-$'7,/$'+-F$f& # GC# 3?,/2R 2"(*21 ,/] 793


KG #. 3J2. ,/$'F'3?,/24R^+-F8$'Ga1 $. 21 $'3)3J$'F,/3=^3U& # GC# 3?,/2)Z

Descripcin

hJ/ 3J$'F,/3?1 $"&/I4GC$h1 $j1 F82GL$'&># GC# 3?,/21 ^1 2)Zh23J$;F8,/3?FI4&/GCR d,/GKFGV#
h
24F3J24G)24I;BD$'F24G>!# $Q. $'3?F8$;+-$'e7'+E&# GC# 3?,/2)Z ,$'&# GC# 3?,/2L$'GU1 # $;-2V1 $Q# +-6I4GC$Q1 $w1 ^F82GKR
GC$. 3J241 # 7,/3?f# +h$'3?3J243=Z
)VGC$"Oo F=z?F XU! ?Faz D. 3?^1 ,/7,/24+-3f+-# $'d2GE# GC# 3?,/24GCR #
T BED4;Lz >z8
o ?FXU!
?F z D
. 3?_(*21 ,/] 79^3Q&/Gg. 3J2. ,/$'1 ;1 $'Gg1 $V# +# GC# ^3=,/2Z;M 24GCFA3J$ N d,/$'+-$_724+# +A4# ,4+}*v
qt4|??}a!# $LF,/$'+-$L&/L(*,/GC(*EW8# +-7,/4+1 $b$;GKF$L72(*+-1 2h581 $b:-$;7:-24R,/+-d27_$'GCF8$b724(*^+-1 24<
. $'3J2V!# $g. # $'1 $6GK$;3U$?B$;79# F1 2V1 $'GC1 $&/HGC:-$'&/&Z

Uso

M 3=$'&/,/(*,/+-3U&/H7# $'+-F8g1 $# +h# GK# 3?,/2k


DROP USER juan;

Compatibilidad
SQL92
h2E$;N,/GCF$724(*+-1 2%hhJ/ $'+ N ^Z

DROP VIEW
Nombre
DROP VIEW

$'F8,/3?H# +-fd,/GCF8H1 $;] +-,/1 g$'+h# +-HI4GC$1 $1 ^F82G

Synopsis
DROP VIEW nombre

l^

Entradas
nombre

i &+-24(*I43J$g1 $&/gd ,/GCFH1 $'] +-,/1 -Z

Salidas
DROP

i &(*$'+-GCCB$!# $gGC$g24I4F,/$'+-$gGC,$'&792(*+-1 2_:-fGC,/1 2%$=BD$'7# F1 2V792+h',/F82Z

ERROR: RewriteGetRuleEventRel: rule "_RETnombre" not found

i GKF$g(*$'+-GCCBD$g279# 3?3J$GC,&/fd,/GKFH1 1 +-2%$',/GCF8$$;+h&/fI4GC$1 $g1 F2GZ

Descripcin

hL?! 3J$;F8,/3?# +-fd,/GCF81 $'] +-,/1 f$;+"# +-gI4GC$61 $61 F24GZ=M 3?g. 21 $'3$?B$'7# F3$'GCF8$
h
724(*+-1 24R^1 $;I4$'3=gGK$;3U$;&41 # $;-2E1 $6&/fd,/GKF-Z

Notas
f7&/# GC# &/Hhh J8a j1 $M 2GCF8A43J$'GaF8(*I4,/'+%$'&/,/(*,/+-bd ,/GCFGZ
P62+-GC# &/F$f w 3
L?!. 3?# +-H$;N. &/,/77,/+h1 $724(*2_GC$g793J$;+"d ,/GCFGZ

Uso

i GCF8$72(*+-1 2_3?$;F8,/3?3?g&/fd,/GCF8H&/&/^(*1 

variedades

DROP VIEW variedades;

Compatibilidad
SQL92
^g$'GC. $'7,/] 7f&/A4# +-GwW8# +-7,/24+-^&/,/1 1 $'G 1 ,/7,/2+-&/$'G . 3?Hhh3L?!k
DROP VIEW vista { RESTRICT | CASCADE }



Entradas

i P
\VGC$'A4# 3?_!# $bGK$;+*1 $'GCF83J# ,/1 ^G +-,/7(*$;+-F8$bd ,/GCFGGK,/+*2F3=G6&/,/GCFG1 $'. $'+-1 ,/$'+-F8$;G6T
GK,/+h3J$'GCF3=,/77,/24+-$;Gw1 $6,/+-F8$'A43?,/1 1XZ
P6\ Pw\ i

P6# &/!# ,/$;3wd ,/GCFE!# $LGC$V3J$;] $;3=b_$;GKF_GC$'3?_F(*I4,/'+*$;&/,/(*,/+-1 RN&-,/A4# &0!# $V7# &/c
!# ,/$'3>3J$;GKF3?,/797,/+"1 $,/+-F$'A43=,/1 ^1XZ

Notas

\V7F# &/(*$'+-F$'R. 3?H3J$'F8,/3?;3 # +-bd ,/GCFL3J$'W8$93?,/1 b$'+# +-bI4GC$g1 $f1 F2GXM 24GCFA3J$'Gw$'GCF8b1 $'I4$
GC$'3U$;&/,/(*,/+-1 f$;N. &/7,/F8(*$;+-F8$Z

END
Nombre
END

&/$'dff7I42_&/fF83?+-GC77,/4+h7F# ^&

Synopsis
END [ WORK | TRANSACTION ]

Entradas
O5
a\L \VP
M ^&/I43=^Ga7&/d$2. 7,/24+-^&/$'GZCh2EF,/$'+-$'+h+-,/+-A4 +$;W$;79F2Z

Salidas
COMMIT

i Gb$;&(*$;+-GK`B$%!# $%GC$"1 $;d # $;&/d $EGC,)&/"F3=^+-GK77,/+@GC$":-"&/&/$;d 1 2j7I42723=3J$;79F'c


(*$'+-F8$4Z

^l

NOTICE: COMMIT: no transaction in progress

$61 f7# +-1 2E+-2_:-T%+-,/+-A4# +-bF83?+-GC77,/4+"$'+h7# 3?GK2Z

Descripcin

h$'Ga# +hGK,/+-+-,D(*2E1 $M 2GCF8A43J$ N . 3?goD<BUBzA6Z

Notas
G . &/I43^Gw7&/d$ 5T \V \VP 0 GC2+3J# ,/1 2GCGC)TE. # $'1 $;+"GK$;3U2(*,/F8,/1 GZ
)VGC'$ FDV4 Hz?EOo . ^3=I4243?F8^3U# +-fF3?+-GC779,/+ Z

Utilizacin

M 3=:-7$'3)!# $gF821 2GX&/2Gw7(*I4,/2GwGC$'^+j.0$'3?(*+-$'+-F$'Gk


END WORK;

Compatibilidad
SQL92
h $;GU# +-$;NF$'+-GC,/4+E1 $wM 2GCF8A43J$ N "!# $X. 3J24. 23J7,/24+-6# +-W8# +-7,/2+-&/,/1 1%$'!# ,/d&/$'+-c

F8$6foOD<BYBzAZ

EXPLAIN
Nombre
EXPLAIN

# $;GKF3?g$'&. &/+h1 $6$=BD$'7# 79,/+h1 $&/HGC$'+-F$'+-7,/

Synopsis
EXPLAIN [ VERBOSE ] consulta



Entradas
i
i a _
+-1 $'3?g.03=g(*24GCF83?3U$'& . &/+h1 $;F8&/&/1 2_1 $6&/f724+-GC# &/F8 Z
consulta

P6# &/!# ,/$;3

consulta

Salidas
M &/^+j1 $724+-GC# &/F8b$;N. &/79,/F2V1 $'&I47-$;+-1M 2GCF8A43J$'GZ

NOTICE: QUERY PLAN: plan

EXPLAIN

+-1 $'3?g$;+-d ,/^1 f&/# $'A42E1 $g(*2GCF83?3?GK$6$'&. &/+ Z

Descripcin

i CG F8$g72(*+-1 2"(*# $'GCF3=b$'&4. &/+j1 $f$=BD$'7# 7,/4+j!# $H$'&.0&/+-,/] 791 243UM 2GCF8A43J$'GQA4$'+-$'3?H. 3?
&/"792+-GC# &/F8j1 1 4Z i &. &/+@1 $%$?B$;79# 7,/+(*# $'GCF83?h&/h(+-$'3?j$'+!# $%GK$;3=^+@$'GC7+-$';1 G
&/GgF8I4&/Gg3J$'W8$'3[$;+-79,/^1 G
T"GC$'%$'GC7+-$'2GC$'7# $'+-7,/&.0&/+-24R$;GK7+-$;2. 243Q/+-1 ,/7$;R $;F87NZ
TEGK,GC$3J$'W8$'3J$9+-7,/+hd ^3= ,/G>FI4&/GCR^&/2Gw&/A423=,/F(*24Gw1 $# +-,/+!4# $gGK$;3=^+"# F,/&/,/e1 24G . 3?
A43?# . ^3&/GwF# . &/Ga3?$;!# $'3?,/1 ;Gw. 3?f71 F8I4&/g1 $$'+-F3=^1 -Z
6. 3=F$X(*G>73=,/F,/7g1 $Q&/. 3J$'GC$'+-F7,/+%$'G>$'&792GCF82V$'GCF8,/(*^1 2V1 $6$=BD$'7# 7,/4+"1 $6&/6792+-GC# &/c
F8^RS!# $Q$'GU&/6GC# . 24GC,/7,/4+"1 $'&. &/^+-,/] 71 23 GC2I43?$X$'&F8,/$;(*. 2L!# $6F24(*3?Q7243?3J$'3 &/6724+-GC# &/F8
58(*$'1 ,/1 2"$'+# +-,/1 1 $'G61 $H7. F# 3=L1 $b. A,/+-^GQ1 $L1 ,/GK72<CZ i +3J$';&/,/1 1GK$b(*# $'GCF83?+1 2G
+- (*$'3J2Gk`$;&4F,/$'(*. 2_,/+-,/7,/& !# $gF24(*H1 $;d 2&/d$'3?GK$6&/f. 3?,/(*$'3)F8# . &/R^TE$'& F,/$'(*. 2EF2F8&. c
3="1 $;d 2&/d$'3gF241 GL&/^GbF8# . &/^GZM 3=h&/h(*T23?/h1 $%&/GL792+-GC# &/F8GL&/2!# $",/(*. 23=Fj$;GL$'&
F8,/$;(*. 2F82F8&/R-. $'3J2*$'+@&/A# +-2GL7GC24GL72(*2# +-hGC# I4c72+-GC# &/F i $'&. &/+-,/] 71 23
$'GC724A4$'3?f$'&4(*$'+-23 F,/$'(*. 2%,/+-,/7,/&4$'+hd$'eH1 $'&(*$'+-23 F,/$'(*. 2%F2F8&458TH!# $g$;+F21 2%7GC2
$'& $=BD$'7# F823gGC$E1 $'F$'+-1 3?E1 $'GC. # 'Gf1 $_24I4F$'+-$'36&/". 3=,/(*$; 3F8# . &/^<CZ (*I4,/'+-R GCn
, )L1XZ^&/,/(*,/F8
$'&0+- (*$'3J21 $VF# .0&/GE1 $'d24&/d$'3X724+# +-%7&/# GC# &/E 8 R$'& . &/^+-,/] 71 23X3?$;'&/,/e^E# +-
,/+-F8$;3=. 2&/7,/+^. 3J24. ,/1 _$'+-F3J$V&/2GH1 2Gf72GKF24Gf] +-&/$'GH.03=V$'GCF8,/(*^367# & 1 $V&/2GH. &/+-$;G
$'G 3J$'&/(*$'+-F$$;&4(*$;+-24Ga724GCF24GC2>Z
H2. 79,/+ i V i $'(*,/F$f&/b3?$;. 3J$SGC$'+-F7,/+,/+-F$'3=+-L724(*.0&/$'F8b1 $;&3?I42& 1 $'&4. &/+-R$'+
d$'eE1 $_# +3J$'GC# (*$'+58T&/2$;+-d E& 3J7:-,/d 2&/24A1 $'& . 2GCF8(*GCF$'3F(*I4,/'+-<`,Z )VGC# &/(*$;+-F8$
$'GCF8g24. 7,/+j$;Gw +-,/7(*$;+-F8$g F,/&4.03=g&/f7243?3J$'779,/+h1 $$;3=3J23?$9Ga581 $'I4# A< 1 $6M 2GCF8A43J$'GZ

Notas
i ,/GKF$V$'GC7GCE1 27# (*$;+-F87,/+$'+M 24GCF8A43J$'Gg724+3J$'GC. $'7F2E&/%# F,/&/,/e7,/+.0243Q. 3?F8$b1 $'&
24.0F8,/(*,/e1 2431 $&/,/+-W8243?(*7,/+j1 $6724GCF24GZ +-W823=(*^79,/+"A4$'+-$'3?& GC24I43J$Q&/f$'GCF8,/(*^79,/+"1 $
724GCF82Ga. 3?g&/f2. F8,/(*,/e^7,/4+h1 $&/^Ga72+-GC# &/FGa. # $'1 $$;+-724+-F3=^3=GC$$'+"&,/I3J2Gw1 $F8$;NF24G 1 $
I4GC$'Gf1 $_1 F24GZ'a$;] ;3=GC$_%&/2GH7. F8# &/2GHGC24I43J$_+-1 ,/7$'GfT$'& 24. F,/(*,/e1 243QA$'+-;F8,/721 $
724+-GC# &/F8^Gw1 $6&/HtrYpXJu }Jv[-}Jp9Lp'v}U. 3?g(*^T23>,/+-W823=(*^79,/+ Z

^m

Uso

M 3=b(*2GCF83?3a# +.0&/+1 $H724+-GC# &/F_. 3?b# +-V72+-GK# &/F_GC,/(*. &/$HGC24I43J$H# +-VFI4&/b792+# +-
+-,/7f792&/# (*+-H1 $gF,/. 2E,/+-bF +HT%^g] &/Gk
EXPLAIN SELECT * FROM foo;
NOTICE:

QUERY PLAN:

Seq Scan on foo

(cost=0.00..2.28 rows=128 width=4)

EXPLAIN

M 3=b&/V(*,/GK(*_F8I4&/L724+# +*+-1 ,/7$b.03=L&/2A3?3w# +-_72+-1 ,/79,/+*St4 [vY{$'+&/_724+-GC# &/FR


! a V?(24GCF83?3?f# +h. &/+h1 ,/GCF8,/+-F2k
EXPLAIN SELECT * FROM foo WHERE i = 4;
NOTICE:

QUERY PLAN:

Index Scan using fi on foo

(cost=0.00..0.42 rows=1 width=4)

EXPLAIN

. 3?6F$'3?(*,/+-3R;. ^3=6&/g(*,/GC(*gFI4&/6792+%# +%+-1 ,/7$6. ^3=6&/24A43?3 # +-g72+-1 ,/7,/4+"St4 [vY{


$'+&/*792+-GC# &/F8RU!
L? (*24GCF3=3?*&/2GC,/A# ,/$;+-F8$. 3?# +-*724+-GC# &/F8*!# $# F,/&/,/79$# +-
W8# +-79,/+h1 $A43J$'A47C,/+ k
EXPLAIN SELECT sum(i) FROM foo WHERE i = 4;
NOTICE:

QUERY PLAN:

Aggregate (cost=0.42..0.42 rows=1 width=4)


-> Index Scan using fi on foo (cost=0.00..0.42 rows=1 width=4)

hF8$'GC$g!# $f&/2GX+- (*$'3J2GX$;GK. $;7/] 792GX(*2GCF83?1 2GCRT" +&/H$;GKF3?F8$;A,/f1 $g792+-GC# &/F8LGC$'&/$'7c


7,/24+-1 R . # $;1 $'+d3?,/3a$'+-F3J$L1 2G6d $;3=GC,/2+-$'G1 $LM 2GCF8A43J$'G1 $'I4,/1 2h&-(*$?B23?(*,/$'+-F21 $;&
. &/+-,/] 71 23`Z

Compatibilidad
SQL92
h2E$;N,/GCF$# +-HGC$'+-F8$;+-79,/ba L?1 $;] +-,/1 g$'+ 4Z

x

FETCH
Nombre
FETCH

$'&/$;797,/2+-f] &/Gw# GC+-1 2_# +h79# 3?GC243

Synopsis
FETCH [ selector ] [ count ] { IN | FROM } cursor
FETCH [ RELATIVE ] [ { [ # | ALL | NEXT | PRIOR ] } ] FROM ] cursor

Entradas
selector
selector

1 $'] +-$&/H1 ,/3J$'7`79,/+j1 $ 4i P Z`M # $'1 $6GK$;3># +-H1 $6&/GwGC,/A4# ,/$'+-F8$;Gk

)\V

GK$;&/$'779,/2+-g&/^5GC<GC,/A4# ,/$'+-F8$;58GK< ] &/GZ i G>$'& d&/23. 23)1 $'W8$'7F82LGC, GC$62(*,/F8$


selecZ
tor

\VPL5g\L

GC$'&/$;797,/2+-H&/58GC<-] &/58GC< +-F$'3=,/23?58$'GC<CZ


i \
i
M &/^I43=fGC,/+hGC,/A+-,/] 71 2_5"24,/GC$
.h23?1 <R^.03=g792(*. F,/I4,/&/,/1 172+ N -Z
count

1 $'F8$;3=(*,/+-7# +-FG_] &/^G%:-T!4# $GC$;&/$'779,/2+-3=ZM # $'1 $GC$'3b# +-21 $&/2G%GC,/c


Acount
# ,/$'+-F$'Gk
#

\V

)V+$;+-F8$'3J2"72+*GK,/A4+-2j!# $V$'GC. $'7,/] 7V7# +-FG6] &/G6:-Tj!# $LGC$'&/$;779,/2+-3=Z $'GC$


7# $'+-F1 $!4# $j# +$;+-F8$'3J2+-$'A4F8,/d2@$;GE$'!4# ,/d ^&/$'+-F8$79^(*I,/^3b$;&aGC$'+-F,/1 21 $
TE \VL
P 5g\L Z
)\V

$;d # $'&/d$gF241 Ga&/^Gw] &/Ga3J$'GCF8+-F$'GZ

i !# ,/d ^&/$'+-F8$gg$'GC. $'7,/] 79^3U# +h724# +-F1 $


Z

M
i !# ,/d ^&/$'+-F8$gg$'GC. $'7,/] 79^3U# +h724# +-F1 $g Z

^n

cursor

i &+-24(*I43J$g1 $# +h7# 3?GK23>^I,/$;3=F2)Z

Salidas
a' 3J$'F243?+-E$;& 3J$'GC# &/F1021 $V&/%72+-GK# &/F%1 $'] +-,/1 E. 23X$'& 7# 3?GC243X$'GC. $;79,/] 71 2Z ,0&/

724+-GC# &/F8HW8&/&/gGK$;3=+"(24GCF83?1 2Ga&/24GwGK,/A4# ,/$'+-F$'Gw($'+-GCCB$;Gk
NOTICE: PerformPortalFetch: portal "cursor" not found

,;$'&
+-2H$'GCFw. 3J$'d,/(*$'+-F$ 1 $;79&/^3=;1 2Z i &^7# 3?GK23-1 $'I4$ GC$'3-1 $'7&/3?'1 2g1 $'+-F3J2
cursor
1 $# +h
I4&/24!# $g1 $g24. $;3=^79,/+"58F83?+-GC7F8,/2+hI4&/247-4<`Z

NOTICE: FETCH/ABSOLUTE not supported, using RELATIVE

M 2GCF8A43J$'Ga+-2%GC24. 23?F8H$'& . 2GC,/7,/24+-(*,/$;+ F2EI4GC2&/# F82_1 $&/2GX7# 3=GC23J$'GZ

ERROR: FETCH/RELATIVE at current position is not supported

N . $'3?(*,/F$1 $'d24&/d$'3V1 $W823=(**3J$'.0$'F8,/1 $'&X7# 3?GK23V$;+GC#. 2GC,/7,/4+^79F# &/


# GK+-1 2_&/HGC,/+-FN,/G
FETCH RELATIVE 0 FROM cursor

M 2GCF8A43J$'Gg7F8# &/(*$;+-F8$_+-2*GC2. 243?F8"$'GCF$_724+-7$'. F2R-1 $_:-$;79: 24R $'& d ^&/243Q79$;3J2$'GCF"3J$;c


GK$;3=d1-2. 3?E,/+-1 ,/73X!# $EF821 Gg&/Gg] &/^Gf1 $'I4$;+GC$;361 $'d# $'&/FGT$'Gg$'!4# ,/d&/$;+-F8$_
$'GC. $'7,/] 793 &/Q. &/I43?w7&/d$a\V XZ ,^GC$w:-X# GK^1 2H&/X. &/I43?w7&/d$a i \ i RM 24GCF8c
A3J$'GGC# (*$Q!# $Q$'&# GK# 3?,/2L1 $'GC$'Q# +%72(*. 243?F(*,/$'+-F2V72(*2L$'+ N XTV1 $'d# $'&/d$
$'GCF8$(*$;+-GCCB$g1 $$'3?3J243=Z

Description

a' . $'3?(*,/F$j# +# GK# 3?,/2@1 $'d24&/d$'3b] &/^GE# GC+-1 2# +7# 3?GK23=Z i &>+- (*$'3J2@1 $j] &/G

1 $'d# $'&/F'Gb$;GKF%$'GC. $'7,/] 71 2(*$'1 ,/+-F8$ Z , $'& +- ($'3J21 $E] &/GH3J$'GCF+-F8$;GH$'+$'& 79# 3?GC243
$'GV(*$'+-23LF:-+ R GC&/2GC$'3?+GK$;&/$'77,/24#+-1 G_&/^GE1 ,/GC. 2+-,/I4&/$'GZ # GCF,/F8# T4$'+-1 2&/. &/c
I43=_79&/^d $_\L @$'+#&/# A3Q1 $_# ++- (*$'3J2. 3J2d 273=_!# $EGK$;+1 $'d# $'&/F8^GfF241 ^Gf&/Gf] &/^G
3J$'GCF8;+-F8$;GQ$'+$;& 7# 3=GC23=Z GQ,/+-GCF8+-7,/GX. # $'1 $'+jGC$'3 GC$'&/$'77,/2+-1 GX$;+(*I4^GX1 ,/3J$'77,/24+-$;G
:-7,/^1 $'&/;+-F8$TV:-7,/6F83?GU5 )\V
TV \L&
P 5\V <`Z? 1 ,/3J$'7C7,/4+". 231 $'W8$'7F2b$'G

)\L Z

Sugerencia: Se permite especificar nmeros negativos en el contador. Un nmero negativo es equivalente a modificar el sentido de las palabras clave FORWARD y BACKWARD.
Por ejemplo, FORWARD -1 es igual aBACKWARD 1.



Notas
$'GC$"7# $'+-F1 $%!# $h&/Gb. &/I43?Gb7&/d$ )\V
T \VPL5g\L
GC2+$'F8$'+-GC,/2+-$'G
M 24GCFA3J$'GZK HGC,/+-F8,/G N HF8(*I4,/;+$'GwGC24. 23=F1 ^ RN$'GC. $;79,/] 71 H$'+j &/bGC$'A4# +-1 LW823=(
1 $'& 72(*+-1 2ZK6'+-GC$(*GaI4CBD2_1 $'F8^&/&/$'G T%F8$;(*Ga1 $724(*. ^F8,/I4,/&/,/1 1wZ
)V+-bd$'eLF821 GQ&/GX] &/^G6GK$H:-+GC$'&/$;797,/2+-1 2R F241 24G6&/2G61 $'(*GQ^797$'GC2GQ1 $HW8$'F87:+-2j1 $'c
d# $;&/d $;+"] &/^GZ
M 24GCFA3J$'Gw+-2%GC24. 23?F8b&/H73=^79F$'3?GKF,/7b1 $g7F8# &/,/e^3U&/2GQ1 F2GX$'+j# +7# 3?GK23RTb!# $fd2&/c
d$'3>b(*. $;3>&/Gw7F8# &/,/e;7,/2+-$'GQ1 $'&7# 3?GK23a$'+j&/GXFI4&/GaI4GC$f+-2%$'GX.024GC,/I4&/$H. 243 3J$;A&/
A$;+-$'3?&/R^724(*2_GK# 7$'1 $F8^(*I4,/'+h$'+h&/Gw^79F# &/,/e;7,/24+-$;GX1 $&/Gad,/GCF8Ga58 i <CZ?M 243U792+-GC,/c
A# ,/$;+-F8$'R'&/24Gw# GC# 3?,/2Gw1 $;I$;+"$'. &/,/7,/F83)724(*+-1 24O
G )VM \ i . 3?fGC# GKF,/F8# ,/3U&/24Gw1 F24GZ

2Ga7# 3?GK23J$'G GC4&/2_GK&/2EGC$1 $'I4$'3?/;+h# GC31 $;+-F83J2V1 $F3=+-GC77,/2+-$'GCR^T!# $g&/24Ga1 F24G !# $
&/(*7$'+-;+^I4'3J7+"(* &/F8,/.0&/$'GX72+-GK# &/FGa1 $# GC# 3=,/2Z
)VGC3 BED=. 3?H(*21 ,/] 79^3 &/H. 24GC,/7,/+1 $'&7# 3=GC23=Z ;J= oa, ?F=*1 $'] +-,/3=H# +j7# 3?GC243=ZKa$;c
] '3=^GK$"3
 H!= z ^_R O
o D<BYBz AUR0T@
 FDV4
Hz?EO
o . 3?j(*T423b,/+-W823=(*7,/+7$'3J7C1 $"&/G
F83?+-GC77,/24+-$;GZ

Uso

2GQGK,/A4# ,/$'+-F$'GQ$?B$;(*. &/24G63J$'723=3J$9+# +-LF8^I&/b# +-GC+-1 2"# +79# 3?GC243=Z :-$bW82&/&/2.h,/+-Aj$'(*c


. &/$'G F83?d$'3?GC$'G fF8^I4&/$# GC,/+-A"f7# 3=GC23=Z
-montar y usar un cursor:
BEGIN WORK;
DECLARE liahona CURSOR
FOR SELECT * FROM films;
-seleccionar las primeras cinco filas en el cursor liahona:
FETCH FORWARD 5 IN liahona;
code |title
|did| date_prod|kind
|len
---+---------------+--+-------+-------+---BL101|The Third Man
|101|1949-12-23|Drama
| 01:44
BL102|The African Queen
|101|1951-08-11|Romantic | 01:43
JL201|Une Femme est une Femme|102|1961-03-12|Romantic | 01:25
P_301|Vertigo
|103|1958-11-14|Action
| 02:08
P_302|Becket
|103|1964-02-03|Drama
| 02:28

-Seleccionar la fila anterior:


FETCH BACKWARD 1 IN liahona;
code |title
|did| date_prod|kind
|len
---+---------------+--+-------+-------+---P_301|Vertigo
|103|1958-11-14|Action
| 02:08

- cerrar el cursor y commit work:


CLOSE liahona;
COMMIT WORK;

^

Compatibilidad
SQL92
Nota: El uso no embebido de los cursores es una extensin Postgres. La sintaxis y el
uso de los cursores est siendo comparada en contraposicin a la forma embebida de
los cursores definida en SQL92.

^b.0$'3?(*,/F8$f$'&. 24GC,/7,/2+-(*,/$'+ F82"I4GC2&/# F82"1 $;& 7# 3=GC23 . 3? i P


7&/,/e;79,/+j1 $&/2Gw3J$'GC# &/F8^1 24G $'+hd3?,/I4&/$'G $'. &//7,/FGZ

ThF(*I4,/'+&/V&/2c

FETCH ABSOLUTE #
FROM cursor
INTO :variable [, ...]

\V ^ !
) i
i & 7# 3?GK231 $;I4$_GK$;36. 2GC,/79,/2+-1 2& +- (*$'3J21 $_] &/%I4GC24&/# F2*$'GC. $'7,/] 79^1 2)Z 21 24G
&/24G+- (*$'3J24G1 $a] &/G)$'+VM 24GCFA3J$'GGC24+V+- (*$'3J2G)3J$'&/F,/d 2GCR. 2430&/2HF8^+-F82H+-2fGK$wGC2. 243?F8
$'GCF8f73?7CF$'3?/GCF8,/7-Z
k

variable

)3?,/I4&/$'58GC< 2I'BD$'F,/d2E1 $'&:-2GCF`Z

GRANT
Nombre
#GRANT

GK# ^3=,/2G

2F823JAg. 3=,/d,/&/$'A4,/2GX1 $^797$'GC2VH# +h# GC# 3?,/2R^# +A43J# . 2E2_fF821 2GX&/2G

Synopsis
GRANT privilege [, ...] ON object [, ...]
TO { PUBLIC | GROUP group | username }



Entradas
privilege

24Ga. 2GK,/I4&/$;GX. 3?,/d ,/&/$;A,/2GaGK2+ k

i i P
\L779$;GK2_fF241 Ga&/G 724&/# (*+-^GX1 $# +-HFI4&/ d ,/GCFf$'GC. $'7/] 7-Z
i
+-GC$'3?F8H1 F24G $;+jF241 Gw&/^Ga72&/# (*+-GX1 $6# +-HF8I4&/f$;GK. $;7/] 79 Z

)VM

\
i
\L7F8# &/,/egF821 G &/Ga792&/# (*+-Ga1 $g# +-fFI4& $'GC. $'7/] 7-Z

i i i
i &/,/(*,/+-H] &/^Gw1 $g# +-fFI4&/f$'GC. $;79] 79 Z

O)L i
\V

$;] +-$g&/^Gw3J$'A4&/G 1 $&/HFI4&/5Dd,/GCF8H587$'3)GC$'+-F8$;+-79,/HPQ i \ i )V i <CZ

F243JA4HF821 2Gw&/2GX. 3?,/d,/&/$'A,/2GCc


object

i & +-24(*I43J$1 $# +h24I;BD$'F2E& !# $6GK$6!# ,/$'3J$72+-79$;1 $'3)$'& 77$'GC2)Z` 24G . 2GK,/I4&/$;Gw2I;B$;F82G
GK2+ k
K F8d ,/I4GCF&/ 
K
K GK$;7# $;+-79,
K ,/+-1 ,/7$

M)V P
)V+-fI43J$;d ,/7`,/4+j. 3?g3J$'. 3J$9GC$'+-F3>fF241 24Gw&/24Ga# GK# ^3=,/2GZ
b )VM
group
)L+ grupo &w!4# $GK$2F823JA^+. 3?,/d,/&/$'A4,/24GZ i +&/^79F# &>d$'3?GK,/+-R)$'&aA3J# . 21 $'I4$
:-I4$'3)GK,/1 2E73J$''1 2E$'. &//7,/F(*$'+-F$724(*2EGK$61 $'GC73=,/I4$(*^Gw1 $;&/+-F8$4Z
i &+-24(*I43J$H1 $b# +# GK# ^3=,/2h&!# $bGC$H!# ,/$'3J$H724+-7$'1 $;3a. 3=,/d,/&/$;A,/2GZ9M)V P$'GQ# +-
I43J$Sd,/F# 3=f.03=3J$'. 3J$9GK$;+-F83UfF821 2Gw&/2GX# GC# 3?,/24GZ

username

Salidas
CHANGE

$;+-GK`B$g1 $;d # $;&/F82VGC$g&/f77,/4+hGC$g:-f3J$'&/,/e^'1 2_GK^F8,/GCW87F823=,/^(*$'+-F$Z

^

ChangeAcl: class "object" not found


ERROR:

$;+-GK`B$L1 $'d# $'&/F82GC, $;&024I;BD$'F2$'GC. $'7,/] 71 2j+-2$'GCF8_1 ,/GC. 24+-,/I4&/$_2GK, $;Gf,/(*. 2GC,/I4&/$
1 3&/24Gw. 3J24d,/&/$'A4,/2GwfA43J# . 2%2E# GC# 3?,/24Ga$'GC. $'7,/] 71 2Z

Descripcin

Vh. $;3=(*,/F$X&73J$';1 2431 $w# +%2I;BD$'F82L$;&1 3 . $;3=(*,/GC2G>$'GC. $'7/] 724G)F241 2GU&/2G># GK# ^c
h
3=,/2G>58M)V P6<42V6# +"79,/$;3=F2L# GK# 3?,/2V2VA43J# . 2Z2)VGC# 3?,/24G>1 ,/GCF,/+-F82Gw^&N73?$;'1 23. # $'1 $;+%+-2
F8$;+-$'3 . $;3=(*,/GC2G>1 $w779$;GK2f(*$'+-2G>!# $X$'&793J$';1 23 GC$Q&/2GU724+-7$'1 RS# +-6d$'eQ!# $X$'&2I;B$;F82
:-fGC,/1 2E73J$'1-2Z
)V+-wd$'ea!# $a# +_# GC# 3?,/2fF,/$'+-$a. 3?,/d,/&/$'A4,/24GGK2I43J$ # +V24I;BD$'F82RF,/$'+-$a. 2GK,/I4,/&/,/1 ^1E1 $a$=BD$'7# F83
$'GC$L. 3?,/d,/&/$'A4,/2)Z;"2:-T+-$'7$'GC,/1 11 $L72+-79$;1 $'3w. 3?,/d ,/&/$;A,/2Gf^&0793J$91 23X1 $L# +*2I;B$;F82$'&
73?$91 23a2I4F8,/$'+-$b# F24(*F,/7(*$'+-F$ V &/24G6. 3?,/d,/&/$'A4,/24GCRTj. # $'1 $bF(*I4,/'+$;&/,/(*,/+-3

$'& 2I;B$;F82Z

Notas
\V7F# &/(*$'+-F$'R. 3?%792+-7$'1 $;3. 3?d ,/&/$;A,/2GH$'+M 24GCFA3J$'GfhGC2&/2*&/A4# +-GH724&/# (*+-^GKR-:-$E1 $
73?$93f# +-d,/GCF8j!# $j724+-F$'+-A4&/GL72&/# (*+-GV1 $'GC$'1 GCR-T@72+-79$;1 $'3f. 3J2d ,/&/$;A,/2GLGC24I43J$
$'GCfd,/GCF8-Z
)VGC$g!  f. 3?f2IF$'+-$;3U(*Ga,/+-W8243?(*7,/+GC2I43?$g&/2Ga. $'3?(*,/GC24GX1 $&/24Gw24I;BD$'F24Gw$',/GKF$'+-c
F8$;Gk
Database
= lusitania
+------------+------------------------------+
| Relacion
|
Conceder/Eliminar Permisos
+------------+------------------------------+
| mytable
| {"=rw","miriam=arwR","group todos=rw"}
+------------+------------------------------+
Leyenda:
uname=arwR - se conceden privilegios a un usuario
group gname=arwR - se conceen privilegios al un GRUPO
=arwR - se conceden privilegios a PUBLIC
r
w
a
R
arwR

|
|

SELECT
UPDATE/DELETE
INSERT
RULE
ALL

Sugerencia: Actualmente, para crear un GRUPO ha de insertar los datos manualmente


en la tabla pg_group como sigue:
INSERT INTO pg_group VALUES (todos);
CREATE USER miriam IN GROUP todos;

'GC$Q&/HGK$;+-F8$'+-7,/H i

l

i . 3?gd$'3)72(*2%$'&/,/(*,/+-3U&/24Ga. 3?,/d ,/&/$;A,/2GX1 $6779$;GK2Z

Uso

P62+-7$'1 $. 3?,/d,/&/$'A4,/24Ga1 $g,/+-GC$'3J7,/4+hfF241 24Ga&/24Gw# GK# 3?,/2Gw1 $6&/HF8I4&/gO] &/(*GKOk


GRANT INSERT ON films TO PUBLIC;

P62+-7$'1 $F241 2Ga&/24Gw. 3=,/d,/&/$'A4,/GC2E&# GC# 3?,/2_OY(*+-# $'&/OGC24I43J$&/fd,/GCF8HO:-,/+-1 GKOk


GRANT ALL ON kinds TO manuel;

Compatibilidad
SQL92
6GK,/+-F,/Ga1 $ N .03=6ba\L . $'3?(*,/F$6$'GCFI4&/$'7$'3 1 $;3?$97:-2GaGC2I43?$Q724&/# (*+-G ,/+-1 ,/c
d,/1 # &/$'GCR^T_. $'3?(*,/F8$g$'GCFI4&/$'7$'3$'&. 3?,/d,/&/$'A4,/2E1 $g72+-79$;1 $'3)$'&(*,/GC(*2%. 3?,/d ,/&/$;A,/2_f24F3J24Gk
GRANT privilege [, ...]
ON object [ ( column [, ...] ) ] [, ...]
TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]

2GV7(*.024GLGC2+724(*. F,/I4&/$'GV724+@&/24GV1 $%&/,/(*. &/$;(*$'+-F8^79,/+1 $"M 24GCFA3J$'GCR 72+&/GLGC,/c


A# ,/$;+-F8$'Ga,/+-7243?. 23=^79,/2+-$'Gk
privilege

f.0$'3?(*,/F8$.03=,/d,/&/$'A4,/24Gw1 ,/7,/24+-^&/$'G f&/2GX(*$'+-7,/2+-1 2Gk

i i P
i 4i i "P i
M $'3?(*,/F,/1 2. 3?E:-7$'3Q3J$'WD$'3J$'+-7,/E%^&/A# +-%2F241 Gf&/^Gf724&/# (*+-^Gb1 $V# +-"F8^c
I4&/ d,/GCF8f$;GK. $;7/] 79g$'+h&/,/(*,/F87,/2+-$'Ga1 $g,/+-F8$;A3?,/1 1XZ

\H i
M $'3?(*,/F8,/1 2L. ^3=X# GC3 # +E1 24(*,/+-,/2R'# +_792+BD# + F2b1 $w79^3=7F$'3[$;GKR9724F$=BD2L2bF83?1 # 7c
7,/+ Z ,-# +*24I;BD$'F2$;GK.0$'7,/] 7_^&/A2j!# $V+-2jGC$'_# +-VF8I4&/ d,/GCF8R
privilegio
:-g1 $$'GC. $'7,/] 73)GK2&/
2 ) \L i Z

object

\V i
table
N f. $;3=(*,/F$1 ,79,/2+-&/(*$'+-F$g&/f. ^&/I43=79&/^d $6+-2%W8# +-79,/2+-&

TABLE

lKl

P \La\LP i i
$.0$'3=(*,/F$g# GC3)$'&SB# $;A2_1 $g73=;7F8$;3?$;Ga$;GK.0$'7,/] 71 2Z
P \ 0
$.0$'3=(*,/F$g# GC3)&/HGK$;79# $;+-79,/g1 $724F$=BD2%$'GC. $'7,/] 71 4Z
a\V \
$.0$'3=(*,/F$g# GC3)&/H792+-d$'3?GK,/+h1 $>BD# $'A42E1 $73?7F8$;3=G $'GC. $;79,/] 71 4Z

$.0$'3=(*,/F$g# GC3)$'&1 24(*,/+-,/2E$'GC. $'7,/] 79^1 2)Z


 b
\V M
$.0$'3=(*,/F$g724+-7$'1 $'3)$'&(*,/GK(*2E. 3=,/d,/&/$'A4,/2Eg24F3J24GZ

INSERT
Nombre
INSERT

+-GC$'3?F8f] &/Ga+-# $'dGa$'+"# +-HF8I4&/

Synopsis
INSERT INTO table [ ( column [, ...] ) ]
{ VALUES ( expression [, ...] ) | SELECT query }

Entradas
table

i &+-24(*I43J$g1 $# +-HFI4&/g$;N,/GCF$'+-F8$4Z

column

i &+-24(*I43J$g1 $# +-H72&/# (*+-H$'+

)V+-f$;N. 3J$'GC,/+h2E# +hd

expression

query

table

^&/243)d&/,/1 2GwHGC,/A4+-3)$'+

column

)V+-E72+-GK# &/F%d&/,/1 4Z^ $;_&/E,/+-GCF83J# 7,/+ i i P . 3?_# +-E(*$?B2361 $;GK73?,/. 7,/4+*1 $


3JA# (*$'+-F2Gad&/,/1 2GZ

l

Salidas
INSERT
oid 1

$;+-GK`B$L1 $'d# $'&/F82jGC, GK2&/2GC$_:-E,/+-GC$'3?F1 2j# + "] &/-Z


$'Gf$;&0+- (*$'3J2
oid

] &/g,/+-GK$;3=F1 -Z

1 $L&/

0 #
INSERT

$;+-GK`B$1 $;d # $;&/F82GC,aGC$:-,/+-GC$'3?F1 2@(*^GE1 $h# + *] &/-Z $'G_$'& +- (*$'3J2@1 $h] &/G
#
,/+-GK$;3=F1 GZ

Descripcin

? #/ . $'3?(*,/F8$L&/E,/+-GC$'3J79,4+*1 $L+-# $;d ^Gg] &/Gg$'+*# +-%7&/GC$L2# +-EF8^I&/ Z $b. # $'1 $L,/+-c
GC$'3=F3 # +-V] &_V&/Vd$'eV2hd3?,/GQ72(*2j$;&-3J$'GC# &/F81 2"1 $b# +-V792+-GC# &/F8-Z9 GQ72&/# (*+-G$'+
$'& 3J$'GC# &/F8^1 2_. # $;1 $'+"GC$'3U&/,/GKF1 G $'+h7# &/!# ,/$;3>23?1 $'+ Z
P61 j724&/# (*+-*!# $+-2$;GKF. 3J$'GC$'+-F$j$'+&/&/,/GCF1 $243?,/A4$'+GK$;3=,/+-GC$'3?F1 # GC+-1 2$'&
d&/243L. 243L1 $'W8$'7F82R)!# $*.0# $;1 $GC$'3VF+-F82# +d ^&/243V.0243_1 $;W$97F821 $'7&/3=^102
\ )L
i 4
2I4,/$'+#
)L XZM 2GCF8A43J$'GL3J$'7:-e;3=j&/j+-# $;d j792&/# (*+-GC,UGC$h,/+-GC$;3=F# +#
)L $;+# +-
724&/# (*+-H1 $;79&/^3=;1 f724(*2E 0
)V XZ
,&/_$;N. 3J$'GC,/+. 3?L79^1 L72&/# (*+-E+-2j$'G61 $'&F8,/. 2j1 $H1 F24G67243?3J$'7F24RNGK$b,/+-F8$;+-F83?_# +-
724$'3J7,/+"1 $F,/. 24Gw# F82(*F,/79^(*$'+-F$Z
$'I4$ F$'+-$'3-. 3=,/d,/&/$'A4,/2G1 $a,/+ GK$;3?7,/+L$'+L&/XF8I4&/w.03= -1 ,/3 $'+L$'&/&/^R9^GK,;72(*2H. 3?,/d,/&/$'A,/2G
1 $GC$'&/$;797,/+j$;+h79# &/!4# ,/$'3)F8I4&/f$;GK.0$'7,/] 71 g$'+"# +-H7&/# GK# &/g hi i Z

Uso

+-GC$'3?F8g# +-H] &/f$;+h&/fF8I4&/

films

INSERT INTO films VALUES


(UA502,Bananas,105,1971-07-13,Comedy,INTERVAL 82 minute);

GC$b2(*,/F8$bTj$'+-F24+-7$'G6F$'+-1 3?V$;& d&/23


i +$;GKF$HGK$;A# +-1 2h$=BD$'(*.0&/2&/L792&/# (*+-
date_prod
. 23U1 $;W$;79F2V1 $#)L Xk
INSERT INTO films (code, title, did, date_prod, kind)
VALUES (T_601, Yojimbo, 106, DATE 1961-06-16, Drama);

+-GC$'3?F8g# +-f] &fGK,/(*.0&/$g$'+h&/fFI4&/f1 ,/GCF83?,/I4# F823=GC+-2F8$g!4# $6GC24&/2%GC$$;GK.0$'7,/] 7f&/f72&/# (*+-


R^1 $W823=(*H!# $g&/g792&/# (*+-b24(*,/F,/1 
GK$;3=gGK,/A4+-1 g792+hGC#d&/23U.0243U1 $'W8$'7F82Z
name

did

INSERT INTO distributors (name) VALUES (British Lion);

+-GC$'3?F8gd ^3=,/G ] &/Ga$'+"&/HF8^I4&/f] &/(*Ga1 $'GC1 $6&/HF8I4&/

tmp

l^m

INSERT INTO films SELECT * FROM tmp;

+ GC$'3J7,/+*$'+*3?3=T4G658d$'VA!^w v|?s-}?L@Q|J?} |6tYX. 3?_(*^T23Q,/+-W823=(79,/+*GC24I43J$


&/24Ga3?3=^TGC<`k
- Crea un tablero de juego vacio de 3x3 para cruz y raya
- (todos estos querys generan el mismo efecto)
INSERT INTO tictactoe (game, board[1:3][1:3])
VALUES (1,{{"","",""},{},{"",""}});
INSERT INTO tictactoe (game, board[3][3])
VALUES (2,{});
INSERT INTO tictactoe (game, board)
VALUES (3,{{},{},{}});

Compatibilidad
SQL92
? #/ $'G F82F8^&/(*$'+-F8$f72(*. F,/I&/$6724+ N ^-Z= G . 2GC,/I4&/$'GX&/,/(*,/F7,/24+-$;Gw$;+j&/^Gw73?'7c
F8$;3=,/GCF,/79G 1 $6&/H79&/^# GK# &/
$'GCF+"1 279# (*$;+-F81 Ga$;+h= = oAZ
query

LISTEN
Nombre
LISTEN

a$'7,/I4,/3>^d ,/GC2V1 $g&/f+-2F8,/] 77,/4+j1 $# +-H72+-1 ,/7,/4+

Synopsis
LISTEN nombre

Entradas
nombre

h24(*I43J$g1 $6&/f724+-1 ,/7,/+1 $+-24F,/])77,/+ Z

lx

Salidas
LISTEN

$;+-GK`B$g1 $;d # $;&/F82V7# +-1 2EGC$72(*. &/$'FH$'N,/F2GK^(*$'+-F8$g$;&3?$;A,/GCF3?2Z

, $'GCF$gI47-$'+ 1T4fW8# $g3J$'A4,/GCF83?1 2V. 3?fGC$'3>d,/GC1 2V7# +-1 2EGC$g+-2F8,/] 7H$'GCH724+-1 ,/c
79,/+ Z

NOTICE Async_Listen: We are already listening on nombre

Descripcin

/ 3J$'A4,/GCF83?^&NI47-$;+-1hM 2GKFA3J$;Ga. ^3=63J$'7C,/I4,/3)d,/GK2L1 $Q&/g+-2F8,/] 77,/4+"1 $6# +-g72+-c



1 ,/7,/4+
Z
nombre
P61 bd$'eL!# $L$;& 72(*+-1 2jhhaJa
$;G6,/+-d 271 2R T4_GC$'L. 23X$;GKF$HI47*-4$'+-1*#
24F3J272+-$'7F81 2%&/h(*,/GC(*"I4GC$E1 $_1 nombre
F24GCRF241 2Gb&/2GHI47-4$'+-1 GH!4# $E$;GKF+3J$'A,/GCF3=^102G
. 3?%GC$'3d,/GC1 2GH1 $E&/"+-24F,/] 79^79,/+1 $E$'GC"724+-1 ,/79,/+-R03J$;79,/I4$;+$'& d,/GC24R-T*$'+GK#(*24c
(*$'+-F2"79^1 H# +-2j1 $H$;&/&/24G6+-2F8,/] 73?bLGC#.0&/,/79^7C,/4+W3J2+-F8$;+-1XZ6'GC$f$'& F3?F8(*,/$;+-F82%1 $
hhaJ
a@. ^3=(*T4243U,/+-W23?(*7,/4+ Z
)V+I47 -$;+-1.0# $;1 $+-# &/3VGC#3J$;A,/GCF83J21 $3J$;79$;. 7,/4+1 $d,/GK21 $# +-724+-1 ,/79,/+1 $
+-24F,/] 79^79,/+V1 1 wXF3=^d ;G1 $;&^72(*+-1 2bLh  / Z[\VGC,/(*,/GC(*2RSF241 24G)&24G)3J$;A,/GCF83J2G1 $
3J$'7C$'. 7,/+1 $d,/GC24GaGK$+-# &/+"# F24(*F,/7(*$'+-F$g7# ^+-1 2_] +-&/,/e^f$'&. 3J247$'GC2VI47 -$;+-1XZ
i & (*'F241 2E(*$'1 ,/^+-F8$$;& 79# ^& &/H. &/,/77C,/+W83J24+ F8$'+-11 $'F8$;79Fg&/2Ga$'d $;+-F82Gw1 $+-2F8,/] 779,/+
1 $'. $;+-1 $E1 $"&/h,/+-F$'3?W^eh1 $E. 3J2A43=(*^79,/+@1 $%. &/,/77,/2+-$'GbM 2GKFA43?$;GL# F8,/&/,/e^1 ZP62+&/
&/,/I43J$'3=EI4^GK,/7V&/,/I.0!R&/E. &/,/77,/+$'+-d/% / a 792(*2# +*72(*+-1 2 N 23?1 ,/+-3=,/2R
.03=d$'3,/A4# 3UGC, GC$:-f3J$;79,/c
TE$;+-F82+-7$'G &/&/(*f. $'3?,/1 ,/7(*$'+-F$6f&/3J# F8,/+-
I4,/1 2^&/A +*$'d$'+-F21 $V+-24F,/] 79^79,/+ Z F83?G,/+-F8PQnotifies
$;3=W87$'G724(*2&/,/I4. AF7&0. 3J24. 23J7,/24+-^+*(*'c
F821 2GQ1 $H&/F82"+-,/d$'& . 3?L$;& (*+-$?B2h1 $f$'d$'+-F24G61 $b+-2F8,/] 77,/4+- 1 $f:-$'7:-24R 792+&/,/I4. A4F87&
$'&N. 3J2A3?(*^1023U1 $Q. &/,/77,/2+-$'G>+-2_1 $'I4$6$;+-d ,/3) / a 2VLh  / 1 ,/3J$'7CF(*$'+-F$Z
'GC$Q&/H1 247# (*$'+-F7,/4+h1 $g&/g&/,/I43?$;3=g# F,/&/,/e1 f. ^3=(*T23J$'Ga1 $'F&/&/$'GZ
^4DJA0z > 724+-F,/$'+-$# +F3=^F8(*,/$;+-F82(*GV$'F8$;+-GK21 $j&/j# F8,/&/,/e^79,/+1 $ / a Thh
aJ
agZ

Notas

. # $'1 $"GK$;3g7# ^&/!# ,/$'3f71 $'+-hd&/,/1 h792(*2+-24(*I43J$'0+-2$;GL+-$'7$'GC3?,/2*!# $hGC$'


/,nombre
A# ^&&+-24(*I43J$E1 $%# +-"F8I4&/"$',/GCF8$'+-F$Z ,
GC$"$;+-79,/$;3=3?%$'+-F3J$E792(*,/&/&/GCR +-,GK,/c
!# ,/$'3?*$'G%+-$;79$;GK^3=,/2!4# $*GC$'*# ++-2(*I43J$d ^nombre
&/,/1 24R)GC,/+-279# ^&/!# ,/$'3V71 $;+-1 $:-GCF8*
73=;7F8$;3?$;Ga1 $&/3JA2Z
1 $'I4/_GK$;3$'+-7$'3?3?102*$;+-F83J$_724(*,/c
i +&/A4# +-^GHd$'3?GK,/2+-$'Gf. 3J$'d,/Gf1 $_M 2GCF8A43J$'GCR
&/&/Gg79# +-1 2+-2GC$_723=3J$'GC. 2+-1 /_792+$'& +-24(*nombre
I43J$_1 $_# +-%FI4&/E$',/GCF8$;+-F8$'R# +-!4# $_W# $;3=
GC,/+-F87F,/79^(*$'+-F8$67923?3J$'7F82V792(*2%+-2(*I43J$Z`\L79F# &/(*$'+-F$g+-2E$;Gw3J$'!4# $;3=,/1 2)Z

Uso

P62+-] A# 3?HTE$?B$;79# FH# +-fGC$'7# $'+-7,/H3J$'7$S. 7,/+1 $6d,/GK2 +-24F,/] 797,/+1 $'GC1 $

psql

LISTEN virtual;

l^n

NOTIFY virtual;
ASYNC NOTIFY of virtual from backend pid 11239 received

Compatibilidad
SQL92
i & 724(*^+-1 2% / a +-2E$;N,/GCF$g$'+ N ^Z

LOAD
Nombre
LOAD

P6^3?A4g1 ,/+-(*,/7(*$'+-F$g# +j] 7:-$'3J2V24I;BD$'F2

Synopsis
LOAD nombrefichero

Parametros de Entrada
nombrefichero

h24(*I43J$g1 $;& ] 7:-$'3J2_. 3?g73JA;3U1 ,/+-(*,/7(*$'+-F$Z

Outputs
LOAD

$;+-GK`B$g1 $;d # $;&/F82V$'+h7GC2E1 $GC# 7$'GC2E$;+j&/g24. $;3=7,/2+ Z

LOAD: could not open file nombrefichero


ERROR:

$'+-GCCBD$g1 $;d # $'&/F2EGC,$'&] 7:-$'3J2E$'GC. $;79,/] 71 2_+-2%$'Ga$'+-724+-F3=^1 2)Z i &4] 7:-$'3J2E1 $'I4$GC$'3
d /, GC,/I4&/$pu v|?s }J?|!Sp9~t9J{^R'TE1 $'I4$6GC$'3)$'+-d,/1 2L724+"GC#. 3J2.-,/1 2_7(*,/+-2V724(*. &/$;F82
5.0F8:-<8R'.03=g+-2E2IF$'+-$;3>$'GCF$F8,/.02E1 $g$'3?3J23`Z

l

Descripcion

P63JA H# +j] 7:-$;3?2E24I;BD$'F2%582%9Z 2<0$'+h$;&$'GC. ^79,/2_1 $g1 ,/3J$'77,/24+-^(*,/$'+-F82EM 2GCF8A43J$'GHZ)L+-Hd$'e


!# $H$'&-] 7:-$'3J2"$'G673JA 1 2h$'+(*$'(*23=,/R F821 GQ&/GXW# +-7,/2+-$'G1 $H$'GC$b] 7:-$'3J2". # $'1 $;+GC$'3
&/&/(*1 ;GZ i GCFhW8# +-7,/2+@$'Gb# GC1 ". 3?%GC24.0243?F8$%1 $EF,/. 24GbTW8# +-7,/2+-$'Gb1 $;] +-,/1 ^GH. 23g$'&
# GK# ^3=,/2Z
,4# +j] 7:-$'3J2%+ 2"$'GQ73JA;1 2%# GC+-1 2h hL"R$'&4] 7:-$'3J2%GC$'3?b73JA 1 2%# F24(*^F8,/7(*$'+-F$
&/f. 3?,/(*$'3?fd$'ef!# $g# +-HW8# +-7,/24+jGC$'f&/&/(*^1 f. 23>$'&M 2GKFA43?$;GZK hLM # $'1 $GC$'3U# GC1 2
. 3?w3J$'7C3JA43 # +_] 7:-$'3J2f2I;B$;F82fGK,^$'GCF8$ :-XGK,/1 2f$'1 ,/F102HTH3J$'7C2(*. ,/&/1 2ZJM 23 $'&'(*2(*$'+-F24R
# +-,/7(*$'+-F$GC24+jGC24. 23?F81 2Ga] 7:-$'3J2Gw2I;BD$'F82_!# $fGC24+h73J$'1-24Gw792+h$'&&/$'+-A4# CBD$P_Z

Notas
# +-7,/2+-$'GX!4# $HGC$f$'+-7# $'+-F3=^+j$;+] 7:-$'3J2Gw2I;B$;F82"+-2%1 $'I4$'3?,/+h&/&/(*3UH24F3=GaW8# +-7,/24+-$'G

$'+2F83J24GE] 79:-$;3?2G%2I;BD$'F82@!# $W# $;3J24+73JA;1 2G%. 23V(*$'1 ,/2@1 $'& 724(*+-1 2 hVZM 23
$=BD$'(*. &/2R0F241 GL&/jW8# +-7,/24+-$;GL$'+$'&] 79:-$;3J2
. # $'1 $;+@&/&/(*^3gj2F83?GLW8# +-7,/24+-$;GV!4# $hGC$
$'+-7# $'+-F3=+*$;+&/Gf&/,/I43J$'3?,/GGCF8+-1 3J12(*AF:-R2$'+&/Gg1 $'&0. 3J2. ,/2M 2GCF83JA43?$;GZ i GCFG+-2
1 $'d$'3,/+h&/&/(*^3W# +-7,/2+-$'Ga1 $'] +-,/1 G $'+"2F83J2V] 7:-$'3J2V73JA;1 2 Z i GCF82_$'G GC, . 243J!# $6GK,
$'G3J$'7'3JA41 2R$'&073JA4'1 23X1 $'&0M 24GCFA3J$;Gg+-2$'GCF8E.03?$;. '3?1 2j. B3?_3J$';&/279^3Q&/G&/&/(*^1 BG
1 $'GC1 $%&/GbW8# +-7,/24+-$;G_$;+
$;+$'&U+-# $'d2$'GC. 7,/21 $%1 ,/3J$'779,/2+-(*,/$;+-F821 $ Z , +-2$;G
B
B
3J$'7C3JA41 2R'$'+-F24+-7$'Gw+-2E:-AI43?f. 3J2I4&/$'(*GZ
,/7:-$'3J2G>24I;BD$'F2E1 $;I4$'+%GC$'3)724(*. ,/&/^1 24G . 3?6792+-F8$;+-$'3)7921 ,/A42EGC,/+"1 $'.0$'+-1 $'+-7,/61 $. 2GC,/c
7,/24+ ZKM 243a$?B$;(*. &/24RN$'+j$'GCF8^79,/2+-$'G i PQRN1 $'I4$g# GC3
724+j&/L24. 7,/2+
7# +-1 2
/bin/cc
-G 0
724(*. ,/&/g] 7:-$'3J2Gw2I;BD$'F82E. 3=GC$'3>7 3JA4'1 2GZ
,$'GCF8. $'+-GC+-1 2V$'+%. 23?F83M 2GKFA43?$;Ga# +-g+-# $'dg.0&/F8W823?(*R' hL1 $'I4$XF83?I4CBD3 1 $
W8243?(*fF& !# $gGC24.0243?F8$f\ GZ

Uso

P63JA H$'& ] 7:-$'3J2

/usr/postgres/demo/circle.o

LOAD /usr/postgres/demo/circle.o

Compatibilidad
SQL92
h2E$;N,/GCF$$'&724(*^+-1 2% hL$'+ N ^-Z

l^

LOCK
Nombre
LOCK

i . &//7,/F(*$'+-F$I4&/24!4# $'H# +-HF8^I&/g1 $'+-F3?2V1 $# +-HF3?+-GK^797,/+

Synopsis
LOCK [ TABLE ] name
LOCK [ TABLE ] name IN [ ROW | ACCESS ] { SHARE | EXCLUSIVE } MODE
LOCK [ TABLE ] name IN SHARE ROW EXCLUSIVE MODE

Entradas
name

i &+-24(*I43J$g1 $# +-HFI4&/g$;N,/GCF$'+-F8$g.03=gI&/2!# $;3=Z

i
\VPQP i b \V i

Nota: A este modo de bloqueo se accede automticamente sobre tablas que estan siendo consultadas. Postgres libera automticamente los bloqueos accedidos ACCESS
SHARE despues de que se haya hecho la sentencia.

i KG F$H$'GQ$'&(*241 2j1 $bI4&/2!# $'2j(*$'+-2G63?$;GCF83?,/79F,/d2"$'& 7# &$'+-F83?L$'+72+ ,/7F2GC4&2j72+


$'&)(*21 2\VPQP i N i P6!) i Z $".03?$;F8$9+-1 $". 3?2F$'A4$'3g# +-jFI4&/h!# $h$'GCFjGC,/$'+-c
1 2E72+-GK# &/F1 H1 $GC$'+ F8$'+-7,/Gw792+-7# 3=3J$'+ F8$'GwV a 4
8 Rhh 4
8 #
T UV
VJ
GC2I3J$g&/g(*,/GK(*HFI4&/-Z

\V i

Nota: Se accede automticamente por cualquier declaracin SELECT FOR UPDATE.

P62+ ,/7F82GX72+j&/2GX(*21 2Gw1 $I&/2!# $'2 i P6!) i T%\LP6P i  i P6) i Z


i P6!) i

Nota: Se accede automticamente por cualquier sentencia UPDATE, DELETE, INSERT.

l

P62+ ,/7F82Gw72+"&/24Ga(*21 24G \V i R \L i i PQ!) i R i P6!) i \VP6c


P i N i P6!) i Z'b$'+-$;3=^&/(*$'+-F8$%GC,/A+-,/] 7h!# $"# +-hF83?+-GC77,/4+7F8# &/,/e;h2*,/+-c
GK$;3=Ff&/A4# +-G F8# . &/Ga$'+h# +-fFI4&/-Z
\V i

Nota: Se accede automticamente por cualquier sentencia CREATE INDEX

P62+ ,/7F82G%72+&/2G_(*241 2G_ i 6


P !) i R \V i i P6) i R i c
P6!
) i Th\VPQP i  i PQ!) i Z i CG F$H(*21 2". 3J2F8$;A$g# +-bFI4&/L72+-F83?b7F8# &/,/c
e7C,/2+-$'GX72+-7# 3?3J$'+-F$'GZ

\V i i P6!) i
i

P62+ ,/7F24GL72+@&/2GL(*241 2GL i PQ!) i R \L i R \V i i P6!)Lc


i R i PQ!) i Th\VPQP i  i PQ!) i Z i GKF$f(*241 2E$'GQ(*Gw3J$'GCF83?,/7F8,/d2%!# $f$'&
(*241 2 \L i 1 $'I4,/1 2"!# $%GC4&/2*.0# $'1 $EGC24. 23?F83g$;GKF$EI4&/24!# $;2# +-"F3=^+-GK^797,/+
. 243)d$'e"Z

i
) i
i PQ!

P62+ ,/7F24GV724+@&/24GL(*21 2GL \L i R i PQ!


) i R \L i R \L i
i PQ!
) i R i P6!
) i T\LP6P i i P6!
) i (*21 $'GZ i GCF8$_(*21 2$;G
 +(*^G%3J$'GCF83?,/7F8,/d2!# $'GC$1 $ \V i i P6!
) i UI4&/2!# $'F821 GE&/G
792+-GC# &/F8Ga724+-7# 3?3J$'+-F8$;G i i P S
)LM \ i Z

i
\VPQP i  i P6!
) i

Nota: Se accede automticamente por las sentencias ALTER TABLE, DROP TABLE,
VACUUM .

i KG F$a$'G $'&'(*21 2H1 $ I4&/2!# $'2b(*^G3J$'GCF3=,/7F8,/d2gTH$'G ,/+-724(*. ^F8,/I4&/$w724+VF821 2G)&/2G1 $;(*G


(*241 2Gb1 $%I4&/24!4# $'2T. 3J24F$'A4$E# +-hFI4&/hI4&/2!# $'^1 "1 $"7# &/!# ,/$;324F3?j2. $'3?7,/4+
792+-7# 3=3J$'+-F$Z
Nota: Este modo de bloqueo se accede tambin por un LOCK TABLE sin cualificar.
(i.e. el comando sin una opcin de bloqueo explcita).

l^

Salidas
LOCK TABLE

i &I&/2!# $'2EGK$67F8,/dE72+j;N,/F2Z

name: La tabla no existe.


ERROR
$;+-GK`B$g1 $;d # $;&/F82VGC,4$;&

nombre

+-2E$;N,/GCF8$4Z

Description

M 24GCFA3J$'GEGK,/$;(*. 3J$# GK$;&w(*21 21 $I4&/2!# $'2(*$;+-24G"3J$'GCF3=,/7F,/d 27# ^+-1 2&/$$'GE. 24GC,/I4&/$Z


h'
" 4
8 F24(*E($'1 ,/1 G. 3?_7# +-1 2jGC$V. # $'1 V+-$'7$'GC,/F8^3w# +(*21 2j1 $VI4&/2!# $'2
(*G 3J$'GCF83?,/7F8,/d2)Z
M 243)
$=BD $'(*. &/2R^# +-g^. &/,/79^79,/+"$=BD$'7# F8# +-fF83?+-GC77,/4+"$;+"$'&N+-,/d$'& 1 $6,/GC&/(*,/$'+-F2_ i \
P
8 0i Tb+-$'7$'GC,/F6GC$;A# 3?3 &/6$;N,/GCF8$;+-7,/X1 $w1 F82G $'+_# +-QFI4&/X. 3?X&/X1 # 3=^79,/2 +
1 $X&/gF3=+-GC77 ,/4+ ZJM 3?$;&/&/2_Fh. 21 3=GU# GC3$'&N(*21 2V1 $QI4&/2!# $'2 \V i GC24I43J$X&/gFI4&/
+-F$'G)1 $a&/Q72+-GK# &/F-Z i GKF2H. 3J2F8$'A4$'3?X&/2GU1 F24G1 $w79(I,/2GU72+-79# 3?3J$'+-F$'G)Tb.03?2. 23J79,/2+-c
3=b7# &/!# ,/$;3 24F3?V2. $'3?7,/4+1 $f$'GC73=,/F# 3=bGC2I3J$H&/bF8I4&/b72+1 F24GX$'+GC#*d$'3J1 ;1 $'3J2%$;GKc
F8^1 2V^79F# &/RS. 243J!# $Q$'& (*21 2_1 $6I4&/2!# $'2 \L i $'G ,/+-792(*. F,/I4&/$724+"7# &/!4# ,/$'3
) i 779$;1 ,/1 2%. 23a&/24G6!4# $b$'GC3?,/I4$'+-RNT h'
" 4
8 \
t  
i PQ!
?
/!hV6T
hh$'GC. $'3?3?E:-GCF8%!4# $_GK$E. 3J21 # e7C%2GC$_I4CBD$'w7# &/en
!# ,/$;sentencia
362. $'3?7,/4+
1 $$'GC73?,/F8# 3?f724+-7# 3?3J$'+-F8$4Z
Nota: Para leer datos en su verdadero estado actual cuando ejecutas una transaccin
en el nivel de aislamiento SERIALIZABLE tienes que ejecutar una declaracin LOCK
TABLE antes de la ejecucin de cualquier sentencia DML, cuando la transaccin define
qu cambios concurrentes sern visibles por ellos mismos.

\V1 $;(*'GV1 $j&/2GV3J$'!# $'3?,/(*,/$'+-F2GE. 3J$'7$91 $'+-F$'GCR GC,># +-F83?+-GC77,/4+dj79^(*I4,/3f1 F82G


$'+@# +-hFI4&/h$;+-F82+-7$'GbGC$%1 $'I4$'3?/"77$'10$;3g&)(*21 2 \V i i P6!
) i . 3?
$'d,/F8^3>724+-1 ,/7,/2+-$'G61 $f. # +-F2"(*# $'3?F82"7# +-1 2"1 2GQF3=+-GC77,/2+-$'GX72,/+-79,/1 $;+-F8$;GQ,/+-F8$;+-F8+
I4&/24!4# $;3X&/EF8I4&/_$'+*(*21 2 \V i T$;+-F82+-7$'Gf,/+-F$'+-F+7(*I4,/3w1 F24Gg$'+*$'GCFEF8I4&/^R
(*I4GH58,/(*. &/,/7,/F(*$'+-F$'<a77$'1 ,/$;+-1 2*&)(241 21 $EI4&/2!# $'2 i P6!
) i !# $"$'G
,/+-724(*. ^F8,/I4&/$g724+h$;&4I4&/2!# $'2 \L i Z
M 3=b72+-F8,/+-# 3w72+&/24G6. # +-F24G6(*# $;3=F24G6587# +-1 2"1 2G6F83?+-GC77,/24+-$;GQGC$b$;GK. $;3=^+&/L# +-
f&/H2F83?< F8$;(*HF83?F8^1 2_^3=3?,/I4R^1 $'I4$;3='GaGC$'A4# ,/3>1 24Ga3J$'A4&/G A$;+-$'3=^&/$'Ga. 3=g$'d,/F83)724+-1 ,/c
7,/24+-$'Ga1 $.0# + F82%(*# $'3?F2*k



G F83?+-GC77,/24+-$;GF,/$'+-$'+V!# $a77$'1 $'3 XI4&/2!# $'2G)1 $a&/2G(*,/GC(*2 G 2I'BD$'F2G)$'+V$'&'(*,/GC(*2


23J1 $'+ Z
M 23L$=BD$'(*. &/2RGC, # +-^. &/,/77,/4+7F8# ^&/,/e'&/] &/ *T@1 $'GC. # 'GV7F# &/,/e&/] &/
58$'+&/_(*,/GC(*EF3=+ GK77,/+-< $'+-F24+-7$'G&/_GC$;A# +-1 V. &/,/77,/4++-2j1 $'I4$;3=V79F# &/,/e;3w&/
] &/%a%GC, $'&/&/2d%E7F# &/,/e3X&/%] &/% "(*GfF3J1 $V58$;+# +-%F3=^+-GK^797,/+GC,/(*. &/$;<CZ i +
7(*I4,/2R1 $'I4$'3?%7F8# &/,/e;36&/%] &/% hTa%$;+$;& (*,/GC(*2*23J1 $'+724(*2$'+&/%. 3=,/(*$;3=
.0&/,/797`,/4+ Z

G6F3?+-GC797,/2+-$'G61 $;I$;3='+*. 3J27# 3=3?GC$H1 24G(*21 24G1 $bI4&/24!# $;272+ ,/7F8,/d2 G6GC&/2GC,
# +-2%1 $$'&/&/24Ga$'Gw# F82c8792+ ,/79F,/d2%58,Z $ZC. 21 3=fGC$'3>GC2. 23=F1 2%. 23>GC&/2"# +-HF83?+-GC77,/4+
71 Xd$'e<`Z ,$'GCF+E,/+-d2&/# 793?1 2GU(*21 24G>1 $XI4&/2!# $'2L(* &/F8,/. &/$;GCR;$'+-F24+-7$;G &/^GUF83?+-GC7c
7,/2+-$'Gw1 $'I4$'3?/;+jGC,/$;(*. 3J$77$'1 $'3. 3?,/(*$'3J2E^& (*241 2E(*G 3?$;GKF3?,/79F,/d2)Z
)L+E$=BD$'(*.0&/2V. ^3=X$;GKF3J$;A&/QGC$Q1 ,/V^+-F8$'GU7# +-1 2bGK$X1 ,/GC7# F8,/L$'&# GC2L1 $'&(*21 2 \L i
i PQ!
) i (*$=BD243>!# $g$'& (*21 2 \V i Z

Nota: Postgres no detecta puntos muertos "bajar" una transaccin a la espera para
resolver el punto muerto.

Notas
h'"$'G # +-H$;NF$'+-GC,/2+1 $;& &/$'+-A# `B$gM 2GCF8A43J$'GZ
P !) i RSF821 24G>&/2G>1 $'(*^G
i 79$;. F82H.03=Q&/2G>(*241 2G 1 $XI4&/24!# $;2V\LP6P i  \V iw i 6
(*241 24Gg1 $_I4&/24!4# $'21 $VM 2GCF8A43J$'GfT&/GgGK$;+-F8$'+ 79,/Gf h'" 4
8 GC24+724(*. ^F8,/I4&/$'Gg724+
!# $'&/&/2Ga. 3J$'GC$'+-F8$;Ga$;+ 3?7&/$Z
h'
"W# +-7,/2+-HGK&/2E1 $'+-F83J2_1 $F3=+-GC77,/24+ $'GZ

Uso

/& &/# GCF83?F$ \V i &/27*-%24+jf. 3?,/(*3?T-4$'T%FI4&/$


.h:-$'+jA2,/+-A"F2E. $;3=W823=(
W8243J$',/A4+0-4$'T%FI4&/$k

,/+-GC$'3?F8Ga,/+-F82E

BEGIN WORK;
LOCK TABLE pelculas IN SHARE MODE;
SELECT id FROM pelculas
WHERE name = Star Wars: Episodio I - La amenaza fantasma;
- Haz ROLLBACK si el registro no fue devuelto
INSERT INTO comentarios_usuario_pelculas VALUES
(_id_, GUAY! Llevaba tanto tiempo esperndola!);
COMMIT WORK;

2 (*g# +"I4&/2!# $'2 \L i i P6!) i 79&/^d $Q1 $6FI4&/g.03=,/(*3?,/679# + 1 2_dT4GU



:-7$'3)# +-f24.0$'3=^79,/+h1 $I423=3?1 2k
BEGIN WORK;
LOCK TABLE pelculas IN SHARE ROW EXCLUSIVE MODE;
DELETE FROM comentarios_usuario_pelculas WHERE id IN
(SELECT id FROM pelculas WHERE clasificacin < 5);
DELETE FROM pelculas WHERE clasificacin < 5;
COMMIT WORK;

^l

Compatibilidad
SQL92
h2:-T h'" J8a $'+ N 'R)!# $# GC*$'+7(*I4,/2S/ V#/ L ?h . ^3=
$'GC. $'7,/] 736+-,/d$'&/$'GH1 $"72+-7# 3?3J$'+-7,/%$'+F83?+-GC77,/24+-$;GZh2GK2F83J2GbF(*I4,/'+@&/"F$'+-$'(*2GC
d$'3U
=!A. 3?f(*G 1 $'F&/&/$'GZ

MOVE
Nombre
MOVE

# $'d$&/f. 2GC,/79,/+j1 $'&7# 3=GC23

Synopsis
MOVE [ selector ] [ count ]
{ IN | FROM } cursor
FETCH [ RELATIVE ] [ { [ # | ALL | NEXT | PRIOR ] } ] FROM ] cursor

Descripcin

#L.0$'3=(*,/F$&X# GC# 3?,/2(*2d $;3_&/.024GC,/7,/4+1 $'&X7# 3?GK23_# ++- (*$;3J2$'GC. $'7/] 721 $
] &/GZ
#L*W8# +-7,/24+-_792(*2j$'&-724(*^+-1 2j '"R4. $'3J2"GC&/2. 2GC,/79,/2+-E$'& 79# 3?GC243wTj+-2
1 $'d# $'&/d$6] &/GZ
 >=!A O
o . 3?f1 $'F&/&/$'G 1 $GC,/+-FN,/GwTE# GC2Z
3)

Notes

#Lj$'G # +-H$'F8$'+-GC,/+1 $'& &/$'+-A4# A4$gM 2GCF8A43J$'GZ


A oO
. ^3=b# +-_1 $'GC793?,/. 7,/+*1 $b&/2G3JA# (*$;+-F82G6d ^&/,/1 24GZ 3w4;J= oa,?F=. 3w1 $;c
3a4>=!
] +-,/3># +h7# 3?GC243=Z 3U
H!
= zE^ R'oDLBY
B z)A RTFVD 4HcE? oO
. 3?g(Gw,/+-W823=(*^79,/+h7$'3J7Cf1 $
F83?+-GC77,/24+-$;GZ

Usage

P62+-] A# 3?3)T%# GC3># +h7# 3=GC23'k


BEGIN WORK;
DECLARE liahona CURSOR FOR SELECT * FROM films;
-Saltarse las 5 primeras filas:
MOVE FORWARD 5 IN liahona;
MOVE

-Fetch la 6



fila en el cursor liahona:

FETCH 1 IN liahona;
FETCH
code |title |did| date_prod|kind
---+----+--+-------+-------+---P_303|48 Hrs|103|1982-10-22|Action
(1 row)

|len
| 01:37

- cierra el cursor liahona and commit work:


CLOSE liahona;
COMMIT WORK;

Compatibility
SQL92
h2":-ThGC$'+-F$'+-7,/ N %#VZ i +7(*I4,/24R ^L. $;3=(*,/F$f24+-$bF82h4 '] &/GQ1 $
# +-b. 24GC,/7,/4+I4GK2&/# FV1 $;& 7# 3=GC238R(*2d,/$'+-1 2h,/(*. &//7,/F(*$'+-F$b$;& 7# 3=GC23ab# +-V. 2GC,/79,/+
7243?3J$'7CF-Z

NOTIFY
Nombre

+NOTIFY
24F,/W8T Z

$' &/gF241 2GX&/2Gw[W3J2+-$'+-1 GC T%I4^7*-4$'+-1 GC f&/H$;GK7# 7:-f1 $# +-H72+-1 ,/7,/4+

Synopsis
NOTIFY name

Entradas
notifyname

h24F,/] 79H&/H72+-1 ,/7,/4+hHGC$'3)GC$'-&/1  Z

Salidas
NOTIFY

\V7# GC$g1 $3J$'7,/I42_1 $!# $g$'&72(*+-1 2E+-2F8,/W8TE:-HGK,/1 2E$=BD$'7# F8^1 2)Z

^m

Eventos Notify

24Ga$'d$'+-F24G GC24+h3J$'. ^3=F,/1 2Ga&/24GaW83J24+-F$'+-1 GC !# $g$'GCF+"f&/f$;GK7# 7:-^$'& 7(*2ETEGK,


79^1 g. &/,/77,/2+"W83?2+-F$'+-1 3J$'77,/2+-f1 $'. $;+-1 $61 $gGC#. 3J24A43?(*'7,/+ Z

Descripcin

i & 72(*+-1 2hhh ?a$'+-d/L# +$;d $;+-F82h+-2F8,/W8TjV71 H^. &/,/779,4+W3J2+-F8$;+-1!# $b. 3J$'d,/'c
(*$'+-F$E:-%$=B$;7# F1 2 /
. 3?%&/%792+-1 ,/7,/+@+-2F8,/W8T$'GC. $'7] 7E$;+&/
notifyname
I4GC$1 $1 ^F82G $'+h79# 3?GC2)Z
E,/+-W823=(*7,/+.0GC10%& W83J2+-F8$'+-1 . 3=_# +$;d $;+-F82+-24F,/W8T*,/+-7&/# T$E$'& +-2(*I43J$_1 $V&/
724+-1 ,/7,/+%+-2F8,/W8TVTV$'&M 1 $Q&/6+-2F8,/] 77,/4+%1 $'&. 3J27$'GC2bI4*7 -4$'+-1 9Z i G>^GK# +-F2b1 $'&1 ,/GK$;c
-1 23U1 $&/HI4GC$1 $1 ^F8 2Gw$;&41 $'] +-,/3>&/2Gw+-2(*I43J$'Gw1 $g&/G 792+-1 ,/7,/2+-$'GX!# $gGC$'3?+h# GC1 G
$'+"# +-HI4GC$1 $61 F82Ga1 1 gTE!# $gGC,/A+-,/] 7b79^1 g# +--Z
P62(*# +-(*$'+-F$'R$'&+-24(I3J$g1 $# +-H72+-1 ,/7,/4+j+-2F8,/W8T%$;Gw$'&(*,/GC(*2%!4# $f$;&41 $&/A4# +-HF8I4&/
$'+&/I4^GK$1 $1 F82GCRUT$'&w$;d $;+-F82+-2F,/WT$;GK$;+-7,/&/(*$'+-F$GC,/A4+-,/])7 $7(*I4,/1 2'GCF8
F8^I&/^R $'7:-&/$b# +*d ,GKFe2h. 3?Ld $;3X&/2G79^(*I4,/24GC9ZSM $'3J2h1 ,/7:-_^GK27,/7,/4+*+-2j$'G62I4&/,/A1 
. 23Q&/2j724(*+-1 24GfhhaJ
aT  / a Z;M 23Q$?B$;(*. &/24R# +*1 ,/GC$'-^1 243X1 $bI4GC$'G1 $L1 F2G
. 21 3=L# GC3wd3?,/24GX+-24(*I43J$'G61 $H724+-1 ,/79,/+*1 ,/W8$'3J$9+-F8$'G6.03=LGC$'-&/3a1 ,/W$;3J$S+-F$'G6F,/. 24G61 $
7(*I4,/24Ga$'+"# +-H(*,/GC(*HF8^I4&/-Z
hhaJ
a. 3J24d$'$# +h(*21 2EGC,/(*. &/$g1 $6GC$'-&/32E# +h(*$'7+-,/GC(*2_1 $724(*# +-,/77,/+$;+-F83J$
. 3J247$'GC2G5 M P,/+-F8$'3?. 3J279$;GKG724(*(*# +-,/7F,/24+-<. 3=a$'&^792+BD# +-F82b1 $a. 3J27$'GC24G!# $w779$;1 $'+
X&/Q(*,/GK(*6I4GC$w1 $a1 F24GM 24GCF8A43J$'GZ $a. # $;1 $'+V792+-GCF83J# ,/3 (*$'7+-,/GC(*2GU1 $w(*G)^&/F82b+-,/d$'&
# GK^+-1 2%FI4&/Gw$;+&/bI4GC$g1 $f1 F24Ga. 3?H. GC3U1 F24GX^1 ,/7,/24+-&/$;Gw58(*Gw&/&/H1 $f# +(*$;3J2
+-24(*I43J$1 $724+-1 ,/7,/+ < 1 $;GK1 $$'&+-2F8,/] 71 243U& 2_f&/24Gw!# $g$'GCF8;+hf&/f$'GC7# 79:- Z
P6# +-1 2hGC$L# GC%hh ?
a. 3?LGK$;-&/3w&/_27# 3=3J$'+-7,/L1 $L7(*I4,/2G$'+*# +-_FI4&/_$;+*. 3Jc
F8,/7# &/3R # +-*F8;79+-,/7 F,/&w1 $j. 3?2A43=^(*7,/4+$'GE. 24+-$;3_hhaJ
a $;+# +-+-23=(**!# $$'G
1 ,/GC. 3?'1 H. 23U79F# &/,/e^79,/2+-$'Ga1 $g&/HF8^I4&/-Z $g$'GCF8H(*^+-$'3?R&/H+-24F,/] 77,/+$;GX# F24(*^c
F8,/7g7# +-1 2V&/F8I4&/67(*I4,/R'TV$'& .03?2A43=(*;1 23U1 $6&/g^. &/,/779,/+%+-2V. # $'1 $X2&/d ,/1 3=GC$Q1 $
$'&/&/2_1 $W8243?(*f77,/1 $'+-F&Z
hhaJ
a,/+-F8$'3?7F 724+"F3=^+-GK^797,/2+-$'G 1 $Q# +-f(*+-$;3=,/(*. 243?F8^+-F8$Z=M 3?,/(*$'3J2R^GC, GK$
$=BD$'7# F8%# +@hha?
a1 $'+-F3J21 $E# +-"F83?+-GC77,/4+-R&/2*$'d$'+-F2Gb+-24F,/W8T*+-2*GC24+3?$;. 3F,/1 24G
:-GCF8T(*$'+-2G_!# $&/F83?+-GC77,/4+GC$j:-T4:-$;79:-2Z i GCF82$'G_1 $'7# '1 24R1 1 2!# $GC,
# +-F83?+-GC77,/4+GC$*I423?F8+-2G"A# GCF3?/!# $F821 2G"&/2G"792(*+-1 2G%1 $'+-F83J21 $$;&/&/+-2
:-# I4,/$'3?+F8$'+-,/1 2$'W8$'7F82R,/+-7&/# T$;+-1 2*hhaJ
abZ'M $'3J2. # $'1 $_GC$'3Q1 $'GC724+-7$'3?F8^+-F8$_GC, # +-2
$'GCF8"$'GC. $;3=+-1 2*!# $"&/2GL$'d$'+-F24GL+-2F8,/W8TGC$%3?$;. '3?F+@,/+-(*$;1 ,/F8^(*$'+-F8$4Z $'A4# +-1 24R-GC,U# +
I47 -$;+-1 wh&/h$'GC7# 79:-"3J$'7,/I4$_# +-hGK$;-&)+-2F8,/W8T(*,/$;+-F83?Gb$'GCF"$'+@# +-hF83?+-GC77,/4+-R $'&
$'d$'+-F2+-24F,/W8T*+-2*GC$E3J$'. 3F,/3="& W83J24+-F$'+-1 w724+-$;79F1 2: GKFgBD# GKF21 $'GC. # 'Gg1 $E!# $E&/
F83?+-GC77,/4+GC$b:-T4_724(*. &/$;F81 2j58F+-F82hGC,0GC$L$?B$;79# F_724(2GC,0GC$LI423=F<`Z $b+-# $'d24R &/
3=^e'+$;GX!# $HGK,# ++-2F,/WThW8# $'3?H3J$'. 3?F,/1 2E1 $;+-F83J2%1 $f# +-bF83?+-GC77,/4+j!# $H 1 $'GC. # 'GaW8# $
I4243?F102R4GC$'3?/E1 $;GC$'I4&/$H!# $_&/E+-2F8,/] 77,/4+GC$V1 $'GC:-,/7,/$'3?_1 $L&/A4# +-V(*+-$'3?
. $'3J2
$'&UI47 -4$'+-1 +-2. # $'1 $h$'7:-3f(*3J7:-^F83?'GV# ++-24F,/W8T@# +-d $;ej!# $:-jGK,/1 2$' + d ,/1 2
&W83J24+-F$'+-1 9ZKM 243 F+-F2"&/24GX$'d $;+-F82GX+-2F8,/W8ThGC2+GC4&/2h3J$'. ;3?F8,/1 2GQ$'+-F3J$gF83?+-GC77,/24+-$;GZ i &
3J$'GC# &/F81-21 $L'GCF82$'G!# $_&/G. &/,/77,/24+ $'G!# $_# GK^+hha?
a. ^3=VGK$;-&/3X$'+*F8,/$;(*. 2
3J$';&41 $;I4$'3?/;+jF3?F83)1 $(+-F8$;+-$'3>723=FG GC# GaF3=+-GC77,/24+-$;GZ
hhaJ
a@GC$g72(*. 243?Ff792(*2%&/GaGC$'-&/$;O
G )L+-,/L$;+j# +hGC. $'7F2E,/(*. 23?F8+-F$k GC,# +-f(*,/GC(*
724+-1 ,/7,/+$;GXGC$'-&/1 fd ^3=,/G d$'7$'Gw$'+h# +-LGC# 7$'GC,/+3?. ,/1 R'&/24Gw3?$;79$;. F823J$SGw. # $'1 $g!4# $
GC4&/23J$;79,/I4,/$'3?;+# +$'d$'+-F82@+-24F,/W8T. 3?d3?,/GE$?B$;79# 7# ,/2+-$'G"1 $hh ?
afZM 243V$;&/&/2$'G
(*&/,/1 $;1 $'. $'+-1 $'3H1 $'& +- (*$'3J21 $+-2F8,/] 77,/24+-$;G"3J$'7,/I4,/10GZ i +7(*I4,/24R# GC3J$'(*2G
hhaJ
a. 3?j1 $;GK. $;3=F3?6&/^G_^. &/,/79^7C,/24+-$;GE!# $h+-$'7$'GC,/F8+.03?$;GKF3gF$'+-7,/+j&/A424R

x

T# GC3J$'(*2Gf# +2I'BD$'F21 $_I4GC$_1 $_1 F82Gf58F& 724(*2# +-"GC$'7# $'+-7,/<). 3?E(*+-F$'+-$'36# +


3J$'A4,/GKF3J2_1 $6&/2E!# $g:-H27# 3=3?,/1 2E2_7# +-F8G d$'7$'G :-H279# 3?3?,/1 2)Z
a*$;GCF83 '&'(*,/GC(*2HX&/w$'GC7# 7:-X1 $'&'(*,/GC(*2
i G # GK# &'. ^3=w# +LW83J24+ F8$'+-1 !4# $ $'+-d/Xhh ?
+-24(*I43J$f+-2F8,/W8T Z i +$'GC$H7GC2"3J$'7,/I4,/3?H# +$'d$'+-F2"+-24F,/W8ThR9BD# GCF82h,/A4# ^& !# $H&/24GX24F3J24GQW83J2+-c
F8$;+-1 GC a&/X$'GC79# 7:--Z $'. $;+-1 ,/$'+-1 2g1 $a&/X&/4A4,/7X1 $a&/X. &/,/77,/+-RK$'GCF82f. 241 3?w73=3J$93-# +
F83?I4?B2f,/+- F,/&
. 243- $=BD$'(*. &/2R3J$'&/$'T4$'+-1 2g# +-XFI4&/w1 $a# +-XI4^GK$a1 $>1 F24G . 3?w$'+-72+-F83?3
&/(*,/GC(*7F8# &/,/e;7,/4+E!# $6'GC$X(*,/GC(*2_W83J2+-F8$'+-1"7I4;I41 $X$'GC73=,/I4,/3=Z i +%M 24GCFA3J$'G)-Z +T
. 2GKF$'3?,/243J$'G R$'Ga. 2GK,/I4&/$f$;d ,/F3)1 ,/7:-2EF83?I4CBD2E$;NF3?f+-24F,/] 79^+-1 2%GC,$;&4M 1 $;&. 3?27$'GC2_1 $
+-24F,/] 79^79,/+E1 $'&I47 -4$'+-1 58GC# (*,/+-,/GKF3?1 2b$'+_$'&(*$;+-GCCB$X1 $'&$'d$'+-F2H+-2 F8,/W8T<$'GU$'&(*,/GC(*2
!# $L$;& M 1 $;& I47 -4$'+-11 $H# +-2j(*,/GC(*258d&/AL&/L3J$'1 # +-1 +-7,/;<51 ,/GK. 2+-,/I4&/$L$;+&/,/I4. !<`Z
P6# +-1 2VGC 24+h$'&(*,/GC(*2RN$;& $'d$'+-F2E+-2F8,/] 77,/4+j$'G &/f3J$'7# . $'3?'7,/+1 $'& . 3J24.0,/2_F3=^I`B2V1 $
# +-2b(*,/GC(*24R'TL.0# $'1 $wGC$'3 ,/A4+-243?1 2Z?58\. $;GK^3 1 $w&/2b!# $XGC$Q1 , BD2b$'+_$'&.03=3?;W2b.03?$;79$;10$;+-F8$'R
$'GCF82b$;GU# +-F'7+-,/76GC$;A# 3?-Z?M 2GCF8A43J$'GU(*+-F,/$'+-$X&/GU# F24c8+-2F8,/] 77,/24+-$;GUGC$'. 3?1 ;G>1 $w&/G
+-24F,/] 79^79,/2+-$'G6!# $H&/&/$'A4+1 $b2F3?2GQI47 -4$'+-1 GCR1 $f(*+-$'3?b!# $L+-2". # $'1 $'GQ. $'3J1-$'3a# +-
+-24F,/] 79^79,/+1 $fW8# $'3?b. 243a,/A4+-23=^3aF8# G6. 3J2. ,/GX+-2F8,/] 77,/24+-$;GZ 5 ,&/A# ,/$;+$'+-F,/$'+-1 $H'GCF82
!# $g(*$&/2E$'N.0&/,/!# $'<8<

Notas
.0# $'1 $gGC$'3 # +-b71 $'+-Hd&/,/7H724( # ++-2(*I43J$'+-2%$'Gw+-$'7$'GC3?/H# +-b3J$'&/7,/4+h72+
$'name
& +-2(*I3J$1 $&/FI4&/$'+GK[Z ,
GK$$'+-7,/$;3=3?$'+-F3?$j1 24I4&/$'GE724(*,/&/&/GCR)+-,XGC,/!# ,/$;3=
+-$'7$'GC,/F8"# ++-24(*I43J$%GK,/+-F7F8,/7(*name
$;+-F8$%d&/,/1 2R-GC,/+-2!# $%. # 1 $%GK$;37# ^&/!# ,/$'3g71 $;+-%1 $
:-GCF8f^f73=;7F8$;3?$;Ga1 $&/2+-A,/F#)1XZ
F$'+-E!# $_$'+-7$'3?3?3GC$_$'+-F3?$b724(*,/&/&/^G
i +*&/A4# +-Gd $;3=GC,/2+-$'Gg. 3?$;d ,/;Gg1 $VM 24GCFA3J$'GCR
1 2I&/$;G_7# +-1 2@+-2:-I43J$'&/7,/+792++-,/+-Aname
++-2(*I43?$1 $jF8^I&/$',/GKF$'+-F$'R,/+-7&/# GK2GC,
GC,/+-F87F,/79^(*$'+-F8$6$'3?fd ^&/,/1 2E72(*2E+-2(*I43?$4Z i GCF82ET4f+-2%$;Ga+ $'7$'GC3=,/2Z
i +hd $;3=GC,/2+-$'GXM 2GCF8A43J$'GX+-F$'3?,/243J$;GwH&/H-Z +^R^$'&4M 1 $I^*7 -4$'+-13J$'. ;3?F8,/1 2E$'+# +j(*$'+-GCCBD$
+-24F,/W8Tb$'3?wGC,/$'(*. 3J$a$;&M 1 $'&'I47 -4$'+-1_1 $'&^W83J24+-F $'+-1E1 $a# +-2H(*,/GC(*2ZM 23 $'GC2H+-2fGK$w. 21 
1 ,/GCF8,/+-A4# ,/3g&/GH+-2F,/] 77,/ 2+ $'Gf1 $'# +-2*(*,/GC(*21 $E&/GH+-2F,/] 77,/2+-$'GL1 $E24F3J24GH79&/,/$;+-F8$'GH$'+
!# $'&/&/^Gad$'3?GC,/24+-$;GZ

Uso

P62+-] A# 3?HTE$?B$;79# FH# +-fGC$'7# $'+-7,/H&/,/GKF$'+-58$'GC7# 7:-< +-2F8,/W8T458+-24F,/] 797,/+-<01 $'GC1 $
LISTEN virtual;
NOTIFY virtual;
ASYNC NOTIFY de virtual desde el pide de backend

psql

11239 recivido

Compatibilidad
SQL92
h2E:-^TEGC$'+-F$'+-7,/hh ?a$;+  Z

^n

RESET
Nombre

$'GCF# 3=&/24Ga. 3?'(*$;F83J2Ga$;+hF8,/$'(*. 2V1 $$?B$;79# 7,/+"fGC# Gad&/23J$'G . 23U1 $;W$;79F2


.RESET

3?g&/fGC$' GC,/+^79F# &Z

Synopsis
RESET variable

Entradas
variable

a$'] '3?GC$gf=!A. 3?f(*T4243U,/+-W8243?(*7,/4+hGC2I3J$6d 3?,/I4&/$;Ga1 ,/GC. 2+-,/I4&/$'GZ

Salidas
RESET VARIABLE

$'+-GCCBD$f1 $'d# $'&/F82"GC,&/


. # 1 2"GC$'3a3J$'GCF8^# 3=;1 b$',/F82GK^(*$'+-F$LbGC#*d&/243
variable
. 243)1 $'W8$'7F2)Z

Descripcin

!/ 3J$'GCF# 3d3?,/'I4&/$'GLhGC# GLd ^&/243J$'Gb.0243f1 $'W8$;79F2)Z^ $'] '3?GK$"h=!A.03="(*T423?$;G



1 $'F&/&/$'GGK2I43J$wd &/23J$'GU. $;3=(*,/F,/1 2GUTL. 23 1 $'W8$'7F82ZJ!/ $'G)# +-W823=(*Q&/F$'3?+-F8,/dQ. 3?
SET variable = DEFAULT

Notas
!/ $'G # +-H$'F8$'+-GC,/+1 $'& &/$'+-A4# CBD$g1 $M 24GCFA3J$;G

)VF,/&/,/7$=A*^+-1JD .03=g(*+-,/. # &/3)$'&d&/243)1 $&/^Gwd3?,/I4&/$'GZ



Uso

i GCF8I4&/$;79$93

^F8$ FT&/$58$;GKF,/&/2E1 $6W8$'7:-< fGC#d&/23>. 23)1 $'W8$'7F82k

RESET DateStyle;

i GCF8I4&/$;79$93>b$;!2%fGC#d&/243). 23>1 $;W$;79F2k


RESET GEQO;

Compatibilidad
SQL92
h2E$;N,/GCF$g!/ $'+ N ^-Z

REVOKE
Nombre
#REVOKE

GK# ^3=,/2GZ

a$'d279g$'&. 3=,/d,/&/$'A4,/2E1 $g779$;GK2Vf# +h# GC# 3=,/2Rf# +hA3J# . 2E2EfF241 2Ga&/24G

Synopsis
REVOKE privilegio [, ...]
ON objeto [, ...]
FROM { PUBLIC | GROUP ER">gBLE> | nombre_usuario }

Entradas
privilegio

24Ga. 2GK,/I4&/$;GX. 3?,/d ,/&/$;A,/2GaGK2+ k

i i P
M 3?,/d,/&/$'A4,/2_. ^3=677$'1 $'3 F821 G>&/G>72&/# (*+-Gw1 $X# +-fFI4&/2Vd,/GCF8g$;GC. $'7/] 7-Z
i
M 3?,/d,/&/$'A,2%1 $,/+-GC$'3?F8^3U1 ^F82Gw$'+hF241 Ga&/^Gw72&/# (*+-GX1 $6# +-HFI4&/g$;GC. $'7/] 7-Z

^

)VM

\
i
M 3?,/d,/&/$'A,2%. 3?g7F# ^&/,/e3F821 Ga&/G 724&/# (*+-Gw1 $FI4&/-Z

i i i
M 3?,/d,/&/$'A,2%. 3?gI423=3?3)] &/^Gw1 $6# +-HF8I4&/f$;GK. $;7/] 79 Z

O)L i

M 3?,/d,/&/$'A,2%. 3?g1 $'] +-,/3U3J$'A&/^Ga$;+j# +-gF8I4&/f2_d,/GKF-ZC58 $''GC$goFO=c?A!=FHX= <`Z

\V
$'GC7,/+-1 $gF821 2GX&/2Gw. 3?,/d,/&/$'A4,/24GZ
objeto

i &4+-2(*I43J$f1 $# +j24I;BD$'F2%GC24I43J$g$'&4!# $g3J$'d2793)$'&477$'GC2)Z` 24Gw. 24GC,/I4&/$'Gw24I;BD$'F24GwGK2+ k

F8I4&/$;
d ,/GCF
GK$;7# $;+-79,
/+-1 ,/7$

K
K
K
grupo

i &+-24(*I43J$g1 $# +hA43J# . 2E&7# & GC$g3J$'d247+". 3?,/d,/&/$'A4,/24GZ

nombre_usuario

i &+-24(*I43J$H1 $b# +# GC# 3?,/2"&79# ^& GC$b3J$'d27+. 3?,/d,/&/$'A4,/24GZ)LF8,/&/,/7$H&/L. &/I43?L7&/d$


M!)L P. 3?f$;GK. $;7,/] 73)F821 2Gw&/2Gw# GC# 3?,/24GZ

M)V P
a$'GC7,/+-1 $g$'& &/2GX. 3?,/d ,/&/$;A,/258GC<0$'GC. $;79,/] 71 258GK<HF21 24Ga&/24Ga# GC# 3=,/2GZ

Salidas
CHANGE

$;+-GK`B$g1 $;d # $;&/F82VGC,4:-HF$'+-,/1 2_',/F82Z

ERROR

$'+-GCCBD$6!# $QGC$61 $'d# $'&/d$XGK,$'&N2I;B$;F82V+-2L$'GCF81 ,/GK.024+-,/I4&/$Q2_GC,N$'G>,/(*.024GC,/I4&/$63J$'d273


. 3=,/d,/&/$'A4,/2Gw& A43J# . 2%2Eg&/24Gw# GK# 3?,/2GZ

Descripcin

!V0"VE. $'3?(*,/F8$X&793J$'^1 24301 $Q# +-24I;BD$'F2L3?$;d 273 . $;3=(*,/GC2G>GC,/A+-1 24G>+-F$'3?,/243?(*$'+-c



F8$6fF821 2GX&/2Gw# GC# 3?,/24Ga58(*$'1 ,/+-F$M)V P6< 2_f# +h# GK# 3?,/2E2_f# +jA3J# . 2Z



Notas
P62+-GC# &/F$f$'&4724(*+-1 2". GK!4&hNeL.03=g24I4F$'+-$'3 (*^GQ,/+-W8243?(*7,/4+jGC24I43J$f. $;3=(*,/GC2GQ$'+j24I;BD$'c
F82Gw$;N,/GCF$'+-F8$;Gk
Database
= lusitania
+------------+------------------------------+
| Relation
|
Grant/Revoke Permissions
+------------+------------------------------+
| mytable
| {"=rw","miriam=arwR","group todos=rw"}
+------------+------------------------------+
Legend:
uname=arwR - privileges granted to a user
group gname=arwR - privileges granted to a GROUP
=arwR - privileges granted to PUBLIC

|
|

r - SELECT
w - UPDATE/DELETE
a - INSERT
R - RULE
arwR - ALL

Sugerencia: Actualmente, para crear un grupo debe insertar los datos manualmente en
la tabla table pg_group de este modo:
INSERT INTO pg_group VALUES (todos);
CREATE USER miriam IN GROUP todos;

Utilizacin

a$;d 27f$'&. 3?,/d ,/&/$;A,/2_1 $,/+-GC$'3J7,/4+hHF241 2Ga&/24Gw# GK# 3?,/2Gw$'+"&bFI4&/

films

REVOKE INSERT ON films FROM PUBLIC;

a$;d 27fF821 2GX&/2Gw. 3?,/d,/&/$'A4,/24Ga&# GK# ^3=,/2

manuel

$'+h&/Hd,/GCF8

kinds

REVOKE ALL ON kinds FROM manuel;

^

Compatibilidad
SQL92
HGC,/+-F8,/GQ1 $ N ^H. 3?H$'& 72(*+-1 2h!L#"VF,/$'+-$H79^. '7,/1 1 $'GX1 ,/79,/2+-&/$'Gw. 3?
3J$'GC79,/+-1 ,/3U. 3?,/d,/&/$'A4,/24GCR,/+-7&/# GK2E!# $'&/&/2Gw$;+j72&/# (*+-Ga,/+-1 ,/d ,/1 # &/$'Ga$'+hF8I4&/Gk

REVOKE { SELECT |
ON objeto
FROM { PUBLIC
REVOKE { INSERT |
ON objeto
FROM { PUBLIC

DELETE | USAGE | ALL PRIVILEGES } [, ...]


| nombre_usuario [, ...] } { RESTRICT | CASCADE }
UPDATE | REFERENCES } [, ...] [ ( columna [, ...] ) ]
| nombre_usuario [, ...] } { RESTRICT | CASCADE }

$;f'F?^4A. 3?f(*Ga1 $'F&/&/$'G $'+h7(*. 2G ,/+-1 ,/d ,/1 # ^&/$'GZ


REVOKE GRANT OPTION FOR privilegio [, ...]
ON objeto
FROM { PUBLIC | nombre_usuario [, ...] } { RESTRICT | CASCADE }

a$;GK7,/+-1 $bV# +# GC# 3?,/2&/L# F243?,/1 1*. 3?VA43?+-F,/e'3w$'& . 3=,/d,/&/$'A4,/2h$'GC. $'7,/] 71 2"
24F3J24Ga# GK# ^3=,/2GZ` $'GC$'F?^4A. 3?f&/2Gw1 $;F8&/&/$;Ga$;+h79(*.024Ga,/+-1 ,/d,/1 # &/$'GZ
2Gw2I;B$;F82Gw. 2GC,/I4&/$'GXGC2+ k
V
\ i -FI4&/ d,/GKF
P L
\ a\LP i i 72+B# +-F2473?7F$'3J$SG
P \ 724&/$;797,/+
a\L \ F83?GC&/7,/4+

\ 1 2(*,/+-,/2

,# GC$'3?V1 b# +. 3?,/d,/&/$'A4,/2j72+&/_2. 7,/4+ba\L L# GC$'3?LTh# GK$;3=LGC$L&/2h1 LV# GC$'3?R$'+-c
F82+-7$'G6# GC$'3?L. # $;1 $b3J$;d 273 $'GCF$L. 3?,/d,/&/$'A4,/2j$;+7GC71 b# GK^+-1 2j&/L. &/^I3[_7&/d$HPQ\ c
P6\ i Z

, # GC$'3?"1 j# +. 3=,/d,/&/$'A4,/2*724+@ba\V "# GK$;3=hT# GC$'3?hGC$%&/2*1 hh# GC$'3?R $'+-F24+-7$'GLGC,


# GK$;3=V,/+-F8$;+-F8V3?$;d 273w$'GCF8$b. 3?,/d ,/&/$;A,/2R4W8&/&/3?VGC,0:-V$'GC. $'7,/] 791 2j&/_. &/I43E7&/d$L i c
P Z

ROLLBACK
Nombre
ROLLBACK

m

+-F8$'3?3J# (*. F$g&/HF83?+-GC779,/+"$'+h7# 3?GK2

Synopsis
ROLLBACK [ WORK | TRANSACTION ]

Entrada.
h,/+-A4# +--Z

Salida.

ABORT

$;+-GK`B$g1 $;d # $;&/F82VGC,4&/H2. $'3?7,/+"$'Gw$;N,/F24GC-Z

NOTICE: ROLLBACK: no transaction in progress

,+-2_:-T%F3=+ GK77,/2+-$'Gw$;+". 3J24A43J$'GC2_^79F# &/(*$'+-F$Z

Descripcin

h !8 V'"1 $;GC:-79$%&/hF83?+-GC77,/4+7F8# &T. 3J24d279h!# $hF21 Gb&/Gb(*21 ,/] 77,/24+-$;G



243?,/A4,/+-1 G . 23>&/f(*,/GC(*bGC$'+"1 $;GK73?F8^10GZ

Notas

)VF,/&/,/7$QoDLBYBzA. 3?6F8$'3?(*,/+-3 # +-F83?+-GC779,/+%1 $XW823=(*$'N,/F2GK Z ?H!DJF!A$'G># +EGK,/+-c


+-,/(*2E1 $f6h !a
8 L'
" Z

Usage

M 3=7+-7$'&/3)F821 2Gw&/2GX7(*I4,/2Gk
ROLLBACK WORK;

Compatibilidad
SQL92
^GC4&/2$'GC. $'7,/] 7@&/Gj1 24GjW823=(*^GGC,/A4# ,/$'+-F8$;Gk
T
Z $
ROLLBACK WORK
7# ^&/!# ,/$'3)24F3?HW23?(*R^&/f724(. F8,/I4,/&/,/1 ^1$'Ga792(*. &/$'F-ROLLBACK
Z

m^l

SELECT
Nombre
SELECT

a$'7# . $'3?f3J$'A4,/GCF83J2Ga1 $'GC1 $# +-fFI4&/f2Ed,/GCF8 Z

Synopsis
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] )
expression [ AS name ] [, ...]
[ INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
[ FROM table [ alias ] [, ...] ]
[ WHERE condition ]
[ GROUP BY column [, ...] ]
[ HAVING condition [, ...] ]
[ { UNION [ ALL ] | INTERSECT | EXCEPT } select
[ ORDER BY column [ ASC | DESC | USING operator
[ FOR UPDATE [ OF class_name [, ...] ] ]
LIMIT { count | ALL } [ { OFFSET | , } start ]

] ]
]

]
] [, ...] ]

Inputs
expression

i &+-24(*I43J$g1 $# +-H72&/# (*+-H1 $&/HFI4&/g2%# +-f$;N. 3J$;GK,/+ Z

name

i GC. $'7,/] 7X24F3J2b+-24(*I43J$w. 3?X# +-Q792&/# (*+-62b# +-6$;N. 3J$'GC,/+_!4# $Q# F,/&/,/7$X&/Q7&/# GC# &/
\ Z i GCF8$+-2(*I43J$GC$# F,/&/,/e. 3?,/+-79,/. ^&/(*$'+-F8$72(*2$'F,/!# $'F. ^3=&/*72&/# (*+-1 $
GK^&/,/1XZ i & +-2(*I3J$H+-2h. # $'1 $fGC$'3a# F,/&/,/e1 2%$;+&/GQ7&/# GC# &/GQ hi i R b )LM 2
\a "jZ ,/+h$;(*I43JA2R'. # $'1 $GC$'3>3J$'W8$93J$'+-7,/1 2V$'+h7&/# GK# &/^G i UZ

i M \V)
i M

HF8I4&/gGK$g73J$'GK2&/(*$;+-F8$g. 3?f$;GKFfGC$'GC,/4+-RTE$'Gw^# F82(*F8,/7(*$;+-F8$g1 $;GK73?F'1 f^&
] +-^&/,/e3)&/f(*,/GC(*-Z
new_table

,4GK$H# F8,/&/,/e^L&/b7&/# GC# &/ \V i R$'& 3J$;GK# &/F1 2E1 $H&/b72+-GK# &/FVGC$H&/(*7$'+-^3
'$ +E2F83?gFI4&/6792+%$;&N+-24(*I43J$Q,/+-1 ,/71 2)ZJ 6F8I4&/62I'BD$'F,/d2_5
<GK$;3=673J$'1-
# F82(*F,/79^(*$'+-F8$XTV+-2_1 $'I4$'3?Q$'N,/GCF,/3. 3J$'d,/(*$'+-F$Q6&/g# new_table
F,/&/,/e7,/4+E1 $Q$;GCF8$Q792(*+-c
1 2)Z`PQ24+-GC# &/F$f$'& 724(*+-1 
2 / 6?h .03=g(*G ,/+-W23?(*7,/4+ Z
Nota: La declaracin CREATE TABLE AS tambin crear una nueva tabla a partir de la
consulta.

table

i &+-24(*I43J$g1 $# +-HFI4&/g$;N,/GCF$'+-F8$gg&/H!# $gGC$g3J$'] $'3[$g&/f7&/# GC# &/

m

)L+h+-24(*I43J$f&/F$'3?+-F8,/d2E.03=g&/HF8I4&/f.03?$;79$;1 $9+-F8$
Z $g# F8,/&/,/e^H. 3?fI43J$'d,/3
2E$'&/,/(*,/+-^3>(*I4,/A $'1 1-$'Ga$'+h# +-,/24+-$;GX1 $'+-F3J2_1 $6# table
+-H(*,/GK(*HFI4&/-Z

alias

condition

)V+ 6$;N. 3J$'GC,/+EI4224&/$;+-!4# $61 Q724(*2L3J$'GC# &/F8^1 2bd$'3J101 $;3J2H2LW^&/GK2b58F3J# $Q23 W8&/GC$'<`Z
P62+-GK# &/F$g&/H7&/# GC# &/g hi i Z

column

i &+-24(*I43J$g1 $# +-H72&/# (*+-H1 $&/HFI4&/-Z

)V+-f1 $;79&/^3=7,/+"1 $GC$'&/$;797,/+58GC$'&/$;79F<

select

$'79$;. F8# ;+-1 2E&/H7&/# GC# &/

i )Z

Outputs
a$;A,/GCF83J2G
i &-72+B# + F82h724(*.0&/$'F821 $L3J$;A,/GCF83J2GQ58] &/GC<!# $V3J$'GC# &/F8^+1 $L&/V$'GC. $'7,/] 79^79,/+1 $b&/
792+-GC# &/F8-Z
count

f7+-F8,/1 11 $3J$'A4,/GCF83J2G 5] &/GC<-1 $'d# $'&/F82G . 23>&/H724+-GC# &/F-Z

Descripcin

/ -1 $'d# $'&/d$f3J$'A,/GCF3J24GX1 $H# +-b2"(*GwF8^I&/^GZK 2GQ7+-1 ,/1 ;F82G6bGK$;3 GC$'&/$'77,/24+-^1 24G
GC24+V!# $'&/&/2GU3J$'A4,/GCF83J2G!# $w7# (*. &/$'+V&/Q724+-1 ,/7,/+E$'GC. $;79,/] 71 w72+E "i i GC,^GK$w2(*,/F8$
hi i R^GC$g3J$'F243?+-+"F241 2Gw&/2GX3J$;A,/GCF83J2GZ`58P62+-GK# &/F$goau:99 t4|?t4up44=!FX
= Z<
h
/ ?h$'&/,/(*,/+-Q3J$'A4,/GCF83J2G1 # . &/,/71 2G 1 $'&^3?$;GC# &/F1-2)ZJV _5. 3J$;10$'F$'3?(*,/+-1 2< 1 $'d24&/c

d$'3=F821 2GX&/2Gw3J$'A4,/GCF83J2GKR'!# $g7# (*.0&/+h792+h&/H724+-GC# &/F8^R,/+ 79&/# T4$'+-1 2_&/24Gw1 # . &/,/71 24GZ
h / ?hh$'&/,/(*,/+-L&/2G63?$;A,/GCF3?2GQ!# $H7# (*. &/$'+72+F821 GX&/GQ$'. 3J$SGC,/2+-$'G$'GC. $'7,/c
] 791 'GCR(*+-F$'+-,/$'+-1 2jGC24&/($'+-F8$_$;&0. 3=,/($'3Q3J$;A,/GCF83J2h1 $L791 _724+BD# +-F21 $V1 # . &/,/71 2GZ
h2F8$"!# $h+-2GC$". # $;1 $h. 3J$'1-$'7,/3f7# &)GC$'3?$;&). 3?,/(*$'3f3J$'A4,/GKF3J24Q(*$;+-24GL!# $hGK$"# F8,/&/,/c
7$Lhh
8Oa. ^3=LGC$'A4# 3=3>!# $L$;& 3J$'A4,/GKF3J2"$'GC$'1 2"$;G6$'& !4# $b$'W8$'7F,/d ^(*$'+-F8$f.03J$S7$
. 3?,/(*$'3J2)Z`M 23>$?B$;(*. &/2)k
SELECT DISTINCT ON (location) location, time, report
FROM weatherReports
ORDER BY location, time DESC;

3J$'7C# . $'3J$;H$'&3J$;. 243?F8$f1 $F8,/$'(*. 2%5.h$;F8:-$;3 3J$'. 23=F<0(*^GX3J$'7,/$'+-F$g. 3?H71 H&/2477,/+58&/2c


7F8,/2+-<`ZM $;3?2_GC, +-2"GC$b:-# I4,/$;3=H# F,/&/,/e1 2 i .03=bW823=e;3a$'&423?1 $'+1 $'GC79$;+-1 $'+-F$
1 $L&/2Ggd &/23J$'G1 $VW8$'7:-V. 3?_71 _&/277,/4+-RGK$_:-# I4,/$;GK$;+3J$'7`# . $'3?1 2j3?$;. 243?F$'G61 $V# +-
W8$'7:-g,/(*. 3J$'1 $;7,/I&/$6. 3?g71 f&/277,/4+ Z

m^m

X7&/# GC# &/Qb )LMh . $;3=(*,/F$Q^&# GC# 3?,/2H1 ,/d,/1 ,/3 # +-QF8I4&/Q72+-79$;. F8# &/(*$;+-F8$w$'+_A3J# c
. 2GZ`58PQ24+-GC# &/F8$fo u9t4|?tuYpQ'FDX3H!bZ <
b79&/^# GK# &/ \a h $;GK.0$'7,/] 7b# +-_FI4&/b792+A43J# . 24G61 $;3=,/d1 H1 $H&/L$'&/,/(*,/+-7,/+1 $
A3J# . 2GU1 $'&'3J$'GC# &/F1 2H1 $w&/Q7&/# GC# &/X. 3?$;d ,/^(*$'+-F$a$'GC. $'7,/] 791 -Z[58P624+ GK# &/F$Qo u 9t4|?tuY
p L?V
Uz ^VEZ <
b79&/^# GK# &/ i . $'3?(*,/F8$H&-# GC# 3?,/2"$'GC. $'7,/] 79^3aGK,!# ,/$'3J$H&/24G63J$'A4,/GCF83J2GQ23?1 $'+-c
1 2GX1 $f(*+-$'3?b GC7$'+-1 $'+-F$g2"1 $'GC7$'+-1 $;+-F8$f# F8,/&/,/e^+-1 2%&/2GQ2. $'3?1 243J$;Gw1 $f(*21 2"\ PT
p DJFO;J=!FSH!HZ <
i P_Z=58P62+-GC# &/F8$fo u 9t|Jtu<

3 )V .0$'3=(*,/F$g. $'3?(*,/F$g!# $H$'&3J$'GC# &/F1 2_GK$;H# +-L72&/$'77,/4+j1 $g3J$'A4,/GCF83J2G


i &24. $;3=^1 24
1 $'d# $'&/F24G . 23>&/Ga724+-GC# &/FGw,/+-d2&/# 793?1 GZ`58PQ24+-GC# &/F8$go u 9t4|?t4up_<
^Vz D]^*Z <
i &)2. $'3?1 23 i i P &/$%1 j&/2GL3J$'A4,/GKF3J24Gb72(*# +-$'GLh(*I4Gb724+-GC# &/FGZN58P62+-GK# &/F$
oa:u 99t4|?t4upXz ^4A!=!F 
= O
o A6Z <
i &424. $;3=1 243 i P i M &/$b1 L&/2G63J$'A4,/GKF3J24GQ1 $'d# $'&/F82GQ. 23a&/b. 3=,/(*$;3=b72+-GK# &/F_!# $H+-2hGC$
$'+-7# $'+-F3=+"$;+h&/fGC$'A# +-1 H72+-GC# &/F8-ZC58P62+-GC# &/F8$go u 9t|JtuY&
p =!
o = !
A6Z <
"79&/^# GK# &/
)VM \ i . $;3=(*,/F$" i i P 3J$';&/,/e3g# +I&/2!# $'2$'7&/# GK,/d2*1 $%&/2G
3J$'A4,/GKF3J24G GC$'&/$'77,/2+-1 24 GZ

b79&/^# GK# &/V  . $'3?(*,/F$L1 $'d2&/d $;3a& # GC# 3?,/2h# +GC# I472+B# +-F2j1 $b&/2G3J$'A,/GCF3J24GQ. 3J2c
1 # 7,/1 24G . 23>&/H72+-GK# &/F-ZC58P62+-GC# &/F$go u 9t|JtupX4z Bz A6Z <
)VGCF$'11 $'I4$"F$'+-$'3. $'3?(*,/GK21 $%3J$'&/,/e;3 i i P GK2I43J$%# +-jF8^I&/h. 3?h. 241 $;3g&/$'$'3gGC# G
d&/243J$9GZK58PQ24+-GC# &/F$g&/Gw1 $;7&/3=;7,/24+-$;GQhLh !
V#"L <`Z

Clusula WHERE
f724+ 1 ,/79,/+h24.079,/2+-&4 hi i F8,/$;+-$g&/HW8243?(*fA4$'+-$'3?&k
WHERE boolean_expr

. # $'1 $f72+-GK,/GCF,/3a1 $H79# &/!4# ,/$'3 $'. 3J$'GC,/+7# T2%3?$;GK# &/F1 2%GC$'b# +d &/23
Iboolean_expr
4
242&/$'+-2Z i +"(*# 7:-24Gw7GK2GCR$'GCF8f$;N. 3J$;GK,/+hGC$'3= k
expr cond_op expr

2
log_op expr

1 2+-1 $
. # $'1 $HGC$;3># +-2"1 $k R R X R R X 243 V R# +2. $'3?1 23>72+-1 ,/79,/2+-&
724(*2V\Vcond_op
R;\LhR hR' 5 i 2_2. $'3?1 23 1 $;] +-,/1 2V&/279^&/(*$'+-F8$;R'T
. # $;1 $6GC$'3# +-2
1 $k\V R R Z9 V72(*. 3?7,/4+1 $'d# $;&/d $ ) i 5d$'3J1 ;1 log_op
$'3J2< 2 \V i 58W8&/GC2< T
F821 G &/ Ga,/+-GCF8+-7,/GaGC$'3=^+"1 $'GC73=F1-GwGC,&/f$'. 3J$'GC,/+h3?$;GK# &/FgW8&/GC-Z

Clusula GROUP BY
b )VM $'GC. $'7,/] 79# +-HF8I4&/724+hA43?# . 2Ga1 $'3?,/d ^10f1 $6&/f. &/,/77,/+"1 $$'GCFg7&/# GC# c
&/-k
GROUP BY column [, ...]

mx

b )VM 792+-1 $'+-GC3?E$'+# +-%GC2&/%] &/EF21 24Gf!# $'&/&/2Gf3J$;A,/GCF83J2Gf!4# $_792(*. 3?F+*&/24G


( ,/GC(*24G"d&/23J$'G_. 3?&/G%724&/# (*+-^G%A43J# . 1 GZ G_W8# +-7,/2+-$'G"1 $jA3J$'A4;79,/+-RUGK,a&/G
*
:-# I4,/$'3?RGK2+72(*. # F81 GXbF83?d'Gw1 $fF821 GX&/^GX] &/GQ!# $H724+-W823=(*^+71 HA43?# .024RN. 3J24c
1 # 7,/$'+-1 2j# +*d &243XGC$'. 3?1 2h. 23Q71 V# +-21 $V&/2GgA3J# . 2Gf58(*,/$'+-F3?G!# $VGC,/+b )VM
R# +-QW8# +-79,/+E1 $X^A3J$9A^79,/+E.03?21 # 7$a# +_GC2&/2Ld &/23-792(*. # F1 2bXF83?d'G1 $aF821 G&/G
] &/GQGC$'&/$'77,/24+-^1 GC<CZCPQ# +-1 2"b )LM $'GCF8L. 3J$'GC$'+-F$'R+-2"$'GQd&/,/1 2":-7$'3a3J$;WD$'3J$'+-7,/
H724&/# (*+ GX+-2"A43J# . 1 ;GQ$'7$'. F2%1 $'+-F3J2%1 $fW8# +-79,/2+-$'GQ1 $H^A3J$'A4;79,/+-R T4b!# $H:-I43=
(*G 1 $g# +h. 24GC,/I4&/$gd&/23U1 $g3?$;F823=+ 2_. 3?f# +-f72&/# (*+-b+-2EA43J# . 1 -Z

Clusula HAVING
f724+ 1 ,/79,/+h24.079,/2+-& \a hF8,/$;+-$g&/fW8243?(*HA4$'+-$'3?&k
HAVING cond_expr

1 2+-1 $
7# (*. &/$6&/^G (*,GK(*Ga724+-1 ,/79,/2+-$'G !# $&/^G>$'GC. $'7,/] 791 GU. 3? hi c
cond_expr
i Z
\a h $;GK. $;7,/] 7b# +-_FI4&/b792+A43J# .024G61 $;3=,/d1 b1 $H&/V$;&/,/(*,/+-7,/4+1 $bA43J# . 2GKR 1 $'&
3J$'GC# &/F81-2E1 $Q&/f7&/# GC# &/g. 3J$'d,/(*$'+ F8$Q$'GC. $'7,/] 71 'R^!# $6+-2E7# (*. &/$'+"72+
Z
cond_expr
1 $'I4$"3?$;W8$S3?,/3?GK$h. 3J$'7,/GK^(*$'+-F8$"58GK,/+^(*I4,/c
P61 h724&/# (*+-3J$;WD$'3J$'+-7,/1 h$'+
A $;1 10$;GK< j# +-h724&/# (*+ "1 $"A43Jcond_expr
# . 24R0j(*$;+-24GL!# $"&/j3J$;WD$'3J$'+-7,/". 3J$9e7j1 $'+-F83J21 $
# +-fW8# +-79,/+j1 $A43J$'A4'7,/+ Z

Clusula ORDER BY
ORDER BY column [ ASC | DESC ] [, ...]

. # $;1 $GC$'3UF8+-F2E$;& +-24(*I43J$g1 $# +-H72&/# (*+-H792(*2%# +h+- (*$'3J2_243J1 ,/+-&Z



2G+ (*$;3J24G23?1 ,/+-&/$'G6:-7$'+*3J$'W8$93J$'+-7,/_V&/_. 2GK,/7,/+51 $L,/e!4# ,/$;3J1 VE1 $'3J$S7:-<1 $L&/
724&/# (*+--Z i GCF8h79^3=7F$S3?/GCF,/79j:-7$%. 24GC,/I4&/$h1 $'] +-,/3H# +@243J1 $'+@I4GC1 2*$'+# +-h724&/# (*+-
!# $h+-2F8,/$;+-$h# ++-2(*I43?$h1 $'7# ;1 2)Z i GKF2+-# +-79$'GVI4GK2&/# F(*$'+-F$h+-$'7$'GC3?,/2T!# $
GC,/$'(*. 3J$a$'GU. 2GC,/I4&/$Q^GK,/A4+-3 # +V+-2(*I43?$XQ# +-Q792&/# (*+-679^&/79# &/1 X# F,/&/,/e+-1 2H&/Q79&/# GC# &/
\ R'. 23>$?B=Z k
column

SELECT title, date_prod + 1 AS newlen FROM films ORDER BY newlen;

\. 3?F8,/3 1 $X&/6d$'3?GK,/+%-Z +61 $wM 2GCF8A43J$ RS$'GUF(*I4,/'+_. 24GC,/I4&/$623J1 $'+-^38R72+ i R


GC$'A +_$'. 3J$SGC,/2+-$'G>3?I4,/F83?3?,/'GCRS,/+-79&/# T4$'+-1 2b7(*. 2GU!# $X+-2L. ;3J$'7$'+_$;+E$'&3J$'GC# &/F81-2b1 $
i i P Z`M 243U&/2%F8^+-F82R^&/HGC,/A# ,/$'+ F8$g1 $;79&/3?7C,/+j$'Ga&/$'A^&k
SELECT name FROM distributors ORDER BY code;

0
. 79,/2+-&/(*$;+-F8$V# +-V. # $'1 $bA3J$;A;3Q&/V. &/I43?V7&/d$ i P581 $'GC7$'+-1 $;+-F8$'<2h\ P58GCc
7&/# GK# &/ i )Z a
7$'+-1 $'+-F$'<X&/# $'A421 $'& +-2(*I43?$1 $71 792&/# (*+-*$'+&/
, +-2GC$

m^n

$'GC. $'7,/] 7R4GC$_GC# ($_\ P1 $_W823=(*E.03?$;1 $'F$'3?(*,/+-1 4Z^\L&/F8$;3=+-^F8,/d(*$'+-F$'R4. # $;1 $_,/+-1 ,/c
73=GC$H# +*+-24(*I43J$b1 $L2. $'3?1 23a1 $b243J1 $'+$'GC. $'7/] 72)Z9\ P$'G6$'!# ,/d&/$'+-F$VJ) " O O
T i P$;Ga$;!# ,/d ^&/$'+-F8$
 ) "O O[Z

Clusula UNION
table_query UNION [ ALL ] table_query
[ ORDER BY column [ ASC | DESC ] [, ...] ]

1 2+-1 $
$'GC. $'7,/] 79%7# &/!# ,/$;3g1 $'7&/37,/+ i i P GC,/+@&/"7&/# GC# &/ c
Z
i @ )table_query

3 )V . $;3=(*,/F$b!4# $H$;& 3J$'GC# &/F102"GC$'b# +-b724&/$'77,/+1 $f3J$'A4,/GCF83J2GX1 $'d# $'&/c


i &424. $;3=1 24
F82GL. 23H&/^GL792+-GC# &/F8GL,/+-d2&/# 793?1 ^GZ 24GL1 2G i i P GL!# $"3J$'. 3J$9GK$;+-F8+&/2GL1 2GL24. $;c
3=^+-1 24G1 ,/3J$'7F24G1 $b&/
 )V 1 $'I4$'+*. 3J21 # 7,/3w$'& (*,/GK(*2+- (*$'3J21 $V724&/# (*+-GCRT&/G
724&/# (*+-Ga7243?3J$'GC. 2+-1 ,/$'+-F$'Gw1 $;I4$'+"GC$'3)1 $gF8,/. 2Ga1 $1 F2Gw724(*.0F8,/I4&/$;GZ
$bW823=(*b. 3J$;1 $'F8$93?(*,/+-1 R$'&3J$'GC# &/F81 2E1 %
$ )L +-2"724+-F,/$'+-$b3?$;A,/GCF3?2GX1 # .0&/,/79^1 24G
f(*$'+-2Gw!4# $HGC$6$'GC. $'7,/] !4# $g&/H79&/^# GK# &/f\L XZ
,GK$Q# F8,/&/,/e^+"d3=,/2G 24. $;3=^1 243J$9
G )V $'+"&/(*,/GK(*g1 $'7&/3?79,4+ i i P GC$$'d&/ +
1 $g,/e!# ,/$;3?1 HL1 $'3J$'7C:--ZKh2F8$H!# $f&/b. &/I43?H7&/d$g\V +-2"$'GXA&/2I4&/RGK,/$;+-1 2". &/,/71-
GC24&/(*$;+-F8$g& .03U1 $F8^I&/^Ga1 $g3?$;GC# &/F1-2%7F8# &Z

Clusula INTERSECT
table_query INTERSECT table_query
[ ORDER BY column [ ASC | DESC ] [, ...] ]

1 2+-1 $
$'GC. $'7,/] 77# &/!# ,/$;3 $'. 3J$'GC,/4+ i i P GC,/+%&/7&/# GK# &/ i
table_query

UZ
i &24. $;3=^1 243 i i P &/$f1 H&/24GX3?$;A,/GCF3?2Ga792(*# +-$'GQH^(*I4Gw72+-GK# &/FGZ9 2GX1 24G i c
i P G!# $E3?$;. 3J$SGC$'+-F+&/24Gf24. $;3=+ 1 24Gf1 ,/3J$'7CF24Gb1 $V&/%,/+-F8$'3?GC$'77,/4+1 $'I4$'+. 3J21 # 7,/36$'&
(*,/GC(*2%+- (*$'3J2%1 $g72&/# (*+-GCRT"&/Gw72&/# (*+-GX723=3J$;GK. 2+-1 ,/$'+-F$'Gw1 $'I4$'+"GC$'3>1 $F8,/.024Gw1 $
1 F24G 724(*.0F8,/I4&/$'GZ
,aGC$# F,/&/,/e+d ^3=,/2G"2. $'3?1 23?$9G i i P $'+&/(*,/GC(*1 $;7&/3=;7,/4+ i i P GK$
$'d&/ '+@1 $%,/e!# ,/$'3J1 "j1 $'3J$'7:-R j(*$;+-24GL!# $"GC$h# F8,/&/,/7$;+. 3?'+-F$'GC,/Gb. 3?h(241 ,/] 73
$'GCF82Z

Clusula EXCEPT
table_query EXCEPT table_query
[ ORDER BY column [ ASC | DESC ] [, ...] ]

1 2+-1 $
$'GC. $'7,/] 77# &/!# ,/$;3 $'. 3J$'GC,/4+ i i P GC,/+%&/7&/# GK# &/ i

table_query
UZ
i &'24. $;3=^1 243 i P i M &/$w1 Q&/2GU3J$'A4,/GKF3J24G 1 $'d# $'&/F24G. 2430&/6.03=,/(*$;3=X72+-GK# &/F.0$'3J2f+-2b. 23
&/bGK$;A# +-1 -ZK 2G61 2G i i P GQ!# $H3J$'. 3J$9GK$;+-F8+&/24G62. $'3?+-1 2GX1 ,/3?$;79F2GX1 $H&/b,/+-F8$'3?GC$'7c

m

7,/4+V1 $'I4$'+V. 3J21 # 79,/3-$'&^(*,/GC(*2b+- (*$'3J2H1 $w724&/# (*+-GCR9Tb&/G792&/# (*+-GU723=3J$'GC. 2+-1 ,/$'+-F$'G
1 $'I4$'+"GC$'3)1 $gF,/. 2Gw1 $61 F82Ga792(*. F,/I4&/$'GZ
,aGC$# F,/&/,/e+d ^3=,/2G"2. $'3?1 23?$9G i i P $'+&/(*,/GC(*1 $;7&/3=;7,/4+ i i P GK$
$'d&/ '+@1 $%,/e!# ,/$'3J1 "j1 $'3J$'7:-R j(*$;+-24GL!# $"GC$h# F8,/&/,/7$;+. 3?'+-F$'GC,/Gb. 3?h(241 ,/] 73
$'GCF82Z

Clusula LIMIT
LIMIT { count | ALL } [ { OFFSET | , } start ]
OFFSET start

1 2+-1 $
$;GK. $;79,/] 7L$'&(*^N,/(*2h+- (*$'3J2"1 $f3J$'A4,/GCF83J2GQb1 $'d24&/d$'3aT
$'GC. $;79,/c
] 79f$;&+-count
(*$'3J2_1 $g3J$;A,/GCF3?2G fGC&/F8$;3U^+-F8$'Ga1 $$;(*. $'e^3)g1 $'d24&/d$'3)3J$'A4,/GKFstart
3J24GZ

8 &/$V. $'3?(*,/F8$_3J$'7`# .0$'3?3QGC&/2*# +-E. 23?7,/+1 $V&/24Gf3J$'A4,/GKF3J24Gg!# $_GC$_A$;+-$'3?+. 243Q$'&


3J$'GCF82b1 $w&/792+-GC# &/F8-Z ,GC$6$;GK. $;79,/] 7Q# +%+- (*$'3J2L&//(*,/F$'RS+-2VGC$X1 $'d2&/d $;3=+_(*GU3J$'A4,/GCF83J2G
!# $$'GCf7+-F,/1 1XZ , GC$1 f# +"d ^&/243)1 $1 $;GK.0&/e;(*,/$'+-F82R$'GCf7+-F,/1 1j1 $63?$;A,/GCF3J24G GC$'3?
GC&/F8$;10H+-F$'G 1 $g72(*$'+-e3)f1 $;d 2&/d$'3)3?$;A,/GCF3?2GZ

P6# +-1 2hGC$V# F,/&/,/e_  $'G# +-VI# $;+-_,/1 $'V# F8,/&/,/e^3w&/E7&/# GK# &/ i . 3?V72c
&/2473a&/2Gg3?$;A,/GCF3?2GQ1 $;&-3J$'GC# &/F81 2h$;+# +*243J1 $;+ +-,/72)Z $L24F3=VW8243?(*_2 I4F8$;+-1 3=L# +*GC# Ic
724+BD# +-F82,/(*.03?$;1 $'7C,/I4&/$1 $&/2G%3J$'A4,/GCF83J2GE1 $&/72+-GC# & F8
F& d $'e$;GCF8I4# GC79^+-1 2@&/2G
3J$'A4,/GKF3J24Ga1 $'&1 '7,/(*2%^&d,/A4'GC,/(*24IR . $'3J2E1 $'&1 '7,/(*2%&d,/ A'GC,/(*2"$;+!# f23J1 $'+-&
)LGCF8$'1
+-2E72+-247$g$'&23J1 $'+"f(*$;+-24GX!4# $g# F8,/&/,/7$ i )Z

 _$;+M 24GCFA3J$'G-Z ^R $'&-2. F,/(*,/e1 23w1 $L72+-GK# &/FGF82(*_$;+7# $'+-F8V_  7# +-1 2hA4$'c
+-$'3?_# +. &/+*1 $L792+-GC# &/F8RGC-!# $_$'G(*# TW87F,/I&/$b!# $_# GCF8$;124I4F$'+-A4%1 ,/W8$'3J$S+ F8$'Gg. &/c
+-$'GV58I43J7C+-1 21 ,/W8$'3J$S+- F$'G_73=,/F$'3?,/24G_1 $j23J1 $'+-(*,/$;+-F821 $3J$'A4,/GCF83J2GK<w1 $;. $'+-1 ,/$;+-1 21 $
&/24GV
d&/23J$'GL1 1 2GL 8 T 4 i ZM 23H&/2F+-F24R # F,/&/,/e3H1 ,/W8$'3J$S+ F8$'GVd&/23?$;GL. 3?
8Q  i . 3?_GC$'&/$;797,/2+-361 ,/W$;3J$S+-F$'GgGK# I472+B# +-F2 Gf1 $'&03J$'GC# &/F81 2j1 $L# +-%792+-c
GC# &/FR q^}Jv 'v~=p9} 9_}J?|JtuYspv|g{~=v{|?Y|?s8?{4s8?|b(*$;+-24GV!# $"# GCF$'1GC$h^GK$;A# 3?j# +3J$'GC# &/F1 2
. 3J$S1 $'7,/I4&/$H23J1 $'+-+ 1 2%724+ i UZ i GCF82"+-2"$;GQ# +I4# A4 $'Gw# +-b792+-GC$'7# $'+-7,/V,/+-:-$;c
3J$'+-F8$f^& :-$'7:-2h1 $H!# $ N +-2h $'GCFI4&/$'7$f+-,/+-A +*72(*. 3J24(*,/GC2h1 $H$'+-F83J$;A3>&/24G63J$'GC# &/F8^c
1 2G)1 $X# +-672+-GC# &/F8g$;+_# +_243J1 $;+E$'+V. 3?F8,/7# &/3 Q(*$;+-24G>!# $XGC$Q# F,/&/,/7$ i * *.03=

$'GC. $'7,/] 73# +h73?,/F8$;3=,/2_1 $23?1 $'+h$'. &//7,/F8^(*$'+-F8$4Z

Uso

M 3=# +-,/3>&/HFI4&/

films

724+h&/fFI4&/

distributors

SELECT f.title, f.did, d.name, f.date_prod, f.kind


FROM distributors d, films f
WHERE f.did = d.did
title
|did|name
| date_prod|kind
-----------------+--+-----------+-------+------The Third Man
|101|British Lion
|1949-12-23|Drama
The African Queen
|101|British Lion
|1951-08-11|Romantic
Une Femme est une Femme |102|Jean Luc Godard |1961-03-12|Romantic
Vertigo
|103|Paramount
|1958-11-14|Action
Becket
|103|Paramount
|1964-02-03|Drama
48 Hrs
|103|Paramount
|1982-10-22|Action
War and Peace
|104|Mosfilm
|1967-02-12|Drama
West Side Story
|105|United Artists |1961-01-03|Musical
Bananas
|105|United Artists |1971-07-13|Comedy

m^

Yojimbo
|106|Toho
|1961-06-16|Drama
Theres a Girl in my Soup|107|Columbia
|1970-06-11|Comedy
Taxi Driver
|107|Columbia
|1975-05-15|Action
Absence of Malice
|107|Columbia
|1981-11-15|Action
Storia di una donna
|108|Westward
|1970-08-15|Romantic
The King and I
|109|20th Century Fox|1956-08-11|Musical
Das Boot
|110|Bavaria Atelier |1981-11-11|Drama
Bed Knobs and Broomsticks|111|Walt Disney
|
|Musical

M 3=VGC# (*36&/%72&/# (+-


581 # 3=^79,/+-<)1 $_F241 2Gf&24GH] &/(*$;GHTA43J# . 3X&/24Gf3J$'GC# &/F81-24G
GC$'A +h&/f72&/# (*+-
58len
F,/. 24`< k
kind

SELECT kind, SUM(len) AS total FROM films GROUP BY kind;


kind
|total
-------+---Action
| 07:34
Comedy
| 02:58
Drama
| 14:28
Musical
| 06:42
Romantic | 04:38

M 3=VGC# (*3Q&/_792&/# (*+-


1 $VF241 2Gg&/24Gg] &/(*$;GCR ^A3J# . 3w&/2Gf3J$'GC# &/F1 2G6GK$;A +&/E72c
&/# (*+-
T%(*2GKF3?3U&/2len
GXF24F&/$'Ga1 $$;GK2GaA3J# . 2GX!# $gGC$'^+"(*$'+-243J$;GwfH:-23?Gk
kind

SELECT kind, SUM(len) AS total


FROM films
GROUP BY kind
HAVING SUM(len) < INTERVAL 5 hour;
kind
|total
-------+---Comedy
| 02:58
Romantic | 04:38

2GHGC,/A# ,/$'+-F$'GL1 2Gb$=BD$'(*.0&/24Gb(*# $;GKF3=^+@(*+-$;3=Gf,/1 '+-F,/7GH1 $E23J1 $'+-3Q&/24GL3J$'GC# &/F102G


,/+-1 ,/d,/1 # &/$'G 1 $^79# $;3?1 2_724+h&/2Gw72+-F8$;+-,/1 24Gw1 $&/HGC$'A4# +-1 f724&/# (*+-b5
<?k
name

SELECT * FROM distributors ORDER BY name;


SELECT * FROM distributors ORDER BY 2;
did|name
--+----------109|20th Century Fox
110|Bavaria Atelier
101|British Lion
107|Columbia
102|Jean Luc Godard
113|Luso films
104|Mosfilm
103|Paramount
106|Toho
105|United Artists
111|Walt Disney

m

112|Warner Bros.
108|Westward

T
R
i GCF8$b$=BD$'(*. &/2(*# $;GKF3?E74(*224I4F$'+-$'3X&/E# +-,/2+1 $V&/GF8^I&/^G
3J$'GCF83?,/+-A,/$;+-1 2h&/24Gg3J$'GC# &/F81 24G6V!# $'&/&/2Gf!# $L792(*,/$'+-e^+*724+*distributors
&/E&/$;F83?_ $'+*71 actors
LF8I4&/-Z
h2EGC$!4# ,/$'3J$'+h1 # . &/,/71 2GKR'GKN!# $g&/H. &/^I43=79&/^d $6\V GC$2(*,/F8$4Z
-

distributors:
did|name
--+-------108|Westward
111|Walt Disney
112|Warner Bros.
...

actors:
id|name
-+--------1|Woody Allen
2|Warren Beatty
3|Walter Matthau
...

SELECT distributors.name
FROM
distributors
WHERE distributors.name LIKE W%
UNION
SELECT actors.name
FROM
actors
WHERE actors.name LIKE W%
name
--------Walt Disney
Walter Matthau
Warner Bros.
Warren Beatty
Westward
Woody Allen

Compatibilidad
Extensiones
M 24GCFA3J$'GL. $;3=(*,/F$j2(*,/F8,/3b&/7&/# GC# &/4# 1 $"# +-792+-GC# &/F8-Z i GKF73?7CF$'3?/GCF8,/7jW# $
724+-GC$'3?d1 g1 $;&&/$'+-A# `B$g23?,/A,/+-&1 $6792+-GC# &/F8HM 2GKF # $'&k
SELECT distributors.* WHERE name = Westwood;
did|name
--+----------108|Westward

SQL92

m^

Clusula SELECT

+ $'&>$;GKF+-1 3 N R &/. &/I437&/d$j2. 7,/24+-&>[\ $'G_F82F8^&/(*$'+-F8$h. 3J$'GC7,/+-1 ,/I4&/$jT


i
. # $'1 $LGK$;3Q2(*,/F8,/1 %GK,/+W8$'7CF3Q$'&0GC,/A+-,/]791 2)Z i &0^+-&/,/e1 23XGK,/+-F7F8,/721 $VM 24GCFA3J$'Gg3J$'c
!# ,/$'3J$ &/X. 3J$;GK$;+-79,/ 1 $a$'GCFw. &/I43?w7# +-1 2fGC$a3J$'+-2(*I43?+b724&/# (*+-G1 $'I4,/1 2X&/G 793?;79c
F8$;3=GKF,/7Gf1 $_$'F8$'+-GC,/I4,/&/,/1 11 $_F,/. 2Gb!# $E. # $'1 $'+&/&/$;d 36%,/+-F8$;3=. 3J$'F7C,/2+-$'Gb^(*I4,/A# G
$'+"$'GCF$g724+-F$'F82Z

hP +-2_$'Ga. 3?F8$1 $ N ^Z (*. 2472_&/24GwGK2+h 8 T  i Z

Clusula UNION

GK,/+-F,/G1 $ N ^. ^3=7)V
h ak

1 (*,/F$# +-79&/# GC# &/1 ,/7,/24+-&6P i M hc

table_query UNION [ALL]


[CORRESPONDING [BY (column [,...])]]
table_query

f7&/# GC# &/fP a i M

h @+-2E$;GwGC2. 243?F1 f. 23>M 2GKFA43?$;GZ

SELECT INTO
Nombre
SELECT INTO

P63J$';3># +-f+-# $'dHFI4&/ff. ^3=F,/3U1 $6# +-HF8I4&/f2_d,/GKFfT4H$',/GKF$'+-F$Z

Synopsis
SELECT [ ALL | DISTINCT [ ON ( expresin [, ...] ) ] ]
expresin [ AS nombre ] [, ...]
[ INTO [ TEMPORARY | TEMP ] [ TABLE ] nueva_tabla ]
[ FROM tabla [ alias ] [, ...] ]
[ WHERE condicin ]
[ GROUP BY columna [, ...] ]
[ HAVING condicinn [, ...] ]
[ { UNION [ ALL ] | INTERSECT | EXCEPT } select ]
[ ORDER BY columna [ ASC | DESC | USING operador ] [, ...] ]
[ FOR UPDATE [ OF Nombre_de_clase [, ...] ] ]
LIMIT { contador | ALL } [ { OFFSET | , } incio ]

Inputs
2 1 2Gw&/2GX7(*. 2G 1 $g$'+-F3=^1 gGC$g1 $'GC73=,/I4$;+"$'+h1 $'F&/&/$$'+h= = oOA6Z


x

Outputs
2 1 2Gw&/2GX7(*. 2G 1 $gGC&/,/1 fGC$1 $;GK73?,/I4$'+h$'+h1 $'F&/&/$6$;+h= = oAZ


Descripcin

/ -?haPQ3J$'Q# +-g+-# $'dFI4&/6. ^3=F,/3 1 $'&N3J$;GK# &/F102L1 $Q# +-!4# $'3=TNZ

. ,/79^(*$'+-c
F8$;R $'GCF8j!# $'3?T3?$;79# . $;3=h&/2G_1 ^F82GV1 $h# +-FI4&/j$;N,/GCF$'+-F8$;R . $'3J2GC$j. $'3?(*,/F$h7# &/!# ,/$'3
!# $'3?T%1 $ XZ
Nota: CREATE TABLE AS es funcionalmente equivalente al comando SELECT INTO.

SET
Nombre
SET

, BDH. 3?(*$;F83J2Ga1 $6F8,/$;(*. 2E1 $g$?B$;79# 7,/+j.03=&/HGC$'GC,/4+ Z

Synopsis
SET variable { TO | = } { value | DEFAULT }
SET TIME ZONE { timezone | LOCAL | DEFAULT }
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }

Inputs (Valores de entrada)


variable

M ^3=(*$;F83J2VA&/2A4&!# $gGC$g!# ,/$'3J$]NBD3=Z

value

"# $'d2%d ^&/243 1 $'&. 3?(*$'F3J2)Z $g. # $'1 $g# F,/&/,/e3U$'&4d &/23
. 3?H$'GC. $'7,/] 79^3
DEFAULT
!# $gGC$1 $'d# $'&/d$$'&. ^3=(*$;F83[2_fGC#d &/23U1 $1 $'W8$'7F2)Z

G d3=,/^I4&/$SGa. 24GC,/I4&/$'GwT%&/2Gwd&/23J$'G . $'3?(*,/F8,/1 24GaGK2+ k

x^l


P6 8i i hP h h\
i

 &/H7241 ,/] 77,/4+h. ^3=79&/,/$;+-F8$'Ga(*# &/FcI4T4F8$4ZC 24Ga. 3?(*$'F3J24G>GC2+ k


, BDH
value

Z` H721 ,/] 77,/+h$'GC. $'7,/] c


, BDL&/H721 ,/] 797,/+h1 $g7&/,/$'+-F8$f(*# &/F,/c8I4TF$g-k
71 1 $'I4$$;GKF3)GC24. 23?F81 g. 243U$'&GC$'3?d ,/1 23=Z value

)V  i GC$a# F243?,/eH1 # 3?+-F$a$'&^. GC2


i GKFX2. 79,/+_GK2&/2b$'G# F,/&/,/eI4&/$aGC,^$'&^GK2. 23=F$
1 $724+-] A4# 3=7,/+h$'+h&/H724+-GCF83J# 77,/4+j1 $M 2GCF8A43J$'GZ

F8$ F T4&/$
, BD_$'&4$'GCF8,/&/2h1 $f3J$'. 3J$9GC$'+-F79,/+1 $fW8$'7:- :-23=-ZK\LW$;7F8H&W23?(*F82"1 $HGC&/,/1 RNTh$;+
&/A# +-2Ga79GC2Gw.0# $;1 $W8$'7F'3Uf&/f,/+-F$'3?. 3J$'F8^79,/+h1 $&/f$;+-F83?1 -Z
N
# F,/&/,/eHW8$'7:-G T%:-23?Gw1 $6$'GCF8,/&/2 N ^'-Z

# F,/&/,/eHW8$'7:-G T%:-23?Gw1 $6$'GCF8,/&/2 3?7&/$ N +-A43J$'GZ
M 2GCF8A43J$'G
# F,/&/,/eH$'& W823=(*^F82_F83?1 ,/7,/24+-^&41 $M 24GCFA3J$'GZ
i # 3J24. $;'+
# F,/&/,/eH1 1 (*( TT4TT%. 3?g&/H3J$'. 3[$;GC$'+-F8^79,/+h+-# (*'3?,/79H1 $&/G W8$'7:-GZ
h24+ i
# 3J2. $'^+
# F,/&/,/eH(*( 1 1 TT4TT%. 3?g&/H3J$'. 3[$;GC$'+-F8^79,/+h+-# (*'3?,/79H1 $&/G W8$'7:-GZ
b$'3?(*+
# F,/&/,/eH1 1XZ (*(Z TT4TTE. 3?g&/H3J$'. 3$'GC$'+-F8^79,/+h+-# (*'3?,/7f1 $g&/G W8$'7:-GZ

,/A4# &!# $gO"24+ i # 3J2. $'+-O

i \J)V
3J$;79# . $;3=&/24Gwd ^&/243J$9Gw1 $g1 $'W8$'7CF2%58O) R M 2GCF8A43J$'GCO<

f,/+-,/7,/&/,/e7,/+"1 $'&W8243?(*F2E1 $6&/fW8$'7:-fGC$g. # $'1 $:-^79$;3'k


, BD+-1 2%&/gd ^3=,/I4&/$61 $$'+-F243?+-2%M \ i  i Z ,M \ i  i GC$]NBH$;+j$;&4^(*I4,/$'+-F8$61 $g# +-f. &/,/77
GC$g ]NB^+j&/^GaW8$'7:-Gaf&/f72+-d $;+-7,/4+
Z`hF$'GC$
i B$;79# F+-1 2_. 24GCF(*GCF8$'Ga# F8,/&/,/e^+-1 2E &/g24. 7,/+
-o -e
Europea
P6(*I4,/+-1 2_&/G d3=,/^I&/$;Ga$;+
Z
src/backend/utils/init/globals.c
G d ^3=,/I4&/$9Ga1 $
!# $gGC$g. # $'1 $;+"79^(*I,/^3UGC2+ k
globals.c

I4242& i # 3J2 F8$;G 8W &/GC$ F3J# $


,/+-F F8$ F T&/$ ) i N \ i

x

i ^M V b i

\ i

i N

\ i

i  i

\Hh

i i
i hP h

 &/H7241 ,/] 77,/4+h(*# &/F,/c8IT4F$g. 3?g$'&GC$'3?d,/1 243=Z


, BDH
value

, BDH&/H7921 ,/] 77,/4+h(*# &/F,/cI4T4$g. 3?g$;&4GC$'3?d,/1 23`Z

i KG Ff2. 7,/4+jGC4&/2%$;GCF8H1 ,/GC. 2+-,/I4&/$HGC,4GC$g:-I4,/&/,/F8_$'&4GK2. 23=F$


. GC2_1 $g72+-] A# 3?7,/4+h1 $6&/H792+-GCF83J# 77,/4+j1 $M 2GKFA3J$;GZ

)V

0 i 1 # 3=^+-F8$$;&

i! i
24G)d&/23J$'G . 24GC,/I4&/$'G). 3=aF8,/(*$;e24+-$w1 $;. $'+-1 $'+L1 $wGC#EGK,/GCF$'(*Q24. $;3=^F8,/d2)Z[M 23 $=BD$'(*c
. &/24R^$;+h ,/+-# # GK3 &/,/I e2+ $',/+-W82E724+-F,/$'+-$g&/gI^GK$61 $g1 F24G 1 $6e24+-^Gw:-23=^3=,/GZ
\V!# NF8,/$'+-$&/A# +-2GXd&/23J$'G d ^&/,/1 24G . 3?fe2+-G :-23=3?,/Gk
OM ^M O

GC,/F# H&/He24+-g:-243?3?,/f1 $PQ&/,/W8243?+-,/-Z


OM 243?F# A4&/O
GC,/F H&/He24+-g:-243?3?,/f1 $M 23=F# A^&Z
O i # 3J24.0$ 24($'O
GC,/F H&/He24+-g:-243?3?,/f1 $ F8&/,/ Z
i \J)V
]NBDH&/He2+-f:-243?3?,/fHGC#d &/23)&/247&ZC58$'& d&/23U1 $g&/fd3=,/^I4&/$61 $g$'+ F823=+-2 ! <`Z

0
, GC$V$;GK.0$'7,/] 7E# +-Ee^24+-%:-23=^3=,/V,/+-d ^&/,/1 R4GC$'3?E]NB1 EE
5$;+*&/%(*T4243?/V1 $
GK,/GCF$'(*Ga$'+h7# ^&/!# ,/$'3)7GK2<`Z
_GC$'A4# +-1 %GC,/GKF,/Gg(*2GCF83?1 E(Gf3?3?,/I4R. $;3=(*,/F$V]NB^36&/Ee2+-E:-23?3=,/_792+# +-
GK,/+-F,/GQGC,/(*,/&/3aJ
 / a \
ahh1 $ 4Z9 b. ^&/I43=H7&/d$f P6\V$'GXGK&/2
# +EW8243?(*F2H&/F$'3?+-F8,/d2H i 4
\ )L . 3?X(*+-F8$;+-$'3 &/Q724(*.0F8,/I4,/&/,/1 ^1h724+ N ^Z

,&/d3?,/I4&/$X1 $Q$;+-F823?+-2VM !
GK$X]NB$'+%$;&N(*I4,/$'+-F$Q1 $Q&/6. &/,/77,/+%1 $X# +E79&/,/$;+-c
F8$E I4GC1 2$;+&/,/I4. !58$'+@$;&^(*I,/$;+-F8$%1 $'& W83J24+-F$'+-1 <8R&/,/I4. !] BD3?"# F82(*F,/79^(*$'+-F8$
!
i i ^& d ^&/243U1 $M !
1 # 3?+-F8$6$'&3?3=^+-!# $1 $&/H72+-$',/4+ Z
a\L \VP N \ i i
, BDH$'&+-,/d$'&1 $,/GC&/(*,/$;+-F82%.03=&/fF83?+-GC77,/4+h7F# &Z
i \

P
8 i

^Gg72+-GK# &/FGH1 $_&/EF83?+-GC77,/4+7F# & &/$'$'+GC4&/2


] &/ GgGC$'A4# 3=^1 'Gf572(*(*,/F8c
F$'1 <6+-F8$;G%1 $$'(*.0$'e3V# +-*72+-GK# &/F-Z i \
P
$;G%$'&wd ^&/243V1 $
8 i

1 $'W8$'7CF2)Z
Nota: El estandar SQL92 requiere que se fije el valor de aislamiento de defecto a
SERIALIZABLE.

x^m

i \L  \V- i
G>724+-GC# &/F8^Ga 1 $6&/gF3?+-GC779,/+%&/&/$'+"GC&/2_] &/f^GK$;A# 3?10^Ga^+-F8$'G>1 $Q&/g. 3?,/(*$'3?
,/+-GCF3J# 77,/+
_5 / 
JJ#
/ 0
h ac JL hwac J4 a'
]h!
aa"<
!4# $gGK$6$=BD$'7# F8$g$'+h$;GKFfF3=+-GC77,/4+>Z
 TbF(*I4,/'+Vd3=,/2GU. 3?;(*$'F3?2GU,/+-F$'3?+-24GU2b1 $X2. F,/(*,/e7,/4+_!# $XGK$X. # $'1 $'+V$'GC. $'7,/] 73
724+h$'& 72(*+-1 20/ gk
a\L

M\V i P V

, BDH&/H$'GCF8,/(*7,/+1 $'&24. F,/(*,/e1 23U1 $'&724GCF8$f1 $g# +-H.0A,/+-H1 $1 ,/GK72_&/$'/1 g+-2%GC$'c
79# $;+-79,/^&/(*$'+-F8$4Z i GK2LGC$X(*,/1 $Q72(*2L# +E(* &/F8,/. &/2L1 $;&724GCF$Q1 $X# +-6&/$'7F8# 3?1 $w. ^A,/+-
GK$;79# $;+-79,/^&Z
float8

, BDf$'&792GCF8$61 $Q# +"77$'GC2L&/$'F23=,/2Lg# +".0A,/+-&Nd&/23).0# +-F82 2F8+-F$$;GK. $;c


7,/] 71 2Z

P6M)V )bM i P V
, BDV&/b$'GCF8,/(*^79,/+!4# $b:-3?b$'&424.0F8,/(*,/e1 243a1 $;&72GKF$H1 $f. 3J247$'GC3U79^1 HF8# . &/L1 # c
3=+-F$# +-72+-GC# &/F-Z i GCF82GC$(*,/1 $792(*2# +-W83?77C,/+1 $'&w792GCF8$1 $# +-&/$;79F# 3?
GK$;79# $;+-79,/^& 1 $# +-H. A4,/+--Z
, B*$'&a724GCF$1 $. 3?27$'GC2@1 $PQM!)
$;GK.0$'7,/] 71 2Z

float8

. 23_F8# . &/&ad&/243L1 $1 $. # +-F82 2F8+-F$

P6M)V i )LM i P _

, BDH&/H$'GCF8,/(*7,/+!4# $H: 3=g$'&24. F,/(*,/e1 23>GC2I43J$g$'&724GCF8$f1 $6. 3J247$'GC3)71 fF# . &/


1 $'&0/+-1 ,/79$_1 # 3?+-F$V$'& . 3J27$'GC1 2j1 $_# +I4^3=3?,/1 2j1 $'& /+-1 ,/7$_58,/+-1 $'%GC7+-<`Z $V(,/1 $
792(*2E# +-HW83?77C,/+1 $;& 792GCF8$g1 $# +-g&/$'7F8# 3?fGC$'7# $'+-7,/&1 $. A4,/+--Z
float8

, BD$'&>72GCF8$"1 $jP6M) 1 $h.03?27$'GC1-2. 23bF# . &/1 $h/+-1 ,/79$h&Ud&/23H1 $h. # +-F2


4
2 F+-F$g$'GC. $'7,/] 79^1 2)Z

P6M)V M i \ aP _
, BL&/b$'GCF8,/(*7,/+!# $H:-3?V$;&2. F8,/(,/e1 23a1 $'& 72GCF8$H1 $H. 3J247$'GC;3a79^1 b24. $;3=1 23
$'+"# +-f7&/# GC# &/f hi i Z i GCF82VGC$(*,/1 $6792(*2E# +-gW3?77,/4+"1 $;& 724GCF8$61 $# +"77$'GC2
GK$;79# $;+-79,/^& f# +-H. A4,/+--Z
, BDf&/$672GCF8$g1 $QP6M).03=6. 3J279$;GK^3)71 62. $'3?1 23)^& d ^&/2431 $.0# +-F2 2F8+-F$
$;GK.0$'7,/] 71 2Z

float8

xx

i 4i P i ;P6\LP hi ai


, BL&/V$;GCF8,/(*7,/+!# $H:-3?V$'&24.0F8,/(*,/e1 243aGC2I43?$f$;& F8^(*-2"$'W8$'7F,/d 2"1 $H&/L79^79:-
$'+1 ,/GC7925$;Gf1 $;79,/3R&/%. 23J79,/+1 $_&/"77:-V$'+1 ,/GC7921 $'&-4$'3=+-$;& !# $EGK$;3=%# F,/&/,/e1 
. 243&/2G ] 7:-$'3J2G>1 $61 ^F82G>1 $6M 2GCF8A43J$'GC<CZ i GCF82VGK$Q(*,/1 $Q$'+". A4,/+-G>1 $Q1 ,/GK72R'+-23=(*^&/c
(*$'+-F8$$'+". ,/$'e^Ga1 $6]
5gI)Z
float8

, BDf$'&F8(*^-2_$'GCF,/(*1 2L1 $6&/77:-6$'+E$'& d&/2431 $Q. # +-F82 2F+-F8$6$'GC. $'7,/] 79c


1 2)Z

i h\L i i V P6\H
I4,/&/,/FH2",/+-:-I4,/&/,/FL$;&# GC2%. 23 $'&4. &/+-,/] 71 23 1 $gF,/. 2GQ1 $f. &/+-$'Gw1 $gI43?3=,/1 2_GC$'c
79# $;+-79,/^&Z=58h2_$;G>. 24GC,/I4&/$gGC# . 3?,/(*,/3U72(*. &/$'F(*$'+-F$&/2GaI43?3?,/1 2G GC$;79# $'+ 79,/&/$;GCR^. $'3J2
1 $'GC7F8,/d;+-1 2$;GKFEd3?,/I4&/$bGC$V1 ,/GK# 1 $L&0. &/^+-,/] 71 23w1 $L# F,/&/,/e3w# +-21 $L$'&/&/2GgGK,
1 ,/GK.024+-$g1 $624F3J2E(*'F21 2E# F,/&/,/eI4&/$'<`Z

I4,/&/,/F8H$'& # GC2%1 $6I43=3?,/1 2G GK$;79# $;+-79,/^&/$'Gw58d&/23U1 $1 $'W8$'7F24<`Z
4
+-:-I4,/&/,/Fb$;&# GK2_1 $I43?3=,/1 24GaGC$'7# $;+-7,/&/$'GZ
i h\L i i P6\V

I4,/&/,/FL2",/+-:-I4,/&/,/F8L$'&# GC2". 23a$'&. &/+-,/] 79^1 243>1 $bF,/. 2GQ1 $f. &/+-$;GQ1 $fI43=3?,/1 2%1 $
/+-1 ,/7$'GZ

I4,/&/,/F8H$'& # GC2%1 $6I43=3?,/1 2G 1 $/+-1 ,/79$;Gw58d&/23U1 $61 $'W8$'7F82<`Z
4
+-:-I4,/&/,/Fb$;&# GK2_1 $I43?3=,/1 24Ga1 $+-1 ,/79$;GZ
i h\L i P6\V

I4,/&/,/FE2,/+-:-^I,/&/,F8E$'&-# GC2j. 23Q$'&0.0&/+-,/] 791 243w1 $bF8,/. 2GfF,/. 2G1 $L. &/+-$;Gg.0243XI4c
3=3?,/1 2 Z


I4,/&/,/F8H$'& # GC2%1 $6I43=3?,/1 2G
4

5d&/23)1 $1 $'W8$;79F24<`Z

+-:-I4,/&/,/Fb$;&# GK2_1 $I43?3=,/1 24G

i h\L i
I4,/&/,/F2,/+-:-^I,/&/,F8$'&U# GC2. 23b$'&>.0&/+-,/] 791 243f. GC2G_1 $j23?1 $;+-7C,/+$'N.0&//7,/F8-Z
5"2H$'GU. 2GC,/I4&/$QGC# . 3?,/(*,/3 . 23 792(*. &/$;F82b&/GU23J1 $'+-7,/2+-$'G)$;N. &/,F8,/FGCR;. $'3J2H]NBD+-1 2b$'+

x^n

4
$;GKFfd3?,/'I4&/$g1 ,/GC# 1 $Q& . &/+-,/] 71 23U1 $# GC3U# +-2_79# ^+-1 2_F,/$'+-$g2F83J2V(*'F241 2
# F8,/&/,/eI4&/$4Z <

I4,/&/,/F8H$'& # GC2%1 $6243J1 $;+-7,/24+-$'G 58d&/23U1 $g1 $'W8$'7CF24<`Z
4
+-:-I4,/&/,/Fb$;&# GK2_1 $23J1 $'+-7,/2+-$'GZ
i h\L i ^ i V M
I4,/&/,/Ff2_,/+-:-^I,/&/,F8f$'&# GK2_. 23)$;& . &/+-,/] 79^1 2431 $Q. &/+-$'G 1 $BD24,/+h1 $QI&/# 7&/$^+-,/1 c
1 2)Z95"2$;Gg. 2GC,/I4&/$VGC# . 3=,/(*$;3Q.0243X724(*. &/$;F82j&/GUB2,/+-Gg1 $LI4# 7&/$V+-,/1 ^1 24R . $'3J2h] BD3
$'+  $'GCF8Vd ^3=,/I4&/$H1 ,/GC# 1 $b&0. &/+-,/] 71 23w1 $L# F,/&/,/e3w# +-21 $b$'&/&/2GgGC, 1 ,/GC. 2+-$
1 $2F83J2E(*;F821 2<CZ

I4,/&/,/F8H$'& # GC2%1 $)B2,/+-GX1 $I4# 79&/$g^+-,/1 1 2V58d &/23)1 $1 $;W$;79F2<CZ
4
+-GC:-I4,/&/,/F8H$;&4# GC2E1 $>B2,/+-GX1 $6I4# 79&/$g^+-,/1 1 2Z

i h\L i i i $
I4,/&/,/F8f2_,/+-:-I4,/&/,/F8b$'&# GC2E.0243U$'&. &/+-,/] 79^1 243U1 $. &/^+-$'Gw1 $gF8,/. 2_$'+-&/7$,/+-F$'3J7c
&/1 2 5(*$;3JA$=BD2,/+-<`Z

I4,/&/,/F8H$'& # GC2%1 $6$'+-&/7$'G ,/+-F$'3J79^&/1 2Ga58d&/23U1 $61 $'W8$'7F24<`Z
4
+-:-I4,/&/,/Fb$;&# GK2_1 $$'+-&/^79$;Gw,/+-F$'3J7&/'1 24GZ
i h\L i \ $
I4,/&/,/F82@,/+-:-I4,/&/,/F$'& # GK2. 23b$'& . &/^+-,/] 71 23H1 $j. &/+-$;G_1 $F8,/. 2$'+-&/7$j:-GC:
5:-^GK:BD2,/+-<`Z

I4,/&/,/F8H$'& # GC2%1 $6$'+-&/7$'G :-GC:h58d ^&/243)1 $g1 $'W8$;7CF82<`Z
4
+-:-I4,/&/,/Fb$;&# GK2_1 $$'+-&/^79$;Gw:-GC: Z
i V
, BDH$'&. 23J79$;+-F8CBD$1 $6# GK2E1 $'& &/A4243?,/F(*2%A$;+-'3?,/792V1 $'&2. F,/(*,/e1 23=Z

I4,/&/,/F8j$'&U&/A423=,/F(*2A4$'+-;3=,/721 $'&U2. F,/(*,/e1 23f. 3=h,/+-GCF83J# 77,/24+-$;GE72+
FI4&/G 2E(*^GZ`5 i GCF$$'GaF8^(*I,/;+h$'&d ^&/243)1 $1 $;W$;79F2 i \J)V <CZ

x

2(*h# +3JA4# (*$;+-F82*$;+-F8$'3J2.03=":-I4,/&/,/F3$;&)&/A4243?,/F(*2A4$'+-;3=,/72*. 3?",/+-GCc


F3J# 797,/2+-$'Ga792+
2E(*^GwFI4&/G $'+h&/f724+-GC# &/F-Z
#

4
+-:-I4,/&/,/Fb$;&&/A23?,/F8(*2_A$'+ '3=,/72_1 $'&24.0F8,/(*,/e1 243=Z

$;Q$'&N7. F8# &/2LGC24I43J$X i _ 1 $X&/gb# g1 $'&M 3?2A43=^(*1 243 . 3=62I4F8$'+-$;3(*G>,/+-W8243Jc


(*7,/4+hGC24I43J$&/g24. F,/(*,/e7,/+1 $6&/H792+-GC# &/F8-Z
,&/Hd3?,/'I4&/$f1 $$;+-F823?+-2"M b i V GC$g]NBDL$;+h$'&(*I4,/$'+-F$g1 $g# GC# 3=,/2E1 $# +j79&/,/$;+-c
F8$jI4GC1 2$;+&/,/I4.0!R &/,/I4. !# F24(*F,/7(*$'+-F$j]NB^3= i V &>d&/243H1 $jM b i V
1 # 3=+ F8$$;& 3=3?+-!# $61 $&/H724+-$;N,/+ Z
NV

?_4?s Lt4?}?% DVq^sYV ?}>5 . F8,/(*,e1 23 1 $H&/LPQ24+-GC# &/F , B^1 2". 243aPQ&/d$'< &/&/$;d b&
. &/+-,/] 79^1 243)1 $g&/H72+-GK# &/FHH724+-d$'3?F8,/3U!# $'&/&/^Gw72+-GK# &/FGX7# T4Gw7&/# GC# &/G hi c
i ,/+-7&/# T4+(*# 7:-G 7&/# GC# &/G @TE\V
58F8^&/$'G 792(*2E hi i 58 g\V
I ^<
Z i GCF8$($'F821 2V. # $'1 $QGK$;3U(*
G 3?c
58 \V
I <UZZZ <$;+"# +-f724+-GC# &/F8

 )V
. &/$'(*$;+-F87,/+%1 $X1 $'W8$'7F24RS. $'3J2b+-2L+-$'7$'GC3?,/(*$'+-F$Q.03?21 # 7$Q$;N^79F'c
. ,/1 2b!# $6&/,/(*
(*$'+-F8$L$'&-(*,/GC(*23J$;GK# &/F1 2R. # $'GCF2!# J
$ )V ,/(*. &//F,/F8($'+-F8$L-1 $b# +-E7&/# c
GK# &/ i i P
hP . ^3=h$'&/,/(*,/+-3H&/GV] &/GV3J$'GC# &/F8+-F$'GL!# $jGC$'^+ ,/1 $'+-F,/7GZ
5 NV GK$Q# F8,/&/,/e 6:-I4,/F# &/(*$'+-F$67# +-1 2LGC$6F3=^I?BDg724+%. 3?21 # 7F82GU72(*2 ,/73J2 24W8F
\V77$'GCGKR'!# $gF8,/$;+-1 $'+hfA4$'+-$'3?3)&/G 792+-GC# &/F8Gw1 $$'GCFfW8243?(*-Z

I4,/&/,/F8H$'GCFf24.0F8,/(*,/e^79,/+ Z
4
+-:-I4,/&/,/Fb$;GCF8H2. F8,/(*,/e^79,/+h58d ^&/243)1 $1 $;W8$'7F82<`Z
i \J)V
i !# ,/d ^&/$'+-F8$gg$'GC. $'7,/] 79^3h/ W"4/!1h#h4Z

& &/A423=,/F(*2 5 NV GK$%# F8,/&/,/e^I4j. 23gGC$'3gI4GC2&/# F8(*$;+-F8$"$'GC$'+-7,/&). ^3="724+-GC# &/FG


i )
792+(*# 7:-G67&/# GC# &/G Tj\V RN. $'3J2h$'+M 2GCF8A43J$'G6-Z bT.024GCF8$;3=,/23J$'GCR $;&-. &/+-,/] c
79^1 243)$'GCF8^+-1 3(*+-,/. # &/H$'GCFG 792 +-GC# &/F8Gw7243?3J$'7F8;(*$'+-F$Z

Outputs

SET VARIABLE

$;+-GK`B$g1 $;d # $;&/F82VGC,4GC$g]NBDH$'&d ^&/243)724+h',/F82Z

WARN: Bad value for variable (value)

,$'& 72(*+-1 2%W8&/&/&] BD3U$'& d&/23>$'GC. $'7,/] 71 2Z

x^

Descripcin

/ (*21 ,/] 793?g&24G . 3?'(*$;F83J2G>1 $672+-] A4# 3?7,/4+". 3?6&/d3?,/I4&/$X1 # 3=^+-F8$X# +-gGC$'GC,/4+ Z
2GHd&/243J$;Gf$'+d,/A23GC$E. # $'1 $;+2I4F8$;+-$'3# F,/&/,/e+-1 2$;&/!h
#
R T*&/24Gfd ^&/243J$'Gg. # $'1 $;+
1 $'d2&/d $;3=GC$ wGC#EGK,/F# 7,/4+L1 $a1 $'W8$S7F2H# F8,/&/,/e^+-1 2H!
/ fZ&/23J$'G Tb. 3?'($'F83J2GGC2+_GC$'+-c
GC,/I&/$;G>(*^T GC7# &/GUTV(*,/+- GK7# &/GZ="4F$'GC$6!# $Q$'&79(*.024^M d ^&/243Q
N GK,/$;(*. 3J$QGC$Q$'GC. $'7,/] 7
724(*2_# +-H791 $'+-g1 $679^3=7F$'3J$9GKR1 $6(*241 2_!# $gGC$g$'+-7,/$'3?3?f$'+-F3?$6792(*,/&/&/GaGC,/(*. &/$'GZ
/ a
ahh7(*I4,/H&/fGC,/A4+-7,/4+j1 $ge2+-f:-23=^3=,/H1 $61 $'W8$'7F82V1 $g&/HGC$'GC,/+ Z )L+-
GC$'GC,/4+ N GC,/$'(*. 3J$V$'(*.0,/$'e_72+*# +d &/23X,/+-,/79,/^&01 $VGC,/A4+-7,/4+*1 $Le24+-V:-243?3?,/-Z; 
,/+-GCF83J# 779,/7
+ / a S
a"hGK$b# F8,/&/,/e^E. 3?V7(*I4,/3w&/E^GK,/A4+-7,/+*1 $Le2+-E:-23=^3=,/
. 3?g&/fGC$'GC,/+ N 7F8# &Z

Notas
f,/+-GCF83J# 77,/4+3/

$'Gw# +-g$'NF$'+-GC,/+1 $;& &/$'+-A4# `B$g1 $M 24GCFA3J$'GZ
variable
a$;] $;3=GC$/!h#T"/ . ^3=(*24GCF3=3U2E,/+-,/7,/&/,/e^3U&/2GXd&/23J$'G 7F8# &/$;GZ

Uso

, BD3)$'&$'GCF,/&/2E1 $g&/fW8$;79:-f N k
SET DATESTYLE TO ISO;

I4,/&/,/F3U i _ . 3?g724+-GC# &/FGX72++g2E(*GaF8I4&/^Gk


SET GEQO ON=4;

, BD3) i V fGC#d ^&/243)1 $g1 $'W8$;7CF82k


SET GEQO = DEFAULT;

, BD3)&/He2+-f:-23=3?,/fH $;3t-4$'&/$'TR'PQ&/,/W8243?+-,/-k
SET TIME ZONE PST8PDT;
SELECT CURRENT_TIMESTAMP AS ahora;
ahora
--------------1998-03-31 07:41:21-08

, BD3)&/He2+-f:-23=3?,/f. ^3= F8^&/,/-k


SET TIME ZONE Europe/Rome;
SELECT CURRENT_TIMESTAMP AS ahora;
ahora
--------------1998-03-31 17:41:31+02

x

Compatibilidad
SQL92
h2f:-^T%/
A4$'+-$;3=&'$;+ N w58724+L&/X$;N7$'. 7,/+V1 $(/  V#/ V ?h
 / h w ?h variable
!L <?Z' EGC,/+-F,/Gf1 $ V. 3?/ aSahh$'Gg&/,/A4$'3?(*$'+-F$
1 ,/W8$'3J$9+-F8$'R-!# $h.0$'3?(*,/F8$%GC4&/2# + +-,/72d ^&/243g$'+-F$'3J2. ^3="&/h$'GC. $'7,/] 79^79,/+1 $E&/he2+-
:-243?3?,/-k
SET TIME ZONE { expresin_de_valor_del_intervalo | LOCAL }

SHOW
Nombre
SHOW

# $'GCF83?f&/2Gw. ^3=(*$;F83J2G $'+hF8,/$'(*.02E1 $$?B$;79# 7,/+h1 $g&/fGC$'GC,/4+

Synopsis
SHOW palabra_clave

Entradas
palabra_clave

$;GC$6$'&72(*+-1 2V/ . ^3=24I4F$'+-$'3)(*G ,/+-W8243?(*7,/4+j1 $Q&/24Gw3JA# (*$;+-F82Ga1 ,/GK. 2c


+-,/I4&/$'GZ

Outputs
NOTICE:

variable is value SHOW VARIABLE

$;+-GK`B$g!4# $GK$61 $'d# $'&/d$GC,F821 2%:-f,/1 2_I4,/$'+ Z

NOTICE:
Unrecognized variable value

$;+-GK`B$g!4# $GK$61 $'d# $'&/d$GC,d &/# $6+-2%$',/GKF$Z

,&/G d3?,/I4&/$'G 1 $$'+-F23=+-2 ! 2EM ! +-2E$;GKF+h1 $'] +-,/1 GZ

NOTICE: Time zone is unknown SHOW VARIABLE

x^

Descripcin

/!h#

(*2GCF83?3?&/792+-] A# 3?7,/4+7F8# ^&>1 $# +. ^3=;(*$'F3J2@$'+F8,/$;(*. 21 $j$?B$;79# 7,/+


1 # 3?+-F8$6# +-gGK$;GK,/+ Z
\$'GCF8G>d3?,/;I&/$;G>GK$Q&/$'G>. # $;1 $QGC,/A4+-3# +%d&/23)# GC+-1 2L&/61 $'7&/3?7C,/+#/ *TVGK$Q. # $'1 $
3J$'GCF8;# 3=^30GC#%d&/230. 23 1 $;W$;7CF82f792+V&/61 $'7&/37,/4+_!
/ gZ[ 2G). 3?;(*$'F83J2G)Tb&/2G)d&/23J$'G
GC24+hGC$'+-GC,/I4&/$'GXg(*T GC7# &/GwTE(*,/+- GC79# &/^GZ

Notas

/!h# $;Gw# +-H$'F8$;+-GC,/4+h1 $'&&/$'+-A4# CBD$g1 $M 2GCF8A43J$'GZ


$'GC$'/ !/ . 3?g]NB^3>&/2Gwd&/23J$'G 1 $# +-Hd3=,/^I4&/$Z

Utilizacin
# $;GCF83?g$'&$'GCF,/&/2E1 $gW8$'7:-5

<?k

DateStyle

SHOW DateStyle;
NOTICE:DateStyle is Postgres with US (NonEuropean) conventions

# $;GCF83?g&/H724+-] A4# 3=^79,/+h1 $'&2. F8,/(*,/e^1 243)A4$'+-'F,/792_5


SHOW GEQO;
NOTICE:GEQO is ON

Compatibilidad
SQL92
h2E:-^TE+-,/+-A4 +/h#1 $'] +-,/1 2E$;+ -Z

TRUNCATE
Nombre
TRUNCATE

n

7,/f# +-HF8^I4&/

<Ck

geqo

Synopsis
TRUNCATE [ TABLA ] NOMBRE

Entradas
nombre

i &+-24(*I43J$g1 $&/gF8I4&/fgF83J# +-73=Z

Salidas

TRUNCATE

$;+-GK`B$g3J$'F23=+-1-2EGC,4&/fF8^I4&/f:-HGC,/1 2Ed7,/10H58F3J# +-79^1 '<-$',/F82GC(*$'+-F$Z

Description

Lhw %3J$'(# $;d $w3?. ,/1 ^(*$'+-F8$wF241 G)&/GU] &/G)1 $w# + FI4&/-Z ,/$'+-$X$'&(*,/GC(*2V$'W8$'7F2
a
!# $%$'&Uh a. $'3J2&+-23?$;7243?3J$S3g&/hF8^I4&/j3J$'GC# &/Fh(*^Gb3=^. ,/1 2)Z i Gb(*GH$'W8$'7F8,/d2*$'+
F8^I&/^GaA43?+-1 $'GZ

Usage

3J# +-73&/HF8I4&/

tablagrande

TRUNCATE TABLE tablagrande;

Compatibilidad
SQL92
& a6Vhw +-2E$',/GCF8$g$;+ N 4Z
i 

n^l

UNLISTEN
Nombre
UNLISTEN

$=BDH1 $.03?$;GKF3)F8$;+-7,/4+hf&/Ga+-2F8,/] 77,/24+-$'G

Synopsis
UNLISTEN { nombre_notif | * }

Entradas
nombre_notif

h24(*I43J$g1 $6&/f+-2F8,/] 779,/+j. 3J$'d,/(*$'+-F$3J$'A4,/GKF3?10 Z

$6&/,/(*. ,/3?+hF821 24Ga&/2GX3J$'A4,/GKF3J24G $'+h$;GK7# 7:-f. 3?f$'GCF$I47-$;+-1XZ

Salidas
UNLISTEN

\V7# GC$g1 $3J$'7,/I42_1 $!# $g&/H1 $'7&/3^79,/+hGC$g:-H$=BD$'7# F81 2Z

Descripcin

h / a GK$h# GK. 3?I4243?3?3f# +3?$;A,/GCF3?2hh ?a $',/GKF$'+-F$Zc)Lh i 7+-79$;&/


V
7# ^&/!# ,/$'3 3J$'A4,/GCF83J2H$;N,/GCF$'+-F8$w1 $w&/QGC$'GC,/+E7F8# ^&1 $wM 2GKFA3J$;GU$'+V&/672+-1 ,/7,/4+E1 $w+-24F,/] 7c
7,/4+
ZK H792+-1 ,/7,/+GCF8$;3=,/GC72% )7+-7$'&/HF241 2GQ&/2GQ3J$'A4,/GKF3J24Ga&/,/GCF8$;+-$'3=
1 $&/fnombre_notif
GC$'GC,/+^79F# &Z
^4DJA0z >724+-F,/$'+-$g# +-H1 ,/GC7# GK,/+j(*Gw$;NF$'+-GCf1 $;& # GC2%1 $g  / T%hh ? agZ

Notas

+-2_+-$'7$'GC3=,/^(*$'+-F8$Q:-f1 $6GK$;3)# +h+-2(*I43J$1 $Q79&/GC$6d &/,/1 24R'.0$'3J2_. # $;1 $


CGnombre_clase
$'3U7# &/!4# ,/$'3>71 $;+-g58GCF83?,/+-A<-d&/,/1 f1 $6:-GCF8f^f79^3=7`F8$'3J$;Ga1 $&/3JA2Z
+ )Lh i GC24I43J$&/A42&a!# $+-2
i &aI^*7 -4$'+-1+-2(*# $'GCF3=*$'3?3J23?$9G"GC,a# GKF$'1:-7$# 6
$'GCF8# d,/$'3?"F8$;+-1 ,/$'+-1 2*58$'GC7# 7:-+-1 2<CZ^P6^1 "I^*7 -4$'+-1$=BD$'7# F83?"# F24(*F,/7(*$'+-F$hLh
 /
w79# +-1 2_F$'3?(*,/+-$Z
)V+-h3J$'GCF83?,/779,4+!4# $"GC$h1 I4"$'+@d $;3=GC,/2+-$'GV+-F8$;3=,/23J$'Gb1 $%M 2GKFA3J$;GKR0!# $h:-7j!# $h# +
!# $H+-2%GK$f723=3J$;GK. 2+-1 ,/$'3?H724+&/HF8^I&/H$;+7# 3=GC2%1 $'I4/HGC$'3U$'+-F83J$;792(*,/c
&/nombre_clase
&/1 R;TH+-2_GK$g1 f7F8# &/(*$;+-F8$4Z

n

Usage

M 3=GC# GK73?,/I4,/3=GC$gf# +h3J$'A4,/GCF83J2E$;N,/GCF8$;+-F8$4k


postgres=> LISTEN virtual;
LISTEN
postgres=> NOTIFY virtual;
NOTIFY
ASYNC NOTIFY of virtual from backend pid 12317 received

)V+-d

3=^1 24Gk

$;eg!# $
)Lh -i GC$:-f$=BD$'7# F1 2R'. 2GKF$'3?,/243J$'G 72(*+-1 2Gw  @GC$'3?+%,/A4+-2c

postgres=> UNLISTEN virtual;


UNLISTEN
postgres=> NOTIFY virtual;
NOTIFY
- notice no NOTIFY event is received

Compatibilidad
SQL92
h2E$;N,/GCF$gVh / a $;+  Z

UPDATE
Nombre
UPDATE

# I4GCF8,/F# T$gd&/23J$'G>1 $g72&/# (*+-Gw$;+j# +-HFI4&/

Synopsis
UPDATE tabla SET columna = expresin [, ...]
[ FROM lista ]
[ WHERE condicin ]

Entradas
table

i &+-24(*I43J$g1 $# +-HFI4&/g$;N,/GCF$'+-F8$4Z

n^m

columna

i &+-24(*I43J$g1 $&/g792&/# (*+-b$'+

expresin

)V+-f$;N. 3J$'GC,/+hd

tabla

^&/,/1 f2Ed&/23UgGK$;3>GC,/A4+-1 2Eg&/f724&/# (*+--Z

lista

i G # +-g$'F8$;+-GK,/+h+-2V$'GCF8+-1 ^3)1 $6M 24GCFA3J$'G !# $6. $'3?(*,/F8$Q&/f. 3[,/79,/+h1 $672&/# (*+-G
1 $2F83?G F8I4&/^Gw$'+"&/H72+-1 ,/7,/4+j hi i Z

condicin

P62+-GC# &/F8$j&/j7&/# GC# &/ i i P . 3?h# +@1 $'GC73=,/. 7,/+(*GL$'F$'+-GCj1 $"&/j7&/# GC# &/
h
i i Z

Salidas
#
UPDATE

$;+-GK`B$g2I4F8$;+-,/1 2EGC,4:-H:-I4,/1 2_;N,/F2)Z i &GC/(*I42&/2


3J$'. 3J$9GC$'+-FH$'& +- (*$'3J2E1 $g] &/^G
!# $g:-+hGC,/1 2E7F# &/,/e;1 GZ , $;Gw,/A4# &fR^+-,/+-A4# #+-H] &/HW# $67F8# &/,/e^10-Z
#

Descripcin

haah7(*I4,/6$'& d&/231 $6&/792&/# (*+ ^G>$'GC. $'7,/] 79^1 'G . 23UF21 G>&/G>] &/G !# $GCF8,GKW8c
V
7$'+&/L724+-1 ,/7,/+*1 1 4Z 24&/^(*$'+-F8$H+-$'7$'GC,/FV,/+-1 ,/793 &/G6792&/# (*+-G6!# $bGC$'3=^+(*21 ,/] 79^c
1 GZ
M 3=g3?$;W8$'3J$S+-7,/GwH&/,/GCF8GQGC$f# GCH&/L(,/GK(*bGC,/+-F8^N,/GQ1 $
= 
=
o AZ GC$'^R.0# $;1 $gGC# I4GKF,/F8# ,/3
# +h +-,/72"$;&/$'(*$'+-F2%1 $g# +-H&/,/GCF8^RN# +j3=^+-A2_1 $g$'&/$'(*$;+-F82GQ2E# +-b&/,/GCF8b72(*. &/$'FH792+j# +-
+-,/7f. $'F,/79,/+ Z
$'I4$gF8$;+-$'3 . $;3=(*,/GC2"1 $g$;GK73?,/I4,/3 $'+j&/bF8I4&/H. ^3=H. 21 $'3>(*241 ,/] 73?&/RGC4724(*2%. $;3=(*,/GC2
1 $&/$'7F# 3=g1 $g7# ^&/!# ,/$'3UF8I4&/f7# T424Gwd &/23J$'G GC$'+h(*$'+-7,/2+-1 2GX$'+h&/H724+ 1 ,/79,/+j hi c
i Z

Uso

M 3=7(*I4,/3)&/f. &/I43?f

3?(* . 23>

3?(*F,/7 $'+h&/H72&/# (*+-H79^F8$'A423=-k

UPDATE pelculas
SET categora = Dramtica
WHERE categora = Drama;
SELECT * FROM pelculas WHERE categora = Dramtico OR categora = Drama;
code |ttulo
|did|fecha_prod|categora
---+------------+--+-------+-------+---BL101|El tercer hombre |101|1949-12-23|Dramtica
P_302|Becket
|103|1964-02-03|Dramtica
M_401|La paz y la guerra|104|1967-02-12|Dramtica

nx

|durac
| 01:44
| 02:28
| 05:57

T_601|Yojimbo
DA101|Das Boot

|106|1961-06-16|Dramtica | 01:50
|110|1981-11-11|Dramtica | 02:29

Compatibilidad
SQL92
^g1 $'] +-$# +-HGC,/+-FN,/Ga1 ,/W8$'3J$'+-F$. 3?g&/g79&/^# GK# &/])LM

\ i k

UPDATE tabla SET columna = expresin [, ...]


WHERE CURRENT OF cursor

1 2+-1 $

cursor

,/1 $'+-F,/] 7f# +h7# 3=GC23>I4,/$;3=F2)Z

VACUUM
Nombre
VACUUM

,/(*. ,/fT%^+-&/,/ef# +-fI4GC$1 $g1 F24G M 24GCFA3J$'G

Synopsis
VACUUM [ VERBOSE ] [ ANALYZE ] [ tabla ]
VACUUM [ VERBOSE ] ANALYZE [ tabla [ (columna [, ...] ) ] ]

Entrada
i
i a _
(*. 3?,/(*$g# +h3J$'. 23=F$1 $'F&/&/1 2V1 $&/g7F8,/d,/1 11 $6d ^79# # (

. 3?g71 F8^I&/ Z

\V"\V^ Xi
\V7F8# &/,eg&/G $'GCF1 /GCF,/79^G>1 $724&/# (*+-Ga# GC1 G . 23U$;&42. F,/(*,/e1 23U.03=1 $'F$'3?(*,/c
+-3-&/X(*^+-$'3?w(*G $'] 79,/$;+-F8$a1 $a$?B$;79# F3 # +-X792+-GC# &/F8-Z[ ^G$;GKF1 GKF,/7G 3?$;. 3[$'GC$'+-F+
&/L1 ,/GK. $;3=GC,/+1 $g&/2GQ1 F2GQ$'+j79^1 H792&/# (*+--Z i GCF8b,/+-W8243?(*7,/+$'Gwd ^&/,/24GCb79# ^+-1 2
:-TE&/H.024GC,/I4,/&/,/1 11 $g$?B$;7# 7,/+h1 $'GC1 $d3?,/24Ga. # +-F24GZ
tabla

i &+-24(*I43J$w1 $w# +-6F8I4&/X$'GC. $;79] 79QQ&/Q!# $QGC$Xd6Q3J$';&/,/e30$'&d7# # (Z i &$'GCF+-1 3


$'G :-7$'3?&/2EfF241 ^Gw&/G FI4&/GZ

n^n

columna

i &a+-2(*I43J$1 $# +-724&/# (*+-*$'GC. $;79] 7^+-&/,/e3=Z i & $'GCF+-1 3H$'G_:-7$'3?&/2@. 3?


F821 G &/Ga792&/# (*+-GZ

Salida
VACUUM

i &792(*+-1 2_:-HGK,/1 2E7$'. F'1 2ET%&/HI4GC$61 $1 F24Ga$'GCF8gGK,/$;+-1 2E&/,/(*. ,/^1 -Z

NOTICE: -Relation tabla-

i &$'+-7I4$'e;1 2E1 $63J$'. 23=F$. 3?

tabla

NOTICE: Pages 98: Changed 25, Reapped 74, Empty 0, New 0; Tup 1000: Vac
3000, Crash 0, UnUsed 0, MinLen 188, MaxLen 188; Re-using: Free/Avail.
Space 586952/586952; EndEmpty/Avail. Pages 0/74. Elapsed 0/0 sec.

i &+-&/,/GC,/Gw. ^3=&/

tabla

(*,/GC(*-Z

NOTICE: Index indice: Pgina 28; Tuples 1000: Deleted 3000. Elapsed 0/0
sec.

i &+-&/,/GC,/Gw. ^3=# ++-1 ,/79$6$'+h&/fFI4&/f1 $'GCF,/+-2)Z

Descripcin

>LL% GK,/3?d$g. 3?g1 2Gw.03?2. GC,/F82GX$'+hM 2GKFA3J$;Gw724(2E(*$'1 ,/2E. 3?g3J$'7&/(*3&/(*7$;c


+-(*,/$'+-F24RTEF8(I,/;+h. 3=3J$'724&/$;79F3,/+-W8243?(*7,/+. ^3=$'&24. F,/(*,/e1 243=Z
>LL%
I43J$b71 _7&/GC$L$'+*&/_I^GK$b1 $b1 F82GCR4&/,/(*. ,/E&/2G3?$;A,/GCF3?2G1 $LF3?+-GC797,/2+-$'G
T%.0GK^1 'GfT*7F8# ^&/,/e'%&/Gf$'GCF81 /GCF8,/7Gg$'+&/24Gf7F8&/2A424Gf1 $'& GC,/GKF$'(*-Z^ Gg$'GCF1 /GCF,/79^G
(*+-F$'+-,/1 Gf,/+-79&/# T4$'+$;&)+- (*$'3J2*1 $EF# . &/$'GbT$'&+- (*$'3J2*1 $E. A4,/+-Gb&/(79$;+-10^Gb$'+
F821 G &/Ga7&/GK$;GZ
f$=BD$'7# 7,/4+h1 '
$ >LVJ
. $;3=,/1 ,/7(*$'+-F$# (*$;+-F83?f&/fd$'&/27,/1 11 $&/gI^GK$g1 $1 c
F82Gw^& . 3J247$'GC3)&/G 724+-GC# &/F8^GX1 $'& # GC# 3?,/2)Z

Notas
fI4GC$1 $61 F82G I4,/$'3?F8g$'Gw$;& 24I;BD$'F,/d 2E1 $'& 724(*^+-1 20UVL] Z
a$;792(*$'+-1 ^(*24G!# $V&/_I^GK$b1 $V1 ^F82G6. 3=,/+-7,/. ^&07F8,/d_GC$'V&/,/(*. ,/1 _71 _+-279:-$L. 3?
(*+-F$'+-$'3g&/GH$'GCF81 GCF8,/7Gb3J$'&/^F8,/d'(*$;+-F8$"7F8# &/,/e^10GZ ,/+@$'(*I43JA2R-&/j724+ GK# &/F
 UV
VJ
. # $;1 $gGC$'3>$?B$'7# F1 f$'+h7# &/!# ,/$;3>(*2(*$'+-F2>ZCM ^3=F,/7# &/3=(*$;+-F8$'R'1 $'GC. $'Ga1 $g724c
. ,/3U# + V7&/GC$fA3?+-1 $f$'+jM 24GCFA3J$;GQ2"1 $'GC. $'Gw1 $fI23?3=^3 # +A43=^++- (*$'3J2"1 $f3J$'A4,/GCF83J2GCR
. # $'1 $hGK$;3L# +-I4# $'+-,/1 $'$;(*,/F8,/3b# +-72+-GC# &/F8
 UVL]
Z i GCF82^79F# &/,/e;3=&/2G%7c
F8^&/24A424GV1 $'&)GK,/GCF$'(*72+F821 2G_&/2GV7(*I4,/24GV3J$'7,/$'+-F$'GCR0T. $'3?(*,/F,/3=h&U23JA+-,/e^1 23g1 $
724+-GC# &/F8^G%1 $jM 2GCF8A43J$'G%F24(*^3L&/GE(*$=BD243J$'G_1 $'7,/GC,/24+-$;G%& . &/+-$;3b&/^GE72+-GK# &/FG%1 $j&/24G
# GK# ^3=,/2GZ

n

Uso

i & GC,/A# ,/$;+-F8$g$'Ga# +h$=BD$'(*. &/2_1 $&/f$=BD$'7# 7,/4+h1 $;&472(*+-1 2>LV]$;+"# +-HF8I4&/f$;+"&/
I4GC$1 $1 ^F82G 1 $g3J$'A3J$9GC,/4+ k
regresin=> vacuum verbose analyze onek;
NOTICE: -Relation onekNOTICE: Pages 98: Changed 25, Reapped 74, Empty 0, New 0;
Tup 1000: Vac 3000, Crash 0, UnUsed 0, MinLen 188, MaxLen 188;
Re-using: Free/Avail. Space 586952/586952; EndEmpty/Avail. Pages 0/74.
Elapsed 0/0 sec.
NOTICE: Index onek_stringu1: Pages 28; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE: Index onek_hundred: Pages 12; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE: Index onek_unique2: Pages 19; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE: Index onek_unique1: Pages 17; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE: Rel onek: Pages: 98 -> 25; Tuple(s) moved: 1000. Elapsed 0/1 sec.
NOTICE: Index onek_stringu1: Pages 28; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
NOTICE: Index onek_hundred: Pages 12; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
NOTICE: Index onek_unique2: Pages 19; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
NOTICE: Index onek_unique1: Pages 17; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
VACUUM

Compatibilidad
SQL92
h2E$;N,/GCF$$'&724(*^+-1 2UVL4

$'+ N -Z

n^

n

Captulo 15. Aplicaciones

!J&JP\\!]x4tJ&PL!&!]P%!
b

createdb

Nombre
createdb

*]]'!'!P(PGb,z4

Synopsis
createdb [ options ] dbname [ descripcion ]

Inputs

 P G host
!]\! PG PGb\C!%\JGP
%%,]t
!P' postmaster
 Pt port
G,*,tbS (c6bLT3IPZ!,! W!3L!,
!\0P44,3  postmaster ,Gb%!  ]h
cP
 G,t\ username
4\VP

,*b
7 #



,'#<
 ,
Y4JbV createdb ,4#4\PP(!JJ%%!P
,!
 ,
#\bt]]
J b datadir
*P#,tb
!&]G&!'!bPOt,Gb#!'
G'!
!bG!%<]PP3]<b(!,,\ %*P
!'b'!
!bPO,G,! 
C!'!b



 ,*P! encoding
!GC!,!,G\!4P!*P !4x
V4GtP 
!'!b
dbname

!P\!0GVP]0**!!!P\!V
*VbLP!O!'!bPOP,z43,,Gb2!PPC
\P0h,!'L!<!bPP\\VP\&LIJt
!z\

description


C*P\,%*J\\,#44GP!#V%
! P\b
,!
!C*P -h -p -U -W -e P3CG!O,t\' 
Outputs

!'!'P(',!,cb\,

CREATE DATABASE

V!'b

createdb: Creacion de la base de datos fallida.

createdb: Comentario a la creacion fallida. (La base de datos fue creada.)

!P\tnz*P7tJV%!J!P&4 P!!#G,L*!
!LG(!<!b\G\'P!t ,!J*,!&!, !IP\!
z4
 !#"%$ &' $)( *
&+*-,.*-/%"3

P\b!,GC!,I
z \W,tP&7!*P ,!,tP&!,\b
!4GVP!
\bt! 0!,G 21.34 65%378 65 :9; :<+3  t\(P!!

Descripcion

%VJG]!%!bLPGb,z4<!!%tJbJ
createdb
\
!4
*P
,,z,4!
'!&!P
JG h#,!,Y\! z4 21.34 65%3=78 65> :94 :<+3
%createdb
<!,b\b 0!]c4  ?JG #!J
<,*P4!!!O!bPbVbn\P!PGb]<( psql
!P!CGc(JG,t!PC!hGOO!P<b,*b!P
J PGb!bI\ !,CP!*P4C!
]
!'PtV! psql ],t'P , libpq 

Uso

t',n]'!'!P
$ createdb demo
CREATE DATABASE

AB

demo

b!4Pt!PhC!bV!
&!'!b@

!&,GC!,Gb&
\\ ,G,hV!Ltn,c\!4!Lz4EFG"%*-H
&2"E( *2&I*-,.*-/%"O
t4\G!!b demo !Y b\V,6\\7 
! C!,tbK
JLLL !\J!
!P LATIN1 34\!],
b]G !M @
$ createdb -p 5000 -h eden -E LATIN1 -e demo
CREATE DATABASE "demo" WITH ENCODING = LATIN1
CREATE DATABASE

createlang

Nombre

createlang
bc4

!'
b'!'P\P]'!'!P

?ON

Synopsis
createlang [ opciones_conexion ] [ nom_leng [ nombre_bd ] ]
createlang [ opciones_conexion ] -lista|-l

Inputs
createlang

b
P(b<\b@

langname

!*#hP\#!,b0!0t\T!,,U##3
!! createlang bPJP langname GP4!!\VRQ
!'\!
S  !\UT
nombre_bd
!GC QW V
'!
PG'
 N!P
 
Y''
&Phb,O&Gb!Ph
L&!b!4
!&!2
\R V,C<Pb\bVLRQL!(\!PP\
createlang
P\,P(!&*PI.@

A

 P G host
!!\! PG!XPP postmaster YP#
t!n
 b port
!GC!'zV (zzP!z\J%,0P', postmasYPb!,cP
ter

 \' username
4#P!'G&]P2
7 #



!b',G#P<

Outputs

! J\PQJ!%P&\JJhGP\#!b\b4,cbP*c#&ZQ
t
*PP*P
T,OP\!Tc4Z

XPcreatelang
O!b2'b\RV#-echo
[U 
hXPOP!!,I

Descripcin

'b!Wt4 N!(\,4!J\P 
createlang
L!<!bPh!PcVW?4b\b createlang t,4b'!Ph@

plsql pltcl
?4#!2b,!#t\Y!,h* !Y% N!!P4!
\bJ!#t&\!&c4 G%\,!4 createlang  
#!# ,PWVX
P4\ P*!t; 0! . 123; 65%3^]_ a`-b:c% :b3 3X
P
\h
Notas

4bde *:_f t


tn!
Uso

t'

pltcl

$ createlang pltcl

A

createuser

Nombre
createuser


bc4

Synopsis
createuser [ opciones ] [ nombre_usuario ]

Inputs

 P G host
!GC!,P\
! PC!'XP%GP'
, postmaster *P
 b puerto
!#,b\ (cY\,P*n43P0!0 postmaster
,!'O,cP
 ,
U,Gbt
(P!O createdb t
+Q
z,<
 ,
#\bt],Gb

 ,,!
!,t\b
zO!'P
J ,,!
\!
ztV,n('!b
 !G,
!,t\b
zPP(PI
?  !!
\!
ztV,nbO!tP
 #P\
cV*,GbV P\,
\b P7\V!
!,c#IJ tcreateuser
nt!bJVh,*,Gt%zJ,'n,
#Ph#P(
  id_usuario
!&,t\b',P4&tV
V
P&G&!Pb!bV
 4OOb

Ag

G,*P\!GtW!PcV6!G3,2P!b3\
! &ih!b!&P!OP<IbO#bc4T
z&!bPPh\
0!,hP]\P3 ]
*V#
R Q]!&*P\!P
!C*P -h -p -e P3<b\b'  [ !OP psql -U -W
\RV,0
!0 ,4C!,!'#b'bIn
nombre_usuario

Outputs

cP!  !V

CREATE USER

4V2!PtV
,!
z&!&0 c\,GL!&,tP!!I*0&\PGbP0! 21.34 :1jcD<kcl :1.mn
 
X
PO!
createuser: creation of user "username" failed

Descripcin


#VGPcVT2cP\b
P(O*P
*b!40#] pg_shadow !,0*,n(!P(PGb,%usesu
!PPt% ,ItIb%*P\!z4 21.34 :1=c8<ic% :o
createuser
12
mn %+
VL!,b\b    !%PcV  ?J> Q #!4,G,
T,\P\W!*,'tP4P
\!7!0,GbPVPbPJX
Vb!Pc!b7
 psql !OP!0POG#J%!!%(!]!P
 PLPt!JV'X
P
&<*,!p ?4\\ !P!n!,
!,h'!&P!P]Ct psql libpq


createuser
per

Uso

t',n#!

joe

#]'!&!PO!,*bk@

$ createuser joe
Is the new user allowed to create databases? (y/n) n
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER

tV*,'!\\\ joe !PGb\,' XP0!, 


b!,b#P\b#b]],#*k@

JLLUL

$ createuser -p 5000 -h eden -D -A -e joe


CREATE USER "joe" NOCREATEDB NOCREATEUSER
CREATE USER

Aq

dropdb

Nombre

dropdb sr

t

!'!bPOPGb,z4Ib

Synopsis
dropdb [ opciones ] nombre_bd

Inputs

 P G host
!GC!,h\3! L!#XP33 postmaster ,GYV
*Pt,!
 Pt puerto
!'I% (c#J4I,c postmaster b!
*PI,
 G,t\ nombre_usuario
#\
!&GV*P#P

,*bt
7 #

P!*P3'#G#P<
 ,
U,Gbt
#bb< dropdb ,t
+Q
z,<
 ,
#\bt],Gb

 ,t*b
?4b( !b!b !'Pt\P3
+
V!PP\2
nombre_bd

!GC!,P\'!

G,O
!P
t! &G,h!
cbb(,,b!'PGb,z4T
!C*P -h -p -U -W -e 
G0\,


A

Outputs

!'!'P
G!PtV,cb

DROP DATABASE

4 ]!
zGOP!h4 O\PP(\O!,tP!,,(u0!(!PWvC
  
X
PO\
dropdb: Database removal failed.

Descripcin

!,Gb&!&!'P!PcVcbbt!PV&t!b',Gb
dropdb
\!&G,#tV!']'!&!bO3,n
&PPt! C*CP(!P\!#cV\!wvC
dropdb
PL\!Cb\,t *b  4bc4< 4bV\! !
VPt!n!<!PP!\!%!<bLbx
VP!PI!%
 psql !hbt!0O,#%3G,t!PO!L!!P<Y P
Y\ Y, &!nPc\R V, ,%PJP]!7S
t,
!',Pt!
t psql libpq G&
Uso

t'!b'!
!P

demo

,,,t!P!
G,O'!bOPh!*l@

$ dropdb demo
DROP DATABASE

t'!b'!&!P
!4PP\bh!, C -JLLL
#!P0 #demo
b
],#\ I @
$ dropdb -p 5000 -h eden -i -e demo
Database "demo" will be permanently deleted.
Are you sure? (y/n) y
DROP DATABASE "demo"
DROP DATABASE

droplang

Nombre

droplang sr

AA

Pt
b&!
P\P!']'!'P(PcV

Synopsis
droplang [ opciones de conexin ] [ nombre_lenguaje [ nombre_bd ] ]
droplang [ opciones de conexin ] -list|-l

Inputs
droplang

'(bO\,V#RQ,]!'\!@

nombre_lenguaje

G,*O\!,O,!P\,*P6!,*6
t2 droplang P# nombre_lenguaje hS !
0]R Q,!'P\!PI
S  !\UT
nombre_bd
!GC!!,!'W V
'!
PG'!'Ptz
 
Y444!%P'b,&4Gb!P&4]!J!P&!#
!&!2
\R V,\V
b
\,P,\RQV!4\!
\
droplang
P\,P(!&*PI.@
 P G host
!GC!,P\
! PC!'XP]

Pt postmaster
 Pt puerto
!GC!,C!,tb4 (zVPPPGP'z postmaster ,!'
*PI,I
 G,t\ nombre_usuario
#\
!&GV*P#P

']bt
7 #

P#!
#G#P<

Outputs

!\Q0!VP%\]!tP&I7&>QnPIc!\]G th,
*PUP*
S\#2bW\ScVZPt,GP!,t
droplang
X
P!b2Y'\R V-echo
0  

Ay

Descripcin

,<tOtC4!2b(!(P\,VIGbb(J&
droplang
&!<!bbc4< droplang *b\b&*,L!P!2b,z@ plsql pltcl
?43P,!3P\P *6,!UJPt!PV!
\bLb!JhP\!Phz4 h\,!(G droplang L
(P\P]nX
P P!OG2{0! 7O1.n-|a]U :`-b:c% :b3 (XPn!b
Notas

4b  e Uf h#


Uso

t'

pltcl

$ droplang pltcl

dropuser

Nombre

dropuser sr

Pt
Gt4b

Synopsis
dropuser [ opciones ] [ nombre_usuario ]

Inputs

 P G host
!GC!,OP\! PL!XPU3, postmaster G#P
tb
 Pt puerto
!*3bW (cZP<hP0h postmaster 
*PI,
 ,
U,Gbt
#bb<
 ,
#\bt],Gb

A}

createdb

+QP<

 ,t*b
?4b('P! 
!b
nombre_usuario

G,*]PP\!'!PcV]]hPt!n!
P\
!VI',S0*PSPcPSP\Gn\G
*V#R Q]!'P\!P

!C*P -h -p -e P3<b\b' [ !OP


\R V,0 P#!P 4!#O#'P,cb

psql -U

-W

Outputs

cP!  !V

DROP USER

?4# Pt!4Ptn
!G!0WtP \,G2b!P'!!,YP0\bt!0!
cD<3%1   Ct
X
P!!,I
dropuser: deletion of user "username" failed

7-1.n-|

Descripcin

thGPcVI,~]OO!
!bO


tdropuser
4Pc&(GP(P usesuper b!V,
*G pg_shadow C!
!0!,GbhO!'PGb,z4<
,<b0!P G,!P\!c4 7-1.n-|c8<+3%1
dropuser
PL\!Cb\,t*b   4bc4< 4bV\! !
VPt!n!<!PP!\!%!<bLbx
VP!PI!%
 psql !hbt!0O,#%3G,t!PO!L!!P<Y P
Y\ Y, &!nPc\R V, ,%PJP]!7S
t,
!',Pt!
t psql libpq G&
Uso

t'

joe

!z!Ph!'!&!PO!2l@

$ dropuser joe
DROP USER

t0Pt
n!t
! nb\,T P<,! XJLLL *P
tP0 !Vjoe
V]
*P],Gl@
$ dropuser -p 5000 -h eden -i -e joe
User "joe" and any owned databases will be permanently deleted.
Are you sure? (y/n) y

A

DROP USER "joe"


DROP USER

ecpg

Nombre

!\!3cV PGP,P*,G! PtP!V,#z4!

ecpg

Synopsis
ecpg [ -v ] [ -t ] [ -I include-path ] [ -o outfile ]

Inputs
ecpg

'O,\PO0RQ,]!'\!@

file

Outputs
ecpg

*,P#! VP,

stdout

G!P!

Descripcin

pgaccess

Nombre
pgaccess

yB

b'P!VbV!PGb,

file1 [ file2 ] [ ... ]

Synopsis
pgaccess [ dbname ]

Entradas
dbname

!P\
!']''!bOIb

Salidas

Descripcin

P'!]
P*'
bO!P!'
!,0,GbP
pgaccess
 ,!t hb ,**OP
 b\!&*,!bObt+V!'bP(P#PGV! ZfI\ ZfM[
\@
pgaccess
?4,hO!
!bO##!b\!  ,*!V! P
G
zCtb #P4*! ,P\'!
  G#P<
cOcl
zG
!nx(,0P ~/.pgaccessrc

P# pgaccess \b+@


hbLbP P3XPI\!
P(
?4X

\L,!b\ N3!4
\!,!3RQ''P
\
b!IbV#!I
P\\,']!',!!&!P
?L!M


#\b!'bt!'

'

,cPc!' P<I,tPO 4 0'2

W U
4P> b!P(\
bP!'\\,P%*\]
P%,'
!GC!',nP!M
P!,*P
I
P&PIbV,,\O\t
!!PM
P!
#P 
],* 
r PtGbZ W
?-N!,P(,bPZ n!,VGbVP3,zb! 4!zb
b#Gbb
,\h!Pb

\PYGPJ !!7Pbt P\T
P(\P Q!
P#*P

pgaccess

\@
y

  !  n!b\bO\!' I  ed  8 d + e 


?4\*,*PO\I
zP,\P(PPO!'bt!bP!!P(Ph,z!IO t

select * from invoices where year=[parameter "Year of selection"]

,!b!4!']PGb]!',*P3b2
zb<!&*P#G,t !b !,,
']!7b'!!V]7P!E
 G!'b
0

P#G,*,* pgaccess ,t\b+@



,*Phb(,c,,I
r Ptt
P#b pgaccess ,t\b+@
t(!V*PO\b
0 #P!!O!'P!P#!n
_ Nh!,(
Pt!(I,

P#P pgaccess ,t\b+@


tI
,*PI
r Pt
P#P\ pgaccess C\+@
\(G(!']b'Gb2
\b b\ NV!
\Pbb
n!,hPt\O!']G&!'!b
Gn \,Gb(!&\,(Ptt
P#P\tP pgaccess \+@
?4P\tPO!!P<P,
4#\!!'!_ NV!
\
?4!,]P!bP<!
PO!V#!,!'P
P#G pgaccess \@
tPz
Y!
!\tb(!OPhP
y

pgadmin

Nombre

!PO t\,'!_NV\b\xV!'!
!pgadmin
b !#
J;c#
Synopsis
pgadmin [ nombre de datosfuente [ nombre de usuario [ palabraclave ] ] ]

Entradas
nombre de datosfuente

!P\(!OVGb

!r PGb,z4Ib( Pb(!4

nombre de usuario

40P\&!LGt4+P!J
I!

nombre de datosfuente

palabra clave

477\+P t\<*

nombre de usuario

nombre de datosfuente

Resultados

Descripcin

 t\,&!<PJICtL!_NMP \b V!\


pgadmin
nO!
!b!'PJ !P#8J ;
#n
,*b Q! @

!btOc43PtI
b&!]\P\?L!ZCtJ&!%!b b ! G,*,
 Gb P\!'t P<V
bObt4P P<Vt
PPP!
GP##\tPt]!&#!&G2
P!'(b!'YPYz P
yg

L!t'\bhI!PI
?L!M
\t r !'!P
\!!P]7!V!b  Q !*,  %

?

GVGb4t,!\b4!J'C!4<!z!!!%
!pgadmin
P b 
@ !c##0 !\ ,G,t n 
Notas

b 
@ !c# !\ ,G,t n 

pg_dump

Nombre
pg_dump

!cbt&]'!&!PO!PO#! V!'t

Synopsis
pg_dump [ base_de_datos ]
pg_dump [ -h husped ] [ -p puerto ]
[ -t tabla ]
[ -a ] [ -c ] [ -d ] [ -D ] [ -n ] [ -N ]
[ -o ] [ -s ] [ -u ] [ -v ] [ -x ]
[ base_de_datos ]

Entrada
pg_dump

*C
P<b(\bO!']RQ!&*P\!l@

base_de_datos
Q

 !\!VV!!Pcbt
&*P\,GYP!zPh!&t'!',Pt4c
]PO!b ,z\]O!,G2

!\]P\
,(!&*,

yq

]P\PP(P<!&!
0

]P\P<P#\O!'b!bP
0

base_de_datos

ct\'<*P\&!P&!b!!P 4\,&%P
\4tI!Gb,!4<\ zL\G\!
P!%b]<L!<C(PL!b!G!JJ
*P!
 P!, pg_dump  + 

P\<O#P(!,!P,It!Gb'Oz,GYP!t

]P(!P!'P,b,P<  Ct'*!
0

]Pz,\]O!,!*P !b
0

tabla
0

]Ct'

tabla

\b
h

4J,\C(\!#!%J!]!%P\J!]G
*&!'
!*
P\!VtP Q
!'c!J!D? !h*P\!Phttc,P4
Pt\P0!&CP
!!



\R V,b4P'Gb'\,P&!JRQJ!JP\!4P
pg_dump
\
bP!'PI.@


husped

puerto

! GC!,P\
! WV,G,!'XPJ,0]*zG
,GYPtb!,
!PP!(3P*C'!P\0P4J!

*postmaster
PI#
G,*P,tb!
,t, (cVI,GP!
 VGP,!
!P\
4PcJ* postmaster
,GYP&!%LGLYh!,cP
!UMh!SYP!]!3W:J_ SO%!!3\,
 GPY P],*!,2
4(bPJ*PJ!Ox!

nombre_de_usuario clave_de_acceso

y

Salida
pg_dump

{P]!# 4tP

stdout

La conexin con la base de datos template1 fall. connectDB() fall:


Est el postmaster ejecutndose y acceptando conexiones en el Socket
de UNIX en el puerto puerto?

!3t
7 W VS,G
* pg_dump
!P2zP
,Gb
\ postmaster
!!' postmaster
G'
tb!
 WV7! JGb7,!#C,tb#*P,*bn*c7GbJ
+h0,\]!'bb**P t&
Gbb'(C,O!'
b#,t!,

La conexin con la base de datos base_de_datos fall. FATAL 1: SetUserId: el usuario nombre_de_usuario no est en pg_shadow

4,C'
!'IP!
0
P
V'P
\
!V,*4] Pb
3!\pg_shadow
!P!
b
JGb(!,,t\%<CLG(!(!PI b(L!\bt!
!'
P

dumpSequence(tabla): SELECT fall

Nota: pg_dump ejecuta internamente las directivas SELECT. Si tiene problemas ejecutando pg_dump, verifique que puede seleccionar la informacin de la base de datos mediante el uso de, por ejemplo, psql.

Descripcin

nVbt]CtOPCLO!O!bPbnJV ]!O
pg_dump
b!0P\!PL!]*!P< <!G3Pt\ 0!bcb0
!,n!hCtLPGbW Qn
<!<!b V,bhXPh4
bbtI
P! P'(P!bOh,b!P
P%!,!!P]Cpg_dump
',n   Q! *! \P!
_ ?4!P\b bP!##!b%P!07\b\!Ib\!!
\b'C! \R V#,!'\! ,t\b3!
 hbILCIP4L&L!(!P&<L&\!!
pg_dump
PWP0P W V!Vt pg_dump !,4c\
G!]G!%4P,%J!* ,G,*\b%%J4!
\*PO!O,
',tPt
Notas

bJP<\bP!L\b,&G3t\,]!J!
pg_dump
!3t'InO\b \P!
OPO!z,\

yA

,V6 Q!
,I!P 
\G\0b!b
pg_dump
\
,_P<C,C!P('
Q!,OG
\0\PI

\b]P,PLt!!(,bL!O!P<0!
pg_dump
!P,O!
\\!

Uso

t'!'!
!b!,\\\'
,l@
% pg_dump > db.out

t',h,Gb'!
!P@
% psql -e base_de_datos < db.out

pg_dumpall

Nombre
pg_dumpall

cbt&P!O!'!bObO## 4!'

Synopsis
pg_dumpall
pg_dumpall [ -h mquina ] [ -p puerto ] [ -a ] [ -d ] [ -D ] [ -O ] [ s ] [ -u ] [ -v ] [ -x ]

Entradas
pg_dumpall

]PO!b ,z\]O!,G2
0

b
P(b<\bO!'RQ]!&!,z@

]P(P(P\P(!'*!,(!,*!
0

]P(P(P\P(P3P\O!'btb
0

yy

ct\'<*P\&!P&!b!!P 4\,&%P
\&t!4!&*GnP\c nP!b!POG
CtO,G,!G*P\!,!P*
]P(!P!'P,b,P<  C!&*!
b
0

]Pz,\]O!,!*P O!b
0

4J,P]!]*,Gn*!%P\]!%Gt0V
!'
!GC\Qz\P!'!,P
!b
,P!V? !h!htzP,'\#!,z,
!'b

b\R V\CVP
Gb
\bP\VRQV!JP!'\
pg_dumpall
P\,P(!&*PI.@


husped
Q
P

 ',z\L!&'X
P,
c&,GY P
b,*b!
!
 !n(#GP,C!'!P\PP4]#,!']postmaster
PI

puerto
Q

! #b\bt,( (zU7, ,\!#!P\7J3T,


*P,GYV postmaster C IP Mh\,P!',
JU ,P
t&!
,PtV  3P !!P2
4(bPJ*PJ!Ox!

Salida
pg_dumpall

P# V*P

nombre_de_usuario clave_de_acceso

stdout

La conexin a la base de datos template1 fall. connectDB() fall: Est postmaster ejecutndose y aceptando conexiones en el Socket UNIX
en el puerto puerto?

Y!St(CP
 \XP Y
 pg_dumpall
*2cP
b
\,b ,tpostmaster

 postmaster YV
tP
!%*P,*b\]\ % V,GCW4b7,**zG7(!

y}

thW,\!4bb**P7,tVVb b!
**!,(!&b
La conexin a la base de datos base_de_datos fall. FATAL 1: SetUserId: el usuario nombre_de_usuario no est en pg_shadow

JGb0b%!]+P!],]P
00P]\
!VzPGb, b&*P#!\Gpg_shadow
b!Phb

#0b]\t],OJG!]!bPI P*b]4\\Gb!PO!P


dumpSequence(tabla): SELECT fall

Nota: pg_dumpall ejecuta internamente directivas SELECT. Si tiene problemas ejecutando pg_dumpall, asegrese de que puede consultar informacin de la base de datos
usando, por ejemplo, psql.

Descripcin

G0!_ N 0P
P!]J%!!b%PJSS! n
cpg_dumpall
\RV,\,*4bVv !P 'P4b

G,
!%! b
(,VbO %nP!,nPtbn(*,PXPb*\
pg_dumpall
!
]!&G,(!&!PO P!b!'n(!P
P\7b00P,#! pg_dump  -f -t base_de_datos
!pg_dumpall
pQ#\b!c
V,t' Z fM d +J X
PPt\P3P#4b]bt
!b!<
,%
Uso

t'P!OG,O'!b@
% pg_dumpall > db.out

Sugerencia: Puede usar la mayora de las opciones de pg_dump con pg_dumpall.

t',h,Gb'!
!P@
% psql -e template1 < db.out

Sugerencia: Puede usar la mayora de las opciones de psql cuando vuelva a cargarlas.

y

psql

Nombre
psql

bc43,t*b
\

Synopsis
psql [ options ] [ dbname [ user ] ]

Summary

n<,t\ P b]bc4<@z,!P0b]OV


psql
,tb* %  P z4  ]#,GbZ?4bt 
#'P J3!!P C!,(]\P\b *P\\!(tP
 &,x4bL#btbh3b\V
#!Ltb4b
Description
Connecting To A Database

]!Pc4&bzZP!]S*PLbT!bzG
psql
PbP \CPb*C! PGb\]PtC\
 0G,t
U \PU#Ob7POI psql WbU
P %Ct\,t(J \\ %b \ -d -h -p
 c
n z\,PW !P
PbP7n# 4-U,t, 
!b4\4'#,#PC Jb'J* !,&!c,n
\ PG\<z#z,*'!P\0bh4'!P0 L P2

!,C\,h<P\ b\
!b\<c*

!b,G
!,
L\&!, *,O<!PM &bJG,V LPt0\PGbI2
!,n\'hPJ]\ &G\&# ',t#Pb' P
M bPbV!b'!,\ !GL!\btb
 P\UPYPOP
*,Gt bIc\PUP\0bC P
J]G,P (P\z! ?L ? r ?4c  z  4c
b,bCPL
 ',P3P3&\!&PnV0  Gbt P
\,O!#
G,t ,c psql #b003b\
Entering Queries

UPt\(Pb psql !V\CL# \3& 3# 


(*b0bVP#
KpWW*Ph,c\
psql
$ psql testdb
Welcome to psql, the PostgreSQL interactive terminal.
Type:

}B

\copyright for distribution terms


\h for help with SQL commands

\? for help on internal slash commands


\g or terminate with semicolon to execute query
\q to quit
testdb=>

4 JP\ %G,(\Jz47!,t,I  !t !'n


L,# 0& b\b\P0, <?J#L!Ph
,t\biz %J70TP
tn,%
cO
## PC
bO&!3P
,
#
( PP
P!b b
,,,,(V ]m<+5%3W` 'I !`-bnO 5% mpsql

?

psql Meta-Commands

4 #P,h
C,L# P, G L

\\  <VCPpsql
4 psql 2P P\\!V# (\psql
 psql
,,0PO!\b3O*Yb P\\!&
\P*P\\#
3  \\I
#Pt\(P(
P\\ 4  PP,Z\\!W73
\ Y,t ,Tpsql
 \ 0\b% bYP #P\\
tV3 P \hP ' *I
c\! ,G*b W\PY\Ob## #Gbc
!0P0\ 7\ ,S 0G  ?4
b\%P'& \P,nb %bP!&P \n ,
 \t b \digits \0digits  \0xdigits  0 *
# ,
!\ P P c!\z2
(SbZ\(V# 3PU : (4TJ3t#U
'P
'(b0O
\<
?4\b4 (0b6
Z (0bY43P\\Z3 <
3b

PC! P\\# 0#,\ !
0( '\2 &
LG,OC#b
zP\]\\&] ]\JP!3cV\!b( L4b]\!<
\t 4\b
P 4'cV @!3!Jb @,
!b!,# PL!P#P,J,*,  P# *GI]hP ,*P\\!
!P!&b(&PCz3#\&P
\2
t0Ph\b(bL ,3 P, G P* (<b,
 <,JPL\ *P\\< (I!, \\ b 
\! (,0Pc\bP,GcV Pz@ z#z4
 psql P\\!<0'*\cP# r #
\P
\b \\**PP
3

'P#\b \\OL!8 @
?

\a

P <tPb<bPP\Ph #b b%<P


 , G,hh!,< %\\T]  '*#C\c
z, W%Ph
,tzGP

}

z,( b3P<SbJ,T,ZJ 3,GOPL3SP]!,L


G  bP P\\,& \pset
z 3\P
LP\\7!,t(PPM L#LC,title
P#title
 #
*P03 !U
P \c S dbname S username TwT
\connect
! PP#4!,'<c!n'G,\2 &
P ,*bP0< dbname - L,z!b(\LG \,<
 username (P\b
th\
(\<
?4]0! %%% P(\,]#*P !
!,&h L!PG,nP# &b,0Vbtb psql # P
\ b
 ,PWbb\hW#P\\ !, bc h V
P]PPS#!CTP\ psql WbV\P! 
c,!bTP ,t*bWG PG#\\,!,P# 
Ptc V!P # PG,Z4%,*3LbV
  3b\,  GO&*!,V#
#P,
#
  <
\C title

TD

\copy table
with oids
from to filename

4T S
zT
miters characters
with null as string

Gb!

!P
S

with deli-

\&4P nPz '&Pb !&cV 2 nO|%


*P\\ !n,7P 4 7,!3PL# JG,*  
*Pb,tZ,E#E& ##&
PS VV, *4 , psql ,CL#tb
'
P,O
!bV
,3b
z
b
3h \\Y%WP b\ cV
 %6P\\ G,0b
!tb#P '!I0b C,*!&C G,*Ct, <
0 - W+%0P\\<b* %bb& 
 ,G,h!PCc
Sugerencia: This operation is not as efficient as the SQL COPY command because all data must pass through the client/server IP or socket connection. For large
amounts of data the other technique may be preferable.

Nota: Note the difference in interpretation of stdin and stdout between frontend
and backend copies: In a frontend copy these always refer to psqls input and output
stream. On a backend copy stdin comes from whereever the COPY itself came from
(for example, a script ran with the -f) option, and stdout refers to the query output
stream (see \o meta-command below).

P #<
 3!P\O

\copyright

}

PostgreSQL

#Vh\V relation  Z  ! P%


  < 7
btb& 
P(!b
z bW T #  !Y !NOT
%NULL
\,<IO
,bO
X!P3O P#
LP\\3 \d+ h!, 4P\\bOP*0# &b
*P\<L #(#,

\d relation

Nota: If \d is called without any arguments, it is equivalent to \dtvs which will show
a list of all tables, views, and sequences. This is purely a convenience measure.

\da pattern

Gb<Pcb
P P ,h# !b
0P
2 pattern IP! OG,*    \  bh
P#

\dd object

P#< '!P(P
 0&%,,hI*GP! P
, J W\Jobject
,I  ,b ,*Y #*PJb P Ct
Pt  ,PL, # *,  PbG  
 Ph,c\ @
=> \dd version
Object descriptions
Name
|
What
|
Description
------+-------+-----------------version | function | PostgreSQL version string
(1 row)

\,*< bP&P,*7V,tbS# :

z4S

#!"%$ &! $

Nota: PostgreSQL stores the object descriptions in the pg_description system table.

!b<P b # ,\,zJ patVOIGP'GC!, P\b P] #(


tern
 \df+ G, !!PPt \bP6P & b !
'3!tbPO 3

\df [ pattern ]

4VPL b!\\Z\+@z 0b4 b P]


G,  b   Gb b  ,c P S  GCP(
  #P!nbPb#PC  b h#  '#
 pattern  LV]I 4 3YbS 
,( ]\
\b CP,!(W] \\\\ 
,O# OGP,3!tCP Cc

\distvS [ pattern ]

}g

<(0OPi% #<
G'PbI

\dl

!GbVPPV# %,tZZbtYbCP

G,!, P\CtPt'# n\4#4 P(,c*J


pattern
'!
cC* 3#Tb3 t*b PPP]\3#
* c0,,,t,bP ]* (%`P\\ P
\ # bP '\t

\do [ pattern ]

\dp pattern

3 WY #! P#b,*\,\7


\C \GP2

!hI!bLPn4 L P\b pattern  L\\0 \dT+


P#<,cbt'\b
 \e S filename T
\edit

(G,!, 
<b ,!Ph,c<P,
*Pfilename
Jb4 <J ! b,2@J\,P <tzVb,
(P3b]b\PtV!
( #!b3#
\
 
Vt\bQ'] 7 ,tT  \!]P
 POb!bJ n((@ n VPc\2 psql
tbZ
&# - WP< t ! &\&G0 !n ]!&# ( 
*PbGh0G,\P h]\\!b\,cb<7P 

#n\,
# &bt
\dT [ pattern ]

Sugerencia: psql searches the environment variables PSQL_EDITOR, EDITOR,


and VISUAL (in that order) for an editor to use. If all of them are unset, /bin/vi is
run.

  T
L ]\b<b %b!b tb0P]G*P
#3,#G ( #'PV 
\b#
P
G2I\+ @

\echo text

=> \echo date


Tue Oct 26 21:40:57 CEST 1999


!O#P

-n



#
(PC#b

Sugerencia: If you use the \o command to redirect your query output you may wish
to use \qecho instead of this command.

}q

z,h &P! P#L\L! 


\ (P\\  #(
,,*P!

\encoding encoding

\f string

z, &!,3bnVb2 '


'C_
G\P c'G:%WPh
,t<#Vb0P bPI |

filename |command

c! t b,&b\ TTPP7]


 b filename P
] bO #G,b0J3 b7,c,* b
>? <Cb%\P? \g # \,
command
(6 P]b\gbL 6W\<
 \h S command T
\help
'GC!,
JG ,7 47c4W*P\\<
 psql # G ]\!Lh Gb command
L com-
(Gb  ,3 3P3zz4\\!(O #
mand
\g

Nota: To simplify typing, commands that consists of several words do not have to be
quoted. Thus it is fine to type \help alter table.

\H

c!]P !US,t PPt\2h !YS\h%,!


G#b  0b0 %!,CI \t LP\\\&PP\ 
3 G,W%bP bCPP
,!C!X &
#
,P<

\i filename

filename

0I,  0,4

Nota: If you want to see the lines on the screen as they are read you must set the
variable ECHO to all.

\l

P

!G(h !b,G,Y 3tV#hV %#,t4?J E%3


P\\ 6\3bS# T!,GPVP] 3!,#z&P
!PcV#bP#OP\3# \
,*P!VGC ',
*P!G \
P !b
O ##
\list

\lo_export loid filename

! 4P,b,*  loid  !GJT#tb


h fi#Pb  ]
\!b,@P V&P
lename
bO#
 \(
G,h 
!b
lo_export
O
#
G,t 
G,

}

Sugerencia: Use \lo_list to find out the large objects OID.

Nota: See the description of the LO_TRANSACTION variable for important information concerning all large object operations.

\lo_import filename comment

cb O!](PcV:,  b zb (


*P\\ #
P,2!I\+@
foo=> \lo_import /home/peter/pictures/photo.xcf a picture of me
lo_import 152801

] ,GP!,< C 
P*\P,XJ_L] 
 nb#\\!J#&b#*,GL JP,n,,O*( !,GP
]P\\!,W#
bV \ !,V\\,# 
,22 P*0 #
,# 6 W+\\<

#b4 
*P\\S'bb,@nP 4, !
*!( zb  (P (PI<G,  ,C  lo_import
<G,t
3
,

Nota: See the description of the LO_TRANSACTION variable for important information concerning all large object operations.

P#hPhPGb,z44P,Ztb3Gb,T !bz
 # hP#

\lo_list

\lo_unlink loid

,b(
'P


loid

P
!

Sugerencia: Use \lo_list to find out the large objects OID.

Nota: See the description of the LO_TRANSACTION variable for important information concerning all large object operations.

\o

}A

filename |command

c*!,tSVW 3 filename %3b!#,GbS


G ,bLJ' %I command
P%\nO <
b#P
b stdout

V,t b>#!J *P\\U,  PJP


P '!G&G,t (#POPCPCP(G P\\!< 
 '!b& 8W P\,

Sugerencia: To intersperse text output in between query results, use \qecho.

\p

!C 't,bnb
Gb!#b2
S

\pset parameter value

h\\bbQ4 &PPP4,Gc parame*! PPn%Ot (\bP value !C ,,


ter
?4z'CtbPb<+
@
cbO
PCPt\b'
P
2J

 *bO'P#<2 unaligned
# \aligned
0P html
b, Olatex
P
4%
'#tbOz!O]C'# G,, 't,
*b3!,6G,Ptz 0b!, bT, P!b& &\ &
b!, b0J,7#P ,(Pt\L ,t P\\ G,,!
?4%
(\P!( O \  %Pt\b,ccP
C! !,,2t  !Yw G t
!,cU 2\P!,Oh 
b!,6W3*!,6Z!P\GY 2\  
t ,V<P\C&!\b  O &V!\
nY !#!cU S3\ 
P\b
!\#tCt

format

T\\V\t7, 

, % \3P!V6 3,#   &  ! ,!4
#Ctb
\tc nYY\! V#hbtG0!7bW
btb 3P PY-LW!,t b
border=...
! 
't\\

P x
expanded
cP'b#,O ,cP\2 ,\cC!\!
, Pb O#P\<#
\
P#
,
%P ] t &\P!]'n ]!bJ#P!M n J
#
\ PbR\P!
c\P!
OGCzPhPC\
border

G,*PY\]#bt7 h UCtbY ,


0
3  W!,%P%b6%  ,G67\
P  3\b3bt  P4\ ! PPGJ##tb \pset null

null

"(null)"

}y

c LtbPC%(0P!bP\P! z#


P4  , P<c\ b L\\ tb*Sb  
CPt\\ ,2c4'bJh!,#b  \pset fieldsep
 '!Ct,P
|
_'\P2
"\t"

fieldsep

z,*< %nbOb#G%\7P!\P!
O] #
,t
P t
tuples_only
I,Lb,<#!GCzG!0\# P ,cbt
P\PY 4P\ !,t b  P!JPbc Yb
P\P! P0bz&!b
O P
recordsep

title text

c< ]b]P#G,b3Ctb\G L\


' b!'bI2!\,O
b
O2
Nota: This formerly only affected HTML mode. You can now set titles in any
output format.

 P T S text T
?4#h%%Jb,b%L*,!< !Y0b(b
n*P,cO cellpadding P bgcolor @#P( cP0
M#CbGC border  ( (,!b#*& \pset

border

tableattr

I] G<!Jb2 4P\h


? ( 
bO4
# t  # more
O<
W *G psql P G,] L\]c h\
\4P    'P4&\z#  'b<#
P\JPV <*, r < L\P!!b( <t
P,((PC#OCC,!
\hP( #
b]OCtb<xC IP
\ zc,C]G\
P ,3b
' psql
#P Cn

pager

b0P P !bLP\PU ,66 3%4U[


G,*bP
Sugerencia: There are various shortcut commands for \pset. See \a, \C, \H, \t, \T,
and \x.

Nota: It is an error to call \pset without arguments. In the future this call might show
the current status of all printing options.

}}

VC

\q

psql



  T
O\\\(!b*zW%,c PPC#
#tb,b
 P , G,
Wn

\qecho text

b<,t
!,tbt

\r

\s filename

t!P(G JP\\7 GbPtb


G
&P\b
Pt4# bb% & b2filename
 bhfilename
4( psql
(P!3b
0 Ptttc
Nota: As of psql version 7.0 it is no longer necessary, in fact, to save the command
history as that will be done automatically on program termination. The history is then
also automatically loaded every time psql starts up.

  TTT
cbL ]bz
b
 !\ P]!& b
]bb\P!nname
 nvalue
#
\& J]
b# PC!2cVG,] 
W%%*P\\  <
0\0Zb6 ,t ! !z,
G,*bPP psql O!b
?4   #P\ O70b  WPU#(
,Ozt,O,*2 V'!P*\,3 'Ppsql
t

S

\set name value

Nota: This command is totally separate from the SQL command SET .

Ibn <!JPPP\\ !0*PP,2


*P\\ ,zb \pset tuples_only
!VP,

\t

\T table_options

?4#h#bJGCJPbhbJ<,0# 0 L(bJ !Y0


bc\P!x P\\!I \pset

tableattr table_options

\w filename |command

 b% *\b,Lb\ 
*P\\ command

filename

&] 4
}

cPncb!,VE\\{?4!! c!,c

\x

\z pattern

\pset expanded

!Ob%S !b 
P]C
\GPL,<#\,O (# O ,cP
\O
b0V P \ 2
test=> \z
Access permissions for database "test"
Relation |
Access permissions
-------+------------------------my_table | {"=r","joe=arwR", "group staff=ar"}
(1 row )

3 O(PP@

O,\/%"%%"M&hC,t\P
b
@JG,
, #O\O%( *
&." ( "%%"%&." C%O\$ /W"%F.&
"joe=arwR"
\ joe
\ V ,b
(P# '
@ P
8 /%"W%"w&S
$ /%"%F.&7\GP
"group staff=ar"
staff
@

"=r" PUBLIC

' \\
S

\! command

b1M :`-5

1.3 n-.3

&b*,G,t\

!(0%b
4V c,*b( ]44P\\
*
\b&PCt  ,t,
, #' Icommand

\?

  3P\P3
 \I4,CP\\!

Command-line Options

 zGJP!
! b!4
PtPPP  #
b
CPz2
psql
b,L
P#PG,\I
 , 
n %b\ 7] \V,O %%\PG,!&G
%  ,C V bO\P ! , zb]bJ <
  all
?  
c#b ,%,0Pz! O!IbP\<n #<
<

B

 *P\\ query
c< 
<b0c,!b!,t#bt query  ,ct L
G,z# psql
*bI
\P< !&J4 PhP\bJ(J L,
query
 *P psql ,*b * L'* *P\\<
!3P\%z43
\b \\!2cV ' O3
 ( <4 psql <kpsql
@

echo "\x \\ select * from foo;" | psql


 ! dbname
zC!, &\&P &!b<J,*nt bV
O '!P Pb!P
P\\
dbname
 , 
P !t] %G,h3 <, ,bb\
 ,
  queries

 ,  !!
! P
%*b&,, '
z \ ( P\\! P
*V < h0# %!<G\P bJJ nP#\
(OVG,b0
,
 v J P # psql
,  filename
4] ]
L %P]P!&, P!&b
tb, zp ?4bfilename
! '&hP *,G psql b\,I h0\4#h,
b
,tPP\\x
%t
4 Ob#V!b* #
,t
 # !3 WI  -f ,psql
'GP\ Vfilename
Vb
 
P<\G,]# \I V V hG
bS#! tbYP,   T 0P ,  thG
V R :]hPW
 Phtb7S,cb VG\
b 3#P! &Pb 33b3,,t  (
  P separator
JG
] TG,Pt ]],x%%i%%UTP
% separator
 PG hostname
c] P(\0PO #\ S postmaster J
b   <CP P\\!bP3(P\3#PJ4!P\3P
 b\
zJ !UY
b2I JJ,( \pset format html 
WX*P\\<
 
Gb<P&!b #,cbI  ,hP *PP3Pb('
,O O(\V
b  P*P\\x
Wt



 b filename
!zVbb filename t OV 'P\\xW
 Pt port
c,* 3 <cLP T\ P(J7!P\ &
cbPP postmaster
L,3PO,*bPI ,Lb0
!'   \,t, CP b ]C C 
*P\
b\ KJ_
  assignment
?4#%Y\ 7PPJS 0b02
%%W 0\\
z#P#  P #WG,b \3U#  Y,h
Gb7GC, ]b VPhPt\3!I_ PTPSb -P

format=latex

c,*4 
P!Sb#PtSbz T!, <tb#*P\
\G, Wpsql
P!
\bb2 r PP7  PVPh
PP psql P  GSG,&
VJ!3P 0&b,O#&
  \-c

2

 P ,P separator


J
(
3t,Pt <<,b 6 %%I%H
#separator
\\<
 G ,
S7G ,T\P! h\,] 0&]P\,S,V 
%\ 0 * # PPSb *,n,c,*bW]#,IJG J
!
, 
&3 \J J#Jb\,LJ %4\P
#!n
Nota: This mode is provided for those who insist on it, but you are not necessarily
encouraged to use it. In particular, if you mix SQL and meta-commands on a line the
order of execution might not always be clear to the unexperienced user.

 b 
zPbnPP\\\&\nP  nP,t ,c*!
P
b,b 6W2
 b b table_options
?J#P0%,*%Pbb%(#  !Y(bc8W%
P!b



U
CP\nP< J!,L\JW# ,JP3
!,psql

PPU!,b V<P*,!#<z\bTP%3
!\%\P\b#P%#
],
4,\b#!b,  .S4PtSbP -U  -W
b(<
 G,t\ username
b] <cO O username ,c (!,2xP\
',*b\
GPV! PG
 t   assignment
,tPt\(]t&G\  WP\\<0b P
\Gb&\&3   0zP0 '*P\\3 2c
G,V %bn 4! %G\b%!PJ!
,tVb
PGb PhbPtP<\ C
#tb,#
0  
P#< psql ,tP
7 #
P7P\OJ#,#%!b
,& 
G2 <# Ppsql
\# Ph
b
G,GP #C3 
!c
*Pb#
\b *P\\
W+%Wt
?4
h,tP
L
P\G0G#PS\ '
*Ub4 Cpsql
G#PZ ,b r  4t,7 P
+ 0b4,*PPT\ (\PGW  JPP
7#\tcL7#ZP\O4GZZ #*U
G#P3 b#
,*bP3b,\#
 ,c,!,
z(P,cb!,3X\\! (OV
P\\x%
* 
P# 3 psql P\\\,

Advanced features
Variables

!zObP,!\CbP\\44L\\ 
psql
P,t4 Gb,   <(hb4,c#P
Lhb! (0nh h#

<

\\zL & '&'4


  I 
psql \, P\ \ W @
testdb=> \set foo bar

 tcXP7bY cYb *Pb


& t
' '\
# ]P#

\,PC P\\8@
g

testdb=> \echo :foo


bar

Nota: The arguments of \set are subject to the same substitution rules as with other commands. Thus you can construct interesting references such as \set :foo something
and get soft links or variable variables of Perl or PHP fame, respectively. Unfortunately
(or fortunately?), there is not way to do anything useful with these constructs. On the other
hand, \set bar :foo is a perfectly valid way to copy a variable.

(Z.WO# P(3P6\ 3t,V\T  4


tIP!,bt '
P\\xW%%t
\,n%PGzPz,b \ V!!J
psql
!,]\Pc , [? !\,Pz t,n bb*0
@ ,J!(VPbbh z( #z\<J,t
psql
!,&b< LP[?4  #
G<] <J  &z,&PO(P
P (PG &&!P\\! L JP
 PC\ PP,J O]  *z r ]P,P   ],,
t,%PGnC ,0,b%YCW\,tJT!2
c70\c\ P\bTY #b P  z? <P(
Vb#P#
r ?JU
]\]! ]!]P 
tb#,*b\n* &L,!,,tb\
P 3*Pb ]!,G'!  * &G,2

'&b
(,0b6P4 \G'3#tbbZbY \!
 bPall
J ,4tWP&,c,*b<*c ]P  Gb
G
b -a
G,C:

\,,(P(( 0
G,V '*<
bqueries
P3Ph (psql
-e
 v J !
T %t%,OY0G \\Y% !b
 <  #( <#P# ! PGb,z43 b< 
!4G\'*b 7P
P#SP\PYh tJ\
!PI 4'(b P#Wn%Pbn3 J
3I
!  
#,(<\bbP!I( ((!Y7#\bb
t2 Ot&##Ob cVWv?] 
c  # 
( 4,#4O
4 ,T# 3
,  b Pignorespace
tnbV JP ignoredups
,
\
PP b#J
P!,<>? ]P ignoreboth P\& %b#
b Lh3P ,'4 7 PGP 

b&\!
L3P P02
Nota: This feature was shamelessly plagiarized from bash.

q

c!c\
'\P\\!O4P&0 '\\ Ptc2 '!P'
JLL
Nota: This feature was shamelessly plagiarized from bash.

4!bJ W%*bP,Wn 
,,t\
P 3*Pb]!, G'!  * &G,2
 ! 
G, !00   *bG PP  b0b

 psql #
\b C*bPCb0]\' C\# 
t2(P3 PL &Pb\,I ' t L
\L
!,2L
Nota: This feature was shamelessly plagiarized from bash.

%?4 
P' G<bb Vb!6P =$ /W"%F.& -\%Z
*P\\\< (
OP# b3b
, P
',cz4\\ O,#!<
 v ?J#; ? ! 
P3G' 'PcV3'P,b,b*&,*b'!
!,
b4 'b c &Pb\Lb#
btGb P
c<
!\bb#P '&P,b&\P'\b c
Y#YY,bt*T',!  bP6ZP
psql
V P0(PPbbtI\\!iW+ % %% W\%%W
h\G\\b %b7T 'b!\
P P\ ,!J<P* !b%\\4 P
%TT !TLPZ b%GP\'!#P P#j
,."% $
&2F*O$ /%*-&. $74 #!&SP*
b(#'!'G
,Gb#
!*bPPC\V2
c P C#b!PC <'bP]PW P,* P
\ Pk P M 
!(bPP*4
b2CP4#b
P&P!L, P,b,*b h! P# PP0bb%\J
<,b \ L(b4P!LPLcC*btbP4
z\\I



c 
!,! ( bGJ,*P,
S,tP  %#\Pt\,
zr 4%P b \, P\\ %P  !,V
!b P&P psql hGP\b\%Ph!h ]
O t#P\\,!,bt2 &G##P
 (tn#Cb\bJ\ 4\J P,n 4P\Ptn#
P 3,tb psql C  -f PP psql
#c,tP!!8 J! hLP ,c,tP!*P!b
*P! 

V!,4<W%**\P,Wn 
,,t\
P 3*Pb]!,G'!  * &G,2
 Y!%  U%  Y%
(J P <\C psql G,h!C0%PPVc
| e J_ o
\C_f
P0
VJ
<4 &*P\\#'PP -q tOP4P
G ,z#b
\P!
 v

2  v

z ! !#
<
(G,C
P\\ Pb -S Z*3CPC
 #b\
z !!!
<tz
O
\b -s
4c
!,3G,4P6tbTP, P L\3P
*Pb,
*0  ! #&G,2

SQL Interpolation

4%!P,, psql t,!! cV%Gbb(,tPb_


, b%!CcVb (Gb'C nVb], (
\'#
*PP3 :2
?

testdb=> \set foo my_table


testdb=> SELECT * FROM :foo;

# # 'b


 ''PC
t,
O*P G
# 0P my_table
bO * P\\!ZP\\
 
OO\%0 0PU2z 0bbPT#hO\
Vbc4b
?CnPP VJ!bV 'G,tb  0
b\],,0*,Z?J PGC (\ 
3*P bb]PhVb<,thPS V!Vb4W 
*P

A

testdb=> \set content \ cat my_file.txt \


testdb=> INSERT INTO my_table VALUES (:content);

 4PG4P #
, ' 
\ P\G
P ,T\  S\  h 
!Pmy_file.txt
Mh## P' W
3
OP*,G(2 (P!&!
#
P sed @
testdb=> \set content sed -e "s//\\\\\\/g" < my_file.txt

O (PtI!,PP n V,GPOz i@p?4b psql


4G,  < sed -e "s//\\\/g" < my_file.txt

bS 3 
V #!!Y]P#S ! V!Pb%Sc,*b sed #
z\b -e  s//\\/g  sed t,O <PC*L '#G
P P
## ,'G 
PJ
]* P \#\!4! ('G
 
b\'t,!G, & ht*b'tC?J
O(
t# %* P \ ]#,G ] L '#, ]z4\I
&]#G,b#tbbbb,\ !]P7\ nJb,
bC,

Ic
z*&*PP<\VCn# &PP#!!& @2

<PG,  ,h PM \_ J<P ,<*G
O<P# L bzzX,t,,P (P&P
t,]]!Wz4S&\!!,W\ G  ecpg , P
b%Pht*,<3bC'O&PGb,z4I,GP  

PM !t


Prompting

J P\ psql 'JP\,WP(** J %t,


 Y!%  Y% \  Y%J*P&\,*,G

!t ,P \C2\i# Pt\P\h h
G,7 
&J c\%V&7 ,\\%n'
,7! psql
t% V,t3#
b\ bW# VG,\*PP
!&PL#hPG,<+ &hG,# P#c4t %\P\\
33LcCb
#
bO#
,t\
44Ph 4bJ\nJ
tWb ,c! J
#\tOb< ,!V 'I  tb0P ,hbc
!bb< Gbb(+ @
%M

b!\'
!b'P
4%!\Pb2

%m

b!\'
!b',n
t!Pt

' Pt!\,h
!b
O,

%n

' t\
P3&P(PhPPb G,h\,

%/

' \
PC
t*C!bG

y

%~

!


b2W!,
!b
OPh!,!b,G

%/

%#


O]!z
 ,  G6M8

%R

V\C &Pt\a% W'G L\! M LP <G,GP0


!GP, '! cG&   CMW %%PG 2t0\C
J ]G,JL,t  JGJb (%!P!]P !,
!0P  
,c,O\ ##MCb\b
  J PSpsql
%!4 /* ... */ \\, PL%PSJ!4
b#P\+ ]
,*
M :'b 

%digits


b(#

P
,<&bb3 I!
digits
\
I!# &  0x
,! # & Pt P!4!LhGb,<t &
!h  
V,tb*Y]PSP*b!\'S *P,
! 0 *h OGbb<  ,t#
!,*\\,hOG\
,<

%:name:


!&

c

psql

name

2z,'
,*b

e  ]P!I

%command


bP command \V!ta ]GbP
cG,tC],**CbPP\ # %%  !,P\O'
b %/%R%# PP\2 ]E
  PCP\I
Nota: This feature was shamelessly plagiarized from tcsh.

Miscellaneous

-LbS # L< ,6\ <P]<bP#UP


psql
\,\ 4P P! hP*  VP P73 4W#7
VPWhb Vh7<P*W *S V

v 2  vc  #(t
P(btb40<\ psql b\bJ#I!b(\\!
rPX <
PP0<%P <PC <,%b
G 6 W$HOME/.psqlrc

/%"%& *P\\!2
GNU readline

P] 0 Gb P',h!b\S


psql
 '\ \ GbPtO b##
'\ .psql_history 0P \
!bV#hP!,0 , psql h(c P\b0hGJPtb 
U,
   #b*P\\bP3 P03\V 4SV b*7I#PY&cPV\UVG,t\
PSPh

psql

}

b*P\bP T*Wbt7Pbb S0!\


P P\
!bk@

.inputrc

$if psql
set disable-completion on
$endif

 ]%P( psql ! readline ,b Tb%!P*\,bW


 ,'!
 I
CP 
%,C]tGb psql !P( 0 \G
\0 Obc4%%bP ,, configure !!Jt configure !
43 ' libreadline.a

P0G,\(# 
tt   d
!,!!, readline.h libreadline.so
history.h P readline/readline.h
 readline/history.hL6Pb!Pt,'  ttS
!,&%bYT7*PU\Gb configure P  
I\
+ @
$ ./configure -with-includes=/opt/gnu/include -with-libs=/opt/gnu/lib

 #P 'V\C psql P,*,GV


b'
,
0 ,!tUZb P # ,Y0! tJ

@cb( ( 

Examples
Nota: This section only shows a few examples specific to psql. If you want to learn SQL
or get familiar with PostgreSQL, you might wish to read the Tutorial that is included in the
distribution.

L ,c\( P  b%'tJP!hP2#P&
\C2
testdb=> CREATE TABLE my_table (
testdb-> first integer not null default 0,
testdb-> second text
testdb-> );
CREATE

#P PP0
b'!b.@

testdb=> \d my_table
Table "my_table"
Attribute | Type
|
Modifier
-------+------+------------first
| integer | not null default 0
second
| text
|

4 OPCP3!!'b 
'\VGP\ \P&,,Gbk@
?

testdb=> \set PROMPT1 %n@%m %~%R%#


peter@localhost testdb=>

!YG\'P  &!,
b'# !
b&P0 @



...

peter@localhost testdb=> SELECT * FROM my_table;


first | second
-----+----1 | one
2 | two
3 | three
4 | four
(4 rows)

#P  <&*P\h P,# & <IP\P<[


0\' ( &P0!b* 6 W%P\\<
peter@localhost testdb=> \pset border 2
Border style is 2.
peter@localhost testdb=> SELECT * FROM my_table;
+-----+-----+
| first | second |
+-----+-----+
|
1 | one
|
|
2 | two
|
|
3 | three |
|
4 | four
|
+-----+-----+
(4 rows)
peter@localhost testdb=> \pset border 0
Border style is 0.
peter@localhost testdb=> SELECT * FROM my_table;
first second
--- ---1 one
2 two
3 three
4 four
(4 rows)
peter@localhost testdb=> \pset border 1
Border style is 1.
peter@localhost testdb=> \pset format unaligned
Output format is unaligned.
peter@localhost testdb=> \pset fieldsep ","
Field separator is ",".
peter@localhost testdb=> \pset tuples_only
Showing only tuples.
peter@localhost testdb=> SELECT second, first FROM my_table;
one,1
two,2
three,3
four,4

4b 
' P\\!z@
?

peter@localhost testdb=> \a \t \x
Output format is aligned.
Tuples only is off.
Expanded display is on.
peter@localhost testdb=> SELECT * FROM my_table;
-[ RECORD 1 ]first | 1
second | one
-[ RECORD 2 ]first | 2

gBB

second | two
-[ RECORD 3 ]first | 3
second | three
-[ RECORD 4 ]first | 4
second | four

Appendix
Bugs and Issues

 P\W
P# 7t\]b6
!Z,
 b<*P\\psql
<P%\ bY b(PtbZbT\cb
 P0bI#
!, ,
O <
<GPt< r P
Gb
\,G 3 (\<I\

testdb=> \foo
Field separator is "oo".

O , (PC P
#PcC2
P #]\Pb # G,t
h \VGP !Ph\,
Ppsql
,h\P<#Pzb G b
3P  
CP\O\
P\
(

Notas

b
@!cO ( P

pgtclsh

Nombre
pgtclsh

!P b' P

Synopsis
pgtclsh [ base_de_datos ]

Entrada
base_de_datos

!P\
!']''!bOIb']!'G
t
,hn

gB

Salida

Descripcin

C PP*P#,t
z  3
PGb,I
b\!&,h4O\!V!'b*P,(! fM f

pgtclsh

pgtksh

Nombre
pgtksh

P( PP!4 <c%

Synopsis
pgtksh [ base_de_datos ]

Entrada
base_de_datos

!P\
!']'PIGbb
]
',t]b

Salida

Descripcin

 PPP#,tP*Vz P <c%6tP
 b4\,t%!]b(04PGb,LP<!#!] ,LG! ZfM[ fo

 [
pgtksh

vacuumdb

Nombre
vacuumdb

gB

!\']G&!'!bP(PGb,z4

Synopsis
vacuumdb [ opciones de conexin ] [ -analyze | -z ] [ -alldb | -a ] [ verbose | -v ]
[ -table tabla [ ( columna [,...] ) ] ] [ [-d] nombre_bd ]

Entradas
vacuumdb

'(bO\,P(,RQ]'\@

 ! \UT nombre_bd
!GC!,P\
!'
G&!
!b
!
&G,h\!
 
b% Qb*OP&]'!'!P(t'G,h!P,Pb\!Pt
 
!\]P!O!
!b
 ,tP
\\
\P3!,C]!b'zP*,Gn
 b tabla S columna S  TI T
!!c<!V*\,
!\&%D h\<
!'\
h\b
!tabla
']P -analyze
S

Sugerencia: Si usted da el nombre de columnas que deben ser analizadas, probablemente tendr que usar caracteres de escape de la shell para los parntesis.

b\R VbPLb(\bP<!RQ,]!
\ ]
vacuumdb
P\P!',cP.@
 P G anfitrin
!!\!0XP#070nYP#b,*b!,

postmaster
 Pt puerta
!GC!

'b <cVz ,4JJ!',cb#!&!\
P*'IP3,

'PcP
postmaster

 G,t\ nombre
#\
!&GV

!'
,*bt
7 #
 ]P!V!
P_ NO!'b,*bt

gBg

 ,
!G']C]!'P(\!(
 ,
#\b


vacuumdb

,,IQP!Pt

Mensajes de Resultados

cP!

VACUUM

?4 &!
,hn!P0!<,t - 6 cOcl
  
#!vacuumdb
GP!b!'!'P<\O!' O,\

vacuumdb: La limpieza fall.

Descripcin

hbtJL\n&G<!L!bPGb,z4<

vacuumdb
RV!%QObtLG!<P,P\!h!hGvacuumdb
,!L!PG
,I
nJ4OOP\!
 cOcl !!PcV \!
!vacuumdb
,b\,tb  0]IO!*<(,<\,(! O!
!bh!Jb&PPOX
V,P!!zP0! P&nbt
4! P
IGbn0t!P!&h!L!b0b,*P00c!b#!npsql
tc P!
!4P!ZYt!3,Gb!T psql Y!\ Q!b

libpq
Uso

t'\
!'!P

prueba

$ vacuumdb prueba

t'Ct
Pb\]'!'!P(\!

bdgrande

$ vacuumdb -analyze bdgrande

t0
0Pb\!P
Eh3P\
'!'!P\! xyzzy @

cual

S3b

$ vacuumdb -analyze -verbose -table tal(cual) xyzzy

gBq

tal

!

Notas

b 
@ !c# !\ ,G,t n 
b

@!cO ( P

gB

gBA

Captulo 16. Aplicaciones del sistema

!#%P\S!0,*Ct#PJG,t!P%7!!%!P0!
b

initdb

Nombre
initdb


]b#!

G&!'!bP(!&!PcV

Synopsis
initdb [
[
[
[
[
[

-pgdata|-D dbdir ]
-sysid|-i sysid ]
-pwprompt|-W ]
-encoding|-E encoding ]
-pglib|-L libdir ]
-noclean | -n ] [ -debug | -d ] [ -template | -t ]

Inputs

 !b dbdir
 dbdir
?&?
!JP*P,G,!J!%!,\J!] PLP4\4
Gh!O!bu !b<n8 h<Pt\PV,!(P Cb! '!,\
\btJb!0Jt]!bPt ?L ? #]!]O
4V,!!P&!V4!4!P
postmasterhC!,!4PL
!b!'
G'!'!bX
PO!,&+ V!']\\]
% sysid
sysid
z,*P Vz!,b\]
PGtVPP!']''!b
\PbP!
!,P!
,Gb
tb!b! \,

h\Ptbb&W Pc V,z!,cGGb\


Ct&zn ''4! Q
P\]\PP#*hM h\,V\a LK

#P\

 J]b!#,bO,#!O0Pb!
G(!(!Pc!J%LGL,V&bI V,!(#! 
P,\bL%\b <\&%JP! P<C
,#bt+ V!&G#P! ] ,Gb!4#G#P<

gBy

P!+ encoding
encoding
z,JVP!!P\b444%!%!b&\P!#
b\R VT P0P!**PTP!**b 0*
! P &  4b
]X
P'!b V\PJ,WV\*!tJ(
*t, Qb*'!<*P!0\b b &&,*!!bL,z\J!
*P7** !4 r  !3!\R V G,CP
!bVCt
P
bP\,POb!P\P<Xh\,x'YP#\RV,0!@


 libdir
libdir
!T3P 4!3,!]*J3G#!
!P!0C*PS*0!P !P#\\, \b
,G0,GbWC ,!WP04\V0b
P\,hV,*Pbt P Pt\\, h P!Z QI\\z<<!P&
X
Gb,*,
,GC!n**P,cR Q*b\bzc!L 4!&P
! P'GV\ global1.bki.source ,GY P!bt!\,&
*PJ!PPn !J,!b'!Ob!Ct\ z,zPzCz
2
/usr/local/pgsql/lib
b\b

cb%%!!b(,\U ]3Gb\%!

G4!V! btemplate1
cbb \\P0btPG!b6h!*!V0

]J]!%!P&G!0
!]VX
P
<!(!template1
PcV ]! template1!&initdb
O!(!P L*PP\
!]P hVP\<!\0\\b<P,!%! template1 G
\,! PLPGbb&&+ VL&!&I,\
!<(!L!P#%&C
!'!b!b]*Pt! initdb *P#]C*P -template
P*,

n!, !
!,\&&VP!b'<&*&bb\b
b\4 ]G!initdb
!bP \
,O 0% ,!
,h!L,t\n!L4!&*ncbtGb
P0 G !
W!OPb hbPt'!t
!c

\\V!!V!,t7!VK
z,% <b
\'!4P, V,
Ct4W h3 *!: z,%
(]*P#
JCt
*,<b(P* PP!b%PP
t
Pt\
initdb
b!3!&!

Salidas

*, P7P# ,0,6


P\!!b0,GC!!\\0!
initdb
Gb\P\V!& t'!]GbPP\b

gB}

Descripcin

]3,Gb\%!

!!bO!
b,z4!, J
initdb
Gb\J!]G!]!bPLLJ*P!%G,L!!bLJP!L!
!,(CP\GGt4!
40\ 7\bPP\b
P'P
!*bO<!!
],\!
!4!bOJ!J P!#b\
!VP,7,,Lh
O!P(t!P
\
Y PP0*P\
!
PWb
Vb\0G4!4!b
!b\!2,,&
!JG!!bPI !]J!,%
!!bP b!0,
template1!0!!P]  b]b]Y PP\, ]
template1
\POP<bb
#!&t initdb \PtG!
!,']!
tb
,t!PO!%J]!%PLJP\#P ,t!POJ,
0J PJ initdb** ?4!,X
P !b#G!0P
!! <+ h3*PbPP!
 b! POGP\,
b PPYP\#!# #40\ Z QW#
#]b
P PPP*,G4!P!t
?4
Ptp P%,!P!
!b( 0*,tb(
,!P],initdb
,t\t ,tn!PObb (!%%!,]* ,,!b
!b'b
!Vt initdb ~,<C!,T- VL!!J
'!'!P

initlocation

Nombre

'tP,
!&\\,!t4'!
!initlocation
b!'PcV
Synopsis
initlocation directory

Entradas
directory

%!,G,<*,(<!]!b(bt<,\J
 (4#

Salidas
initlocation

*,pP]!P#P,!!

gB

Descripcin

0K
PV\\,!tV!
!initlocation
bJPGb,z4^0!#!GPU .1234 65W3^7D 65> :94 :<3 P#*P\7\t]
G P*
!V\\,,*!tnz!\bP7G
2zC#<+ P!0P\#I Q] b<G]\]LJ,%!,Pt
\b ]zOZ 0!POt\P<z
t%P!(bObJP\!!b\! ,Obt0PX
W P(t\P
'!'!P*P\P2
Uso

tO*,&O!P!4!<C4b  G!<!ObPtl@
$ export PGDATA2=/opt/postgres/data
$ initlocation PGDATA2
$ createdb testdb -D PGDATA2/testdb

4b,\b b\&IQ bP(!Q'tU@


?

$ initlocation /opt/postgres/data
$ createdb testdb -D /opt/postgres/data/testdb

ipcclean

Nombre

!\\]\Ctb!(G,XPP!,!Z
ipcclean
bCP
Synopsis
ipcclean

Entradas

#
Salidas

#

g B

Descripcin

\\,\P\!Sh,W!0X
PPJ!t
!Z
ipcclean
bCP Pt!P!%%0PSP!S!,n postgres
zP\,, r ? b r G ?4!\btbP ?4\Gb!P%!# r #! P
!
tbh,Gb
P\]]!
h+h0
*P\Ptb\b0
 N7  Q!<G#t!bt \P!b3
\4GV4tbLx\\
\C<t\ semget: No queda
bbOCP postmaster #,
!espacio
Pi libre
% * en el dispositivo
zt%bJP!\bt< postmaster Y PJPt! G,\ P

\,\\Ctb!&P(XPPP\!PhP, postmaster 2!bV,!


P*,PVP!'POG,t!P. W !*!OPh postmaster
!
tCOE
* 4(\ P< NP<!

W V
tb ! %
!P4P  \b] #Ptb ,, *]P% 
!
! %4GP*P]P\0%!J!]4b! ipcs PG
0L!LVn'bPO,\,tb CV'!<
03  t

pg_passwd

Nombre
pg_passwd

\C!],P! 4V!'#!

Synopsis
pg_passwd filename

Descripcin

O \b
\C!P!3!,z! ,44!
pg_passwd
#!L!]PGb ,I*!GbJ,#!Jb**P!]#!L3 Oe  e  
*P 4O!
P(!O\\P<b!PO,#%,!<
!&I J!LG#P!h0I\\V&b**P Ident ,. @
@
$PGDATA/pg_hba.conf
host

unv

133.65.96.250

255.255.255.255 password passwd

0!!6 _J  JL%G!0&CG#P!
!!P]JJ RQJbO,t\cb!]Pt\
!n !0P!%!#Pt\
$PGDATA/passwd
! /etc/passwd
/etc/shadow !nCt\,& \,]!\V!V \,
\#,',CP !n*!,Gb#&Pb\b4!n ?4Z Q&b,
RQ,Lb&!b,GC!3\\%P\%!]0#
#8 @

g >

pg_guest:/nB7.w5Auq.BY:10031::::::
pg_guest:/nB7.w5Auq.BY:93001:930::/home/guest:/bin/tcsh
pg_guest:/nB7.w5Auq.BY:93001

P(!, ]!OG#P!\]+vG#(V]!]bP
\b !,GC% V,O&\nz!,*bJ!LV' ?L? t0b
!zP\!,GC!,,VP3 pg_guest @
% pg_passwd passwd
Username: pg_guest
Password:
Re-enter password:

#\\#P
!J,!%!4,# 3Password:
4Re-enter
P,\,password:
t\!C #P!%#!
'P\tP\ passwd.bk

P -u &!&,
psql
!R Q,Gb<\,Gbtb,\O!'!&]P. @
% psql -h hyalos -u unv
Username: pg_guest
Password:
Bienvenido al monitor interactivo de PostgreSQL:
Lea por favor el archivo COPYRIGHT para los trminos de derechos de autor del tipo de PostgreSQL.
Escriba \? para la ayuda en comandos slash (/)
Escriba \q para salir
Escriba \g o terminar con punto y coma para ejecutar la consulta
Usted est conectado actualmente con la base de datos: unv
unv =>

!bb!P0!
RJ
Pb!

Pg.pm

P\bk@

$conn = Pg::connectdb("host=hyalos dbname=unv


user=pg_guest password=xxxxxxx");

t'XPO!b WV
src/interfaces/perl5/Pg.pm
!(bb!P4k b <,,*P\! pg_connect *PJ(P
Pbbk @

-conninfo

% set conn [pg_connect -conninfo \\


"host=hyalos dbname=unv \\
user=pg_guest password=xxxxxxx "]

z!J\,tP!n!<<Pb,*b!],P\!%,@
% puts [ pg_conndefaults]

g

pg_upgrade

Nombre

Ct\b
b,*P!']GP#btPG#b
pg_upgrade
z (!b
Synopsis
pg_upgrade [ -f filename ] old_data_dir

Descripcin

,
4!74*bO4tP\btP(!%!PcV G
pg_upgrade
!T!V@&P!]!P0P!]btGP%!!
b%!,S\b!,Gb\z 0!%PJ!#,tPT
n V!b#3GbP
*-w\U+E%%+
\t%+%%+[%

!JGW!b!4!b'I, \b ! !


*P\bP#P+v!\
!,4+
@

% pg_dumpall -s >db.out



]!'!,!PO!
'!'P(+h!b
bPbVPGb\,hbP!O
,!Z *
P\&!\C3b,*bPt4G

data/ data.old/
J zb
% make install


hP(P(PI
zb initdb (4!V!P'\_V*Pb0
!,zGb\]
*n\b\t#bM
@]\#\b hT!t
GJ*PbV4!4P GbV*bP\ VVP\b!*V P
!%,PGb\,%Y3PP hcW pg_hba.conf b\Pt
\

\'3!Pt4!'b z!,*bPtVtzP t+ @


% pg_upgrade -f db.out data.old

!t\ P(n**P!(PttO!OObP!]O*P
t%*P,*b\ 4tP',ct! PCt&n
,*PnP!h
g g

G,n!OP]!(%,MQ ,
V!bPI!bn\PLQ\b
 #!\!b#7Z, #L\WZPtQ!!,G!
*]PL!P(!*!(!b0!
b
data.old/
O P( '!b QP(,!P(!b']t*#data.old/
!z! P2
'PJbV 
'Ct*P
pg_hba.conf
,(]P(
L b]PPGb\bt
(!c\   d d  -[+ P,!#!%J!]!PLb,!Gz
W hP\ ,P PW,*!!P#, 
,GC!\, v!\(!]\L,!P data.old/ *!
&Gb #P(,Gb!POP,!PI
J!!!P4*bC3P P3UUb!WW\nP!P
\<!,G, PLtb!
i*-O*O$ *-z.2",!<&P\&
!'P!*P

postgres

Nombre
postgres

z#P*,G4bO!':h

Synopsis
postgres [ dbname ]
postgres [ -B nBuffers ] [ -C ] [ -D DataDir ] [ -E ] [ -F ]
[ -O ] [ -Q ] [ -S SortSize ] [ -d [ DebugLevel ] ] [ -e ]
[ -o ] [ OutputFile ] [ -s ] [ -v protocol ] [ dbname ]

Entradas
postgres

'(bO\,P(,RQ]'\@

dbname

\bVP
*
P\
!
]'
!PO
!t dbname bP\]!dbname
**bcPh''!',Pt4c

g q

nBuffers

c,n\PP!!b% P0tb!\\
]
bnBuffers
Mh\#!JhL!J\,\VP\!4J, postmaster

P
<PnG,t!P<cI\bPpostmaster
!!(!P(tL4
! *,CM h\!V h'!JP&,
n!,,*b%!D 
 h !D 4*!'44,cn! r '; 7b
!
0
#\Ph,Ih!\,!'#!,!P2

!GC!'z!PVnP\Q'
4PPz!'!b!L
!O!b@c  ](* \O!,!,*bPt
!O!b!P!b!
!<!hP] ?L?3xc ?L?
,OVPG!
P!!P
!
 $POSTGRESHOME/data z<!,Pt
hPU!#R Q3!\!4Y PY! h!bWC
!**b!!V!&\P

DataDir

U,Gbt
P!O*P

bLLtVPX
Pb*<
!WV<<*P!
 P\\t,!\b C#!fsync()
4Q!4!,\!%VbtG
*P*#!]P*O4WV,!%!%PGh\&!PLb!!PI*z
4\!4 fsync() '!bPLGP\\,!<\C\bJP(,\
,tb tbO#!X
PO

P(*P(\!%\!!]bbt%!
(
O'Gb\t!GbOP#\,

 v
zCt
!zP\

!GC!,\P!a
SortSize

!#!U!\\Pt##G]C
P!P%bJ  ,
,(!
PC,h,3 P<,\,(!!
!J,# P
 SGZPJP%7V!tJPbP#P,G3!
*P\t '!,
z  ]!, t4 , *!
#,!  SortSize Pb%!\&#P'!bP
0 ,O

DebugLevel

!\b0P*P
!,t\JP\\!Pt\*P!
!P3,!DebugLevel
!P2c DebugLevel O PGb\,h
 Pb!P!
PcP0!XPIP,
]\ ]!
tP\'\,C!C\PP&!J!P',Cb\,L\bt
P&\ !W,P3 P*!%n#PJ4C
X
G
,GC!] V]\]\P!
!,tP#]\G
,*, P'#
!zP*,GV! postmaster

!#P*PTPP3\ PT,t,!,J% ]T#!07!


! 4!!bz%P -e <! L (!,&J#!,!
P%!TG\PT,Pt\b!C0
!T
*Pbt\< OP3Pt\bK?J\DD-MM-YYYY
4 MM-DD-YYYY

! nG<C,PIbn!(!bPL\&!,#!(Pt\bP
WCt0!0!0  b# P,\ b#bbW!#P
\PZ 0V 7J 2 5 ~   t'X
PO\

g

! J&\,b,&!PO#J\!%t*P
*c
P\bh!'!bP(
t]V postmaster (\O!OutputFile


+Q
\R V,70PW!X
P,]! OutputFile ,\PS!V!
tPL+ Q
&
PGP
 postmaster
J'PV*b!!
 !',t'
!# ,2

OutputFile
+Q

Y!,Pt\*PU!\CWWbJW QJ!h!#!#
!Gb0Dhbt%\!!<!]!\,0#] G0,Gb]!Mh\,
!' hI
protocol

!*VM h\!CPP\,(b%V**P\3C\PPL!
!P#
G,GP#t

VbtOP*P(
!,0*t !OCt\,
PC
PGb(!'!,tP2c
#WQ4h*
C t
G3Ph!,G@P!P!
b < d   @6  e  -
[I d 
  e d 
[ 8  ?J!X
P *
!',OPO!'**,V\,#*h\P\b
!P,<
P(,*GP. @

?E xc.c Oc.c
!Gb]P*P##\,!P!\,#!
\

,*bP\]!&,

,*bP!P Pb!'R Q,]*P\V!#!,\!'b


S T
 &,c4&X
VbP!*h!&,*,JVP @ !b
G ,G,*,*!a Q! ,\b \ n sm i h 
*P#,(!&*,( \' 
Nota: Ni los scaneos secuenciales ni las uniones de bucles enlazados pueden ser desactivados completamente; Neither sequential scans nor nested-loop joins can be
disabled completely; las opciones -fs y -fn simplemente impiden al optimizador
usar estos tipos de planes si hay cualquier otra alternativa.

g A

V0tW!0*P!WGS'\0%PP!!!7!
t*P
dbname

!C\PPL!J!bP !!P&
4!
,,
PGPGP4 PW!Jh,t !,Gpostmaster
P'!4  ,c
! P,\Pb 0 P0,Gbt!P
POP!!.Z

 S  T  S ,T S cbT


Yb%Qb*!b\\!PGb#,%PW!
!'P(\P!(*CO!z\G0!&!
*P -s

Salidas

\!&bP0\M hb\!0
!!
b\P ,CGP<!
\,'P%OCX!P,(!P#\G<P.@ !tb]!

c3\\,G2b  Qb,*bG ipcclean J,  Tb


 %V,L' postmaster
!LtccbP!+Q
4* 
'3P!t&CMh3V\C<\\PtP\ XP
P *P\!'#<P<!
Gcb%P3MhP
\\Pt]P\!]tb*t\,',_ N]z0R Q\,<P!
X
PP
G, P,t4P!tt4\V(b

semget: No space left on device

Sugerencia: Es posible posponer la reconfiguracin del ncleo reduciendo -B para minimizar el uso de memoria compartida por Postgres.

Descripcin

!!\b
!4!P]!P%!4G,'t!,\b0!VS !!
Gtn!!, Q a h*\tV,]!!,t,WP' r ?
\b<PP<\PO!
!P<Y P3,GbP!PLh postmaster 
&*P0!&G,O'!b
?4O!
P< P,\bPO!tb(W
QP,!0'P\PP!'!P(]btI V,
!\CE
P,
4J!J!PZ V!JVb !%*PIP 3PL3
!,3Qt%!3\bPO,!!P\bt*!b
\b' P4 P\,P(P!P*P#]!P
!\,P dbname ,G,*!\!V0V!!b!
b%C!4zPh!&]t,
!',Pt4c
dbname
Notes

!IGb\b!!&t4,GP<,\&!4\\P\tb!VP\

Z 0!\R V  ] [\ e,
ipcrm(1 ipcclean(1)

ipcs(1)

g y

postmaster

Nombre

cbbP*!\bGtV!'b,

postmaster

Synopsis
postmaster [ -B nBuffers ] [ -D
DataDir ] [ -i ] [ -l ]
postmaster [ -B nBuffers ] [ -D
DataDir ] [ -N nBackends ] [ -S ]
[ -d [ DebugLevel ] [ -i ] [
-l ] [ -o BackendOptions ] [ -p
port ]
postmaster [ -n | -s ] ...

Inputs
postmaster

nBuffers

DataDir

g }

b
P(b<P\,cO#G3RQ]!'P\!Pz@

!]zM h\V!'bO!
\\Pt*P\b!
,G
!\P4t4'P*,GP'!!PLJ*!Cpostmaster
PL*!b\!
&,GbLP0i Lb !J!Lb,!!D &,%JLG,'!
 V'*! r
; 7# 
!GC!,h!Pt7]*P\SQ3!Ph!!b4!#G,V
!PzP
,G,* J P\!
!2Pt0,Cb\!V<,P
!44!4,Pt\ ?L?z ?&4?X,GYP! ,P
G&],z!Pt $POSTGRESHOME/data tcP
P]L!
P7#C* !R Q,!\! !*Pt7b\! %
Vz\P\xV!'P\P

nBackends
XP
Mh

!C I\ \!4P*,GP'\C!PL!n4P\GbL
\!4t2!0P!*P#,t\!
b'PYP\
!! 
 C!G,
z! bTP
X
PI\ !
L0UG
\0,!GPP tb
0Y CPcb\n
*!b\!
*P\0X
PI\0!\P!!*!0G]\C4PGb,<%
Gcc*!zP!

!<t&\P!VPht!b4,
!'&zCPJ!
P&&**P0postmaster
'b\c!!tJLL*PP<*P
GC]!OnGb<C*P%!, Q:LbGVPbbJ4
P!&!,t*P'!,n\'!4
'G!
Y P!n
!!
,tPn P P0!,GbCP

!GbV\b
!,t\V*!7!4\PW!J!
tPWCP!DebugLevel
P,n!P2c DebugLevel ] P\Gb',pP
P! b P! !*PIY7!XPct#,JJ \J 3

t*P#,P4!z!PP\bh\,Gb#XP(P
\ *!!#,b#!!PO#b P0!]n0b%J
G(,G,*< h <(!P,n!,+ Q,V0P
\ &\P P& !L&,t\I!<# postmaster
!@

DebugLevel

!P J\P\,!b0 <c 7\!0


!'!P\ 0btz#b]P3P\bO 
]\P3
+ V!z'!P\4%
Gb3 P\b b\PZ\,!(P<zc<zI\RV 
%! !'P -i ?J!XP  <zc#,c\P\b
!'P\

BackendOptions

port

!Ph!
<<!4
GPC!
&bP!PPpostgres
n*!,C!BackendOptions
b(b\tO%
* G,t<P*,G'tb7 postmaster cC!4!4P,
*Pb
P ,P<!,' P]b&\
!,n,tb\ (zY\#IPT! !nGP,!!P\
4]z,0z postmaster
!,P&nPPI(b!!
!'O,OP!4!P!z!b*t\OP
!J
<!<PV  c  4L,GC!! &b\
*P\*!b\!,PP!4!P<'P\!P
\\b6 J,2cG]J!Gb0C,!b\! %b
Pb(*! psqlc! PL Pn\\4,
V%\OP*P(!
R Q,]!
\!]'!
P  n

!IGb#P<!'RQ
*P\!PO!GC(,!
#V!&
#40P,t\&!'\P\!P
]PPS,\\ postmaster ,Sb]P UfM d 
: i[L + d < e 8
[ e +C d 8 [KC  Ci e 4 [
!3,Gb,3,GbP ,PJ3P!V!X
PVCPV
,t!PO%b\O,OJ\\Pt4#G,X
PPL\tb!PI
!WZ Q!!S P*,GW!3%3*P!3\,t,t Pb*
P! Q
P\!'bOtP(tb!P(!'b\t
!P,<,OP.@

, P<nb!bt\tb!x44P\C
! postmaster
Q*P \ shmemdoc I\L\\P#P
!',Gb!P('OX
PP

g

!, PbP!LP<X
P<CP(!P!P,R P!,<]
 SIGSTOP ] PL&b\!Ph\b<&P\!P!
Gb\],,*PO!'Mh\
b(OP(!,zG,t!Pt
N postmaster

Salidas

c@,*b\ !Qb,*b,P\! ipcclean G4% 


!,\xc!J]P ,\
  postmaster

P!MhtC
GGb\% ,!]h\
\%*P\b!J#,XPP bP\0G]!],(bL!]*P
zPtbJX
hb(Gb<
,3 P ,3
*P\#P%\\PtJ\tb!postmaster
%0R Q\b]!G,X
PP<\#_ N b
,!
,*P3,tzCt
*,\(C P\Ph!
\\P 
*P\b!
G,X
PPI

semget: No space left on device

Sugerencia: Tal vez pueda posponer la reconfiguracin del kernel disminuyendo lo especificado con -B para reducir la utilizacin de memoria compartida por parte de
Postgres, o disinuyendo lo especificado con -N para reducir la cantidad de semforos que utiliza Postgres.

ccL,*,'P0<\ !<G,&LLJIGbPPh
GP&! postmaster tYP!PG% ,\\,n,!V\4XP&P!J!,
\,,O\,!'z\

StreamServerPort: cannot bind to port

0Gb\(CP<, r J

% ps -ax | grep postmaster

0Gb\(Vc,0 \CO  zS\V O]


zY PG,!V\cb7bP
! postmaster 7t
TZ QnG2,!70tP bb,*
T,tb !,b
! 3P -p cI\R VY0P,]0\#!0Ph!
3,J*&\!\,4b!3\\M h\
!postmaster
#,tb !\,\#P!P b,\Ct
*,t4,n,tbb!V,&\b\, ,!Vb
3\,G2b!%(,G,*6M h\,S!3SG6Gb\\P
tbP!J,t,PLb,\ ! ''!%4!,t
'P<P#M h\V\6 L
!,0G,P!(V\'
G,!4V]
% ps -e | grep postmast

44I3J,LJP0#b#(! post \\b !!3,*


\tb!P!,
master
!n !3V
*
! 4\,\\Ctb!'!VPGb,V
GYUM h\S!#W!7P*,G postmaster ,GbPM 

IpcMemoryAttach: shmat() failed: Permission denied

g B

 XP<!thGIXPL!%333\\
G,t!Ptcc 4PPP
,t0LXPh b
*b ipcclean 'b\,postmaster
tzPI,PP postmaster tP! P
! Pb'],P!b%CP
P!'G
*P7!VP]z#\P7!VP%\b%!4\\0\tb!


Description

\Gb

P\**P#bLP(P*,h!z,L!,zG,t!P
postmaster
ZQ,P\](*P4!b!P\!]XPP!zZ0W%XPnO
,\b
!Cb,G  2
3h4!
#z!'*! P\ #postmaster
,#G,!Vn
<++V 4  ekd [U% e u  d !.
2 [O e . 2 C+  a|W[f e  d d  ?JW Q
0GbPSn#W!Pt!P% SM h\,\Ctb!
c',!&tbnX
P(&#b\,0]\\X
P]z*!
postmaster
!&(,'3,P#M h\V!'V!*
Notes

z \%4JP C\  SIGKILL JP(V*#! postmasG! O!,,Q%!b

JGUNbt
ter
!'t kill,*2! SIGHUP SIGINT SIGTERM
% kill -KILL

3\b
% kill -9

\! P<
!LPtP!,'\\P&P\
!&VXPPpostmaster
LPGUQ
h&t!0\  postmaster P
,t
tP P! 3,b PGb6b4JPZPP\V!
\\Pt
*P\

!t,P0b\b
!IGb3(!L%CP\<!\\Pt4*P\ ,
!G' ipcs(1) ipcrm(1 ipcclean(1)
Utilizacin

t'

postmaster

!bP(PtO!*,t\! tM@

% nohup postmaster >logfile 2>&1 &

!3P\!SP postmaster U,tbS,\!TJU2z!b


\
X
P(\ ]XP*PXh !' postmaster
t% postmaster 3M h\0!]Q0#P\]!t
 @


g 

% nohup postmaster -p 1234 &

!VP\!bbP postmaster \P!PGVbIV,'!x_


P!CPtO<b postmaster
b! ,P<tt
!
&\!
% psql -p 1234

c]L!'b
% setenv PGPORT 1234
% psql


g

 8@

Captulo 17. Portes

!\!!0 Jb!0*P\!T!!,GP!
, P\!P!PGb,(P\ 0%]C]#,

b h\]Pt*P

Plataformas actualmente soportadas

!0P\P\b!'b]**P Ob(\ #!P!@


&+%H%U8%%
OS
? \

] 

r
* r L
- J
zJO L

 \ J ,
 L

 Cz
 L
 L
I! U
\
# r
# r
# r
# r J t
# r c8
# r
4 J
 c,i J
 4 
P
P

  -
0

#
#O#

Procesador
;LLL
;

z
x
?J
? 
z
Y
?4
tX
z
U
z
 L
 JL
X
z

X
#;JU
c
0%?O

z

;
z
;
c
zC
Y
z
z

Versin

I J
J
+
+ J

+
J
I

I
J
I
J
+
J
+
J
I

+

+

+

+
J
+

+

+

+

+

+
J
+
J
I
J
I

I

+

+

I

+
J
+

Enviado
 LJ 

Apuntes

\?J!*.O#b
r *LYI
I4  U@L

P\b'
+
- 22!P
 LE
L L
I
r
UzO  X

 'b*
Uta
P
!,\  #
PV
I
cP zY
#,tP: LL,LI
#,tY2 LL
c
 ?J!XYU
Q
r PVYI
YOc<; LUtUb
!U NO,\
I ,,\4
I ,\4
LU NO
\ ?J!* Y
 ?J!XYt Q
Y,<Pt[
I c t
b ,O\bI
c0P
Ct
*P\
!* Q!P!4!P
ct,!P#


 LJ J
 LJ J
 L L
  LU
 L J
LLL L 
 > L_J
 > L_J
  LUJ
  
 L J
 L 
 L 
 L 
 L J
  
 L 
 L 
 L L
  L_
 LJ J
 LJ J
 L 
 L 
 L L
 L 
 L L
 LJ 


g g

P\O!h
+
I  ]\RV,0P#
+ J C4 \P
!V*Pt\*PcCR Q']\\]#P\\,!'P0!']
Nota: Para Windows NT, el porte de la parte del servidor Postgres se ha conseguido
recientemente Postgres Se requiere de la librera Cygnus para compilarlo.

Plataformas no soportadas

W4bPt\JPU4*,V bb!7T Pt\S


btJP3]!btP3,GYP!t   O!(WQ ,0!
!b
 QO
bb

&+%H%%X%%
%%%
OS

S 
#bc,
0

Notas

g q

Procesador


z

X

Versin

I
I
I 

b 
@ !c# PGb,G z!Pz\zP x

Enviado
 L L


 L L
 L L

Apuntes

c 0Q\C
cVP
b_+
\!V*P#

Captulo 18. Opciones de Configuracin


Parmetros de configuracin (configure)

!zx'P\bc(!P<,

configure

G
C!,!'P,,G!

$ ./configure -help

!P(,OP\,,!0!
,V,OCt
O@
Nombre de directorios y ficheros:
-prefix=PREFIX
ficheros de instalacin independiente de la arquitectura en PREFIX
[/usr/local/pgsql]
-bindir=DIR
ejecutables de usuario en el DIR [EPREFIX/bin]
-libdir=DIR
libreras de cdigo objeto en el DIR [EPREFIX/lib]
-includedir=DIR
ficheros de cabeceras C en el in DIR [PREFIX/include]
-mandir=DIR
documentacin man en el DIR [PREFIX/man]
Caractersticas y paquetes:
-disable-FEATURE
no incluir la FEATURE (lo mismo que -enableFEATURE=no)
-enable-FEATURE[=ARG] incluir FEATURE [ARG=yes]
-with-PACKAGE[=ARG]
usar PACKAGE [ARG=yes]
-without-PACKAGE
no usar PACKAGE (lo mismo que -with-PACKAGE=no)
-enable y -with opciones reconocidas:
-with-template=template
usar el fichero plantilla del sistema operativo
ver directorio plantilla
-with-includes=incdir
sitio donde estn los fichero cabecera para tk/tcl, etc. en el DIR
-with-libs=incdir
buscar libreras tambin en DIR
-with-libraries=libdir
buscar libreras tambin en DIR
-enable-locale
activa el soporte local
-enable-recode
activa el soporte de codificacin cirlica
-with-mb=encoding
activa el soporte para multibyte
-with-pgport=portnum
cambia el puerto de inicio por defecto
-with-maxbackends=n
define el nmero mximo por defecto de procesos servidores
-with-tcl
construye interfaces Tcl y pgtclsh
-with-tclconfig=tcldir
tclConfig.sh y tkConfig.sh estn en DIR
-with-perl
construye interfaces con Perl
-with-odbc
construye el paquete del driver ODBC
-with-odbcinst=odbcdir
cambia el directorio por defecto de odbcinst.ini
-enable-cassert
activa los chequeos de afirmacin (depurando)
-with-CC=compiler
usa el compilador de C especificado
-with-CXX=compiler
usa el compilador de C++ especificado
-without-CXX
previene la construccin de cdigo C++

4&,\LbOCP\<!*P\P!Lt,QGb
(,G,Q*(!PGb,IGt\ ,\L\!O! W\!N!
?


g

!,!* -without-CXX Ct'cP4&b!PCt&


t'P*P! libpq++

Parmetros de construccin (make)

Y! VP\b@P*P!PP6Z!Ub%,Z\b!
!'
GbP3!&
!4\ P P PPn!,4*PP*OVV 
! S,G bPn!!*P J!WT Makefile.custom
bb3! 
C*P 0!,L,#*P,!bP<%bI0% , bI !0*b
P W!,\\,P&bWbY P 
P#,O P*
make [ variable=value [,...] ]

4P!
\ (
,!*P.@
 c


!XPOb#4PtPP!'

r
!*P#!'C**POb!!
! r
*P#!'O Q, !QP\!
%?
!*P#!'P( P(!

0z
r
*PJ!! Q, !] QP\! psqlODBC  r

JPPOC P,\bhP&4&bx
h!2U Ph!&
\!,b3 P!VV!!#*P! !,CG,t!P

Postgres

%?
!,*L.t&cP\!P! ,&!%pWW!
*PP(CP\P!b
O%
?
!b3K
!OJczP !t !J
!OCP\<!%P*P\!] t -v
%O,
*!VPt
{%Wn
hPO P\bP!,,*bn
4cM v
?4,PP!zbI


g A

c%O!
P !Y3 P P0tP]!P\*P#!
2#
W
GV\P'Jb7V&r tP,!34!\b!J!P\b
,' Y3\CO P r P0 doc/src/sgml/
z% !
P],Gb  PPWCtPGb 0!P\*PS,#!tb!
W
#JG'\P r &b#YVh!!%'!P\*P0!<!P*\,
P(b' Y3*P\bO*P  r P doc/src/sgml/

4WQ  #t\C!
?

Makefile.custom


Gb\]!]!,\k@

# Makefile.custom
# Thomas Lockhart 1999-06-01
POSTGRESDIR= /opt/postgres/current
CFLAGS+= -m486 -O2
# documentation
HSTYLE= /home/tgl/SGML/db118.d/docbook/html
PSTYLE= /home/tgl/SGML/db118.d/docbook/print

Soporte Local
Nota: Escrito por Oleg Bartunov. Ver Olegs web page 1 para ms informacin sobre el
soporte de lengua local y Rusa.

U,&b&,P,*b%L'P\ NMQ&VUP h  YL,*P


V4P7,P\VVb!bPbVVb 'P  
W VO!\thP,LPLbO!% QP!,tPhPP
\\#JGP4\n ,]  QLb!JIL*P&
\Sn*7b\Tn!,t!h7\ W VJ!b
%Q]\! Pl PtP!0!b \WC%PtP
Gcc(zbIc!tc L\zc<c\cW &]
 QI !C\CtV v % OST v  % ?(! X
P
b4 N!,Pt' v  #!4 ? 62z&\ P(\!&
&
!&,Gb' LV% Qz4P(!@P!PPt,\b
PtP0!,'!btb]
!0,#,*,]0tnGPPtbn\Pt0P \!P
@,(P\ @

#P!&!,!\b4PGb,n
!Vtnz7!,b,*b<
P!t*P*PJPP , &]GPPtb#*
!bPt\Ptb\,*!*#PGb\,tcS]!,!&]
'!V,Pt3 v % OWW v  %?&S,!Jt<PGb\,&P
]P(!b P(*PJPt\PP*!bn G#bJ G
PGb,G @


g y

#!/bin/sh
export LC_CTYPE=koi8-r
export LC_COLLATE=koi8-r
postmaster -B 1024 -S -D/usr/local/pgsql/data/ -o -Fe

VtV#c P*>Q
/bin/su - postgres -c "/home/postgres/runpostgres"

4 PVP!P   #Lt\ GPPtb %2b


!3% ! \! ,   \ PJ,\!
XPJ,#6b0\RV,TPP7PPtb#PJ!,,PG
%+H!#*!],Gbk@

8:17[mira]:~/WWW/postgres>setenv LC_CTYPE not_exist


8:18[mira]:~/WWW/postgres>perl -v
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = (unset),
LC_CTYPE = "not_exist",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

!P*J,(!Pn PnP !PG,P*,!P.@ /usr/lib/locale


 ! ct /usr/share/locale
!I
- L
,X!\ ,btV7P P/usr/lib/nls/loc
6 r bY T  
*L\V, /usr/lib/locale /usr/share/locale 
,Gb


tPI\]<P
\P
P

Cuales son los Beneficios?

z!(GW#P!PP!#t]!,<]b3t*b*,<!
,P
*P,I*!'&'!b\,J3,Gbcb
PGPPtb
P*,t
t&4c% v,  ?4!<

Cuales son las Desventajas?

!],
,]b\P<,PP* ]P*!8*
 !bRQP!\b'V

Autenticacin Kerberos

,t,P
]7Gb\0!Vbb**P7!V!SYP!L!!!*!

!!V,!*I

g }

Disponibilidad

!PGGb\]!
bb*P 't,
!'*P!P!OP(!

,t,PhY P0 Q\b&!PO*P\Pb#&PPP'P(!,!,


!Gb\(,t ?4!,X P %!bt3!*P!0!P,
+ V!'Y3b,*I ?4 
Nota: Puedes desear obtener la versin del MIT si tu proveedor te proporciona una versin, ya que en algunos puntos de venta est deliberadamente capado o proporcionado
sin interoperatividad con la versin del MIT.

!PGb ,t!VP]Gb!P]J!!a?4XV,t %P


0!P%!0#!btPT!n*P!\!!tCPS!K
',
 P
,Gb!
('Ib#! P32!
!]C,b]*,2!b
'!W&!t!]#bYP,!P'\#U
; ?J _ 0b(n_ ?44!!!b<!(!,bP(+ QJ,t
!\b'6 'P(\Y + QbG_ Jc!#C#OPW 
Instalacin

bV!8
P<LV!b( `- d %C+   d w2 e  e  c,
!!!73O! 73!PJ srvtab keytab<3\
L,*bt
]
!P]
b'3G
,,!\<\,
Ct4GL3GPXJ
!
PLbP8
,tP<!,YP!t!0% r 0' ,3 
!',!n!,]b\R VS\&0
!src/Makefile.global
P!J,*PbthLL, Q<GP! P&! P<!],t%#
 ,4'!,!P2
*P\ VP\b! b&!,J4\#\
*x!'04P\0Y
& `- d DnJ e  C+ d G. e  e  WP!\
,*P!O
X
P(!,&!zGbV'PI

Operaciones

<P!bP!POb!POP\V
tW VJh!<\
;'bP0
t' X
!PPhh!0
,cGJ!L
bb**P ! b+:
d wcD e 8|% f e [<O] 0(,(*,(

postmaster psql
!YPVP\btPV!
J!
', 4,4PG,V,GY P
 zP\!V!'l@
!!P\,n!OP!GP\IO\Jt(P,C,P
&PGV*bcJcb0P\\Pb
!C*b'JG\J4<,!3P\!P'*P\Pb CP\
!#G,tSS\  P!3UGP=(  PZbP!VP
cbP<!&!\t!2
&+%H"U%
%6%+8%
O%+


g

Parmetro




PG

Ejemplo

, ];U  2

  cl\( ; r t,z ];U 
bZ v!\c* ]; U  .

!!GPPtb#!#GP0!*P0!WV%!hSb\ bt%#C#
!P0!']#!'
,tPE
JzYn
Notas

ggB

b 
@ !c#  \( G(;\tzP
b
@!c  !t \2 ,!
 P   \t !
\l @ ,tP ?L ! ?3 Y!
\l @ ,tP , 6?L C ?3 Yn
, @ P\( PP*P t,P

Captulo 19. Distribucin del Sistema

 %6H( %%+ %6+8%+


%6%+[

n e  C_ d %|% f e  \


P\4<!,'&!0!<
 ,#! *!4,hGb'!L
Pt\&Gt'\ \\P
]!P& J!,!Pt /usr/local/pgsql !P(#b 
#\ 0,P /usr/local/pgsql
!bY!P0GbWP
W Vz,#P bO03Gb\I (P(P!,(!&!P

Gb3,P /usr/local/pgsql/bin 2PO*P, !,Q%
Jb,*bPtT,UGc!PT! PzO!Z V,t,
!,!CV! r , * b ]R Q,
7-C e   d W

set path = ( /usr/local/pgsql/bin path )

7! U PS!VY!,*bPt3& P\2z 7\ b0S


V,t*0!0!,J!! ! r Pt \7  7 !,P#

RQ,z @
PATH=/usr/local/pgsql/bin:$PATH
export PATH

 P !,3!Pt!
 ]WQ!,\P
Jb V3,C!Pt
V7 ?J!XP ,
(!P\ b%G, P<,L/usr/local/pgsql/bin
b\b<GzLO !V,tC ,
!<!,Z
O cb't<!LP2zIV,!JP\&;hb\
WPt,#GP%J\P!*P\!]4]z?L !,Q%*P(J!P*\,
#',P\b!'3 V,t,'!&!,,(!&*Pb!t
z <,!<44PPPC!, (b<]!O
IPt\ P!P!'G

!b<,P]!,3%XP
\P b P&PnI\&I!nV
(!<PV  cn
cc,
b\RV,*,Gb'c't<!Lb  n r P\b zb
tOVP E
V,GbV4!b4PLP!(bG%\#
C postmaster !PP,&7PV
tV!J
,!VbO(!',PtO*POPtb

gg

gg

Captulo 20. Instalacin

b,<

GbP3!&c4E L
!POP\!P(
'\,]*P*P#0P!POb!4z 
P\!   J !!CI ?\,#! YP
tbash
t P]P\!P] P \,,t\P Q!V]Gb\
%
X
<,!\(V
!bbPt\ b
P\!PP(P\
X
!0 cDC lK[+ d D bO!'b!
P(P\!PI
z h4J(&!V!(!Pc4 ,!(bb( PGb,G 
4
b! \,
VP<!,,(P\!@
$ gunzip postgresql-7.0.tar.gz
$ tar -xf postgresql-7.0.tar
$ mv postgresql-7.0 /usr/src

#\b P<\!O!,0G,h!bP<#3Gb\
Antes de comenzar

tJ\CLPcVW%,%V #
 b'!&\
* ++ e  ,#!#PLGb\ #3z!make
 # make ( ,t
\bPh!,*bt!0bOGb\O!&
b'
\b #
J,*,Jb!J\\\_ JWQ,\!, 
make
\

bV\4t,tP
# make  \ Ptb&W PC, \V
,'#b\ # make  @
$ gmake -version

zcP, 0 make ,!'P#


@cb( ( 
! b
@z## P*b Pc!PIc!\cPtb n!%P<P\
V!<GPLb\nGPPtb!! '\PQ&L&b
\<P\bL44!%3bLb,!L!,,Q]G,O
!
thPGb,z4<!G!b
!]!*P3cbP(!
!P'!b!% ?4Y\PP'*P\!doc
b&!%4bJ_ ?4,\R V,G
 QP]0#GbP 0!,Wbt: hb%,GY P0! 
\
!]\X
Q !\4!]]tbc4\,L!
3
r ccY\ !33b\tPt,Y3P*!Z!
V
IbVK
0 r X
PI!0] 'x
P]\\P,YGbWG
Gb\ ] P!\G!
0!!!<L&Gb&*%(,I!#b P&,!!!8
L&
VP P]P7,C*P!b4!%\*P 3 J r Vr
!b&*P2J
&&!b Q&P*'I\!,\b ' r
]b Q L( P<n*%n,]( Q<V
!
,cbV!'*P]P(\\O!b czt(!&,* b P
*!!P! L
r IP\4\P
t'G,z'#,z!G + @
$ df -k

ggg

!'!PPCP!VP!
Pn!!nP!] ' !!&!,Q(P !P%
Procedimiento de Instalacin
%E%6%\/

t *P6, Y ,6!! Z!


bc48 @

V!t*!b#t%!!#CP!b !c4<_P%!Gb\*!,GVbV,n!]t
!b GW,PJ \, # postgresc\b
*,G4\VP V'bG&'CG 3
*,!&GV(
*,
zb,*b]c46*P\
W*JPbt\b*PU\!
*,G4,O,(#Vroot
!' bin
t ! Ph,YP\
#0 P%, \C(%b#JbJ] P2
z&
! P'!,*,Gb
,*b'\,zGCG']'!'P
cz,GY P,,!#,\]cbb G'
:

? Pt#b P0,U
##!!Th!GYG!
!P4IGbbPcOb3GbPZP\,,!#GZ!
!Pb L P P]#*C!&\\],*,!l @
z,ObC!!b**P4!OP,bn! (<P*P
zt pg_dumpall z0,\
VG,h&,t0,GC
 *, P\#! Q%ObOb&!,!P&P\L,
 V 
?4'!
P\!
!
],tP3
 P],t
!,\!,0pg_dumpall
]G!6 L]0!t!PcV
P\ P(<,!  d  xc,!b<(,tPV!Ob !, QO,
nP\! pg_dumpall ']tP C JC,tPt2!zP!b'
tP
L4 P
,0G,O'!bbzzY P!
!!%PPJJPZ J%I L !, P], ,h!3!
G7]!4!P (PGb,> JV+ LU t,L %!J!P 3,,
z3!&
$ pg_dumpall > db.out

Atencin
Debe usted asegurarse de que su base de datos no se actualiza
durante su backup. Si es necesario, pare el postmaster, edite los
permisos del fichero /usr/local/pgsql/data/pg_hba.conf para permitirle a usted slo su uso, y relance de nuevo postmaster.

cPYPJb*b,!Gb\JIGbb \b ]!P!


%
!'!b2I+@

$ ps ax | grep postmaster

ggq

!Gb]!,Q<CMh\,P<CP]<LG,t(!(P !(V\P!
G\hM @
263
777

? SW
p1 S

0:00 (postmaster)
0:00 grep postmaster

c%!,VRQ ,\,! pid  C!P(P*,G


\ _%#b20!P*,Ga3C\
postmaster
 * W2!,Pn2R V,#! ,t4RQ,
0!P#\\!  U*]3RQ*P,GC!,0h\\
- W t!'
W!zn
$ ps ax | grep postmaster |grep -v grep

$ kill pid

Sugerencia: En sistemas que arrancan PostgreSQL en el durante la secuencia de


arranque de la mquina, probblemente se encontrara un fichero startup que cumplir
el mismo cometido. Por ejemplo, en un sistema Linux RedHat, se debera encontrar
que
$ /etc/rc.d/init.d/postgres.init stop

funcione correctamente para parar la base.

c\RV,!,PLbt!,!Ph!PtPb,&b%Gbc,*,LJ,+@
*P#!OP!bO*I

*P!'t]GGb\!b
<,GVP!
,
*(W!JP Ct4!4PGb*P 
,P#T3bb6! \!Pt src
 @
$ mv /usr/local/pgsql /usr/local/pgsql.old

G,!!P!O<P<!
,\tG]]\%GbP
! Q4&b!, G7!<!!tP,&b0*P\b!4
P
*P ,*+ @
$ ./configure

4('P(
G'!b0XP(]\,!.@
./configure -help

z r ?4c
z,*P
0!,PVL!,<&
*P0!Lc4<t!
PP!'!b /usr/local/pgsql
 
cz'bP
 \
!\b P0b'W P%,*b\Ic\0
\,
t'b,(P\
M V, P4 n

gg


#
O<,t,tx0bO((b*h!,tOPO
, ! !VP]\P!P] \,V /usr/lib/perl
'\
!, Pb,h*4P
P3Pt
b\b
# P!

P!,&!P!,  r!
# b*
P0% Q,J!,t7]t\%,Wz!
!VCb Cb* 
 \C
P\I+@
$ gmake
!cP*,G4!L*P\P0P
,8L
\bO   !J
*P#!']X
P]!'(P,(,!I
!6 h\]R Q!'G
\,Gb'PhPPV!, Q
U @
J

 !L\_
!&\k\_
,3Gb\

,z\2I+@

All of PostgreSQL is successfully made. Ready to install.

$ gmake install

Q&
#,\\4PnhQP\! P\ 
VQ
!
Ob\P!V]b!&]#P!O,O,
z]t&!
bPtV v! r ? 2v?& @

$ LD_LIBRARY_PATH=/usr/local/pgsql/lib
$ export LD_LIBRARY_PATH

VP0,t#TP
b%!P%RQ,]WStCOt!Y 
*P\ ~/.bash_profile
!0!POGb\O'&,zGb
X
Vb! 4!LGb3b
PP22!',  /etc/ld.so.conf N!
] RQ
S Pt
*Pt,P*P\![%p%+%W
!S0!! !Q #%WP]!\!!Y,\IcV,UXP

#\b'*P\

/usr/local/pgsql/lib

./psql: error in loading shared libraries


libpq.so.2.1: cannot open shared object file: No such file or directory

P
VP!3,tP<,;Q\\b4%VG!

\ !3!b!t *,4 !3,6*Pbt
*P\3]'!CGtV!'bc4<2#VP
\PP2
$
$
$
$

ggA

mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/initdb -D /usr/local/pgsql/data

!P*P ]P#!!

\P#P(!PI!&Gb
(-D,<Pb PJ3,JPWV4b(b!Pt#!%
GbPIc ,+ h!0#b!,!t\,!0,*

!b W,tP<,J!#%%(Ic,GbbZ,!WP

!4bP Gb PtP\,!!J!PcV !

,],3
,*b
*P\PP,\\,
t,h,z!Pt
!'!b
P(P! Q, '!!4\Vtnz!!&]G
!'!b ? \O PtI@
!Gb7t,P,ht!PY\]V,t\nz3\!t73!S

P -S
LtcPY PGb3*b!4!!&P3P I
<!bP.
@
$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data

\R V\V!4!!7!47,tP& 
>Q
*P\#!]P!&P&!XPL ,PL]!J, O*!pg_hba.conf
0%4 b
**P bO*P\ P(!&*,(!&*,Gn
P
Pb!!b#'b0*P!,W Q\ P!
4Q\tP(CP\b,<]!P (*! *P !4x

P'*Pb4CcbV!bW't
!J,Ptn,\
!V!4G, P4X
P\,]% /usr/local/pgsql/bin b,
3z ?L t h,Gb  N!,33! V!
t
!
] 
b*P\ ~/.bash_profile  /etc/profile I<LbL&b!PP
 @

$ /usr/local/pgsql/bin/psql < db.out

PATH=$PATH:/usr/local/pgsql/bin

XP zGbc
< ?&?,zPV!,zGCGJ!'P
4  Pb3P\
P -D   postmaster initdb

?Oh

P\,&b]!\b

man

!Y<2I

$ cd /usr/src/pgsql/postgresql-7.0/doc
$ gmake install

!b PO! P2b

@
,t\bhGGb \]P/usr/local/pgsql/doc
]!\b man/usr/local/pgsql/man
PN!]RQ

P\],
#,z! V!''!

,p@
MANPATH=$MANPATH:/usr/local/pgsql/man

!!\bPYPb\RVY!PYPt7bG2zchb,
]\Pt]Pt b\Pt
%*!C ,
PGb*(! !S!bW#\P P! P\\% W Q0J!t
\\,
b
$ cd /usr/local/pgsql/doc
$ gunzip -c user.ps.tz | lpr

JWQO,\Y!!,,Q Jb G(


!4#]\t@
?

P*b*&,6 \ Y,GYP

$ alias gshp=gs -sDEVICE=laserjet -r300 -dNOPAUSE


$ export GS_LIB=/usr/share/ghostscript:/usr/share/ghostscript/fonts

ggy

$
$
$
$

gunzip user.ps.gz
gshp -sOUTPUTFILE=user.hp user.ps
gzip user.ps
lpr -l -s -r manpage.hp

!0'!! 
(\]3I4
 P,\b3!pQ\\,4P4,J WQ !,.?4!\bt!P%GO!b
P\b\b3SUPGb,z4 P3b3Pt\*P GP\
!,*P(]b#G&!
!b
b\b  P]Gb\P!*P\]!
\P!


!(!% J!%!b'\J44P4\\ *Gb3&
C,t!PLPGb,z4WVJtLP\\bV!!4b'
!#P3!&PP2
&!\P%,W,
\P\*b,4%GLb&\b'V,W\! , ,!,L\P!JLP!% PLt!b0\
tL\

P4,@!(\P Q(!Pb\!,J!J  /etc/rc.local /etc/rc.d/rc.local



,0]\ Q'(GPOO#\P
bh,Gb
\2c
4  nC\Gb' P&b,*b!3&n,!PG
4 postgres% ~ '  ee  0OPbGn*PO P P\b
,tbS\<'R Q!J*P\!3!P] su -c ... post
gres
P! Q,,G'\,h#Gb!&(!Oz!Ptt't
n!
b\,! bb+@

nohup su -c postmaster -D /usr/local/pgsql/data > server.log 2>&1 postgres &

JWQzb\P<POGQ!!z,\]Ctk@
?

!', Vc PP## P! ,V cz? ct2 J ]



b ]bRQ,Mr @


su postgres -c "/usr/local/pgsql/bin/postmaster -S -D /usr/local/pgsql/data"

!# !% ?4c ]!bYzcP*z,czc <cG ]b


(r ! ,,(RQO V' \PJJ P##P @ 


#!/bin/sh
[ -x /usr/local/pgsql/bin/postmaster ] && {
su -l pgsql -c exec /usr/local/pgsql/bin/postmaster
-D/usr/local/pgsql/data
-S -o -F > /usr/local/pgsql/errlog &
echo -n pgsql
}

gg}

4,YC!,!*PP*
]bt]!RQ]*P\ \!,Gbb! n
*J!]G,(bt!,!X
P&R P%!!]4R QJG#G J\!
 ,cP!<I0G\6(! LYOY P\b 
\!V
PL2
!#!    N!3 

GpP0It\ ''bt/etc/rc.d/init.d/postgres.init
' contrib/linux/ W'*P*P
'0\V
b' ,4!! /etc/rc.d/rc5.d/S98postgres.init

Notas

zP#'!P!P0,G
!ZGPZ*P !
LtV&PGb,z40*P<V#X
P
,&P\'&P!@P
*,V!   Q *,,Gb!,!b\b(,!!,C
!JJP!*Px!  /usr/src/pgsql/postgresql-7.0/src/test/regress/README
P
Gb*P<!On
b,hPOb(!
,*
b
@!cO b P
b
@!cO ( P
b
@ !c# PGb,G z!Pz\zP x

gg

gqB

Captulo 21. Instalacion en Win32

b,OOGbPV!h!,tPO (!ObI M
Construccion de librerias

"!$#&%'(*)+,(*!.-,/102+,3-,456(7/98:<;=(*6(*:<%/9(*0>=?-,:"@%=?%AB-,0>=5CD:5E"-,3%+GFIHHKJL@=?M
N % N +,(7#&(7/1:<(/1O:=?% N %PQ(7/&(7/R:=
-,:(*#&%S7T
@- N +,(L02#&@-,+,%=I+,%U+,- N =?(*=V-,%*
#&%/13%+,M
#&(7/1:<((7/ :=W0>%5S
8%=V%0>5/1:<=3-,="+,%"+,- N =(7=V-,%X0>%# N -,(Y%+Z4-,=(70>:=?-,
J9(70>=?- N %U+,560>5#&%/145
src

copy include\config.h.win32 include\config.h


nmake /f win32.mak

T:L%3#[(\3(U3:(74]:<-,(7/1(UE"-,3%+FYHHO(7/ 3O0>%#&-,/1^S
W-,;3-,(*/1:(76%=0>_1-,`5"(7=?%/ 02=(*%74a
b interfaces\libpq\Release\libpq.dll Mc%
+,- N =(7=?-,%U4-,/1%#&-,0>%d(7/1+,%e% N +,(
b interfaces\libpq\Release\libpqdll.lib MG- N =(7=?-,%WfD#&@.5=?:%4%g@%=?%g02/1(70>:<%=.(7+
@=;=?%#&%%
+,- N @\hS 4+,+
b interfaces\libpq\Release\libpq.lib McE^(*=V-,/ T:<%:<-,02%U4(+,%d+,- N =(7=?-,%
b bin\psql\Release\psql.exe McT+i#&/1-,:="-,/1:<(7=?%0>:-,`i4(jGkL

Instalacion de las librerias

%U3/1-,0>%
@%=V:<(Y4(I+,%
+,- N =(7=?-,%U\3((*=V%=?(*%+,#&(7/1:<(Y-,/1:<%+,%4%
(*6+,%+,- N =?(*=V-,%4(
S
libpq.dll
T+*%=0>_1-,`cU(7/ +,%W#&%J5=V-,%g4(l+,5^02%^4( N ("(7=1@3(7:U(7/ (7+74-,=(70>:=?-,
m ](7/
(7/n3/o-,:(7#&%qpr-,/145s utv1wZtxy?SjZ-(7:(i%=?0z_1WINNT\SYSTEM32
-,`c&(*d-,/1:%+,%4
3%/14WINDOWS\SYSTEM
[3/n@=5;5=V%#&%i4(i-,/1:%+,%0>-,/1Xc4( N (L(7=Y-,/1:<%+,%4[0>/o3/n(7{%#&-,/1%4=Y4(`c(7=M
-,5/1(7l3%/14uEYT|6jGfD}~ f~ }\53(I(*:<%-,/10>+,3-,4 (7/L(7+%=02_1-,`X@%=V%I%(7;53=V%=\3(g3/1%
`(7=V-,/ #&%W=(*0-,(7/1:<(U4(U+,%
+,- N =(7=?-,%U/19(7%U N =((70>=V-,:<%1S
jZ-G@+,%/1(7%
4(*%=V=G+,%=h3%/14L+,- N @\q(*/q(7:%d#&%\53-,/c%X:(*/14=V%U\3(U%/1%4-,=+,W4-,=(70>:<5=?-,
J
%+Z0>%#&-,/1L(7/ 3W0>/1);53=?%02-,/1(7S
src\include

src\interfaces\libpq

Usando las librerias

8%=V%g3%=.+,%+,- N =(7=?-,%7X4( N (6%/1%4-,=.+,h%=0>_1-,`c


%I39@=P<(*0>: m (7/E"-,3%+
FYHHX+,i_1%;5%d3/ 02+,-,0>'i02/ (7+ N 5:<5/ 4(*=(70>_1L(*libpqdll.lib
/K(*+5@.=?PQ(70>:J9(*0>P<%d%/1%4-,=?+,5yzS
/1%`c(*eU\3(U(*:<L(*:<%
_1(70>_1X(7=V%@- N +,(U3%=^+,%
+,- N =(7=?-,%U0>#&i+,L_1%=V-,%(7/ 0>3%+,\3-,(7=?%
@+,%:<%CQ=V#&% N %%4%(7/ ~qfD
S





Captulo 22. Entorno de tiempo de ejecucin


T/q(7:<(U02%@,:<3+,L(U4(7:<%+,+,%
+,%
-,/c:(7=?%0>0>-,5/ (7/1:<=(85:<;=(*WJ9(*+-,:<(7#&%
@(7=?%:-,`^S

Utilizando Postgres desde Unix

G4%h+,%h5=4(*/1(7h4(W8:<;=(*"\53(I(g(VPQ(70>3:%/L4-,=(70>:%#&(7/1:(W4(*4(I3/L_1(*+,+G4(g/1-,{U(
(7/10>3(7/1:<=V%/i(7/q(7+Z4-,=(*02:<5=?-,1SSSw N -,/11SVf/102+,3-,=(7:<(4-,=(70>:=?-,(*/q3O`%=?-,% N +,(g4((7/1:<5=?/1
@%:<_qCD%02-,+,-,:<%=?U#&30>_19+,%
(?P<(*0230>-,/O4(Y+,56#&-,#&cS
T{-,:<(W3/1%U0>5+,(*020>-,/i4(g0>%:<+,5;5h4(7+-,:<(7#&%U(*/i0>%4%I(7=?`c-,4=VS%#&-,#&%Y-,/102+,3J5(Y3/1%
0>+,%( m
y.\53(u0>/1:-,(7/1(d3/1%u-,/1:%/10>-,% @%=?%d02%4%d33%=V-,q`+,-,49(*/O8:;5=(7S2%
-,/1:%/10>pg_user
-,%O(*@(70>-,)0>%K3/o02/PQ3/:<4(q@=?-,`-,+,(7;5-,5L N =(98:;5=(7X0>5#&n+,%O@- N -,+,-,4%4
4( %02:<3%=W0>5#&O3@(*=33%=?-,](*/&85:;5=(7X5+,%i@- N -,+,-,4%44( 02=(7%*=*wZ4(*:<=3-,= N %(7Y4(
4%:<5"J9+,%d@.5- N -,+,-,4%4]4(%02:<3%+,-,e%=+,W0>%:<+,;W4(*+-,:<(7#&%1S/ 33%=?-,i4(Y/1-,{ /1
@3(74(I_1%0>(7=^/1%4%02/q85:<;=(7"_1%:<%
\3((-,/1:<%+,(3/1%
-,/1:%/102-,%U%@=5@.-,%74%(7/q4-,0>_1%
0>+,%(SV83(74(I(7/10>5/1:<=?%=V(#&6-,/1C=?#&%0>-,5/q N =(Y+,5"0>%:+,5;55"4(*+Z-,:<(7#&%
(VPQ(70>3:<%/14
0>5/13+,:%W N =(Y+,%W0>+,%(7"%@=@-,%4%*S

Iniciando postmaster

~  +,(@3(74(Y302(*4(7=/1%4%U%U3/1% N %(I4(Y4%:l%U#&(7/c56\3((7:<Y0>=V=?-,(7/14(7+G@=0>(7
SFY#& %4#&-,/1-,:=?%4=<X_1%J 3/1%Y(7=?-,(I4(I0>%h\3(I4( N (I=(*02=4.%=%/1:<(7h4(
-,postmaster
/1-,0>-,%=
SE(*%i+,%d(70>0>-,5/1(*d4(L-,/1:<%+,%0>-,5/nJ&0>/1);53=V%02-,/o(*/R(7:(i#&-,#&
#&%/13%+postmaster
S (]:49#&45X-W_1%&3/1:%+,%4o8:<;=(*9-,;3-,(*/14B+,%i-,/1:<=3020>-,/(*i4(
-,/1:%+,%0>-,/r%+h@.-,( 4(q+,%O+,(7:<=?%X.+,n/1-,0>\3(q:(*/14=VK\3( _1%02(*=d@.%=V% -,/1-,0>-,%=
(7+h@=0>(7
(7"-,/1:<=?430>-,=l(*:<%
-,#&@+,(U=4(7/"a
postmaster

% postmaster

}L0>%-,/1%+,#&(7/1:<(7X
(70>=?- N ( #&(7/1%PQ(7d\53(i+,(L(7=?/R4(L%J34%i@%=V%i=(*+,`(7=
@= N +,(*#&%SjG-54(7(postmaster
7%d`(7=h+,5I#&(*/1%zP<(*I4(U4-,%;5/1:<-,0>q4(
X@3(74(U-,/1-,0>-,%=?+,
0>5/ +,%
@0>-,5/KM4OJ9=(74-,=V-,;5-,=h+,%U%+,-,4%
%+%=0_1-,`94(=(*;-,:=postmaster
^a
% postmaster -d > pm.log 2>&1 &

jZ-G/1i4(7(7%U`c(*=h+,g#&(7/1%PQ(7X-,/1,0>-,(*+,i4(+,%dC=V#&%
% postmaster -S

(7=?
!jZ!-,+,(*/10>-,5^Sz} N (7=?`(\3(U%+/1i_1% N (7=(7+Z-,;5/1i%#&@(*=V%/14 m ! !yc%+
)/1postmaster
%+Z4(7++,:-,#&i(VPQ(7#&@+,X/1i(U(VPQ(70>3:%
0>#&9@=02(*4(UC/14S
J

Usando pg_options
Nota: Contribucin de Massimo Dal Zotto 1



T+G%=0>_1-,`@0>-,/1%+
0>/1:-,(*/1(@02-,/1(763%4%h@=(7+ N %0>'5(7/14K@%=V%
0>5/1:<=5+,%=l+,5I#&(*/1%zP<data/pg_options
(*g4(
:<=V%e%4.qJ :=g@%=V#&(*:=W%PQ3:% N +,(*g4(7+5#&-,#&lST+%=02_1-,M
`q(
`3(7+,`(u%u+,(*(7=60>3%/149(7+ N %0>'(*/14&=(70>- N (
+,%u(71%+cjGfu 8*XG@(7=?#&-,:-,(*/14q02%# N -,%=
+,%5@0>-,/1(7U4(:<-,(7#&@]4((VPQ(70>30>-,5/n%+.`3(7+,X5-,/n\3((7%L@=(70>-,K=(7-,/1-,0>-,%=g85:<;=(7S
T/[(7:<( %=0_1-,`K(u@3(74(*/[-,/10>+,3,=W@02-,/1(74(u4(7@3=?%70>-,/&3%4%Y@=g(*+1@%\3(*:(d4(
:=?%e*%4 m
yGd@%=?#&(7:<=5/13#&7=?-,0>5h3%4@=(*+ N %0>M
'(*/14O@%=?backend/utils/misc/trace.c
%
0>5/1:<=5+,%=h3O02#&@=V:<%#&-,(7/1:<^S
G4%6+,%6@;@:<-,5/1W(-,/1-,02-,%+,-,e%/ %d0>(7=L%+-,/1-,0>-,%=h(7+ N %0>'(*/14gSjZ-Z(
%1%4(2/Ki(
#&5M
4-,)02%/@0>-,5/1(*X.(*=V/o+,(74%d@=U:<54 +, N %02'5(7/14r\3(9(q-,/1-,0>-,(7/o%K0>/1:-,/13%0>-,/"S
8%=V%\3(0>3%+,\3-,(*=I0>%# N -,K:#&(L(7C(70>:<K(*/&+,5 N %0>'(*/14n\3(L(7:</&%0>:-,`X(7@=(70>-,
(7/1`-,%=3/1%
(71%+jZfu 8 %+G@5:<#&%:(*=X*\3-,(7/q=(7(*/1`c-,%=?Y+,%U(71%+%U:4"+,5 N %0>'(*/14
%0>:-,`SjG(U@3(74(*/O%02:<-,`%=h+,I0>%# N -,g@%=?%d3/ N %02'5(7/14](*@(*02)02i(7/1`-,/145+,(4-,=(70>M
:%#&(7/1:(Y3/1%d(*1%+ZjGfDu 85S
%"@;55@.:-,/1W@3(*4(7/ (7@(70>-,)02%=V(I:%# N -,*/K0>/ +,%d5@0>-,/
4(85:<;=(7a
-T

postgres opciones -T "verbose=2,query,hostlookup-"

%gC3/10>-,/1(7Y3%4%I@%=V%u-,/14-,0>%="(*=V==(7gJ #&(*/1%PQ(7Y4(u4(*@3=V%02-,/]@3(*4(7/K3%=6+,%
C%0>-,+,-,4%74 ?$1 S$5^#&(7/1%PQ(7h\3(g(W(702=?- N (7/(7/:43:u:<4(7=?=.-,/10>+,3J5(7/i3/L@=(7)GP<
0>5/ +,%
C(70>_1%X+,%U_15=?%dJ9(7+/1#&(*=?4(U@=0>(7L4(*+ N %02'5(7/14K\3(
+,%6;5(7/1(*=V%1S
#timestamp
980127.17:52:14.173
980127.17:52:14.174
980127.17:52:14.186
980127.17:52:14.186
980127.17:52:14.186
980127.19:52:14.292
980127.19:52:14.413
980127.19:52:14.466

#pid
[29271]
[29271]
[29271]
[29286]
[29286]
[29286]
[29286]
[29286]

#message
StartTransactionCommand
ProcessUtility: drop table t;
SIIncNumEntries: table is 70% full
Async_NotifyHandler
Waking up sleeping backend process
Async_NotifyFrontEnd
Async_NotifyFrontEnd done
Async_NotifyHandler done

T:(6C=V#&%:uC%0>-,+,-,:%g+,%I+,(*02:<3=V%g4(W+,h#&(7/1%PQ(7^Ju@(7=?#&-,:<(g% N (*=(7{%0>:%*#&(7:<(g+,u\53(g_1%02(
0>%4% N %0>'(7/14&JK(7/[\3 #&5#&(*/1:^S*G%# N -,7/[C%0>-,+,-,:% +,%L(*0>=?-,:3=?%4(u0>=V-,@.:Y%s 'K @(7=?+
(7/10>-,+,+,5Y\3(d%/1%+,-,0>(7/K+,Y_1-,:<=V-,%+,(*I@%=?%u4(7:<(70>:%*=6(7=?=5=(2I @= N +,(7#&%g(7/O+,% N %(
4(
4%:<5"i@.%=V%U02%+,023+,%=^(*:<%4:<-,0>%":(7#&@=?%+,(764(:<=V%/1%0>-,/1(7S

#&(7/1%PQ(7
(702=?-,:<5U%9:=?%`74(LJ+,;&3:<-,+,-,e%/R+,%9C%0>-,+,-,4%4}u}FY S7T+3
4(LJ+,;n(i0>/1:=+,% #&(*4-,%/1:<(9+,%q@0>-,5/oJ5+,5;R(*/o@;55@.:-,/1S85=Y4(7;=?%0>-,%X#&3M
0>_1%hC3/102-,/1(7"+,+,%#&%/i4-,=(70>:<%#&(7/1:<(I%
@%=?%I(702=?- N -,=^3l#&(*/1%P<(*l%:<453:
:4(7=?=<X0>3J% %+,-,4%u/1q(d@3(74(d0>/1:=printf()
+,%=6#&(74-,%/1:(
+,% 5@0>-,/]J5+,;K/1-1@3(74(
-,/10>+,3,=
C(70>_1%iJ&_1=V%cSjG(7=?% =(*02#&(7/14% N +,(i3:<-,:3-,=U:<54%
+,%
+,+,%#&%4%*d%q@=?-,/1:Ch0>5/n+,%q#&%0>=
8|6f~ XJK:4%Y+,%Y(702=?-,:3=?%I%:4(7=?=6@=W+,%L#&%0>=qT8|6f~ X@.%=V% @4(7=60>/1:=+,%=
:4%
+,%
%+,-,4%
4(U3/ #&54L3/1-,C5=?#&(S
T+ZC5=?#&%:<i4(*+Z%=02_1-,`
(7"0>5#&9-,;53(a
pg_options

# comentario
option=valor_entero
option
option+
option-



# Establece el valor de
# establece option = 1
# establece option = 1
# establece option = 0

option

} N (7=?`( \3(
@3(74( (7=d3/1%O% N =(7`-,%*:3=?%]4( 3/B/1# N =( 4( 5@0>-,/B4( +,
4(7)/1-,4W(*/ keyword
S
backend/utils/misc/trace.c

7&i7 ?>D5L5
85=h(VPQ(7#&@+,X#&-5%=?0>_1-,`@;@:<-,5/1W02/1:<-,(7/1(U+,W-,;53-,(*/1:(*g`%+,5=(*a
verbose=2
query
hostlookup
showportnumber

Opciones reconocidas

0>:<3%+,#&(7/1:<((7:/q4(7)/1-,4%6+,%"5@0>-,/1(7a
%+,+
A%=?0>%4(:=?%e%;+, N %+SW`%+,=(7"@(7=?#&-,:-,456/"a

AB(7/1%PQ(764(:<=V%e%74i%0>:-,`%45"-,/14-,`-,43%+,#&(7/1:<(

0>:-,`%=:4W+,g#&(7/1%PQ(764(:<=V%e%41
MD
f/1_1- N -,=":<54W+,g#&(*/1%P<(*W4(Y:=?%e%*4
`(7= N (
A%=?0>%4(`(7= N -,4%4gSzE^%+,=(7"@(7=?#&-,:-,45a

jG-,/ #&(7/1%PQ(7X7:(U(*6(*+`c%+,=h@5=#&-,-Q/"S

T0>=?- N -,=l#&(7/1%PQ(764(-,/1C=V#&%02-,/"S

T0>=?- N -,=l#&"#&(7/1%PQ(7W4(-,/1C=V#&%0>-,/"S
\3(7=?J
Z=?%e%*=l@(7:<-,0>-,5/1(*SE^%+,=(7"@(7=?#&-,:-,4a




~qi(70>=V- N -,=h+,%
@(7:<-,0>-,5/"S

T0>=?- N -,=l3/1%
`(7=?-,5/K0>5/14(*/1%4%
4(+,%U@(7:-,0>-,/O(*/q3/1%d+,,/1(7%cS

T0>=?- N -,=l+,%
0>/13+,:<%d0>5#&@+,(*:%1S
@+,%/
T0>=?- N -,=l(*+Z@+,%/ 4(0>5/13+,:<%1S
@%=?(
T0>=?- N -,=l+,%
%+,-,4%
4(7+:=?%430>:<5=^4(U0>/13+,:<%S
=(7s =V-,:<:<(7/
T0>=?- N -,=l+,%
0>/13+,:%d=(7(70>=?-,:%1S
@%=?(7=:%:<
T0>=?- N -,=l+,%"(*:<%4:<-,0>%"4(7+:=?%430>:=4(0>5/13+,:<%S
@+,%/1/1(7=?:%:
T0>=?- N -,=l+,%"(*:<%4:<-,0>%"4(7+@+,%/1-,)0>%45=VS
(7{(70>3:=V:<%:
T0>=?- N -,=l+,%"(*:<%4:<-,0>%"4((VPQ(70>30>-,5/"S
_15=?:+,0>'
( #&#&(7/1:<O/1K( 3%XZ@.(7=q(u@=(70>-,%@%=V% _1% N -,+,-,:<%=6/13(7`%Y0>%=V%0:(*=V:<-,0>%Y(7/
(7+ZC3:3=^S
+,50>'5
Z=?%e%*= N +,\3(7S
3(*=V+,0>'
Z=?%e%*= N +,\3(7g4(33%=?-,S
@-,/1+,50>'5
Z=?%e%*=l@-,/ +,02'5$S
/15:<-,CJ
Z=?%e%*=lC3/10>-,5/1(764(/1:<-,)0>%0>-,/"S
#&%+,+,0
jZ-,/ 3i@=l(*+5#[5#&(7/1:<^S
@%+,+,0
jZ-,/ 3i@=l(*+5#[5#&(7/1:<^S



+,50>'54( N 3;5-,4#&-,/
A-,/1-,#&3#=(7+,%:<-,5/q-,4]:<=V%0>(74 N Ji+,50>'5S
+,50>'54( N 3;5=$(*+,-,4
5-,4X-,C1/15:ce(7=X7C.=(7+,%:-,/ :=?%0>(74 N Ji+,50>'5S
+,50>'5=(7%*4@=?-,5=?-,:<J
jZ-,/ 3i@=l(*+5#[5#&(7/1:<^S
4(7%41+,02'5:<-,#&(73:
G(7#&@.5=?-,e%4=4(U0>5#&@= N %0>-,5/ 4( N +,\3(7g0>-,=0>3+,%=(SS
J+,;
A%=?0>%4(J+,;hSE^%+,5=(*6@(*=V#&-,:<-,4a

AB(7/1%PQ(76%
:453:VwZ:4(7=?=zS

AB(7/1%PQ(76%
:453:VwZ:4(7=?=lJ9J5+,5;S

AB(7/1%PQ(765+,%#[(7/1:(U%UJ5+,5;lS
_15:<+,5'53@
% N -,+,-,:%=h+,%d0>/13+,:<%d4(/1# N =(U4(_1:1(7/ @:%:<3S
_15s @=V:</13# N (7=
A:=?%=(7+/1#&(7=i4(Y@3(7=?:L(7/ @:%:<3S
/15:<-,CJ3/1+,0>'
(* N +,\3(7i4(U@;5+,-,:(7/1(*=h4(*@.37W4(Y/15:<-,CJZS
/15:<-,CJ_1%02'
5=?=?%=h:<3@+,%643@+,-,0>%4%*W4(Y@;+,-,:<(7/1(7=VS

Notas

1S#&%-+,:^a 4e
02S 3/1-,:</"S -,:





Captulo 23. Seguridad


%
(7;53=V-,4%4K4(U+,% N %(Y4(4%:<56(7:%U-,#&@+,(7#&(7/1:<%4%d(*/q`c%=?-,W/1-,`(7+,(*a
b
b

b
b
b
b

8=:(70>0>-,/[4(d+,5Y)0>_1(7=5Y4(d+,% N %(u4(d4%:<S2G45Y+,Y)02_1(*=5Y%+,#&%02(*/1%4I(7/
+,% N %(U4(
4%:<W(7:<%/O@.=?:<(7;-,45W02/1:=?%u(70>=V-,:<3=V%d@.5="0>3%+,\53-,(*=l0>3(7/1:<%u\3(
/19(*%
+,%
4(7+Z3@.(7=33%=V-,L4(U85:<;=(7S
%d02/1(7{-,5/1(*4( +,L0>+,-,(*/1:(7 %+h(*=V`-,4=
4( +,% N %( 4(q4%:<5 (*:<%/r@(*=V#&-,:<-,4%X
@=4(*CD(*02:<X/1-,0>%#&(*/1:([#&(74-,%/1:(]50>'5(7:9/1-,{+,0>%+,(79J/1B#&(*/14-,%/1:<([0>'(7:<
FY8WwGfD85S*q%i4(%=?=?%/10>%7=?(L(7+.4(7#&/1-,]0>/R+,%i5@.02-,/
@%=?%L@(*=V#&-,:<-,=g+,%i0>5/1(7{-,/
-i
4(Y02+,-,(*/1:(76/1i+,0>%+,(7S
%602/1(7{-,5/1(*g4(U+,g0>+,-,(7/1:<(76(@3(74(7/ =(7:<=V-,/1;5-,=l@="4-,=(*002-,/KfD8]JhwG9@=l/1#&M
N =(Y4(U33%=?-,#&(74-,%/1:<(U(7+Z)0>_1(7=i@;5_ N %1S 0>/1Cc-,:<3%4L(7/ 8u YOS
%W0>/1(7{-,5/1(*I4(
+,5W02+,-,(*/1:(*I@3(74(7/ (7=l%3:(7/1:<-,)0>%4%6#&(74-,%/1:<(
5:<=5W@%\3(7:<(7
(7{:<(7=?/15S
02%4% 33%=?-,q4(
85:<;=(7g(
+,(d%-,;/1%u3/O/15# N =(d4(
33%=?-,qJ m @02-,/1%+,#&(*/1:(7y
3/1% 02/1:<=V%(*1%1S>8=W4(7C(70:<5XZ+,5Y3%=?-,5g/1K:<-,(7/1(*/]@(7=?#&-, 4(u(*0>=?-,:3=?%u% N %(*g4(
4%:6\53(U/19_1%J5%/q0>=?(*%4.^S
"33%=?-,6@.3(*4(7/9(7=-,/10>+,3-,46(*/ 1?5> X7JL(7+Z%0>0>(7 %U+,%":% N +,%l@3(74(I=?(*:<=?-,/1M
;5-,=V(Y(7/ N %(Y%d(756;5=?3@S

Autentificacion de Usuarios

i Wz>z2 7( q(7+W@=50>(7B#&(74-,%/1:([(7+W023%+W(7+W(7=?`c-,4=L4([+,% N %(]4([4%:<59J(7+


(K%(7;53=V%/4(K\3(O(7+"3%=?-,o\3(O(*:<]5+,-,0>-,:<%/14r%0>0>(7n%[+,% N %(K4(
postmaster
4
%:<5
(7d(*/o=(7%+,-,4%*4B\3-,(7/o4-,0>(i(7=VSG4u+,5 3%=?-,5
\3(9\3-,(7=(7/3:-,+,-,e%=Y8:;5=(7
(0>5#&@=3( N %/K(*/K+,%U:% N +,%
@%=?%
%(7;53=?%=(U\3(U(7:/q%3:=?-,e%46%U_1%0>(7=V+S
pg_user
0>:<3%+,#&(7/1:<(7X+,%g`(7=?-,)0>%0>-,/
4(6+,%g-,4(7/1:<-,4%4i4(7+733%=?-,
(W=?(*%7+,-,e%g4(64-,:-,/1:<%^C=V#&%a
(74(+,%
_1(7+,+54(7+Z33%=?-,
/4(*#&5/1-,B\53(&(]+,%/1e%[4(*4(O+,%R_1(7+,+W4(7+633%=V-,o%/15:<%&(7+6-,4=?-,;-,/1%+W4(7+
%+.-,44(*+.33%=?-,
S*T+.-,4=?-,;-,/1%+
33%=?-,K%/1:(*U4( =(7%+,-,e%7=g3/
4(7+Z33%=V-,L(U(7#&@+,(7%U02#& N setuid
%(Y@%=?%
:4i:<-,@i4(U02#&postgres
@= N %02-,/1(7S
(74(+,%
=(74
jZ-Z8:<;5=?(*"(Y-,/1:<%+,%
0>#&i4-,:=?- N 3-,4X(7+Z%0>0>(7L%+Z@.3(*=V:<^FI8K4(7+
(7:K4-,@.5/1- N +,(O@%=V%K:4(*+l#&3/14ST+l 0>/1);53=V%[(*+l)0>_1(7=n@postmaster
;5_ N %1S 0>5/1C
-,:<3%4 (7/[(*+14-,=(70:<5=?-,K8u Y(*@(*0>-,)0>%/14 (7+c-,:<(7#&%L4(u%3:<(7/1:<-,)0>%0>-,/[%
3:-,+,-,e%=W(*/ N %(u%+.(7\53-,@]\3(=(*%+,-,e% +,%i0>5/1(7{-,/nJO+,% N %(u4(4%:<5Y%L+,%i\3((
02/1(70>:<%1SE(7= 1*>z>?> @%=?%L N :(*/1(7=Y3/1%i4(702=?-,@0>-,/&4(+,
-,:(7#&%
4( %3M
:(7/1:<-,)02%02-,/R4-,@5/1- N +,(*S78=3@3(7:O+,%i%3:<(7/1:-,)0>%0>-,5/ N %%4%L(7/R(7\3-,@
/1
(7 @(7=?C(70>:%K-,/102+,3n(7/B+,i-,:(*#&%/1-,{.SZT @- N +,(*X@%=?%O4(7:<(7=?#&-,/1%4-,/1:=3M
X1(*/1#&%02%=V%=I(7+(7\3-,@]4(i5=?-,;(*/"ST:<5d:(7#&%d4(L(7;53=V-,4%4B(*:</RC3(7=?%94(7+
%+,0>%/10>(Y4(U8:<;5=?(*S



Nombres de usuario y grupos

8 %=V%0>=?(*%=^3/ /13(*`cL33%=V-,X(VPQ(70>3:(U(*+Z@=5;5=V%#&%

S
createuser
8%=V% %1%4-,=63/[3%=V-,K 3/&;=3@ 4(u3%=?-,U% 3/&/13(7` ;=3@K3/1O4( +,U33%=?-,5
4( N (W0>=(7%7=^(*+;5=?3@.J %1%4-,=%+=(7:u%Y(7(I;5=3@^SVT/
(7:l@%5/1@3(*4(7/
=(7%*+,-,e%=?(i%0>:<3%+,#&(7/1:<(i#&(7/14-,%/1:<(q(*+0>5#&%/14 >?Postgres
95? Su;5=3@.5 (94(7)/1(7/
%1%4-,(*/149+,U`%+,=(7g% +,%L:<% N +,%
XJK3%/14 (7+c0>#&%/14  @%=V%u%-,;5/1%=
pg_group
@=?-,`c-,+,(*;-,W%+Z;=3@^S

Crear Usuarios

Crear Grupos

0>:<3%+,#&(7/1:<(L/1&_1%JR3/1%qCD=?#&% C%0>-,+4(i0>=(7%7=Y;=3@ 4(L33%=V-,S %J[\3(9%1%4-,=M


+,5wG%0>:3%+,-,e%=V+,93/1B%&3/1B(7/+,%&:% N +,%
S8=L(VPQ(7#&@+,^aPQ5+,+,J5-,/1M
(7=V:-,/1:<K@;;5=3@ m ;=/1%#&(7XG;=J-,4X;5pg_group
=+,-,:<yPQ5+,+,J5table
R`%+,3(7 m @:_1%0>'5(7=?X *X
$v*Xx 71yf~ jGT|Lvx*PQ+,+,Jq;5=V%/1:-,/1(7=?:G/LC
:U;5=?3@@:<_1%0>'5(7=?>FI ~ M
uTuPQ5+,+,J5 "02%#&@5"4(g@;5;=3@ 5/"aV;=/1%#&(a?T+G/1# N =?(Y4(7+G;5=3@S?T:(0>%#&M
@[4( N (4(i(*=3/1-,0>%#&(7/1:<(9%+,CD%/13#&7=?-,02^S~ [%1%4%
3 N =?%J%45
3r:=u-,;/1u4(
@3/1:3%02-,/"S26;=J-,4gaT+c-,4n4(*+c;5=3@S2T+c:<-,@ 4(7+c0>%#&@ (*I-,/1:JO4( N (
4(u(7=W/1-,M
0>q@%=?% 0>%4%u;5=3@S26;5=5+,-,:Va%u+,-,:%L4(u-,4&4(d3%=V-,I\3(u@(7=?:(7/1(*02(*/]%+;=3@^S2T:<(
0>%#&@(7W4(Y:-,@L-,/1:cS

Asignar usuarios a los Grupos

Control de Acceso

85:<;=(7Y@=@=?0z-,5/1%i#&(*02%/1-,#&@%=?%u@(7=?#&-,:-,=W% +,533%=V-,Y+,-,#&-,:<%=W(7+1%0>0>(7 \3(


5:<=5"33%=?-,5W:(7/14=?/q%U364%:<5S
jZ3@.(7=Vd3%=?-,564(+,%d%(4( %:<5
5jG3@(7=?3%=?-,54("+,% N %("4("4%:<5 m %\3(7+,+,^\53(6:-,(*/1(7/ (7+702%#&@
%0>:-,`%415y.-,;/1=V%/O:<54I+,g0>/1:=+,(7g4(
%0>0>(7i4(702=?-,:<5g%/1:(7=?-,=V#&(*pg_user.usesuper
/1:(U0>/]4
(7{G0>(*@02-,/1(7a+,%Y%02:<3%+,-,e%02-,/1(7Y4(*+10>%:+,;5O4(*+1-,:<(7#&%i/1O(7:/[@(7=?#&-,:-,4%U(7+133%=?-,K/1K:-,(*/1( (*+10>%#&@
%0>:-,`%4XGJ]/13/10>%L( @.(7=?#&-,:(
+,%
4(7:=30>0>-,5/ 4(*+50>%:<+,;4(7pg_user.usecatupd
+-,:(7#&% m +,%d#&4-,)0>%0>-,/ 4(U36(7:<=?30>:<3=V%yzS

8=V-,`-,+,(7;5-,W4(%020>(7
T+.3K4(+,U@=V-,`-,+,(7;5-,U4(%0>0>(7K@%=V%+,-,#&-,:%=g+,%i+,(*02:<3=V%X(70>=V-,:<3=V%J[+,%@3(7:%
4(=(7;5+,%"%
+,%602+,%(*6(U:<=V%:%(7/ 1?>?2>? S
=V=?%41i4(U0>+,%(7"J9#&4-,)0>%0>-,5/K4((7:<=302:<3=V%S
u0>5#&%/145d\3( N 5=?=V%/o[#&4-,)02%/o+,%q(7:=30>:<3=?%q4(i3/1%K0>+,%(7X0>#& Q X
?5Q X.J ?5  X.+,RC3/102-,/1%/r0>/r(7+h@.=?@-,(7:<%*=V-,R4(9+,%K0>+,%(SFY#&
_1(7#&64-,0>_1%/1:<(7X7(7:%6@(7=?%0>-,/1(7l/1L(*:/q@(*=V#&-,:<-,4% 55z (7/q+,"0>%:+,5;55
4(7+ZJ:<(7#&%1S



Funciones y Reglas

%C3/102-,/1(7
J[+,%U=(7;5+,%@(7=?#&-,:(7/R%i+,d33%=?-,5U-,/1(7=?:%=I0>54-,;5[(7/R(*+(7=?`-,4=I4(
+,% N %(]4(O4%:<5i\3(&:=933%=?-,5i@3(74(7/(VPQ(70>3:<%= -,/% N (7=?+,^S # N 5i#&(70>%/1-,M
#&5g@(7=?#&-,:(7/K%u+,I33%=?-,I%+,P<%= z>>>"l> 0>/]=(7+,%:-,`%d-,#&@3/1-,4%4gS%u/1-,0>%
@=5:<(70>0>-,5/R(7C(*02:<-,`%i(7U3/n(7:<=(70>_1]0>5/1:<=5+ N =(L\3-,(*/@3(*4(L4(7)/1-,=YC3/10>-,5/1(* m @=
(VPQ(7#&@+,X7(70>=?- N -,=(7/9:<% N +,%h0>5/q0>%#&@ljGkLy5J=?(*;+,%S%# N -,7/9(Y=(*02#&-,(7/14%Y%34-,:<%=
(7;3-,#&-,(*/1:gJi%+,(7=?:%*W(*/
X
J
S
pg_class pg_user

pg_group

Funciones

%gC3/10>-,/1(7I(70>=?-,:%W(7/]0>3%+,\3-,(*="+,(7/1;53%PQ(u(*{G0>(7@:<9jGkL[(d(VPQ(70>3:%/K@=6(7+5(*=V`-,4=
m (7+6(*=V`-,4=
4(]+,% N %(]4(]4%:90>/(7+W#&-,#&@(*=V#&-,B\3([(7+633%=V-,
S5postgres
Ti@5- N +,(]0>%# N -,%= +,%
4(O+,% N %(O4(O4%:<5iC3/c02-,/1%&02/(*+"3(*=?M-,44(
(7:=30>:3=?%4(64%:<5-,/1:(*=V/1%4(7+7(7=?`-,45=1@=+,5^3postgres
3%=V-,X4(*4("4(7/1:<=
4(6C3/10>-,5/1(*
4(U0>5/1)%/1e%1S>Tg@="(7+,+,q\3(
(7:<(
:-,@q4(
C3/10>-,5/1(*I@3(74(*/1X(7/1:=(
:=?%g0>%X(7`-,:<%=
0>3%+,\3-,(7=^-,:<(7#&%4(g02/1:=+Z4(Y%020>(7^S?T:<(Y(*"3/i@= N +,(7#&%-,/1_1(7=(7/1:<(Y%Y+,%lC3/10>-,5/1(7
4(7)/1-,4%"@=l+,W33%=?-,56(7/ FLS

Reglas

Caveats

FY#&r(7/+,%iCD3/10>-,/1(79jGkX+,%i=?(*;+,%L:<%# N ,(*/(](VPQ(70>3:<%/02/+,%[-,4(7/1:<-,4%4Jr+,
@(7=?#&-,564(7+Z33%=?-,i\3(U+,+,%#&9%+Z(7=?`c-,4=4(U+,% N %(4(Y4%:S

_1(7=(i%=(i/1n@.+,%/1u:<n(*{G@+,-,0>-,:<+,J3@@=?:"(7/10>=VJ5@:<(744%:%q-,/1-,4( C68:<;=(* m :<_13;5_


:_1(*=?([-, /1:_1-,/;:@=(7`(7/1:3(7=? C=?#(*/10>=VJ5@:-,/1;4%:<%RsK-,:<_1-,/3(7=M4()/1(74C3/102M
:-,/1yzS_1(*=(6%=("/1d@+,%/1:<d(7{@+,-,0>-,:+,Jd3@@=?:Z(7/10>=VJ5@:<(74i/1(7:<s 5=?'u0>/1/1(70>:-,/1X2(7-,:<_1(7=<X
@(7/14-,/1;i%
::<%+=?(*s =V-,:<(Cc:_1(UC=5/1:<(7/14gw N %0>'(*/14O@=5:<02+S
(7=L/1%#&(7X";5=?3@/1%#&(*K%/14%50>-,%:<(74J5:(*#-,4(7/1:-,)(7=? m (S ;S Xl:<_1(n0>/1:(7/1:<K5C
yG%=(W%3#&(749: N (g3/1-,\3(g:_1=3;5_13:%I4%:<% N %*(5S? /1@=(74-,0>:% N +,(
=pg_user.usesysid
(73+,:"#&%Ji50>0>3=h-,C1:_1(*J9%=(I/15:VS





Captulo 24. Agregar y Eliminar Usuarios


@(7=?#&-,:(d\3(d33%=V-,Y(7@(70>,)0>5g%0>02(*4.%/O%8:;5=?(*S
(*+,-,#&-,/1%
dropuser
3createuser

3%=V-,WJi@=(`-,(7/1(\3(U7:g%0>0>(741%/ %
85:<;=(7S
T:%6=?4(7/1(76+,9%C(*02:<%/q%d+,I33%=V-,g0>/O=(7@(70z:9%d8:;5=(7G/19:<-,(7/1(*/O(7C(*02:<i(*/
5:<=56@=?-,`c-,+,(*;-,I4(*+533%=?-,99(7/K3[(*:<%4L02/]=(*@(*0:q%+5-,:(*#&%u5@(*=V%:<-,`i3 N J%M
0>(7/1:(5S





Captulo 25. Gestin de Disco


Localizaciones Alternativas

jZ( @3(74(L0>=(7%*=Y3/1% N %(L4(L4%:


(*/n3/1%9+,0>%+,-,e%0>-,/n4-,CD(*=(7/1:( %9+,%9(7:% N +,(*02-,4%i@5=
4(7C(202:<d43=?%/1:<("+,%g-,/1:%+,%02-,/"S|6(70>3(7=4(l\3(6:4+,%0>0>(75% N %(64("4%:0>3=V=(7/
=(7%*+,#&(7/1:(u%L:<=V%`c(*I4(7+@=50>(7 (7/[(7;53/14 @+,%/1X%\3( *:<( 4( N (u@.54(*=6%0>02(*4(7="%
0>3%+,\3-,(7=(7@(70>-,)02%02-,/"S
jZ(02=(7%*/n+,50>%+,-,e%02-,/1(7
%+,:(*=V/1%:-,`%UJ&=(7CQ(7=(7/10>-,%U#&(74-,%/1:(L3/1%q`%=?-,% N +,(L4(L(7/1:<5=?/1
\3(94%q(7+h@%:<_o% N +,3:&_1%:<%K+,% -,:3%0>-,/r4(i%+,#&%0>(7/1%#&-,(7/1:R4(*(*%4.%cST:%q`%=?-,%M
N +,(O4(](7/1:<5=?/1B4( N (O(*:<%= 4(7)/1-,4%&%/1:(*i4(]\3(](7+6@=02(*o(7/(*;3/14r@.+,%/1r(7%
%=?=V%*/10>%4iJ94( N (U(7=l#&4-,)0>% N +,(
#&(74-,%/1:<(U+,%d0>3(7/1:%u4(*+5%4#&-,/1-,:=?%4=l4(U@:;5=(7S
FY3%+,\3-,(*=`%=?-,% N +,(94(L(7/1:<5=?/1&@3(74(i(7=Y3:-,+,-,e%4%9@%=?%9=?(*CD(2=?-,=V(i%q3/1%q+,50>%+,-,e%02-,/
%+,:<(7=V/1%:-,`%7X- N -,(7/ (U=(70>5#&-,(*/14%U+,%d3:<-,+,-,e%0>-,5/ 4(Y3/K/1# N =(U4(`%=?-,% N +,(0>/K@=(*)ZPQ
8u Y@%=?%U(7`-,:<%=02/1C3-,/KJ90>5/-,0>:90>/O:=?%"`%=?-,% N +,(7S
Nota: En versiones previas de Postgres, tambin estaba permitido utilizar un nombre de
path absoluto para especificar una localizacin de almacenamiento alternativa. Se prefiere el mtodo de especificacin de variables de entorno, puesto que concede al administrador del sistema ms flexibilidad en la gestin del almacenamiento en disco. Si prefiere utilizar paths absolutos, puede hacerlo definiendo "ALLOW_ABSOLUTE_DBPATHS"
y recompilando Postgres. Para hacer esto, aada cualquiera de estas lneas
#define ALLOW_ABSOLUTE_DBPATHS 1

al archivo src/include/config.h, o especifique


CFLAGS+= -DALLOW_ABSOLUTE_DBPATHS

en su Makefile.custom.

|6(*023(7=41( \53(9+,% 0>=?(*%0>-,5/4(q3/1% N %(94(q4%:u+,% (VP<(*0>3:<% =?(*%+,#&(7/1:<(q3/@=50>(7&4(


+,% N %(L4(L4%:<5U(7/n(7;3/14[@+,%/1^S8=+,[:<%/1:<5X0>3%+,\3-,(7=Y`c%=?-,% N +,(i4(L(7/1:<5=?/1&\3(
(7@(70>-,)\3(
3/1% +,0>%+,-,e%0>-,/ %+,:(*=V/1%:<-,`%d4( N (U(7="4(7)/1-,4% %/1:(764(
\3(
(7+5@=02(*i(7/
(7;3/14q@+,%/1q(7%%=V=?%*/102%4S>8%=V%u4(*)/1-,=63/1% +,02%+,-,e%0>-,5/O%+,:(*=V/1%:-,`%u%@3/1:%/149%
8u Y
X7@=V-,#&(*=?(70>=?- N %
/home/postgres/data

% setenv PGDATA2 /home/postgres/data

@%=?%I4(7)/1-,=+,%`%=?-,% N +,(g4(I(*/1:=?/1\53(Y(7=?3:<-,+,-,e%4%I0>5/i+,%l5=4(*/1(7h-,;3-,(*/1:(7S?~ 5=M


#&%+,#&(7/1:<(7X\3(*=V=?g4(7)/1-,=c(7:%g`%=?-,% N +,(6(*/ (7+7)0>_1(7=U4("-,/1-,0>-,%+,-,e%0>-,/ 4(7+*3@(7=133%=?-,
4(
85:<;=(7X

@%=?%u%(7;53=V%=h\3(d(7:u4(7)/1-,4q%+%=?=?%7/10>%="(*+c-,:(7M
.profile
#&%1SjZ(U@.3(74(

3:-,+,-,e%="0>3%.cshrc
+,\3-,(7="`%=?-,% N +,(
4(U(7/c:=V/1 @%=?%d=(7C(7=-,=?(u%u3/1%u+,02%+,-,e%0>-,5/
%+,:<(7=V/1%:-,`%7X7%3/1\3((@=(7)(7=(Y\3(Y+,%"`c%=?-,% N +,(7l(*:<7/q@=(*)ZPQ%4%*"02/q!8u YZ!@%=V%
(7+,-,#&-,/1%=^0>/1CD3-,/(*lJi+,%@5- N -,+,-,4%4O4(Y0>5/-,0>:W0>/K:<=V%l`%=?-,% N +,(7XL3K=(7(70>=V-,:<3M
=V%cS
8%=V%I0>=(7%*=^3/9%=(%Y4(g%+,#&%0>(7/1%#[-,(7/1: 4(g4%:<5(7/98u YZX2%(7;5=(7(I4(g\3(
J%Y(7{-,:(gJ @3(74(g(7=(70>=?-,:u@=(7+%4#&-,/1-,:=?%4=4(g@5:<;=(7S (7@/ho37
me/postgres
4(74(I+,%d+,-,/1(7%d4(=4(7/1(7X(*0>=?- N %
% setenv PGDATA2 /home/postgres/data
% initlocation $PGDATA2



Creating Postgres database system directory /home/postgres/data


Creating Postgres database system directory /home/postgres/data/base

8%=V%0>5#&@= N %=+,%d/13(7`c%U+,50>%+,-,e%02-,/1X0>=(7(3/1% N %(U4(Y4%:<5":(*:1(70>=V- N -,(*/14


% createdb -D PGDATA2 test
% dropdb test



Captulo 26. Gestin de una base de datos


jZ-c(7+1@=;=?%#&%
4(d85:<;=(*U(*:<L0>%=;Z%4 JO(7/[(?P<(70>30>-,/1X5@54(7#&50>=(7%*=
%+,;53/1% N %(7Y4postmaster
(d4%:0>5/[+,%Y\3((7{@(7=?-,#&(7/1:<%=VS2T/](7:(u450>3#&(7/1:<K4(702=?- N -,=(7#&
+,%"5=4(*/1(7 N -,02W@.%=V%U;(7:<-,5/1%=l3/1% N %(U4(Y4%:S

Creacin de una base de datos

jZ3@.5/1;5%#&g\3(
\3-,(7=(U0>=(7%*="3/1% N %(U4(
4%:<56+,+,%#&%4%d#&- N %(5S83(*4(U_1%0>(7=?+,i0>5/
(7+Z-,;3-,(*/1:(
=4(7/"a
% createdb nombredb

85:<;=(76+,(U@(7=?#&-,:<(U02=(7%*=h023%+,\53-,(7=l/1#&(*=?L4( N %(7"4(U4%:<W(7/ 3/1%d#&\53-,/1%u4%4%7X


JR3:<(74r(q0>/1`-,(7=V:<(9%3:#&:<-,02%#&(7/1:(i(*/o(7+^%4#&-,/1-,:=?%4=4(9+,% N %(q4(i4%:u\3(
%0>% N %4(u0>=(7%=zS/15# N =(7Y4(d+,% N %(7Y4(d4%:<5Y_1%/[4( 0>#&(7/1e%=6@5=W3/&0>%=?%70>:<(7=
%+,C% N *:-,0>5X*J39+,5/1;5-,:34q(7:Y+,-,#&-,:%4%%Y0>%=?%0:<(7=(7S~  :45l+,l33%=V-,l(7:</9%3M
:=?-,e%4l@%=?%U0>5/1`(7=?:<-,=V(U(7/q%4#&-,/1-,:<=?%4=?(*l4( N %(7"4(4%:SzjZ-Z8:;5=(7"=?(*02_1%e7%
+,%K=4(7/4( 0>=(2%= N %(*u4(94%:<5X(7d\3(K/1(70>(7-,:<%K\3(q(7+h%4#&-,/1-,:=?%4=U4(7+h-,:(*#&%
+,(;5%=?%/1:-,0>(u4(7=(70_1d@%=V% 0>=?(*%=W+,% N %(*4(4%:<5SFI5/13+,:<(L%i3o%4#&-,/1-,:=?%4=g4(
-,:<(7#&%6-5+,(Y50>3=?=((7S

Acceso a la base de datos

/1% `(7eL\3(u_1%L0>/1:<=3-,4]+,% N %( 4(u4%:<5XG@3(74( %020>(74(=W%L(*+,+,%L@=W+,5-,;3-,(*/1:(*


#&(74-,a

TZPQ(70>3:%/14R(7+h@=;=?%#&% #&5/1-,:<5=d4(q:(*=V#&-,/1%+4( 8:<;5=?(* m


y6\53( +,(q@(7=?#&-,:(
-,/1:<=5430>-,=<X(74-,:<%=^J9(?P<(*023:<%=5=4(*/1(7WjGkO4(3/ #&49-,/1:<(7=V%02:<psql
-,`S
b T02=?- N -,(7/14L3/K@.=?;5=V%#&%
(7/KF\3(U3(U+,% N - N +,-,5:<(70>%d4(U=3:-,/1% libpq SzT:L+,(U@(7=M
#&-,:<(q(*/1`c-,%=5=4(*/1(7djGk4(*4(9FJR N :(*/1(7=U+,%u=(7@3(7:<%7dJ#&(*/1%zP<(*u4(i(7:%4
(7/&3n@=;=?%#&%1S>T:%L-,/1:(7=?C%eL(4-,0>3:<((7/&(7+.450>3#&(7/1:< 5
g$1?> 2>O?
 >?1?
S
83(74(L\3(9\3-,(7=?%q(VPQ(70>3:%=Y(7+^@.=?;5=V%#&%
X@%=V%9@= N %=Y+,u(VPQ(7#&@+, 4(L(*:<(i#&%M
/13%+Sz83(74(%02:<-,`%=V+L@%=?%
+,% N %(Y4(U4%:<psql
5
(*0>=?- N -,(7/14+,%d5=4(*/"a
b

nombredb

% psql nombredb

|6(*02- N -,=?
0>5#&L=(7@3(7:%U(7+-,;53-,(7/1:<(U#&(7/1%PQ(a
Welcome to the Postgres interactive sql monitor:
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: nombredb
nombredb=



T:(W-,/14-,0>%:<-,`c
+,(W-,/1CD=?#&%Y4(g\53(I(*+#&/1-,:=^4(6:<(7=V#&-,/c%+(W(7/10>3(7/1:<=V%I4-,@3(7:
J \3(
@3(74(g(70>=V- N -,=0>/13+,:<%"jGkLq(7/9(*+G(7@%0>-, 4(g:=?% N %PQ0>=(2%4 @=(*+G0>-,:%4u#&5/1-,:<c=4(
:(*=V#&-,/1%+$ST+@=;5=V%#&%
=(7@/14(6%g0>54-,;54(6(70>%@(6\3(60>#&-,(7/1e%/L0>/L+,% N %=?=?%
-,/1`(7=V:<-,4%X! G!2S>8=6(VPQ(7#&psql
@+,X@3(*4(
 N :<(7/1(7=6%J534%u N =(
+,%-,/1:<%{G-I4(u`%=?-,%*Y5=4(7/1(*
jZkO4(Y85:;5=(76(70>=V- N -,(7/14a
nombredb=> \h

/1%I`(7eI\3(g_1%:<(7=?#&-,/1%4u4(g-,/1:=430>-,=3l02/13+,:%(7/i(*+(7@%0>-,u4(W:<=V% N %zP<X*@3(*4(
@%%=^(7+0>5/1:<(7/1-,4L4(U7:<(%+(7=V`-,4=4(85:<;=(76(70>=V- N -,(*/14a
nombredb=> \g

T:O+,(4-,0>(L%+.(7=?`c-,45=g\3(L@=02(*( +,%90>5/13+,:%cSjG-.:<(7=?#&-,/1%930>5/13+,:<%902/R@3/1:]J
0>5#&%X1/1n(7 /1(70>(7%=?-,n\53( -,/1:<=?43e0>% +,%O(70>3(7/10>-,% G;S
@=50>(7%*=VK%3:#&:<-,0>%M
#&(7/1:<( 0>5/c3+,:<%
:<(7=?#&-,/1%4%Y(*/&@3/1:KJO02#&%1S8%=?%L+,(*(7=Wpsql
+,%0>5/13+,:%U4( 3/&)02_1(*=5X
(7/q+,3;5%=l4(Y-,/1:=430>-,=V+,%"-,/1:<(7=?%0>:-,`%#&(7/1:<(7X(70>=?- N %1a
nombredb=> \i fichero

8%=V%%+,-,=l4(

psql

nombredb=

\q

Ji`5+,`(7=h%
/1-,{X(70>=V- N %ca

:(*=V#&-,/1%=VdJi+,(d4(7`5+,`(7=?
(7+-,/1:<7=?@=(7:(U4(U5=4(7/1(*S m 8%=?%
0>/150>(7=l#&g=4(7/1(7
psql
4(i
(70>%@(7Xc(70>=V- N % G_r(7/+,%K(7/1:<=?%4%q4(7+#&5/1-,:<c=VS yl5u(*@.%0>-,5u(*/ N +,%/10> m (7@%0-,X
:% N 3+,%4.=(7J%+,:<54(q+,,/1(*%yW@3(74(7/o3%=V( +,- N =(7#[(7/1:(q(7/B+,%0>5/13+,:<%jZkgSG5
0>5#&(7/1:<%=?-,5(*/r3/1%O5+,%O+,,/1(7%K(q-,/14-,0>%/B#&(74-,%/1:(q45 ;53-,/1(7 m *yzSG54+,n\3(
`%J%q4(*4(i+,u;53-,5/1(7 _1%:<% (7+)/o4(9+,%q+,,/1(*%K(7=?q-,;/1=?%4^Su0>5#&(*/1:%=?-, \3(
% N %7=0>%/#&+,:-,@+,(*L+,/1(7%X1\3(q(7:/o4(7/1:<=?&4(q3/1%K+,,/1(7%K(9(7/10>-,(*=V=?%/r(*/1:=(91wZ9SSS
*wGX3/1%d0>5/1`(7/10>-,/O\3(U(U:<5#&L@=(7:%4%U4(YfD/1;5=?(*S
J

Destruccin de una base de datos

jZ-3:(74n(7Y(7+1%4#&-,/1-,:<=?%45=W4(d+,% N %(u4( 4%:Y#&- N %(7XG@3(74( 4(7:=3-,=?+,%L3%/14 (7+


-,;3-,(7/1:<(U=?4(7/q4( /1-,{a
% dropdb nombredb

T:%Y%0>0>-,5/9(*+,-,#&-,/1%
C,-,0>%#&(7/1:<(I:<545"+,6)0>_1(7=l%0>-,%4l0>5/q+,% N %(g4(I4%:<5lJ/1
@3(74(I(*=l-,/1`(7=?:-,4%X@=l+,i\53(U+,94( N ((7=h3%4%U02/ ;=?%/ @=(70>%*302-,/"S
T":%# N -,*/K@.5- N +,(U4(7:<=?3-,=h3/1% N %(U4(4%:"4(74(3/1%d(7-,5/KjGkLK3%/14a



drop database nombredb

Copia de seguridad y restauracin


Atencin
Deben realizarse copias de seguridad de las bases de datos regularmente. Dado que Postgres gestiona sus propios ficheros en el sistema,
no se recomienda confiar en los sistemas de copia de seguridad del
sistema para las copias de respaldo de las bases de datos; no hay garanta de que los ficheros estn en un estado consistente que permita
su uso despus de la restauracin.

85:<;=(7l@=@=?0>-,/1%4l3:-,+,-4%4(7l@%=?%I=(7%+,-,e%*=^+,%l0>5@.-,%l4(I(*;3=?-,4%4q4(Y3 -,:(7M
#&%1a
@%=?%U0>5@.-,%W4(Y(*;3=?-,4%4 4( N %(7"4(4%:W-,/14-,`-,43%+,(*6J
@%=?%Upg_dump
=(7%+,-,e*%=0>5@-,%W4(Y(*;3=?-,4%4O4(U:<4%
+,%
-,/1:%+,%0>-,5/K4(3/1%d5+,%d`(7ecS pg_dumpall
%I02@-,%Y4(W(7;3=?-,4%4q4(W3/1%+,% N %(W4(g4%:<5h@3(*4(W=(7%+,-,e%*=V(g3%/14u+,%-,;53-,(7/1:<(
5=4(*/"a
% pg_dump nombredb

nombredb.pgdump

Ji@.3(*4((7=h=?(*:%3=?%74%
3%/14
cat nombredb.pgdump | psql nombredb

T:%Y:*02/1-,0>%@3(74(g3%=V(Y@.%=V%Y#&`c(*= N %(*l4(Y4%:<l%U3/1%U/13(7`%+,50>%+,-,e%02-,/9J@%=?%
=(7/1# N =?%= N %(764(4%:6(*{G-,:<(7/1:(*S S

Bases de datos grandes


Autor: Escrito por Hannu Krosing 1 on 1999-06-19.

%49\3(d85:<;=(7g@(7=?#&-,:(d:% N +,%g4(
#&%J5=6:%#&%cq\3(u(*+@(*=V#&-,:<-,4q@=6(7+c-,:(*#&%
4()0>_1(7=5X@3(*4(U=(73+,:%=^@= N +,(7#&:<-,02L(7+Z`+,02%4i4(3/1%d:<% N +,%
%
3/K)02_1(*=5XJ5%d\3(
(7+Z)0>_1(7=i=(73+,:%/1:((*;3=?%#&(7/1:<(3@(7=?%=?U(7+:<%#&%1i#&{G-,#&L@(7=?#&-,:-,4^S
FY#&
(*0>=?- N (Y(*/9:43:X*@3(74(g3%=+,%l_1(7=?=V%#&-,(7/1:%l?/1-,{
@%=?%5=?:<(7%=(7:<5
@- N +,(7pg_dump
6@= N +,(7#&%a
L4(`5+,0>%4602#&@=?-,#&-,45a
b

% pg_dump nombredb | gzip > nombrefichero.dump.gz

+,%
=(*023@(*=%#&5W0>5/"a
% createdb nombredb
% gunzip -c nombrefichero.dump.gz | psql nombredb

% cat nombrefichero.dump.gz | gunzip | psql nombredb

(U@+,-,:Va



% pg_dump nombredb | split -b 1m - nombrefichero.dump.

JL+,9=(70>3@(2=V%#[5602/"a
% createdb nombredb
% cat nombrefichero.dump.* | pgsql nombredb

85=^3@3(7:X(7+/15# N =(Y4(7+G)0>_1(7= m
y5J(7+G0>/1:(7/1-,4L4(I+,%U%+,-,4%Y4(
/1&:<-,(7/1(9@5=U\5390>-,/102-,4-,=Unombrefichero
0>/o(*+^/1# N =(q4(i+,% N %(i4(94%:S 4(7#&X+,%
Npg_dump
%(I4(I4%:<5=?(*:<%3=?%4.%@3(74(g:(*/1(7=^3/9/1# N =?(I4-,:-,/1:<5X7@5=^+,\3(Y(*:<(Y#&(*0>%/1-,#[
:%# N -,*/q(76(7C(70>:-,`@%=?%
=(7/15# N =?%= N %(7"4(4%:S

Notas



1S_1%/c/13
:<=?3:VS (7(

Captulo 27. Tratamiento de problemas


Fallos de inicio de Postmaster

%J`%=V-,%l@5- N +,(7"=?%e/1(7l@%=?%\53(@:<#&%:(*=h/1L@3(74%Y-,/1-,0>-,%+,-,e%=?(SVFI5#&@=3( N (
(7+)0>_1(7=R4(9=(7;-,:<=&4( @:#&%:<(7=<X.n-,/1,0>-,(7+,R#&%/13%+,#&(7/1:( m -,/r=(74-,=?-,;-,=U+,%K%+,-,4%
(7:/14%=9+,%u4(U(7=?=5=(2y.@%=?%
`(7="+,g#&(7/c%PQ(7g\3(
%@%=$(*02(*/"S+,;53/1q4(U+,5W@- N +,(7
#&(7/1%PQ(764((7=?=5=5/ %3:<5(*{G@+,-,0>%:<-,`5X@(7=+,56_1%Ji\3(U@3(74(*/q/19(7=V+,6:%/1:<a
FATAL: StreamServerPort: bind() failed: Address already in use
Is another postmaster already running on that port?

T:/15=?#&%+,#&(*/1:(U-,;5/1-,)0>%
+,L\3(3;-,(*=(az%0>0>-,4(7/1:<%7+,#&(*/1:(U_1%
-,/1-,0>-,%43/1%
(7;53/14%
-,/1:%/10>-,%u4(d@5:<#&%:(7="(7/O(*+c#&-,#& @3(7=?:q(*/](7+5\3( J5%u(u(*:<u(VPQ(70>3:%/14q3/1^S2jG-,/
(7# N %=;ZX-(7+#&(*/1%PQ(L4( (7=?=?=g4(7+./10>+,(7O/1](7U!44=?(2
%+,=?(*%74J]-,/R3(*!6]%+,;53/1%
`%=V-,%*/1:(*XG@.3(74(U(7:<%=l0>3=?=?-,(7/149:<=?i@= N +,(7#&%cS8="(VPQ(7#&@.+,5X(7+5:=?%:<%=l4(U-,/1-02-,%=l3/1%
(7-,5/ 4(@.5:#&%:<(7=h(7/ 3/ @3(7=V:<i4((7=?=5==(7(7=?`c%*4i@.3(74(@=430>-,=h%+,;5i0>#&a
$ postmaster -i -p 666
FATAL: StreamServerPort: bind() failed: Permission denied
Is another postmaster already running on that port?

IpcMemoryCreate: shmget failed (Invalid argument) key=5440001, size=83918612, permission=600


FATAL 1: ShmemCreate: cannot create region

/]#&(7/1%P<(02#&]*:<(@- N +,(7#&(7/1:<(-,/14-,0>%i\3( (7+.+,-,#&-,:(L-,#[@3(7:O%+1:%#&%1]4(u+,%


e/1%I4(d#&(7#&=V-,%0>5#&@%=?:<-,4%I(7g#&(7/15=W\53(u=(7%u4(
 N 3C<CQ(7= \3( 8:<;5=?(*Y(7: -,/1M
:(*/1:%/140>=(7%=S m }@3(74(Y-,;5/1-,)02%=l\3(U/1L4-,@5/1(U4(5@=?:(U@%=?%+,%
#&(7#&=V-,%d0>#&M
@%=?:-,4%Y4(I:-,@jGJE0>/1);53=?%4L(*/q3K/10>+,(7^S yFY#&%=?=?(*;+, :<(7#&@=V%+G@3(74(I:=?%:<%=
4("-,/1-,0>-,%=1@5:<#&%:(7=10>5/3/ /1#&(7=d4( N 3C<C (7=?g#&(*/15=14(6+,
/1=?#&%+ m @%=?*#&(7:<=?UMyzS
jZ-/&(7# N %=;X4( N (7=?,%L=(70z5/1);13=?%=W3/10>+,(7O@%=?%L-,/10>=(7#&(7/1:<%=W(7+.:<%#&%1O@(7=?#&-,:-,4
@%=?%K+,%K#&(7#&=V-,%O02#&@%=?:-,4%1ST:<(K#&(7/1%PQ(K@3(74( %@%=$(70>(7=
0>3%/14R:=?%:<( 4(q-,/1-,0>-,%=
`%=V-,%*(*-5/1(7U4(@:#&%:<(7=g(7/&+,%L#[-,#&%L#&\3-,/1%X5-(7+1:<5:<%+.4((*@%0>-,K/1(*02(*%=V-,
(7{02(*4.(U(*+5+,#&-,:(U-,#[@3(7:L@5=h(7+/102+(7S
IpcSemaphoreCreate: semget failed (No space left on device) key=5440026, num=16, permission=600

/O#&(7/1%PQ( 0>#&K*:<( 5 -,;5/1-,)0>%\3(d( _1%J% \3(74%4q-,/&(*@.%02-,q(*/[(7+4-,02-,;5M


/1-,)02%9\53(9+,%90>%/1:<-,4%4o#&{-,#&%94(i(*#&C5=
@.(7=V#&-,:<-,4u@=Y(7+/10>+,(7&@%=?%i(7+jGJE
(7u#&(*/15=
\3(q+,%K0>%/1:<-,4%4B\3(q8:;5=(7 -,/1:(*/1:%K02=(7%*=VSFI5#&n%/1:<(7X.@3(*4(q(*`c-,:<%=(*M
:(L@.=? N +,(7#&%q-,/1-,0>-,%/14[(*+^@:#&%:<(7=0>/o3/n/13#&(7=&4(L@=50>(*
 N %02'5(7/14L#&(7/15=
m @%=#&(7:<=LM~ yX@.(7=L(7=?,%U#&(VPQ5=h\3(
-,/102=(*#&(7/1:%=V%(7++,,#&-,:<(U-,#&@3(7:L@=l(7+/10>+,(7^S

Problemas con la conexin del Cliente

/1%i`(7eL\3(L:-,(*/1(L(7+@:<#&%:(*=Y(7/R(VPQ(70>30>-,/1X1%+.:<=?%:%=I4( 02/1(70>:<%=Y0>/n*+#&(*4-,%/1:<(
3/1%
%@+,-,0>%0>-,/q02+,-,(*/1:(@.3(74(@=430>-,=V(I3/ C%+,+,@=l`%=?-,%l=V%e5/1(*SV5"(VPQ(7#&@+,64(



#&(7/1%PQ(7h4(W(7=?==.#&:<=?%4h%\35/L@%=?%Y0>+,-,(7/1:<(7 N %%41"(*/L+,%h`c(*=V-,/1(7h=(70>-,(7/1:<(7
4( +,- N @\5+,
0>+,-,(7/1:<(7 N %%4Y(7/&:=?% N - N +,-,5:<(70>%4( -,/c:(7=?C%e @3(74(7/]@=?430>-,=W5:<=5
#&(7/1%PQ(7X02/ #&6i#&(7/16-,/1CD=?#&%0>-,5/"S
connectDB() - connect() failed: Connection refused
Is the postmaster running (with -i) at server.joe.com and accepting connections on TCP/IP port 5432?

T:(W(7+(7hC%+,+,u;5(7/17=?-,0>u4(g~ u@3(*4u(7/10>5/1:<=V%=3/i@:#&%:<(7=^02/i(*+\3(I0>5#&3/1-,0>%=M
#&(7$S83(74(Y50>3=?=V-,=l%+,;L%0>3%/14i(U-,/1:<(7/1:<% 3/1%d0>#&3/1-,02%02-,/KFY8WwZf8[L#&(74-,%/1:<(
50>'5(7:1 /1-,{u0>/O3/ @:<#&%:(*=l+,0>%+a
connectDB() - connect() failed: No such file or directory
Is the postmaster running at localhost and accepting connections on Unix socket 5432?

%U+,:<-,#&%
+,,/1(*%
(7":-,+Z@.%=V%`c(*=V-,)0>%=^\3((*+Z02+,-,(*/1:(Y(7:
:<=V%:%/14 4(Y02/1(70>:<%=^45/14((
3@.5/1(U\53(4( N (_1%0>(7=?+,^SzjZ-Z(*/ =?(*%7+,-,4%4O/19_1%JL/1-,/1;/K@:<#&%:(*=l(VPQ(70>3:</14(U%+,+,,X
(7+1#&(*/1%zP<(L4(u(7=?=5=W4(*+./102+,(*O(7=?i4(7+c:-,@O4( FY/1(7{G-5/R=(7_13%4%O4( ~ K(7{-,:(
(7+5)0>_1(7=iq4-,=(70>:=V-,X0>5#&q+,I%/1:<(7=?-,5=(*S m Tg@%=V:<-,0>3+,%=#&(7/1:<(u-,#&@=?:%/1:<(d:(7/1(*="(7/
0>3(*/1:%q\3(qFY/1(7{-,5/o=(7_13%4%7^(7/(7:(90>5/1:<(7{: 5 /1&-,;/1-,)^02%q\3(q(7+@:#&%:<(7=
_1%J5%Y=(*02- N -,4u+,%Y@(7:<-,0>-,5/94(I0>/1(7{-,5/qJ +,%Y_1%J5%=(70>_1%e%*47(7/L(7:(g0>% (g@=4302(g3/
#&(7/1%PQ(i4-,C(7=(/1:<(7Xc0>5#&&(i`(7=?1S y}L:<=5d#&(7/1%P<(*d4(i(7=?==X50>#&&(7+4(i!FY/1/1(70>:-,/
:-,#&(*453:<!W1-,/14-,0>%/R@= N +,(*#&%#&U-,#[@5=?:%/1:(7X0>5#&O+,%9C%+,:%4(0>/1(70>:-,`-,4%4(*/
+,%
=(74gS
No pg_hba.conf entry for host 123.123.123.123, user joeblow, database testdb

T:O(7
+,]#&d@= N % N +,(i\3(L N :(*/1;%q-02/1-,;3(i0>/1:%0>:<%=Y0>/3/n@5:<#&%:(*=X@(*=
7:(9/1n\3-,(7=( _1% N +,%=U0>5/B3:(*4gSGFY#&n3;5-,(7=(9(7+h#&(*/1%zP<(7X(7+h@:#&%:<(7=
=(7_1%K+,%
@(7:<-,0>-,5/&4(u0>5/1(7{-,/&@5=\3( /1O(*/1023(*/1:=?%L3/&=(7/1;5+,5/&4( %3:<5=?-,e%*02-,/R(7/[3n)0>_1(7=
4(0>/1);53=?%02-,/ @;5_ N %1S 0>5/1C
Password authentication failed for user joeblow

W#&(7/1%PQ(7W02#&i*:(U-,/14-,0>%/K\3(U_1%d0>5/1:<%0>:%4i0>/K(*+5@.5:#[%:<(7=<XJq7:<(U(7:U4-,M
@3(7:U%g_1% N +,%=102/3:<(74X>@(7=U/1d+,d_1%=?g_1%:%g\53(63@(*=(6(7+7#&7:<54
4(6%3:=?-,e%0>-,5/
(7@(70>-,)0>%4.K(7/&(7+.)0>_1(7= @;5_ N %1S 0>5/1CzSFI5#&@.=?3( N ( +,%L0>+,%`(u\3((7:<L(7/1`-,%/14X5K3
@=5;5=?%#&%Lf T~ (7= N (7=5X5-(7+#&(7/1%PQ(L4((*=V==I#&(*/10>-,5/1%9%+,;53/1]4( (75U:-,@.5
4(%3:<(7/1:<-,02%02-,/"S
FATAL 1:

SetUserId: user joeblow is not in pg_shadow

T:%I(7^5:<=V%I`%=?-,%/1:(W4(WC%+,+,u4(g%3:(7/1:<-,0>%0>-,5/"a/1u(I_1%I(VPQ(70>3:<%4d+,%Y5=4(*/L4(W8:<;5=?(*
0>=(7%*:(73(*=*G@%=V%
(*+Z/15# N =(U4(Y33%=?-,i-,/14-,02%4S
FATAL 1:

Database testdb does not exist in pg_database

~  _1%J N %( 4(d4%:<5Y0>/&(7( /1# N =( N %PQ (7+10>/1:=+.4( (7(d@:<#&%:(*=VS~ :(7( \3(
-/1R(7@(70>-,)02% (7+/15# N =(94(q+,% N %(94(q4%:X.( %@+,-,02%q@=
4(7C(70:<R3/15# N =(94(
33%=V-,(7/ 85:<;=(7X+,i\53(U@3(74(/1i(*=h+,L02=?=(70>:^S



Depuracin de mensajes

T+
@=(7(7/1:%[0>%-,5/1%+,#&(7/1:(]#&(*/1%zP<(79\3(]@3(74(7/(7=4(K%J34%[(*/+,%
postmaster
5+,3
0>-,5/]4(d@=? N +,(7#&%SjG-c4(7(7%u`(7=6#&(*/1%zP<(*Y4(
4(7@3=?%0>-,5/O4(
XG@3(*4(
-,/1-,0>-,%=V+,L0>5/ +,%
@0>-,5/KM4OJ9=(74-,=V-,;5-,=+,%
%+,-,4%
%d3/ )0>_1(*=?4(U=(7;5-,:postmaster
=^a
% postmaster -d > pm.log 2>&1 &

jZ-G/1i4(7(7%U`c(*=h(7:<5W#&(7/1%PQ(7X@3(74((*0>=?- N -,=
% postmaster -S

J[(7+
(*/1:=?%=?i(7/R#&4[jG-,+,(7/10>-,S~ :(*(i\3(L/1](i-,/10>+,3J5(L(7+-,# N +,
G(7postmaster
/ (7++,:<-,#&i(VPQ(7#&@+,XJ%
\53(U(7+@:<#&%:(*=l((VPQ(70>3:<%=VU(7/ (*;3/14L@+,%/1^S

pg_options
Nota: Contribucin de Massimo Dal Zotto 1

T+)0>_1(*=?O5@.02-,/1%+
0>5/c:-,(7/1(i@0>-,5/1(*d4(L(VPQ(70>30>-,/n3%4%
@=Y(*+
N % 0>'(*/14&@%=V%u0>5/1:<=5data/pg_options
+,%=6#&(7/1%PQ(7Y4(d(VPQ(70>302-,/]JK:=I@%=?#&(7:<=5W%PQ3:<% N +,(7S2K\53(
_1%0>(I-,/1:<(7=(7%/1:<(W%U(7:<(I)0>_1(7=u(7l(*+_1(70>_14(I\53(Y(7=?(*+,(7,4u@.5=(*+ N %0>'(7/14q0>3%/14u=(7M
0>- N (I3/1%
(71%+jZfu 8*X_1%02-,(*/14 %Z@- N +,(Y02%# N -,%=^5@0>-,/1(7"4((VPQ(70>30>-,5/q-,/q:<(7/1(7=
\3(Y=(*-,/1-,02-,%=8:;5=(7S?%l5@0>-,/1(7l(7@(70>-,)0>%4%h(*/9(7:(I)02_1(*=?u@.3(74(7/9-,/10>+,3-,=^@3/1M
:i4(O4(7@3=?%0>-,5/3%4i@=(*+6@.%\3(7:<(O:=?%0>( m
yI
@%=?7#&(*:=i/13#&*=V-,0>W\3(U@.3(74(3%=(7+ N %0>'(*/14O@backend/utils/misc/trace.c
%=?%U0>5/1:<=5+,%=h3O0>5#&@=?:%#&-,(*/1:^S
jZ(@3(74(7/ 4(*)/1-,=6/13(*`c%6@0>-,5/1(7gJq@%=?#&(7:<=56(7/
backend/utils/misc/trace.c
Ji(*/
S
backend/include/utils/trace.h
%"5@.02-,/1(764(U@;5@:-,/ @3(74(7/q(*@.(70>-,)0>%=?(0>5/ (7+@%=V#&(*:=
4(8:;5=(7a
-T

postgres opciones -T "verbose=2,query,hostlookup-"

%lC3/10>-,5/1(*63%4%l@.%=V%-,#&@=?-,#&-,=l(7=?=5=(2"Ji#&(*/1%zP<(*64(Y4(7@3=?%70>-,/ @3(74(7/i%_15=?%
3%=Y+,%q3:-,+,-,4%4 ?$1 S7d#&(7/c%PQ(7d-,#&@=(75u(*/:<453:"[:<4(7=?=5/@=(70>(74-,415
@=h3/1%d(7:<-,\3(7:<%d-,/1C5=?#&%:<-,`c%U\3(U-,/10>+,3J(U+,%dC(70>_1%
Ji_15=?%
Ji(7+@-,4O4(7+ N %0>'5(7/14ga
#timestamp
980127.17:52:14.173
980127.17:52:14.174
980127.17:52:14.186
980127.17:52:14.186
980127.17:52:14.186
980127.19:52:14.292
980127.19:52:14.413
980127.19:52:14.466

#pid
[29271]
[29271]
[29271]
[29286]
[29286]
[29286]
[29286]
[29286]

#message
StartTransactionCommand
ProcessUtility: drop table t;
SIIncNumEntries: table is 70% full
Async_NotifyHandler
Waking up sleeping backend process
Async_NotifyFrontEnd
Async_NotifyFrontEnd done
Async_NotifyHandler done



T:(dC5=?#&%:< #&(VPQ5=?%L+,%+,(7;- N -,+,-,4%4R4(u+,5Y=(*;-,:=XZJO@(7=?#&-,:(d0>5#&@.=?(*/14(7=6\3 N %0>M


'(*/14I02/10>=(7:u(*:<I_1%0>-,(7/14u\3IJ (7/L\3I#&#&(7/1:<lSG%# N -,*/9_1%0>(W#&hC0>-,+(*02=?- N -,=
;3-,/1(7 m 0>=?-,@:yh(7/R%s '[O@(7=?+.\3(L#&/1-<:<=V-,0>(7/R(7+)0>_1(7=O4(=?(*;-,:<=?K@%=?%L4(7:(*02:<%=
(7=?=5=$(*UO@= N +,(*#&%Y(7/R+,% N %( 4(4%:<5X5K@%=?%L0>5/1:<% N -,+,-,e%=g(7:<%4,:<-,02%Y:(7#&@.5=?%+,(7
4(+,%":<=V%/1%0>0>-,/1(7S
6#&(*/1%zP<(*g-,#&@=(76@=lJ5+,5;q3%/q+,%d3:<-,+,-,4%4O4(Y=?(*;-,:<=L}u}FY ST+Z3
4( J5+,5;@3(74(q(*=
02/1:=+,%4n@=u+,% @0>-,/1(7=?(*C(7=(/1:<(7%O*+h(7/BJ+,;hS (7;5=V%M
0>-,%4%7#[(7/1:(*Xl#&30>_1%qC3/10>-,5/1(* +,+,%#&%/4-,=?(*02:<%*#&(7/1:(&%
@%=?%[#&5:<=V%=L3
#&(7/1%PQ(7d(*/:<453:"[:<4(7=?=YJ&(*:<%q%+,-,4%9/1&@3(74(L(7=Y=?printf()
(*4-,=?-,;-,4%i%qJ5+,;R[-,/10>+,3-,=
-,/1C5=?#&%0>-,5/  N =?(YC(70>_1%UJ9_1=?%1SzjG(7=?,%U%02/1(VPQ% N +,(U\3(U:<54%"+,%"+,+,%#&%4%"%
@=?-,/1:Cc@3M
4-,(7=?%7/K(7=h=?(*(7#&@+,%e*%4%"@=l+,%d#&%02=L8|"fD~ iJq+,%d%+,-,4%
%d:<4(7=?=h(U0>%# N -,%=?%/q@%=?%
\3(63%=?%/ T8|"fD~qu(7/ 39+,3;5%=<X>4(6#&54d\3(W(6@34-,(7=?%/ 02/1:<=?+,%=1:4%+,%^%+,-,4%
4(3/ #&4i3/1-,C5=?#&(S
T+ZC5=?#&%:<i4(*+Z)0>_1(7=
(7602#&i-,;53(a
pg_options

# comentario
opcin=valor_entero
opcin
opcin+
opcin-

# set value for


# set opcin =
# set opcin =
# set opcin =

opcin
1
1
0

~ :(7(U\3(
@3(74((7=h:%# N -,*/O3/1%d% N =(2`-,%0>-,5/ 4(7+/1# N =(U4(U@M
0>-,5/ 4(7)/1-,4palabra_clave
L(7/
S
backend/utils/misc/trace.c
E7%( g?>hc>7>5 @.%=V%63/1%Y+,-,:<%Y0>#&@+,(7:<%g4(W+,%5@0>-,/1(7hJu3@- N +,(W`c%+,5=(7S

Notas



1S#&%-+,:^a 4e
02S 3/1-,:</"S -,:

Captulo 28. Recuperacin de bases de datos


T:%
(70>0>-,/K/1(*02(*-:%
(7=h(70>=V-,:<%1S>+,;5/ `c+,3/1:%=V-, 





Captulo 29. Pruebas de regresin


fD/1:<=?30>-,/1(7gJi%/1+,-,-,W4(7+Z:(*:c4(=(7;5=(-,/
q:(7:<q4(]=(7;5=(7-,5/4(]8:;5=(7jGkL5/3/0>5/PQ3/1:0>5#&@.+,(7:B4([@=3( N %i@%=?%
+,%-,#&@.+,(7#&(7/1:<%0>-,5/[4(ujGkR(7# N ( N -,45Y(*/[85:<;=(7jGkgS2|"(7%+,-,e%/]@=3( N %I:<%/1:<q N =(
5@.(7=V%02-,/1(7UjGkLo(7:</14%=<X50>#&[:%# N -,*/R N =(L+,%U02%@.%0>-,4%74(*
%1%4-,4%@=85:<M
;=(*jkLgS
:<(7:<Y4( =(7;5=(-,/&C3(7=5/[4(7%=V=G+,+,%45=V-,;5-,/1%+,#&(7/1:<(@=#"5+,+,JKFY_1(*/&JK/14=(7s
$ 3X>JuC3(7=5/ (7{:(*/1%#&(7/1:<(g=(*@%7%4wZ=(7(*#&@%\3(*:%4@5=53=V/1-,(*=Ju_1#&%0>'M
_1%=?:zS*8%=?%985:<;=(7jGko`ccS i(7/n%4(7+,%*/1:(i+,d:<(7:
4(L=(7;5=(-,/C=V#&%/@%=?:<(4(L0>%4%
=(7+,(7%*(U5)0>-,%+S
+,;53/1% N %(74( 4%: 85:<;=(7jGk0>5=?=(70>:%#&(7/1:<( -,/1:%+%4% J::%+,#&(*/1:( CD3/10>-,M
/1%+,(7U@3(74(*/nC%+,+,%=I(*/%+,;53/1[4(L(*:<5
:(*:h4(=(7;5=(7-,5/R4( N -,4O%9@= N +,(*#&%
0>/+,%
=(7@1=(*(*/1:%0>-,/ 4(7+@3/1:%:%/1:<(UJq(7+@5=?:(4(Ue/1%d_15=?%=?-,%1SzW:<(7:W%0>:3%+,(*6/
(7`%+,3%745W3%/1493/O(7/10>-,+,+,q%+,;5=V-,:<#&9!4-,C<C!XJq/]#&3Jq(7/1- N +,(7W%d@(7\3(*1%g4-,C(7M
=(7/10>-,%76(7/ (7+-,:(7#&%cS8%=?%:(7:<W%@%=(/1:<(7#&(7/1:<(UC%+,+,-,4X-(U(7{%#&-,/1%/q(7:<%W4-,CD(*=?(2/1M
0>-,%X@3(74(7/q=(7`(7+,%*=h/1i(7=l-,;5/1-,)02%:-,`%S
%/15:<%L N =(O:(*:L4(K=(7;5=(7-,5/4(K% N %P<%3#&(7/+,o-,;53-,(7/1:( m (7{0>(7@c:r(*/0>%
-,/14-,0>%4yza
b %"-,/1:=30>0>-,5/1(7W5/K0>5#&@%:- N +,(7"0>5/K /1-,{SzE(7%U+,%
/15:<%d% N %PQS
b jG(3%/q+,%65@0>-,/1(7g@=l4(7C(0>:<i(7{0>(7@:<i4/14((U-,/14-,0>%1S
b T+Z33%=V-,L@:<;5=?(*W(7"(*+53@(7=33%=?-,i8:<;=(*S
b %
=3:<%
4(+,%6C3(7/1:(*W(*dwG3=7wG=?0GwG@;5\5+ m 5/ @- N +,(7g:=?%6=3:%yzS
b %
=3:<%
4(+,g(VPQ(70>3:<% N +,(7"(7dwZ3=7wG+,02%+wZ@;5\+ m /O@.5- N +,(765:<=V%W=3:%yzS

Entorno de regresin

8%=V% @=(7@%*=?%=
+,5:<(7: 4(q=(7;=(2-,5/1X^_1%;5% R&  (*/B(7+h4-,=(70>:<5=?-,R4( +,:(7:< 4(
=(7;5=?(2-,5/"S>T:q0>#&@-,+,%u3/]@=;=?%#&%dF0>5/OCD3/10>-,/1(7I(7{:<(7/14-,4%685:<;=(7jGk&(*/]3/
+,- N =(7=V%
0>#&@%=?:-,4%1SVjG(Y;5(7/1(7=?%/9%+,;3/1W;53-,5/1(* m 0>=V-,@:<yjZkO+,0>%+,-,e%4lJL%=02_1-,`
4(K%+,-,4%K02#&@%=?%:<-,`cL@%=?%O+,i:<(7:L\3(O+,i/1(70>(*-,:<(7/"S%]+,0>%+,-,e%0>-,/B=(7(7#&@+,%e*%
#&%0>=5"(7/ +,W%=0>_1-,`5"4(UC3(7/1:<(7"0>5/K=3:%"% N +,3:%6J9/1# N =(764(33%=V-,^S
~ =V#&%+,#[(7/1:(*XG+,I:<(7:W4(
=?(*;=(2-,5/O4( N (7/K(7="(VPQ(70>3:<%45W@="(7+533%=?-,9@:;5=(7gJ5%
\3(L(7+4-,=(70>:=?-,]=0GwZ:<(7:VwZ=(7;5=(J&3 N 4-,=(70>:=V-,U/o4(3o@=5@.-,(74%*4gS7jZ-(VPQ(70>3:<%
+,5:<(7:^4( =(7;5=(-,/R02/[:=K33%=?-, (7+.4-,=(70z:=V-,K=0GwZ:<(7:zwG=(7;5=(74( N (d:(*/1(7=W@(7=M
#&-,564(U(70>=V-,:<3=?%
@%=?%U(7(U33%=?-,S
/1:<(7h(*=V%I(7:<=V-,0>:%#&(7/1:<(Y/1(70>(7%=?-,u(VPQ(70>3:%=(7+@:#&%:<(7=^0>5/i+,%e/1%Y_15=?%=?-,%4(*+-,:(7M
#&%u(7:% N +,(*02-,4%d(*/O8jGX@(7=9J5%u/1q(7g/1(70>(*%=?-,^S>83(74(d(?P<(*023:<%="+,I:<(7:I4(d=(*;=(2-,/
 N =(i3B0>5/1);53=V%0>-,/B_1% N -,:3%+^4(*+@:<#&%:(*=VST+^;3-,/ m 02=?-,@:<y"4(7+^:(*:"(*:<% N +,(70>(7M
=V +,%L`%=?-,% N +,( 4(d(7/1:=?/1O8u'@%=?%%(7;53=?%=6\3( +,:(*:<Y4(7@(*/14-,(7/1:<(7Y4(d+,%Le/1%
_15=?%=?-,%L@=43e0>%7/R+,
=(*3+,:<%4U(*@(7=?%4.S7( :4%C5=?#&%X53-,:<(7#&%i4( N ( @=5M
@=?0>-,/1%=+,- N =(7=?,%4(g@=V:<(Y@.%=V%I+,%Ye/1%_1=V%=V-,%Y8jZx8 X2 +,5l:<(7:4(7@(7/14-,(7/1:(*
4(9+,%Ke/1% _15=?%=?-,%KC%+,+,%=V*/"SG8%=?%q02#&@= N %=U\3( 3B(*\3-,@@=V:<%K(*:<5X.(70>=V- N %q+,
-,;3-,(7/1:<(a
setenv TZ PST8PDT
date



% 5=4(7/!4%:<(7!g4( %=?=?- N % :<-,(7/1(q\3(K4(*`c+,`(7=U+,%K_1=?%O%0>:<3%+4(*+h-:<(7#&%O(*/r+,% e5/1%


_15=?%=?-,%W8jGx8SjG-7+,% N %("4(64%:^8jGx8 9/1
(7:g4-,@/1- N +,(7X2(7/1:<5/10>(7(7+-,:<(7#&%
:-,(*/1( \3( 4(7`5+,`(7=W+,%L_c5=?%i(7/[uAB^S2jZ-.+,%e5/c%L_1=V%=?-,%L8jGx8 n/1K(7:i4-,@/1- N +,(7X
@3(74(I(7:% N +,(*02(*=h+,%W=(7;5+,%"@%=?%U(7%
e5/1%d_1=V%=V-,%
(*{G@+,-,0>-,:<%#&(7/1:<(S
setenv PGTZ PST8PDT7,M04.01.0,M10.05.03

Estructura de directorios
Nota: Esto debera ser una tabla en la seccin anterior.

input/ .... .Archivos fuente que son convertidos, usando make all, en
alguno de los archivos .sql en el subdirectorio sql
output/ ... .Archivos fuente que son convertidos, usando make all, en
archivos .out en el subdirectorio expected
sql/ ...... .Archivos sql usados para ejecutar los tests de regresin
expected/ . .Archivos .out que representan lo que *esperamos* que parezcan
los resultados
results/ .. .Archivos .out que contienen lo que los resultados *realmente*
parecen. Adems es usado como almacn temporal para el test de
copia de tablas.

Procedimiento para el test de regresin

%h-,/1:<=?30>0>-,5/c(7"(7:/i@=? N %41%l(7/93/i|6(74 %:-,/13{


`(7=?-,5/9cS I3%/14(*+G-,/1:*=V@=(*M
:(u4(d5=4(7/1(* N %_"ST{02(*@:q4/14(u(u-,/14-,\3(7X(*;3=?%#&(7/1:<( C3/10>-,5/1(u(7/&+,% #&%J55=?,%
4(g-,:<(7#&%SVf/1:<=3020>-,/1(7"0>5#&
J
02%# N -,%/i#&30>_1L+,%l5@0>-,/1(7l\3(I4( N (I3%=
( %/1:<(764((70>- N -,=h(*:<%6-,/1:<=30>02-,/1(7S
(7/q0>%4%
@+,%:%C=V#[%S Ih?Z?IpsV2)tar
8%=V%3/1%d-,/1:%+,%0>-,/ /13(7`%di-(7:
%0>:<3%+,-,e%*/1493/1%
`(7=?-,5/ %/1:<(7=?-,5=h4(8:<;=(*a

* ,+>.-5
0/5?>1- 02525?
1ST+G%=0>_1-,`cOwG3=*wG=?0GwG@;\+?wG=0GwG:(7:VwZ=(*;=(2wG|6T ABTO:-,(7/1(Y-,/1:=30>02-,/1(764(7:<%+,M
+,%4%I@%=V% +,%(?P<(*0230>-,/&( -,/1:<(7=?@=(7:%*0>-,5/&4( +,Y:(7:<U4(u=(7;5=(2-,/"S* \3(-,;53( (7
3/1%
`c(*=V-,/O#&60>=V:<%1a
jZ-Z(*+5@.5:#&%:<(7=/1i(U(7:<
(VPQ(70>3:%/14LJ5%X-,/1-,0>-,(U(7+@:#&%:<(7=l(*/q3/1%d`c(*/1:%/1%
\53(
(7:4-,@/1- N +,(
(70>=V- N -,(*/14
postmaster



i-,/1-,0>-,(U(7+4(7#&/1-,i@.5:#&%:<(7=h(7/ (7;3/14i@+,%/1L(702- N -,(*/14


cd
nohup postmaster > regress.log 2>&1 &

TZP<(*023:<(U@:<#&%:(*=l4(*4(+,%d0>3(*/1:%d4(Y3@.(7=33%=?-,94(Y85:;5=(7 m /1=?#&%+,#&(7/1:<(U+,%
023(*/1:%
@:;5=(7yzS
Nota: No ejecute postmaster desde la cuenta de root.

1SjG-Z_1%
(?P<(*023:<%4 %/1:<(7=?-,5=?#&(7/1:<(U+,5":<(7:64(=(7;5=(-,/1X N 5=?=(Y(*+Z4-,=(70>:=V-,4(I:=?% N %PQ
02/"a
cd /usr/src/pgsql/src/test/regress
gmake clean

~ /1(*02(*-,:%](*0>=?- N -,=d!;5#&%'5(K0>+,(7%/1!Y-l(*+,%]@=V-,#[(7=V%K`(7eO\3( (7:](?P<(*023/1:<%4R+,


:(7:<S
S TZPQ(70>3:<(+,56:<(7:64(U=(7;5=?(2-,/"ST0>=?- N %
1
cd /usr/src/pgsql/src/test/regress
gmake all

1S TZPQ(70>3:<(+,56:<(7:64(U=(7;5=?(2-,/"ST0>=?- N %
cd /usr/src/pgsql/src/test/regress
gmake runtest

v1S
( N (7=?,%d N :<(7/1(7="(*/]+,%u@%/1:<%+,+,% m Jq%4(7#[W(*0>=?-,:q(*/O(7+5%=0>_1-,`RSwG=?(*;=(7S 3:y13/1%
(*=V-,( 4(+,,/1(*%-,/14-,0>%/14]\53 :(*:<
_1%/n@.%%4 J[\3L:<(7:U_1%/&C%+,+,%4^S(7/1;5%9(7/
023(*/1:% \3( @3(*4(u(7="/15=?#&%+1\3(u%+,;53/1K4( +,Y:(7:<YCD%+,+,(S8%=V% +,5Y:<(7:<C%+,+-,45X
3(q4-,C<C6@%=?% 02#&@%=?%=U+,%=02_1-,` 4(9+,54-,=(70>:=?-,5OSwG=(73+,: JSwG(7{@(70>:(*4gSjGCD%+,+,%3%:<xX(70>=V- N %
%+,;L02#&i(*:<^a
cd /usr/src/pgsql/src/test/regress
diff -w expected/float8.out results

1S (7@3*64((VP<(*0>3:<%=+,56:(*:6J9(7{%#&-,/1%=+,W=(73+,:%45X(*0>=?- N %
dropdb regression
cd /usr/src/pgsql/src/test/regress
gmake clean

@%=?%U=(70>3@(7=?%7=h(7+Z(7@%0>-,L(7/ 4-,02L:(*#&@5=?%+Z3%4L@5=h+,56:<(7:S



Anlisis de Regresin

"=(*3+,:<%415"(I(*/1023(*/1:=?%/9(7/i+,5l%=0>_1-,`54(7+G4-,=(70>:<5=?-,KSwG=(73+,:S?T:<5"=(73+,:%4.
@3(74(*/(7=.02#&@%=?%40>/i+,h=(73+,:%44(7+4-,=?(*0:=?-,KSwZ(*{G@(*02:<(74i3%/14u4-,C<CVS m T+
;3-,/ m 0>=V-,@:<y4(*+:<(7:_1%02(W(7:< @5=3:<(74X*J 4(VPQ%+,%h4-,CD(*=(7/10>-,%(7/[SwG=?(*;=(7-,/"S 4-,C<CQS y
W%=0_1-,`g@3(74(*/ /1i0>5=?=(7@/14(7=?(Y4(UC5=?#&%
(7{%0>:<%1SVT+;53-,5/K4(7+:(*:1-,/1C5=?#&%=?
4(73/1%u4-,C(7=(2/102-,% 0>5#&q!$CD%-,+,3=(*! m C%+,+,yXG@.(7=9+,%4-,CD(*=(/10>-,% @3(74(
4( N (*=V(
%u@(7\3(71%
`%=V-,%*0>-,5/1(*6(*/1:=(W@+,%:<%C5=?#&%h(*/i+,6#[(7/1%P<(*l4(I(*=V==<X0>#&@=V:<%#&-,(7/1:< 4(I+,%+,- N =(7=V%
#&%:<(7#&-,0>%X.(*:0GS!%+,+,!U4( (*:<( (*:<-,+,n/1-,/14-,0>%/o/1(70>(7%=?-,%#&(7/1:<(q3/B@= N +,(7#&% 02/
85:<;=(7S
85=
:<%/1:X(7/1(70>(7%=?-,R(7{%#&-,/1%=
+,% 4-,C(7=(2/10>-,%4( 0>%4% :(*:W!C%+,+,-,4!0>5/B(*+h)/B4(
4(7:<(7=?#&-,/1%="-1(7{-,:(d3/]@= N +,(7#&% =(7%7+,#&(*/1:(5SI-,;53-,(7/1:<(7Y@3/1:<5Y-,/1:<(7/1:<%/[@=@5=M
0>-,5/1%=3/1%d;53%
@%=?%
4(*:(7=?#&-,/1%=-3/1%U4-,C(7=(7/10>-,%U(*W-,;/1-,)0>%:<-,`c%dL/1S

Diferencias en los mensajes de error

+,;53/1 4( +,:(7:<U4(u=(7;5=(7-,/[-,/10>+,3J5(7/&-,/1:<(7/10>-,/1%4%#&(7/1:<( `%+,=(7Y4(d(7/1:<=V%4%/1


`+,-,45Sh#&(7/1%PQ(7h4(W(7=?==@3(74(*/L`(7/1-,=:<%/1:u4(7+024-,;5u4(I8:;5=(70>#&4(g+,%
=3:-,/1%"4(-,:<(7#&%
4(I+,%
@+,%:<%C5=?#&%U(*/q+,%
\3(/1W(*/102/1:<=?(*#&5SzT/q(*+Z+,:-,#&90>%X7+,
#&(7/1%PQ(7u@3(*4(7/n`c%=?-,%*=U(7/1:<=?(L@.+,%:%CD=?#&%X1@(*=]4( N (*/=(4(VPQ%=-,/1C=V#&%0>-,/o-,#&-,+,%=VS
T:%U4-,C(7=(2/10>-,%d(7/n+,d#&(7/1%PQ(7
4%=V/n0>#&[=(73+,:%4]3/n:(*:l!C%+,+,-,45!W\3(i@3(74(
(7=h`%+,-,4%4L#&(*4-,%/1:<(3/1%d-,/1@(70>0>-,5/"S

Diferencias en fechas y horas

AB30>_1
4(+,5
=(73+,:%44(LC(70>_1%iJ]_15=?%95/R4(7@(*/14-,(7/1:<(7U4(7+.(7/1:<5=?/1[4(L+,%Le5/1%
_15=?%=?-,%1SZi%02_1-,`94(O=(7C (7=(7/10>-,%](7:</;(*/1(7=V%45L@%=?%]+,%[e/1%[_1=V%=?-,%[8jG^x8
m (7='5(7+,(7J>XZFI%+,-,C5=?/1-,%yJK%@%=$(7/1:<(7#&(7/1:<(u@.3(*4(7/O@%=(70>(=WC%+,+,I-1+,Y:(7:<Y/1K(d(VPQ(70>3M
:%/O0>5/](7:%ue/1%_1=?%=?-,% (*:<% N +,(70>-,4%1ST+@=5;5=V%#&%d\3( (?P<(*023:<%u+,5Y:<(7:I4(d=(7;5=(-,/
(7:% N +,(*0>(+,%9`c%=V-,% N +,( 4((7/1:<=V/1&8u' %i8jGx8 r@.%=V%L%(*;3=?%=g=(73+,:%4U@%=(0>-,M
4S
8%=(0>(d\3(d%+,;3/1I-,:(7#&%I/1 %0>(7@:<%7/O+,%-,/1:%{G-,I=(70>#&(7/14%4.% @%=?%d(7:% N +,(*02(*="(7{M
@+,-,0>-,:%#&(*/1:(6+,%=(7;5+,%^4(6+,%Ye5/1%I_1=V%=?-,%g+,02%+,>@3(74(W(7=.\53(g/1(*02(*-,:(W3%=3/1%gC5=?#&%
4-,:-,/1:<%
@%=?%
(7:<% N +,(70>(7=^8u'r(7/ (7:%6#&\3-,/1%S
+,;53/15U-,:(7#&%
\3(i3%/R+,- N =(7=?-,%7U%/1:-,;53%U4(e/1%U_15=?%=?-,%UCD%+,+,%/&%+.%@+,-,0>%=g+,%
0>5=?=(70-,/1(7U4(%_1=V=K4(+,3ei+,%=g(7/R+,%C(70>_1%Y%/1:(*=V-,=(7%it5*X50>%3%/14 \3(L+,%
_15=?%
4(i(7%dC(70>_1%U%@%=(2e0>%/n(7/n8jGr% @(*%=Y4(i:<54^ST:&4%=?9@-,(i%q4-,C(7=(2/102-,%
+,50>%+,-,e%4.%6(7/ +,W=(73+,:<%464(+,56:(7:<S

Diferencias en punto flotante

+,;53/15Y4( +,U:<(7:Y-,#&@.+,-,02%/[0>%+,0>3+,%=6/1#&(7=5Y4(uM N -,:< m %:xy%L@%=?:<-,=64(u+,%Y02M


+,3#&/1%Y4(d3/1%L:<% N +,%1SjZ(d_1%/[ N (7=?`c%4q4-,C(7=(7/10>-,%7Y(*/[+,5=(73+,:<%4.\3( 4(*`c3(*+,`c(*/
C3/102-,/1(7h#&%:(7#&:-,0>%(7/i0>+,3#&/1%h4(W:<-,@%:xcSh:<(7:h0>/6%:xYJu4(W;5(7#&(7:=?,%
5/[@.%=V:<-,0>3+,%=#&(7/1:<( @=@(7/15g%@(*\3(71%Y4-,C(7=(2/10>-,%I(7/1:<=(u@.+,%:%CQ5=?#&%SjG(
@=(70>-,%
3/1%902#&@%=?%0>-,/n0>/+,3@.%9@5=I@%=?:(L_13#&%/1%9@.%=V%L4(7:(*=V#&-,/1%=Y4-,C(7=(2/10>-,%d\3(L/1=M
#&%+,#&(7/1:<((U(7/10>3(7/1:<=V%/K
@-,0>-,/1(76%d+,%
4(7=(70>_1%U4(7+@3/1:L4(70>-,#&%+S
+,;53/15"(7=?==?(2"4((71%+,(7l4(7+Z-,:(*#&%
0>5/q@s m y1JL(7{@ m y54-,)(7=(7/i4(Y+,W#&(*02%/1-,#&
\3(U(7@(7=?%U(*+%0>:3%+Z0>4-,;L4(8:<;=(*S



Diferencias en polgonos

E%=V-, 4(K+,:(7:<L-/102+,3J5(7/B@(7=?%0>-,5/1(*L0>/B0>5=4(7/1%4%* N =( (*+l02%+,+,(VPQ(7=&4(K}%M


'+,%/14gwZ(7=V'5+,(7J]FYOS5
4%:d4(9(*:<(L#&%@%q`-,(7/1(7/n(7{@=(2%45
02#&&@+,,;55/1u0>3M
JU`c*=V:<-,0>(7
(*:</R=(7@=(2(*/1:%45U(7/n@%=(
4(/1#&(7=
5%:x m +,%:<-,:34J&+,/1;5-,:34r4(7M
0>-,#&%+,yzSf/1-,02-,%+,#&(7/1:(*X( 0>=(7%/oJ+,+,(7/1%/r%+,;53/1%:% N +,%u0>/B0>5=4(7/1%4%X14(7@37 (
0>=?(2%/r%+,;3/1%d`c-,:<% m E"-,(7s y6_1%0>-,(7/14&(*+7"5-,/r4(94u:<% N +,%u3%/14R(7+^5@(*=V%45=4(
-,/1:(*=V(70>0>-,5/]4(u@.5+,;/15 m188 yXJK4(7@(7I(u=?(*%7+,-,e%3/[jG(7+,(*02: N =?(d+,%L`-,:%cS2FY3%/14
0>5#&@%=V%#&I+,Y=(73+,:%415Y4(d4-,C(7=(2/1:(*Y@+,%:<%C5=?#&%XG+,%I4-,C(7=(2/102-,%Y%@%7=(*02(*/](7/O(7+
(7;3/14i9:<(7=0>(7=h+,3;5%=h%d+,%d4(7=(70>_1%
4(*+5@3/1:<94(*02-,#&%+Sz%6-,/1:<=3020>-,/(*WjGk]45/14(
(4%/ (7:<56@= N +,(7#&%6/O+,%6-,;53-,(7/1:<(7a
QUERY: SELECT * from street;
QUERY: SELECT * from iexit;

Diferencias aleatorias

%Jq%+5#&(7/1I3/O02%94(d:<(7:.(7/O=V%/145#S 53:.\3(d(7:<% 4-,(*1%49@%=?%d@=4302-,=l=(73+,M


:%45"%+,(7%:=V-,SzT:i02%3%\3(U=V%/145# C%+,+,((*+:(7:14(=(7;5=?(2-,5/K0>%4%`c(*e1SzT02=?- N -,=
diff results/random.out expected/random.out

4( N (W@=4302-,=.3/1% 3/1%h@0>%h+,/1(7%h4(g4-,C(7=(2/10>-,%h@=(*:<%I=V%e5/1X@(7=d:<=V%`c%=?-,%M


0>-,5/1(76(7/ @3/1:<%5:<%/1:(Ui(7/q%=\3-,:<(70>:3=?%"4-,:-,/1:<%W@.3(74(7/q0>%3%=#&W4-,CD(*=(/10>-,%S

Los archivos expected


%=02_1-,`

C3(7=/r%4%*@:<%4 4(7+l#&/15+,:-,0>o%=?0z_1-,`cn5=?-,;5-,/1%+

./expected/*.out
@.=?@=02-,/1%4R@=0"D+,+,JFY_1(7/"SE(7=V-,/1(7 #&#&4(7=?/1% 4(9(7:
expected.input
%=0_1-,`5 ;5(7/1(7=?%4%*u(7/`%=V-,%d#&\3-,/1%u4(i4(7%=?=5+,+,[_1%/o-,4&3:<-,:3-,4%u4(7@37

4(
3/1%L0>3-,4%4% m >y-,/1@(70>0>-,/"SAB302_1%I4(
(7:%Y#&\3-,/1%Y4(
4(7%=?=5+,+,q(*:</O(VPQ(7M
0>3:<%/14R`%=?-,%7/1:<(74(7+h /1-,{]}Lj m 5=(7(71jZ X.-,/13{GX.(7:0>yW(7/o_1%=4s %7=(qfD{x1ST+l%=0_1-,`
5=?-,;5-,/1%+
CD3(d0>=(7%41O(7/]3/[-,:<(7#&%jZ8|"FjG5+,%=V-,Y1S 3%/14 (7+10>M
4-,;5n4( expected.input
S3(q02#&@%=?%4&0>/B3/r%=0>_1-,`cR0>=(7%*4R(7/B3/
-,:<(7#&%dfpostgres5-1.02a5.tar.gz
x
jG5+,%=V-,61S
J9+,%W4-,C(*=?(*/102-,%*gC3(7=/ +,%#&(*/1:(
(7/ +,g@+,,;55/1W4(U@3/1:<
:%/1:(I(7/q(7+G:<(7=0>(7=4;-,:< %U+,%U4(*=(0>_1%U4(7+G@3/1:<L4(*02-,#&%+S m `(7%#&l%=V=?- N %yZT+Z%=0_1-,`
5=?-,;5-,/1%+
(q N :<3`cn4(9+,%O(7/1:<=(7;5%K1S K4(9@:;5=(702/1:=3-,4%
@=9"+,+,J]sample.regress.out
FI_1(7/&JK( -,/10>+,3J( %\3.@.%=V% =(7C(2=(7/10>-,%1S2(7/14=?,%\3(_1% N (7=?(d(VPQ(70>3:<%4 0>/
3/1%g#&\3-,/1%I TF8 J%g\53(W(*+
(*/L+,%g`(7=?-,5/L1S *Y4(6@5:<;=(7
Makefile.global
:-,(*/1(8}L|~qABT%+,@_1%1S

Archivos de comparacin especficos de la plataforma

FY#&q%+,;53/1q4(
+,5I:<(7:W@=5430>(7/K=(73+,:%45W-,/1_1(7=(7/1:<(7g%u+,%u@+,%:<%C5=?#&%d3%4%X_1(7M
#&5W@=5@=0>-,5/1%#&563/1% C=?#&%d@%=?%
3@.+,-,="+,5W%=0>_1-,`cW4(U02#&@%=?%0>-,/O(7@(*02-,)0>
@%=?%0>%4% @+,%:<%C5=?#&%1S>=(*023(*/1:(7#&(*/1:(u(u4%L+,%#&-,#&%i`%=V-,%02-,/[(7/&#[+,:<-,@+,(7@+,%:<%M
C5=?#&%.(*/o`(7e 4(q4%=U3/o%=0>_1-,`&4(q0>#&@%=?%0>-,5/o(*@%=?%74R@%=?%q0>%4%q@+,%:<%C5=?#&%X
(7{-,:<(L3/n%=02_1-,`O;3,%9\53(q4(*)/1(L\53i%=02_1-,`]4(L02#&@%=?%0>-,/3%=VS7 (iCD=?#&%9\3(7X
@%=?%K(*+,-,#&-,/1%=
C%+,+,5 :<5/1:<i4(q3/1%O@+,%:<%C=V#&% (7/r@%=V:<-,0>3+%=<X.4( N (9(7+,(*;-,=
n02=(*%7=d3/



)02_1(*=? 4(u=(73+,:%45Y`%=?-,%/1:(*XGJ]%1%4-,=W3/1%L+,/1(7%L%+.%=0_1-,`cO;3%XZ\53((7!#&%@% 4(


=(73+,:%415!2S
FY%4%+,,/1(*%
4(7+%=0_1-,`9;53,%
(*W4(+%
-,;53-,(7/1:<(
C5=?#&%
testname/platformnamepattern=comparisonfilename

T+/1# N =(Y4(*+G:(*: m :(*:/1%#&(*y(7l(7/10>-,+,+,%#&(7/1:<(Y(7+/15# N =(I4(7+G#&43+,L4(I=(7;5=(2-,/q4(


(7(
:(*:(7/O@%=?:-,0>3+,%=VST+c@%:<=?5/O4(7+c/1# N =(d4(u+,% @+,%:<%CQ=V#&% m @+,%:<CD=?#&/1%#&(7@%*::<(7=?/1y
(7:d;5(7/1(*=V%4%+5(7:-,+,i4(U(7{@= m *y m \53(d(*W3/1%u(7{@=(-,/]=(7;53+,%=0>5/K(7+,# N +,;:[-,#&M
@+,,0>-,:<
%+@=?-,/102-,@.-,5yzS$T:%g(W0>5#&@=3( N %g0>/L(*+/1# N =(W4(6+,%g@+,%:<%C5=?#&%W:<%+02#&d`-,(7/1(
(70>=V-,:<i(7/q0>/1);hS ;53(7ZSzT+/1# N =(U4(7+Z)0>_1(7=i4(Y02#&@%=?%0>-,/ m 0>#&@%=?-,/1)+,(7/1%#&(7y
(7"(7+/1# N =(U4(7+Z3:<-,:3:<94(7+Z)0>_1(7=i4(=(73+,:%4"4(U0>5#&@.%=V%02-,/"S
85=(?P<(*#&@+,a(7+6:(*:4(K=?(*;=(7-,/-,/1:<&-,/10>+,3J5([3/1%R(*/1:=?%4%[4(*+,- N (7=?%4%[4(]3/`%+,=
\3( (*Y4(7#&%-,%4q+,%=?;5 @%=?%0>% N (*=6(7/[3/&-,/1:<1S2T+c#&(7/1%PQ(4( (*=V==6(7@(70>,)0> \3( (*
@=5430>-,4(7"4(7@.(7/14-,(7/1:<(4(U+,%
@.+,%:%C=?#&%7/13(7:<=V%d@+,%:%C=V#&%4(U=(7CQ(*=?(*/102-,%U%02%
ERROR:

pg_atoi: error reading "100000": Numerical result out of ran-

ge

@(7=(7/q3/ N 3(*/q/1#&(7=i4(Y5:<=V%6@+,%:<%C=V#&%" /1-,{u%0>%


ERROR:

pg_atoi: error reading "100000": Result too large

T/(*:<([02%Xl@.=?@=02-,/1%#&q3/1%n`%=?-,%/1:<(&4(7+g%=0_1-,`4([0>5#&@%=?%0>-,/1Xl-,/1:<M:M
+,%=;(ZS 3:XG\3(d-,/102+,3J5(d+,% -,/1:<%{G-,Y4(d(*:<(
#&(7/1%PQ(d4(
(7=V==VS>8%=?%d/1q#&:=?%=6(7:I!C%M
+,+,5!^:<5/1:<5W(7/ +,%"@+,%:<%C5=?#&%" 88 X(7+=?(*3+,:<#&%@ m #&%@%4(U=(73+,:%4.y1-,/10>+,3J(
int2/hppa=int2-too-large

\3(9(9%0>:<-,`c%=?9(7/o023%+,\53-,(7=U#&\3-,/1% (7/(7+\3(q+,%q%+,-,4%K4(i0>/1);S ;53(702#&-,(7/10>(


@=g_1@@%$S>}:=?%Y+,,/1(*%Y(7/&(7+c=?(*3+,:<#&%@[(*+,(70>0>-,5/1%/&+,%`c%=V-,%*/1:( 4(7+1%=?0z_1-,`cK4( 0>#&M
@%=?%70>-,/O@%=V%5:<=V%W@+,%:%C=V#&%*W45/14(U(7%U%@=5@.-,%4S



Captulo 30. Notas de versiones


Version 6.5.3

T:%I(7 N %-,0>%#&(*/1:(g3/1%+,-,#&@-,(*e%I4(g+,%`(7=?-,5/9cS vS cS? (7#&h%1%4-,4u3/i/13(7` @;5%0>M


0>(7"\3(U(U@(7=4-,(7/ +,%
1S v1S 7X(-,/1:<%+,%4i3/1%d0>=V=(*0-,5/K(7@(70>-,)0>%
@%=?%
~ ^S

Migracion a v6.5.3
< (=(7\3-,(*=?(Y3/ 43#&@WwZ=(7:<5=(7"@%=V%%\3(7+,+,g\3(U(*:<(7/ (VPQ(70>3:<%/14L3/1%dcS v1S *S

Lista Detallada de Cambios


Version actualizada de pgacces 0.98
Parche especifico para NT
Correccion para reglas de volcado en tablas heredadas

Version 6.5.2

T:%(7 N %-,0>%#&(*/1:(u3/1%i+,-,#&@-,(7e%L4(+,%L`c(*=V-,/&1S v1S 1S* (7#&02=?=?(*;-,K3/1%i`%=?-,(74%*4


4(@= N +,(7#&%"=(7@=V:<%415W@5=33%=V-,64(U1S v5S 1S

Migracion to v6.5.2
< (=(7\3-,(*=?(Y3/ 43#&@WwZ=(7:<5=(7"@%=V%%\3(7+,+,g\3(U(*:<(7/ (VPQ(70>3:<%/14L3/1%dcS v1S *S

Lista Detallada de Cambios

corregidas las subselect+CASE (Tom)


Aadida configuracion de SHLIB_LINK para los portes de solaris_i386 y solaris_sparc(Daren Sefcik)
Correciones para CASE y WHERE en clausulas "join"(Tom)
Correcion para aborto en BTScan(Tom)
Reparada la comprobacion para UNIQUE redundante e indices PRIMARY KEY(Thomas)
Mejorado para que se compruebe las restricciones en multi-columnas(Thomas)
Correcion para Win32 que tenia problemas con MB habilitado(Hiroki Kataoka)
Permite a yacc de BSD y a bison compilar codigo pl(Bruce)
Corregido el trabajo con SET NAMES
corregidos los int8 (Thomas)
Correccion del consumo de memoria de "vacuum"(Hiroshi,Tatsuo)
Reduccion del consumo total de memoria de "vacuum"(Tom)
Correcion para timestamp(datetime)
Correcciones de problemas en las reglas de paso al analizador sintactico(Tom)
Correccion del problema de cuotas en mkMakefile.tcldefs.sh.in y mkMakefile.tkdefs.sh.in(
This is to re-use space on index pages freed by vacuum(Vadim)
documentado -x para pg_dump(Bruce)
Correcin para operadores unarios en la regla de paso al analizador sintactico(Tom)
Comentado el FileUnlink de exceso de segmentos durante mdtruncate() (Tom)
Enlazamiento en Irix corregido por Yu Cao yucao@falcon.kla-tencor.com =



Reparado el error logico en LIKE: no debia devolver un LIKE_ABORT


cuando alcanza el final de un patron antes del final del texto(Tom)
Reparada limpieza incorrecta de montones de memoria reservadas durante aborto de transaccion(Tom)
Version actualizada de pgaccess 0.98

Version 6.5.1

T:%
(* N %-,0>%#&(7/1:<(3/1%d+,-,#&@-,(*e%
4(+,%d`(7=?-,5/ 1S vcSz (7#&W0>=V=(7;5-,i3/1%U`c%=V-,(74%4K4(
@= N +,(*#&%"=?(*@5=?:<%74W@.5=h33%=?-,W4(Y1S v1S

Migracion to v6.5.1
< (=(7\3-,(*=?(Y3/ 43#&@WwZ=(7:<5=(7"@%=V%%\3(7+,+,g\3(U(*:<(7/ (VPQ(70>3:<%/14L3/1%dcS v1S

Lista Detallada de Cambios


Aadido un fichero NT LEAME
Correciones de portabilidad para linux_ppc, Irix, linux_alpha, OpenBSD, alpha
Eliminado QUERY_LIMIT, utilizar SELECT...LIMIT
Correcion para EXPLAIN en herencia(Tom)
Parche para permitir "vacuum" en tablas con multi-segmentos(Hirosi)
Correcion para la selectividad del optimizador R-Tree(Tom)
Corregida laguna el descriptor de ficheros ACL(Atsushi Ogawa)
Nueva expresion del codigo de sub arboles(Tom)
Se evitan escrituras en disco para transacciones de solo-lectura(Vadim)
Correccion para eliminacion de tablas temporales si la ultima transaccion fue abortada (Bruce)
Correccion para prevenir que sean creadas tuplas demasiado largas(Bruce)
correciones en plpgsql
Se permiten numeros de puerto de 32k - 64k(Bruce)
Aadido ^ precidence(Bruce)
Renombrados ficheros ordendo llamados pg_temp a pg_sorttemp(Bruce)
Correcion para microsegundos en valores temporales(Tom)
Limpieza de la fuente del Tutorial
Nuevo porte a linux_m68k
Correccion para la ordenacion de NULLs en algunos casos(Tom)
Corregidas las dependencias para librerias compartidas(Tom)
Corregido fallos tecnicos que afectaban a GROUP BY en subselects(Tom)
Correccion para algunas alarmas del compilador (Tomoaki Nishiyama)
Aadido soporte para Win1250 (Checo) (Pavel Behal)

Version 6.5

T:%`c(*=V-,/n#&%=?0>% 3/R%`c%/102(u;5=V%/14( (7/R(7+.0>/150>-,#&-,(7/1:<[\3( (7+.(7\3-,@O4(4(*%=V=5M


+,+,R:-,(7/1(94(*+0>54-,;5RC3(7/1:(q\3(9_1(7=(74%#&u4(9(7=?'5(7+,(7JGSE(7=?%* \3( @4(7#& %1%4-,=
#&%J55=(7YC(7%:3=(2U#&%YCD%02-,+,#&(*/1:(7XZ;=?%0>-,%Y%+1-,/c02=(7#&(*/1:K(7/&:<%#&%1 JO(7{G@.(7=V-,(*/10>-,%4(
/13(7:=#&3/14-,%+,#&(7/1:<(
(7{:(7/1L(7\3-,@L4(4(7%=?=5+,+,^S



(%\53-53/ 0>5/10>-,93#&%=?-,i4(Y+,5W#&%W/1:% N +,(7W0>%# N -,a


FY/1:=+4(q0>5/10>3=?=?(*/102-,%q#&3+,:<-,M`c(*=V-,/ m ABEFIF (7/-,/1;+,(*A3+,:<-,M`c(*=V-,/o0>5/10>3=?=(7/10>J
0>5/1:<=5+,y
T: (7+-,#&-,/1%L/13(7:=q`-,(VPQ N +,5\53(*O% /1-,`(7+14(d:% N +,%XGJK+, =(7(7#[@+,%7e% 0>5/]3/ N +,5M
\3(794(*+-,:(*#&% \53(u(7W3@(7=?-,5="%u+,%d#&%J5=V-,%u4(
+,I-,:<(7#&%W4( N %(7g4(U4%:
02#&(7=0>-,%+,(7ST/n3/R-,:(7#&%9:<=?%4-,0>-,5/1%+,Xc0>%4%L=(7;5-,:<=O\53(L(7
#&4-,)0>%4]( N +,M
\3(7%u_1%:% \3( (d0>5/1)=?#&%+,% :=?%/1%0>0>-,5/1XG@=(7`-,/1-,(7/14i+,(70>:3=?%I@=65:<=5g33%M
=V-,^S?ABEFIF3:<-,+,-,e%I4(g#&54u/1%:3=?%+(*+0>%=?%0>:(*=#&3+,:-,M`(7=?-,5/L4(I8:;5=(7jGkL9@%=?%
@(7=?#&-,:-,=\3(U+,%"+,(70>:<3=V%"0>/1:-,/13(7/K+,(7J5(7/14L4%:"0>5/1-,:(*/1:(7W43=V%/1:(I+,%d%0>:-,`-,M
4%4n4( (702=?-,:<3=V%1S*%Y(70>=V-,:<3=V%U0>/1:-,/13%/n3:-,+,-,e%/14K(7+-,:<(7#&%U4(:<=V%/1%0>0>-,M
/1(70>#&@%0>:u@;5+,;hS54u(*:<u(W=?(*%7+,-,e%I-,/i:<(7/1(*=\3(g=?(*(*=V`%*=3/ N +,\3(7u@%=V%
02%4%U=(7;5-,:=i0>#&9(7/ +,g-,:(7#&%g:=?%4-,0>-,/1%+,(7"4( N %(U4(Y4%:S-\3(7X N %-,M
02%#&(7/1:(*XZJ5%L/1K(7:%=?(2#&
=(7:<=V-,/1;5-,4Y@5=W#&%Y:<-,(7#&@K@=W(7+ N +,\3(7]-,#&@+,(u%
/1-,`c(*+54(:% N +,%:(*/1(7#&56%+,;5i#&(?P<=l\3(U(*+ N +5\3(*9%
/1-,`(7+4(=(7;5-,:=^S
FY@-,%"4((7;53=V-,4%4O(7/ 0>%+,-,(7/1:<(U0>5/
pg_dump
( N (*/1(7)02-,%Y4(g+,%h/13(7`%h@.=?(*:<%0>-,/1(7h4(WABEFYFo@%=?%I4%=0>/1-,:<(7/10>-,%
pg_dump
%O
3/43#&@Ww N %02'53@#&-,(7/1:<=?%+,% N %(K4(K4%:n@(7#&%/1(*02(q(7/+,-,/1(7%]J4-,@/1- N +,(
@%=?%U(7=l0>/13+,:%4%cS
5-,@564(4%:W/13#&(*=V-,0>
_1=?%:<(7/1(7#&:-,@4( 4%:Y`c(*=4.%4(*=V%#&(*/1:(d/13#&(7=?-,0>5X50>5/[@=?(20>-,-,5/R(7@(*M
02-,)0>%4%@5=h(7+33%=V-,^S
G% N +,%6:<(7#&@=?%+,(7
jG(;5%=?%/1:<-,e%i\3(L+,%U:% N +,%
:<(7#&@=V%+,(7U:-,(7/1(*/n/1# N =(7d3/1-,0>d43=?%/1:<(3/1%9(7M
-,/ (7/ +,% N %(4(4%:XJ9\3(U/O4(*:<=3-,4%"%+%+,-,=h4(+,%d(7-,5/"S
~ 3(7`%"@=(7:%*0>-,5/1(*gjGkL
_c5=?%O:<(7/1(7#& 5@=?:(K@.%=V%q4(*02+,%=?%0>-,/1(7uFIjGTX.f~ T|6jGTFIX1%/14T"FYT8^S
G(7/1(*#&5/13(7`5^fDABfIwG}5jGTXjGTL|6 ~ jGFIfD}~fDjG}I^f}~TETXzjZTM
TFYrSSSz5}|o8 ITXJ93/ #&(VPQ=V%4i0>#&%/14i}F> T6S
0>(7+,(*=%#&-,(7/1:<
FY/1:-,/13%#&g%0>(7+,(*=V%*/14L8:;5=(7jGkLX;=?%0>-,%l%
+,%
`%=?-,(74%*4]4(Y:<%+,(7/1:<W\3(U_1%J
(7/[/13(7:<=? (*\3-,@S*q(7#&U%0>(*+,(7=$4 +,%L%-,;5/1%0>-,/&4( #&(7#&=?-,%X+,%5@:<-,#&-,e%0>-,/1X
+,%"3/1-5/1(7W4(:<% N +,% m :% N +,(hPQ-,/yXJi+,%"=3:<-,/1%64(U:=?%/1C(7=(2/102-%W4(Y=(7;-,:<=5S
85=?:(*
FY/1:-,/13%#&c%#&@+,-,%/14U/13(*:<=V%g+,-,:<%g4("@=?:(7X(7:<%g`c(*eW-,/10>+,3-,#&5^pB-,/1~ gwG-,{Gx
Ji~ (*:jGOwG%=V#&1S
fD/1:<(7=?C%0(7
%I#&%J5=V-,%I4(W-,/1:<(7=VC%0>(*:-,(*/1(7/i3/1%I/13(7`%I`(7=V-,/1X*J +,%IC3/10>-,5/1%+,-,4%49(7{G-,:<(7/1:<(7
_1%
-,4i#&(VPQ=V%4%1S
50>3#&(7/1:<%0>-,5/
~ 3(*`cqJ %02:<3%+,-,e%41q#&%:<(7=?-,%+(*:<%@.=?(*(*/1:(
@=6:4%u+,%u4023#&(*/1:%0>-,/"SjG(
_1%/
%@=V:<%4.R/13(7`%u7 kLd@%=?% +,%u@+,%:<%C5=?#&%ujGuf6JRfdST+ 52> :<-,(7/1(q-,/1C5=M
#&%0>-,5/-,/1:=4302:<=V-,%  N =(ijZkB4(9jZ:<(7C%7/ojZ-,#&'5`c-,0>S8%=?%q+,% 5 ?gI?5>? X
_1%Ji@.%;-,/1%64(Y=(7C(7=(/10>-,%
0>3 N =?-,(7/14L+,%
3:-,+,-,4%4O@5:<#&%:(7=hJi#[%W@=;=?%#&%l4(



3:-,+,-,4%4Xc3/%@(7/14-,0>(i/13(7`&0>5/1:<-,(7/1(94(7:<%+,+,(7
 N =(i(7+02#&@=V:<%#&-,(7/1:<R4(i4%M
:(wG:<-,#&(S7% 5 i ??>> :-,(*/1(L3//13(7`[0>%@-,:<3+,] N =?(=?(*+,30>-,5/n4(
@= N +,(7#&%h4(gG#%/1(S $ +,% 56?  c?>>7> :<-,(7/1(g3/1%U4(*0>=?-,@0>-,5/i4(7+G@=M
02(*]4(q-,/1:<(7=?=5;5%0>-,/1X1:<%# N -,(7/4(ijZ:<(7C%/1XcJR4(7:<%+,+,(7
%0>(7=0%q4(q0>#&& N :<(7/1(7=U(*+
%= N +Z4(7+Z0>4-,;iC3(*/1:(Y4(85:<;=(76@=lFYEYj %/1/1-,#&9JiFYEjG3@WS

Migracion to v6.5

/K43#&@WwG=(7:=(d3:<-,+,-,e%/14
(*I/1(70>(7%=?-,9@%=?%u%\3(7+,+,Y\3(d4(7(7(*/O#&-,;5=V%=
> @.3(74(L(7=3:<-,+,-,e%4
4%:<5
4(L0>3%+,\3-,(7=`(7=?-,5/@=pg_dump
(7`-,%94(L85:<;=(7S
pg_upgrade
@%=?%u%02:<3%+,-,e%*=W(7:% `(7=?-,/[@=\3( +,% (7:=30>:<3=?%
(7/[4-,0> 4(u+,%Y:% N +,%g_1%L0>%# N -,%4
0>5#&@%=V%41%d0>5/ `(7=?-,/1(76@=(70>(741(7/1:<(7S
%Y/13(*`c%Y0>%=?%0>:(7=-,:<-,0>%U4(YFI5/1:<=5+4(YFI5/10>3=?=?(*/10>-,%AB3+,:-,ME(7=?-,5/ m ABEFIFYX2(7/q-,/1;5+,(7y
@3(74(64%=10>#&@5=?:<%#&-,(7/1:<5h3/L@50>d4-,CD(*=(/1:<(7(*/L(*/1:=V/1h#&3+,:<-,33%=?-,S 5?lgV2)?
6W??zV>L? 15?5h>?W>?Q15?>7@5h?h>z>V>A??5Dh>V>522i?
z> 7>?>#@l5?V??>
Control de Concurrencia Multi-Version
>0 %3%i4(u\3(L+,%+,(70>:<3=V%Y(*/ncS vL/1 N +,5\53(*%/R+,5U4%:<5X5%@(7%=g4(7+./1-,`(7+.4(%-,+,%M
#&-,(7/1:<L4(I:=?%/1%0>0>-,5/1X+,5"4%:6+,(*-,45l@.5=3/1%U:<=V%/1%0>0>-,/9@3(74(*/9(7=^ N =(Y(*0>=?-,:
@=Y:=?%1ST/R5:<=V%d@%+,% N =?%*Xc-^3/=(7;-,:<=](7U4(7`3(7+,:<[@=3B C *ED(7[/1[-,;5/1-,)0>%
\3(U(7:<(=(7;5-,:<=i(7{-,:%
=(*%+,#&(7/1:<((7/ (7+#&#&(7/1:<9(7/ \3(U(764(7`3(7+,:<S m -S (Y%+,;3/1%6`(7M
0>(7l4(7@3(7h4(Y\3(+,%(7/1:(*/10>-,%U +,%U:<=V%/1%0>0>-,/90>5#&-,(7/10>(*y1/1-:%#&@0>L\53(Y(7+Z=(7;5-,:=
(7:(g@=:(7;5-,4u4(g(7= N =V=?%4u %0>:3%+,-,e%4. @=^3/1%:<=?%/1%020>-,/9(7/L0>5/10>3=?=?(*/1:(g%/1:<(7
4(\3(U+,%U:=?%/10>02-,/ (7/ 0>3=Vi_1%;%d0>5#[#&-,:1i=+,+ N %0>'hS
8%=V%q%(7;53=?%=+,% (7{-,:<(7/10>-,% %02:<3%+4(93/o=?(*;-,:<=[JR@=5:<(7;5(7=?+,&02/1:<=V% %0>:3+,-,e%02-,/1(7
0>5/10>3=?=?(*/1:(7l(4( N (Y3:<-,+,-,e%=7B C *EDGFH /JIK2L D L3/1%U(7/1:<(7/10>-,% C HM*ENOD KPC
%@=@1-,%4%cSGT:n4( N (7=?-,% (7=
:(7/1-,4(7/B0>3(7/1:<n023%/14n(K@.5=?:(*/r%@+,-,0>%0>-,/1(74(74(
`(7=V-,/1(76@=(70>(4(*/1:(*W4(Y8:;5=(76J9:=W(7/1:<=V/1S
G(*/1;%R:4+,%/1:(7=?-,=L(7/ #&(*/1:(&33:<-,+,-,e%n:=?-,;;5(7=?
@%=?%&-,/1:(7M
;=?-,4%4B=(7C(7=$(*/102-,%+SG_1=?%O( =(7\53-,(7=(7/r:<(70>/1-,0>% %4-,0>-,5contrib/refint.*
/1%+,(7SG/o#&54(7 3:<-,+,-,e%=
(7+
0>5#&%/14 C HM*>N ?*MQSR BT K/U/ HMV W * CI B QX ZY H L -l3/1%O:<=V%/1M
%0>02-,/R`c%9%9%02:<3%+,-,e%*=7w N =V=?%=Y3/1%90>+,%`(L@=?-,#&%=?-,%9J[3:<-,+,-,e%=I(7+02#&%/14 C HM*EN 
?*KQSR BT K/[Y H L -.3/1%:=?%/1%0>02-,/[`%L%%0>:3%+,-,e%7=*wZ-,/1(*=V:<%=W3/1%i0>+,%`(
C5=?%/1(7%5S
Nota: Notese que si ejecuta una transaccion en modo SERIALIZABLE entonces debe
ejecutar el comando LOCK anterior antes de la ejecucion de cualquier sentencia DML
(SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO) en la transaccion.

T:K-,/10>5/1`(7/1-,(*/1:(7U4(7%@%*=(70>(7=?%7/R(7/&(*+1C3:3=K023%/14O+,%_1% N -,+,-,4%4n@.%=V%+,(7(7=W4%:
30>-, m /1q0>5/1)=?#&%4y m %u@(*%="4(7+5/1-,`(7+c4(
%-,+,%#&-,(*/1:yJ +,%u`(7=4%74(7=V%u-,/1:<(7;5=V-,4%4
=(7CQ(7=(*/102-,%+Z(*%
-,#&@+,(7#&(*/1:%4%cS

Lista Detalla de Cambios


Correciones de errores



-----Correcion de las funciones de conversion text<->float8 y text<->float4(Thomas)


Correcion para creacion de tablas con constraints con mixed-case(Billy)
Cambiado comportamiento de exp()/pow() para generar error en underflow/overflow(Jan)
Correcion de error en pg_dump -z
Limpiezas de invasiones de memoria(Tatsuo)
Correcion para abortos de lo_import(Tatsuo)
Ajustes en el manejo de nombres de tipo de datos para suprimir dobles comillas(Thomas)
Uso de coersion de tipo para emparejar columnas y DEFAULT(Thomas)
Correccion de deadlock de este modo solo verifica una vez despues de un segundo de espera(Bruce)
Correciones para agregaciones y PL/pgsql(Hiroshi)
Correcion para aborto de subquery(Vadim)
Correccion de libpq para la funcion PQfnumber y nombres que no distinguen mayusculas-minusculas(Bahman Rafatjoo)
Correcion para objetos grandes escritos-en-medio, no bloques extra, consumo de memoria(Tatsuo)
Correcion para pg_dump -d o -D y entrecomillado de caracteres especiales en INSERT
Reparados serios problemas con dynahash(Tom)
Correjidos problemas de portabilidad para INET/CIDR
Correcion de problema con error de selectividad en ALTER TABLE ADD COLUMN(Bruce)
Correcion del ejecutor de ese modo trabaja merjejoin de diferentes tipos de columnas(Tom)
Correcion de error para selectividad de OR en Alpha
Correcion para problema de selectividad de indice OR(Bruce)
Correcion \d para que muestre de ese modo la extension apropiada para char()/varchar()(R
Correcion en el codigo del tutorial(Clark)
Mejoras en la comprobacion de destroyuser(Oliver)
Correcion para Kerberos(Rodney McDuff)
Correcion para borrado de la base de datos mientras los buffers no se han limpiado(Bruce
Correcion la secuencia nextval() para que pueda asi distinguir mayusculasminusculas
Correcion para operador !!=
Borrado de buffers antes de destruir los ficheros de las base de datos(Bruce)
Correcion del caso en que el ejecutor evalua las funciones dos veces(Tatsuo)
Se permite a las acciones de secuencia netxval distinguir mayusculasminusculas(Bruce)
Correcion de optimizador de indexacion para que no trabaje para numeros negativos(Bruce)
Correcion de perdidas de memoria en ejecuciones con fjIsNull
Correcion de perdidas de memoria para aggregate(Erik Riedel)
Se permite que username contenga una almohadilla (#, dash en ingles) en los permisos GRANT
Limpieza de NULL en los tipos inet
Limpieza de errores en tablas del sistema(Tom)
Correcion de problemas de PAGER y del comando \?(Masaaki Sakaida)
Reducido el tamao de fichero de multi-segment por defecto a 1GB(Peter)
Correcion del volcado de CREATE OPERATOR(Tom)
Correccion para escaneo hacia atras de cursores(Hiroshi Inoue)
Correccion para COPY FROM STDIN cuando se utiliza \i(Tom)
Correcion para una subselect cuando es comparada dentro de una expresion(Jan)
Correcion para manejo de devolucion de error mientras se duelven registros(Tom)
Correcion de problemas con referencia a tipos de array(Tom,Jan)
Se previene oid de UPDATE SET (Jan)
Correcion de pg_dump asi a opcion -t puede manejar nombres de tabla en mayusculasminusculas
Correciones para GROUP BY es casos especiales(Tom, Jan)
Correcion de perdidas de memoria en queries falladas(Tom)
DEFAULT soporta ahora identificadores mixed-case(Tom)
Correcion para que multi-sefment utilice DROP/RENAME de tabla, de indice(Ole Gjerde)
Dehabilitacion de uso de pg_dump con las dos opciones -o y -d(Bruce)



Se permite a pg_dump volver adecuadamente permisos de GROUP(Bruce)


Correcion para GROYP BY en INSERT INTO table SELECT * FROM table2(Jan)
Correccion para computaciones en vistas(Jan)
Correciones para agregaciones en array con indices(Tom)
Correccion para como maneja DEFAULT entrecomillado simple en valores que requieren demasiadas comillas
Correccion de problema de seguridad con no super-usuarios que importan/exportan objectos de gran tamao.(Tom)
Vuelta atras de transaccion que crea table la limpia adecuadamente(Tom)
Correccion para permitir que tablas largas y nombres de columnas generen nombres en serie adecuados(Tom)

Mejoras
-------Aadida la utilidad "vacuumdb"
Se acelera libpq por mejor asignacion de memoria(Tom)
EXPLAIN utiliza todos los indices(Tom)
Implementadas las expresiones CASE, COALESCE, NULLIF(Thomas)
Nuevo formato de salida de pg_dump(Constantin)
Aadida la cadena min()/max() a las funciones(Thomas)
Extendidas nuevo tipo de coersiones para agregaciones(Thomas)
Nueva contribucion moddatetime (Terry)
Actualizacion a pgaccess 0.96(Constantin)
Aadida rutina para byte unico en tipo de caracter "char"(Thomas)
Mejorada la funcion substr()(Thomas)
Mejorado el manejo de multi-byte (Tatsuo)
Control de concurrencia Multi-version /MVCC(Vadim)
Nuevo modo Serialized(Vadim)
Correcion para tablas por encima de 2gigs(Peter)
Nuevo SET TRANSACTION ISOLATION LEVEL(Vadim)
Nuevo LOCK TABLE IN ... MODE(Vadim)
Actualizado el driver ODBC(Byron)
Nuevo tipo de datos NUMERIC(Jan)
Nueva SELECT FOR UPDATE(Vadim)
Manejo de "NaN" e "Infinity" para valores de entrada(Jan)
Mejorado el manejo de date/year(Thomas)
Mejorado el manejo de conexiones con el motor de base de datos(backend)(Magnus)
Nuevas opciones ELOG_TIMESTAMPS y la opcion USE_SYSLOG para ficheros de registro(Massimo
Nueva opcion TCL_ARRAYS (Massimo)
Nueva INTERSECT y EXCEPT(Stefan)
Nuevo pg_index.indisprimary para restro de claves primarias(DArcy)
Nuevas opcion pg_dump para permitir el borrado de tablas antes de su creacion(Brook)
Acelaracion de las rutinas de salida de registro(Tom)
Nuevo nivel de aislamiento de READ COMMITTED (Vadim)
Nuevas tablas/indices TEMP (Bruce)
Se evita el ordenamiento si el resultado ya esta ordenado(Jan)
Nueva optimizacin para la asignacion de memoria(Jan)
Se permite a psql ejecutar \p\g(Bruce)
Se permiten multiples reglas de acciones(Jan)
Aadida funcionalidad LIMIT/OFFSET (Jan)
Mejorado el optimizador cuando se unen un numero grande de tablas(Bruce)
Nueva introduccion a SQL de La Tesis de Doctorado de S. Simkovics(Stefan, Thomas)
Nueva introduccion a procesamiento del motor de base de datos (backend) de la Tesis de Doctorado de S. Simkovics(Stefan)
Mejorado el soporte para int8(Ryan Bradetich, Thomas, Tom)
Nuevas rutinas para convertir entre tipos int8 y text/varchar(Thomas)
Nuevos planes arboreos, donde se unen meta-tablas(Bruce)
Habilitadas consultas por la mano derecha por defecto(Bruce)
Se permite que el numero maximo de procesos en servidor (backends) se parametrice en el momento de la configuracion
(-with-maxbackends and postmaster switch (-N backends))(Tom)
GEQO por defecto tenga ahora 10 tablas porque el optimizador se acelera(Tom)
Se permite NULL=Var para MS-SQL portabilidad(Michael, Bruce)



Modificados contrib check_primary_key() y consecuentemente "automatic" or "dependent"(An


Se permite que psql \d en una vista muestre la consulta(Ryan)
Se acelera el LIKE(Bruce)
Correciones/prestaciones Ecpg , vease fichero src/interfaces/ecpg/ChangeLog(Michael)
Correciones/prestacines JDBC , vease src/interfaces/jdbc/CHANGELOG(Peter)
Se hace que el operador % tenga precedencia como /(Bruce)
Aadida la nueva opcion postgres -O para permitir cambios en la estructura de tablas del sistema(Bruce)
Actualizado el script contrib/pginterface/findoidjoins (Tom)
Major aceleracion en vacuum de lineas borradas con indices(Vadim)
Se permitte la ejecucion de diferentes versiones de funciones no-SQL basadas en argumentos(Tom)
Aadida la opcion -E que muestra las consultas actuales enviadas pro \dt y sus amigos(Masaaki Sakaida)
Aadido numero de version en los banners de arranque de psql(Masaaki Sakaida)
Nuevo contrib/vacuumlo que elimina objetos grandes no referenciados(Peter)
Nueva inicializacion para tamaos de tablas, asi las tablas no vacuumeadas se ejecutan mejor(Tom)
Mejorados los mensajes de error cuando una conexion es rechazada(Tom)
Soporte para array de campos char() y varchar() (Massimo)
Revision del codigo has para incrementar fiabilidad y prestaciones(Tom)
Actualizacion a PyGreSQL 2.4(DArcy)
Cambiadas las opciones de depuracion asi -d4 y -d5 producen diferentes displays de nodos(Jan)
nuevas opciones: pretty_plan, pretty_parse, pretty_rewritten(Jan)
Mejor optimizacion de estadisticas para los accesos a tablas del sistema(Tom)
Mejor manejo de tamao de bloque no por defecto(Massimo)
Mejorado el optmizador de comsumo de memoria GEQO(Tom)
UNION soporta ahora ORDER BY de columnas que no estan en la lista de target(Jan)
Mejoras grandes en libpq++ (Vince Vielhaber)
pg_dump utiliza ahora -z(ACLs) por omision(Bruce)
cache de procesos en servidor (backend), aceleracion de memoria(Tom)
Se hace que pg_dump lo haga todo en una transaccion snapshot(Vadim)
correcion de perdidas de memoria para objetos grandes, correccion para pg_dumping(Tom)
INET escribe ahora respecto a la netmask para comparaciones
Se hace que VACUUM ANALYZE solo utilice un readlock(Vadim)
Se permiten vistas (VIEW) en UNIONS(Jan)
pg_dump puede generar ahora snapshots consistentes en bases de datos activas(Vadim)
Cambios en el Arbol Fuente
------------Mejorado el emparejamiento en el porte(Tom)
Correcciones de portabilidad para SunOS
Aadido porte para NT/Win32 del proceso en el servidor (backend) y se habilita carga dinamica(Magnus and Daniel Horak)
Nuevo porte a Cobalt Qube(Mips) ejecutando Linux(Tatsuo)
Porte a NetBSD/m68k(Mr. Mutsuki Nakajima)
Porte a NetBSD/sun3(Mr. Mutsuki Nakajima)
Porte a NetBSD/macppc(Toshimi Aoki)
Correccion para configuracion de tcl/tk(Vince)
Eliminada la clave CURRENT para consultas por regla(Jan)
carga dinamica en NT ahora funciona(Daniel Horak)
Aadido soporte para ARM32(Andrew McMurry)
Mejor soporte para HPUX 11 y Unixware
Mejorado el manejo de ficheros para ser mas uniforme, previene lagunas en los descriptores de ficheros.(Tom)
Nuevos comandos de instalacion para plpgsql(Jan)



Version 6.4.2

%u`c(*=V/[1S 1S uC3(d-,/10>5=?=(70>:%#&(*/1:(d(7#&@%\3(7:%4%S>T:%:-,(7/1(d:<%# N -,(7/[3/1% 0>5=?=(70>-,5/


%4-,0>-,/1%+Z@%=?%U3/ N 3;

Migracion a v6.4.2
< (=(7\3-,(*=?(Y3/ 43#&@WwZ=(7:<5=(7"@%=V%%\3(7+,+,g\3(U(*:<(7/ (VPQ(70>3:<%/14L3/1%dcS 1S *S

Lista Detallada de Cambios


Correcion para problema de constante de fecha y hora en algunas plataformas(Thomas)

Version 6.4.1

T:%
(* N %-,0>%#&(7/1:<(3/1%d+,-,#&@-,(*e%
4(+,%d`(7=?-,5/ 1S cSz (7#&W0>=V=(7;5-,i3/1%U`c%=V-,(74%4K4(
@= N +,(*#&%"=?(*@5=?:<%74W@.5=h33%=?-,W4(Y1S

Migracion a v6.4.1
< (=(7\3-,(*=?(Y3/ 43#&@WwZ=(7:<5=(7"@%=V%%\3(7+,+,g\3(U(*:<(7/ (VPQ(70>3:<%/14L3/1%dcS 1S

Lista Detallada de Cambios


Aadida la opcion -N a pg_dump para forzar dobles comillas alrededor de los identificadores. Este es la opcion por omision(Thomas)
Correccion para NOT in donde la clausula causa abortos(Bruce)
Correcion para el coredump de EXPLAIN VERBOSE (Vadim)
Correcion para problemas de shared-library en Linux
Correcion del test de existencia de tabla para permitir combinacion de mayusculas y minusculas y
espacios en blanco en el nombre de tabla(Thomas)
Fijacion de un par de problemas de pg_dump
La configuracion empareja mejor entradas similares en la platilla template/. (Tom)
Cambios en la construccion de los nombre de la funcion de SPI_* a spi_*
Correcion para la clausula OR WHERE(Vadim)
Correciones para nombres de tablas con mayusculas y minusculas(Billy)
Correcion para contrib/linux/postgres.init.csh/sh (Thomas)
rebasamiento de memoria en libpq corregido
Correciones para SunOS(Tom)
Se cambia el comportamiento de exp() para generar error en negativos(Thomas)
pg_dump fixes for memory leak, inheritance constraints, layout change
Actualizado pgaccess a 0.93
Se corrige el prototipo para plataformas de 64-bit
Correciones para Multi-byte(Tatsuo)
Nueva pagina de manual ecpg
Corregidos rebasamientos de memoria(Tatsuo)
Correcion para fallos en lo_import()(Bruce)
Mejores busquedas para el programa de instalacion(Tom)



Correciones para zona horaria(Tom)


Correciones para HPUX(Tom)
Se utiliza coersiones de tipo implicito para emparejar valores DEFAULT(Thomas)
Anadidas rutinas para ayudar a tipo de caracter bytes-solo(single-byte) (internal)(Thoma
Correcciones para compilacion de libpq en Win32(Magnus)
Actualizacion a PyGreSQL 2.2(DArcy)

Version 6.4

%J V> @.=?(*:<%0-,/1(7Y/13(7`%IJK#&(?P<=?%I(7/O(7:% `c(*=V-,/"S2u=?%0>-,%I% 3/1(7:=I4(7%M


=V=+,+,%415=(7YJK#&%/1:<(7/1(745=(7XG02%-1:<45+,Y%@(70>:Y4(7+1-,:<(7#&%L_1%/]=(70>- N -,4q%+,;3/1%
%:<(7/10>-,5/ 4(74(Y+,%
`c(*=V-,/ %/1:(*=V-,=VSz (U%\3-3/ =(73#&(7/1X3#&%=?-,i-,/10>5#&@.+,(7:ha
b %W`c-,:<%YJ +,%I=(7;5+,%I/[%_1=V% C3/102-,/1%+,(7g;=?%0>-,%I%+(7{:(7/1-,`q/13(7` 024-,;5 (7/
+,%g=?(*;+,%g4( =(
(70>=V-,:<3=?%4("%/]pr-,(70>'hS%# N -,(7/](702=?- N -, 3/[0>%@-,:<3+,K N =?(u(7+,+, (7/
+,% 5g?  $1?> 2*> S
b "%/L:%# N -,(7/i02/1:<=V- N 3J5L%+(*;3/14 +,(7/c;3%PQ(Y@.=?0>(743=?%7+,X*8WwZ@;5jGkLX*@%=?%-,=^0>/9(7+
=V-,;5-,/1%++,(7/1;5%PQ(U@=02(*43=%+8gwZ@;5FYO0>/O(*+Z\3(U(7+0>5/1:<=?- N 3J59+,%
3+,:<-,#&%d`(7=?-,/"S
b G(*/1(7#&Y@=V:<( @0>-,5/1%+14(d02%=V%*0>:(7=6#[3+,:<-,@+,(7M N J5:(u4(dG%:<3qf-,_1O@%=V%u0>5#&@.+,(7M
#&(*/1:%=/13(7:=L@=V:<(U+,02%+S
b %W02#&3/1-,0>%0>-,5/1(*Y02+,-,(*/1:(wG(7=?`c-,45="_1%/]-,4 4(7@3=?%74%X0>/[#&(VPQ5=6@=V:<(u@%=V%
#&(*/1%PQ(76%-,/10>=5/1W(U-,/1:<(7=?=3@0>-,5/1(7X;5=V%02-,%6%
# %/1(S
b T+4(7@3=?%4=Y4(i-,/1:<%0>:-,0>[(VPQ(70>3:<% %_15=?%90>5(7=?-,5/1(*u4(i:-,@.[%3:#&%:<-,0>[@%=?%9(7#&M
@%=?(PQ%=^%=;3#&(*/1:"%U+,W@(7=?%4=("JLCD3/10>-,/1(7"4-,@5/1- N +,(*XJL@%=?%(*#&@%=(VPQ%=0>5M
+,3#&/1%UJ[(*{G@=(2-,5/1(*d0>5/n0>5+,3#&/1%U4(7:<-,/1S7T:<[3:-,+,-,e%L3/n#&(*02%/1-,#&];(*/1(7=V-02
\3(u5@=?:% +,%Y@=(7:%0-,5/1(*U4(d(7{:<(7/1- N -,+,-,4%4R4(u:<-,@ 4( 8:<;5=?(*S> %JK3/[/13(7`
0>%@-,:<3+,L(*/K+,% YWg?5>? \3(U0>3 N =(Y(7:(%3/1:<S
b Z=(2^/13(*`c^:<-,@4("4%:^_1%/-,4U%/1%4-,4S 5:-,@.5X2-,/1(7:GJ
02-,4=VX@5=?:<%/ `c%=?-,%
C=V#&%4( :=?% N %PQO(*/n=(*4fD8*X53 N =(74X5J]4-,=(700>-,5/1%#&-,(7/1:<[@5=I#&%\3-,/1%1S7 _15=?%i_1%J
3/:-,@.o(7/1:<(7=n4(Kx N J5:(K4-,@/1- N +,(]@%=?%O%+,;53/1%L@+,%:<%CQ=V#&%SE(7%(q(7+"0>%@-,:3+,
4(L:<-,@d4(i4%:<5
(7/R+,%  gg?5>? @.%=V%L#&%d4(*:%+,+,(*S7 /0>3%=?:]:-,@Xc(*=V-,%+,X
(
5@=?:%L%_15=?%u@5="(7+c4(*@3=V%41=g4(d-,/1:<%0>:-,0> 0>5#&q3/1% %#&%+,;5%#&%u4(d:-,@q-,/1:<X
3/1%
(70>3(7/10>-,%XJi3/ -,/14-,02(3/c-,02^S
b %/-,4%1%4-,4% `c%=?-,% @=(7:<%0>-,5/1(*O#&%O-,/1:<%0>:-,0>%K0>5#&@%:- N +,(7K0>5/jGkt*X
-,/10>+,3J5(7/14 QR B / D Lq F )IKC D XhKC,I B&jZ(*`c(*=%+.#&5=( jZkt*M02#&@%:<- N +,(J/1:<%{
C(7%*:3=(76_1%`( N (7(*/q%44(74X7-,/10>+,34-,/1; QR B / D L F KI)C D XhKC,I B
b % -,/1:<%+,%0>-,/&JK02/1);3=?%0>-,5/&%3:#&%:-,0>%4(7+1-,:(7#[%L_1%L=(70>- N -,4q%+,;53/1%L%:(7/10>-,X
JL4( N (7=?-,%
(7=#&%6= N 3:%
@.%=V%U#&%W@.+,%:%C 5=?#&%64(+,9\3(U/c3/10>%d_1%
-,4^S

Migracion a v6.4

jZ(9=(7\53-,(*=(q3/r43#&@6wZ=(7:<5=(93:-,+,-,e%/14

@%=?%K%\53(*+,+,% \3(
4(7(7/q#&-,;5=?%=l4%:64(74(0>3%+,\3-,(7=h`c(*=V-,pg_dump
/ %/1:(*=V-,=h4pg_dumpall
(U8:;5=(7S



Lista Detallada de Cambios

Correciones de errores
-----Correcion para una minuscula perdida en PQsetdb/PQfinish(Bryan)
Se elimina char2-16 de los tipos de datos, se utiliza char/varchar(Darren)
Pqfn no maneja un mensaje de NOTICE(Anders)
Reducidas elevadas esperas por ocupacion a causa de bloqueos en transacciones con muchos procesos en servidor(backends) (dg)
Deteccion de bloqueos de transacciones atascadas (dg)
Correcion para masrcas de tiempo en estilo "ISO" en decodificacion y codificacion(Thomas
Correccion del problema con borrado de tabla (drop) despues de deshacer (rollback) una transaccion(Vadin)
Cambiado mensaje de error y eliminado mensaje actualizado no funcional(Vadim)
Correccion para verificacion de la matriz (array) de COPY
Correccion para SELECT 1 UNION SELECT NULL
Correccion para perdidas de buffer en llamadas a objetos grandes(Pascal)
Cambio de propietario de tipo oid a int4(Bruce)
Correccion de error en la compatibilidad con oracle de las funciones btrim() ltrim() y r
Correccion de invalidacion en rebasamientos de cache compartida(Massimo)
Prevencion de perdidas en descriptores de ficheros en COPYs fallidos(Bruce)
Correccion para perdidas en la pg_select de libpgtcl(Constantin)
Correccion de problemas con usuario/contrasena de mas de 8 caracteres(Tom)
Correccion de problemas con manejo de NOTIFY asincronos en el proceso en servidor(backen
Correccion de muchas entradas de sistema malas(Tom)
Mejoras
-------Actualizacion de ecpg y ecpglib, vease src/interfaces/ecpg/ChangeLog(Michael)
Se muestra en indice utilizado en un EXPLAIN(Zeugswette)
EXPLAIN invoca una regla de sistema y muestra plan(es) para la reescritura de consultas(Jan)
Conocimiento multi-byte de muchos tipos de datos y funciones, via configure(Tatsuo)
Nuevo configure con la opcion -with-mb(Tatsuo)
Nueva opcion initdb -pgencoding(Tatsuo)
Nueva opcion createdb -E multibyte(Tatsuo)
Select version(); ahora devuelve la version de PostgreSQL(Jeroen)
Libpq permite ahora clientes asincronos(Tom)
Se permite la cancelacion desde el cliente de una consulta en el proceso en servidor(backend)(Tom)
Psql cancelas las consultas ahora con Control-C(Tom)
Usuarios de Libpq no necesitan dar consultas dummy para obtener mensajes NOTIFY(Tom)
NOTIFY envia ahora al PID del emisor, asi que puedes decir si eras tu mismo(Tom)
La estructura de PGresult ahora incluye un mensaje de error asociado, si lo hay(Tom)
Se definen los argumentos "tz_hour" y "tz_minute" como date_part()(Thomas)
Se anaden rutinas para convertir entre varchar y bpchar(Thomas)
Se anaden runtinas para permitir el dimensionamiento de
varchar y bpchar dentro de las columnas de destino(Thomas)
Se anade un bit a las etiquetas (flags) oara soportar
zona horaria y minutos en la devolucion de fecha(Thomas)
Se permiten mas variaciones en numeros de coma flotante (por ej. ".1", "1e6")(Thomas)
Se corrigen el analisis sintactico de menores unarios empezando con espacios(Thomas)
Se implementa TIMEZONE_HOUR, TIMEZONE_MINUTE por especificaciones SQL92(Thomas)
Se verifica i se ignora adecuadamente constraints de columna FOREIGN KEY(Thomas)
SE defina USER como sinonimo de CURRENT_USER por especificacines de SQL92(Thomas)
Se habilita HAVING en clausulas pero no se corrije en ningun otro lugar aun.
Se hace el tipo "char" un sinonimo de "char(1)" (actualmente implementado como bpchar)(Thomas)
Se guarda el tipo de cadena si esta especificado por el manejo de la clausula DEFAULT(Thomas)



Operaciones de coercion abarcan diferentes tipos de datos(Thomas)


Se permite a algunos indices utilizar columnas de diferentes tipos(Thomas)
Anadidas capcidades para coersiones de tipo automatico(Thomas)
Depuraciones para objetos grandes, de este modo un fichero es truncado en su apertura(Peter)
Depuraciones de la lectura de lineas(Tom)
Se permite que psql \f \ tomen los espacios en blanco como delimitadores(Bruce)
Se pasa el pg_attribute.atttypmod al frontal de la aplicacion para las longitudes de los campos(Tom,Bruce)
Libreria de compatibilidad con Msql en /contrib(Aldrin)
Se elimina el requerimiento de que las clausulas identificadoras ORDER/GROUP BY
estuvieran incluidas en la lista de la busqueda(David)
Se convierten columnas para emparejarlas en las clausulas de UNION(Thomas)
Se elimina fork()/ecec() y solo se hace fork()(Bruce)
Depuraciones en Jdbc(Peter)
Se muestra el estado del proceso en el servidor (backend) en la
linea de comandos de ps(solo funciona en algunas plataformas)(Bruce)
Pg_hba.conf tiene ahora una opcion sameuser en el campo de la base de datos
Se hace que lo_unlink tome el parametro oid, no el int4
Nueva DISABLE_COMPLEX_MACRO para compiladores que no pueden manejar nuestras macros(Bruce)
Libpgtcl maneja los NOTIFY ahora como un evento Tcl, no se necesitan enviar consultas tontas(Tom)
Depuraciones en libpgtcl(Tom)
Anadida una opcion -error al comando pg_result de libpgtcl(Tom)
Anadido parche locale, vease docs/README/locale(Oleg)
Correccion para pg_dump con ella la sintaxis de CONSTRAINT y CHECK es correcta(ccb)
Nuevo codigo contrib/lo para eliminar grandes objetos huerfanos(Peter)
Nuevp comando psql "SET CLIENT_ENCODING TO encoding" para prestaciones
multi.byte, vease /doc/README.mb(Tatsuo)
codigo /contrib/noupdate para revocar permisos de actualizacion en una columna
Libpq puede ser compilada ahora en win32(Magnus)
Anadido PQsetdbLogin() en libpq
Nuevo tipo entero 8-byte, comprobado por el configure del soporte para OS(Thomas)
Mejor soporte para nombres entrecomillados de tabla/columnas(Thomas)
Se rodean los nombres de tabla y columnas con dobles comillas en pg_dump(Thomas)
PQreset() trabaja ahora con contrasenas(Tom)
Handle case of GROUP BY target list column number out of range(David)
Se permite UNION en las subconsultas
Anadido auto-dimensionamiento a la pantalla a los comandos \d?(Bruce)
Se utiliza UNION para mostrar todos los resultados de \d? en una consulta(Bruce)
Se anade la prestacion de busqueda de campo \d?(Bruce)
Pg_dump utiliza menos peticiones \connect(Tom)
Se hace que la opcion -z de pg_dump trabaje mejor, se documenta en la pagina de manual(Tom)
Se anade la clausula HAVING con total soporte para subconsultas y uniones(Stephan)
Texto completo de las rutinas de indexado en contrib/fulltextindex(Maarten)
Los ids de transacciones se almacenan ahora en memoria compartida(Vadim)
Nuevo PGCLIENTENCODING cuando ejecutan el comando COPY(Tatsuo)
Soporte para la sintaxis SQL92 "SET NAMES"(Tatsuo)
Soporte para LATIN2-5(Tatsuo)
Anadido el caso UNICODE los test de refresion(Tatsuo)
Depuracion de gestor de bloqueos, nuevos modos de bloqueos para LLL(Vadim)
Se permite el uso de indice en clausulas OR(Bruce)
Se permite "SELECT NULL ORDER BY 1;"
La explicacion VERBOSE del plan lo imprime, y ahora imprime en bonito el plan al
fichero de log del postmaster(Bruce)
Se anaden indices al display para el comando \d(Bruce)
Se permite el GROUP BY en funciones(David)
Nuevo pg_class.relkind para obejtos grandes(Bruce)
Nuevo modo de enviar libpq mensajes NOTICE a diferentes localizaciones(Tom)
Nuevo comando de escritura \w para psql(Bruce)



Nuevo /contrib/findoidjoins escanea columnas oid para encontrar relaciones de union(Bruce)


Se permite que sean considerados indices compatibles binarios cuando se verifican
indices validos para una clausula de restriccion conteniendo una constante(Thomas)
Nuevo codigo ISBN/ISSN en /contrib/isbn_issn
Se permite NOT LIKE, IN, NOT IN, BETWEEN, y NOT BETWEEN constraint(Thomas)
Nuevo sistema de reescritura corrige muchos problemas con reglas y vistas(Jan)
* Reglas en trabajos relacionados
* Cualificaciones de eventos en trabajos de inserciones/actualizaciones/borrados
* Nueva variable OLD para referirse a CURRENT, CURRENT se eliminara en un futuro
* Las reglas de actualizacion se pueden referir a NEW y OLD en la regla cualificacion/accion
* Inserciones/actualizaciones/borrados en vistas de trabajo
* Reglas multiples de accion se soportan ahora, rodeadas entre parentesis
* Usuarios normales pueden crear vistas/reglas en las tablas en las que tengan permisos de RULE
* Las reglas y las vistas heredan los permisos del creador
* No hay reglas a nivel de columna
* No hay reglas de ACTUALIZACION NUEVA/VIEJA (UPDATE NEW/OLD)
* Nuevas vistas de sistema pg_tables, pg_indexes, pg_rules y pg_views
* Solo se puede ejecutar una accion en las reglas de SELECT
* Re escritura total revisada, tal vez para la 6.5
* manejo de subselects
* manejo de agregaciones en vistas
* manejo de inserciones dentro de una seleccion desde una vista ahora funciona
Los indices del sisteme ahora son multi-clave(Bruce)
Los tipos Oidint2, oidint4, y oidname types se eliminan(Bruce)
Se utiliza cache del sistema para mas busquedas en tablas del sistema(Bruce)
Nueva lenguaje de programacion en el proceso en servidor(backend) PL/pgSQL en backend/pl
El nuevo tipo de datos SERIAL, auto crea la secuencia/indice(Thomas)
Se permite la comprobacion de declaraciones sin recompilar(Massimo)
Mejoras en el bloqueo de usuario(Massimo)
Nuevo comando setval() para configurar el valor de una secuencia(Massimo)
Auto eliminacion del fichero de socket de unixsi no hay un postmaster ejecutandose(Massi
Paquete de traceo condicional(Massimo)
Nuevo comando UNLISTEN(Massimo)
Psql y libpq se compilan ahora bajo win32 utilizando win32.mak(Magnus)
Lo_read ya no almacena rastros NULL (Bruce)
Los identificadores son truncados ahora internamente a 31 caracteres(Bruce)
Opciones de createuser estan disponibles ahora en la linea de comando
Anadido soporte para codigo de enteros de 64-bit, configuracion comprobada, tipos de int8(Thomas)
Se previene la perdida de un descriptor a causa de un COPY fallido(Bruce)
Nuevo comando pg_upgrade(Bruce)
Directorios Updated /contrib (Massimo)
Nueva setencia CREATE TABLE DEFAULT VALUES disponible(Thomas)
Nueva sentencia INSERT INTO TABLE DEFAULT VALUES disponible(Thomas)
Nueva prestacin DECLARE y FETCH(Thomas)
Estructuras internas de libpq ahora no se exportan (Tom)
Se permiten indices con mas de 8 claves(Bruce)
Se elimina el teclado ARCHIVE, que ya no se utiliza(Thomas)
La opcion -n de pg_dump para suprimir comillas alrededor de los identificadores
se deshabilita las columnas del sistema para las vistas(Jan)
nuevos tipos INET y CIDR para direcciones de red(TomH, Paul)
No mas comillas en las salidas de psql
pg_dump ahora vuelca las vistas(Terry)
nuevo SET QUERY_LIMIT(Tatsuo,Jan)
Cambios en el Arbol Fuente
------------Limpieza de /contrib (Jun)



Enlazadas algunas pequenas funciones llamadas para cada registro(Bruce)


Inline some small functions called for every row(Bruce)
Correcciones paraAlpha/linux
Limpiezas para Hp/UX (Tom)
Test de regresion para Multi-byte (Soonmyung.)
Se elimina la opcion -disabled del configure
Se define PGDOC para que utilice POSTGRESDIR por defecto
Se hace la regresion opcional
Se eliminan corchetes extras en el codigo de pgindent(Bruce)
Se anade soporte para la libreria compartida bsdi(Bruce)
Nueva soporte para opcion de configuracion -without-CXX support(Brook)
Nueva FAQ_CVS
Actualizado flowchart de proceso de servidor en tools/backend(backend)
Cambiado atttymod de int16 a int32(Bruce, Tom)
Se corrige Getrusage() para plataformas que no lo tienen(Tom)
Se anade PQconnectdb, PGUSER, PGPASSWORD a la pagina de manual de libpq
NS32K platform fixes(Phil Nelson, John Buller)
Correcciones para Sco 7/UnixWare 2.x (Billy,others)
Correccines para Sparc/Solaris 2.5 (Ryan)
Pgbuiltin.3 esta obsoleto, movido a los ficheros de documentacion(Thomas)
Aun mas documentacion(Thomas)
Soporte para Nexstep(Jacek)
Soporte para Aix (David)
Pagina de manual para pginterface(Bruce)
Todas las librerias compartidas tienen numero de version
Unidas todos los defines de las librerias compartidas de SO-especificos dentro de un unico fichero
Comprobacion de configuracion TCL/TK mas inteligente(Billy)
Configuracion de perl mas inteligente(Brook)
confdigure utiliza install-sh facilitado si no se encuentra script de instalacion(Tom)
nueva Makefile.shlib para configuracion de librerias compartidas(Tom)

Version 6.3.2

T:%[(793/1%R`(7=?-,5/4(]0>5=?=(70>0>-,5/4(](7=?=5(*i@%=?%[1S cS {SFY/13+,:(*([+,%i/15:<%94(]+,%
`(7=V-,/ `ccS U@%=?%
3/ 3#&%=V-,L0>5#&@+,(*:L4(U+,%"/13(7`%W@.=?(*:<%0-,/1(7S
jZ3#&%=V-,^a
b jG(d=(*@%7=?%u5@=V:<(d@%=?% 0>/1);3=?%0>-,5/]%3:#&%:-02%u@%=?%d%+,;53/1%I@+,%:<%C=V#&%X-,/10>+,3M
J5(7/14L-,/13{GX%U02%3%
4(UCD%+,+,5"-,/1:<=?430>-,4W-,/K%4`(7=V:<-,=?+,L(*/K`1S 5S 1S
b jG(K#&%/1(VPQ%/0>5=?=(70>:<%#&(7/1:<(K+,%L+,+,%#&%4%L%]C3/10>-,5/1(*9(7/+,%[@%=?:(K-,e\3-,(7=4%K4(O+,%
0>+,%33+,%"TpTT~ J9f1UTWS
~ K( =(7\3-,(7=(u3/R43#&@WwG=(7:<5=( @.%=V%%\3(7+,+,U\3((7:<(7/&(VPQ(70>3:%/c4]1S ]1S 1S S/
#&%'5(g4-,:0>+,(7%/1X*#&%'(7X*J#&%'(g-,/1:%+,+,(7l:<54 +, =(7\3(*=V-,4^S?T:<(g3+,:<-,#&@%u4( N (7M
=V-,%Y(7=(VPQ(70>3:%4#&-,(*/1:=?%l\3(+,%@5:<#&%:(*=h/1(7:(I(VPQ(70>3:%/145(S?( N (7=?-,%U=(7MQ(*/1+,%e%=
m =?(2M+,-,/1'5y.0>3%+,\3-,(*=l%@+,-,0>%0>-,/q02+,-,(*/1:(U\53(3:<-,+,-,0>(U+,- N =(7=?-,%"8:;5=(7S
8%=V%I%0>:<3%+,-,e%*02-,/1(7l4(*4(I-,/1:<%+,%0>-,5/1(*h@=(7M`S X0>5/13+,:<(7(Y+,%h-,/1:<=30>0>-,/(*h4(I-,/1M
:%+,%02-,/qJi#&-,;=?%0>-,5/ @%=?%
`1S



Lista Detallada de Cambios


Cambios
----Mejoras en la deteccion del configure para tcl/tk(Brook Milligan, Alvin)
Mejoras en las paginas de manual(Bruce)
correcciones para BETWEEN y LIKE (Thomas)
correccion para psql \connect utilizado por pg_dump(Oliver Elphick)
Nuevo driver odbc
pgaccess, version 0.86
eliminado qsort, se utiliza ahora la version de libc, depuraciones(Jeroen)
correcciones para buffer excedidos que se han detectado(Maurice Gittens)
correcciones para buffer excedidos en libpgtcl(Randy Kunkee)
correccion para UNION con DISTICNT en ORDER BY(Bruce)
se comprueba en el configure el gettimeofday (Doug Winterburn)
Correccion para el error "indices no usados"(Vadim)
Adicciones a la documentcion(Thomas)
Correcciones para perdida de memoria en el proceso en el servidor(backend)(Bruce)
limpiezas en libreadline (Erwan MAS)
Eliminado DISTDIR(Bruce)
limpieza de las dependencias de Makefile (Jeroen van Vianen)
correcciones para ASSERT (Bruce)

Version 6.3.1

jZ3#&%=V-,^a
b jG5@=?:(%4-,02-,/1%+@%=?%U0>/PQ3/1:<c64(0>%=?%0:<(7=(7"#&3+,:-,M N J5:(S
b |6(*@%=?%70>-,/O4(Y+,%d5=4(7/1%0-,5/K4( N J5:(*W@%=V%
0>+,-,(*/1:(76JL(*=V`-,4=?(*"4(UC=?/1:<%+Z#&-,{G:<^S
b 0>:<3%+,-,e7%02-,/1(76#&(7/1=(7W@.%=V%U@(7=?#&-,:-,=-,/1:%{-,6jZkgS
b AB(VPQ5=?%"%
+,%d%3:<54(*:(70>0>-,/q4(+,%d0>5/1);53=V%0>-,/ 43=V%/1:(+,%d-,/1:<%+,%0>-,5/"S
~  (Y=(7\3-,(*=?(g3/q43#&@WwG=(7:=(I@.%=V%Y%\3(*+,+,5"\3((?P<(*023:<(7/9cS 1S? /9#&%'(I4-,:0>+,(7%/1X
#&%'5(7XJ]#&%'5( -,/1:%+,+,.(7:4K+,O\3( ( =?(*\3-,(7=(S> ( N (7=?-,%L=(7M(7/1+,%e7%= m =(7MQ+,-,/1'5yh023%+,M
\3-,(7=h%@+,-,0>%0>-,5/q0>+,-,(7/1:<(U\3(U3:<-,+,-,02(+,- N =(*=V-,%"8:<;5=?(*S
8%=V%I%0>:<3%+,-,e%*02-,/1(7l4(*4(I-,/1:<%+,%0>-,5/1(*h@=(7M`S X0>5/13+,:<(7(Y+,%h-,/1:<=30>0>-,/(*h4(I-,/1M
:%+,%02-,/qJi#&-,;=?%0>-,5/ @%=?%
`1S

Lista Detallada de Cambios


Cambios
----depuracione/correcciones para ecpg, ahora en version 1.1(Michael Meskes)
depuracion en pg_user(Bruce)
correccion para objetos largos para pg_dump y tclsh(alvin)
correccion de LIKE para multiples subrayados adyacentes
correccion para redefiniciones en la construccion de funciones(Thomas)
depuraciones para ultrix4
actualizacion a pg_access 0.83
actualizacion de la pagina de manual CLUSTER



Soporte para juego de caracteres multi-byte, vease doc/README.mb(Tatsuo)


correccion para configure -with-pgport
correccion para pg_ident
correccion de big-endian para comunicaciones en el proceso servidor(backend)(Kataoka)
correccion para SUBSTR() y substring() (Jan)
varias correcciones para jdbc (Peter)
libpgtcl improvements, see libptcl/README(Randy Kunkee)
Correccion del error "Datasize = 0" (Vadim)
Se previene la ocultacion de \do(Bruce)
Eliminadas entradas de juegos de caracteres Ruso duplicadas
depuracion para Sunos4
Se permiten claves opcionales de TABLA en LOCK y SELECT INTO(Thomas)
Opciones de CREATE SECUENCE para permitir enteros negativos(Thomas)
Se anade "PASSWORD" como un identificador de columna valido(Thomas)
Se anade comprobacion de los campos objeto en UNION (Bruce)
Correccion para el porte a Alpha(Dwayne Bailey)
Correccion para matrices con texto conteniedo comillas(Doug Gibson)
Correccion para la compilacion en Solaris(Albert Chin-A-Young)
Se indentifica mejor librerias e includes de tcl y tk(Bruce)

Version 6.3

%J V> @=(7:%0>-,/1(7W/13(7`%IJ #&(VPQ=V%I(7/](*:<% `c(*=V-,/"S2 (d%\3-3/ N =(7`(7X-,/10>5#&M


@+,(7:<L3#&%=?-,^a
b AB302_1%@=(*:<%0-,/1(7/13(*`c%X-,/10>+,3J5(7/14d0>%@%02-,:<%*02-,/::%+7@%=?%"3 N 0>5/c3+,:<%jGkt
m :<54(7:%d%\3-(7{G0>(7@.:+,%
+,-,:%d4(*:<-,/19(7/q+,%d3 N 0>5/13+,:<%y
b jG5@=?:(g@%=?%I`c%=?-,% N +,(7l4(g(7/1:=?/1 4(7++,%4u4(7+0>+,-,(*/1:(g@%=?%I(7@(70>-,)0>%=e5/1%Y_15=?%=?-,%
JL(7:-,+,i4(C(70>_1%1S
b fD/1:<(7=?C%eL4( 02/1(7{-,5/ m 50>'5(7:y@%=V%02/1(7{-,5/c(7d0>+,-,(7/1:<(wG(*=V`-,4=VS*T:O(7
@.5=g%_1=V%
4(*CD(20>:L%-\3(U/1(70>(7-,:%W-,/1-,0>-,%=
0>5/ +,%
@0>-,5/KM-,
postmaster
b AB(VPQ5=(7 #&(*02%/1-,#&L4( %3:<5=?-,e%0>-,/B0>5/0>5/1:<=?%(7/1%1SG@(7=?#&-,5L4(K:<% N +,%O@=
4(*CD(20>:L_1%/ 0>%# N -,%4^S
b T+Z`-,(VPQ9(7:-,+i4(:-,#&(U:<=V%`c(7+U_1%d-,4i(7+,-,#[-,/1%4SjG(_1%/K#&(?P<=?%4i+,W=(*3+,:<%4S

Nota: Bruce Momjian escribio las siguientes notas para presentar la nueva version.

%Jn%+,;53/1% 0>5% ;5(7/1(7=?%+,(7 (*/r+,%O1S K\3( \3-,(7=R#&(7/10>-,5/1%=VSZjG/r5+,n+,L;5=?%/14(7


-,:(*#&u\3(i/1R@3(74(7/n(7=4(*0>=?-,:u(7/n3/1% CD=?%*(5SjG(i%3//1(*0>(7-,:%q3/1%K=(*`c-,-,/4(i+,%
+,-,:%
4(U0>%# N -,64(7:%+,+,%4.^S
8=V-,#&(*=?X%_1=V%9:<(7/1(7#[5d3 N 0>5/13+,:<%S _15=?%9\3(i+,%
:(7/1(*#&5Xc\3-,(7=]4(70>-,=Y\3(i-,/
3 N 0>/13+,:<%X*jGk (*h3/9+,(7/1;53%PQ(I#&3J+,-,#&-,:<%4^S?%^3 N 0>/13+Q:<%h5/L3/1%U@=(2:<%0>-,5/
#&%J55=<XJ
4( N (7=?-,%W=(7`-,%=13L0>54-,;5d(*/+,+,3;5%=(7(7/ +,^\3(W3/1%g3 N 0>5/13+,:%g+,(6@.=?`(7%
4("3/1%g#&(VPQ=5+,30>-,/i@%=?%W3L0>/13+<:<%SFY=(7U\3(W(7/10>5/1:<=V%=V%W\53(W_1%Jd#&%35^@%=?%
+,%"3 N 0>/13+,:<%64(+,W\3(Y3:<(74O0>=(7(S?E%4-,#/15W_1%
@3(7:<L(7/ (*+Z;=?%/q#&%@%U4(YjGk
0>5/ +,%63 N 0>/13+,:<%XJ90>/O(7+,+,%WC3/10>-,5/1%+,(7W:<:%+,#&(*/1:(S%U3/1-,02%d0>%d\53(U/19@3(74(
_1%0>(7=02/ +,%"3 N 0>/13+<:<%"(7/ 3:-,+,-,e%=V+,%"(7/ +,-,:<%d%
 N :<(7/1(7= m :%=;5(2:1+,-,:yzS



jZ(*;3/14X+,%WcS W3:-,+,-,e%602/1(7{-,/L4(l45#&-,/1-,
3/c-,{ m 3/1-,{4#&%-,/ 50>'5(7:yG(7/ `(7eWFY8WwGfD8
@=4(7C(70:<^S?8%=?%g@(7=?#&-,:-,=.02/1(7{-,5/1(*h4(74(6:=?%^#&%\3-,/1%X2:-,(7/1(W\53(g3:<-,+,-,e%=.+,%I/13(7M
`% @0>-,5/O@:<#&%:(*=6MD-,XJ @=63@3(7:q(*4-,:%=l@;_14%1S 0>5/1CzSG%# N -,(7/O@.5=6(*:<%u=V%e5/
(7+ZC=V#&%:<i4(Y@;_ N %1S 0>5/1Cc_1%d0>%# N -,%4^S
G(*=?0>(2=5X+,%U02%#&@50>_1%= m yh@(*=V#&-,:<-,=?%/R%_15=?%i3/R%0>0>(7O#&%
=?%@-,4K\3(L`%=0>_1%= m yl
\3( 0>%#&@.5I4(u:(*{G:<S>T@(70>-,)02%#&(7/1:(*XZ(*+1:(*{G:<qJO(*+1`%=0_1%= m y:-,(*/1(7/[3/1%L@.(7/1%+,-,e%0z-,/
@%=?%W(7+7%0>0>(7
%g0>3%+,\3-,(7=.0>5+,3#&/1%I4(7@3(74(6+,%g@=?-,#&(7=?%g0>5+,3#&/1%I4(6(7:<(6:-,@.S0>_1%= m y
3:-,+,-,e :<%# N -,(7/L(7:(I%0>02(*u@.(7/1%+,-,e%45X@(7=uJ5%/1(7{-,:<(g@5=^#&%l:<-,(7#&@^SVT:<@.3(*4(
3;5(7=?-,= \53([=(*4-,(7/1(K%+,;53/1%94(O3i:% N +,%X(*@(*0>-,)0>%#&(7/c:(O-W:<-,(7/1(*90>5+,3#&/1%i4(
0>%=V%*0>:(*=?(*i0>=V:<5i\3(]_1%J5%[4(7)/1-,4r0>5#&o`c%=?0>_1%= m yYo:(7{:<S5T:(OJr5:<=5i02%# N -,
_1%0>(7/q+,%
1S
%3/ #&%"=V%@.-,4%
\3(U`(7=?-,5/1(76@=(70>(741(7/1:<(7S
G(*/1(7#&^%_1=?%W0>5/1:<=V%(*/1%^4(*)/1- N +,(*^-,/14(*@(7/14-,(7/1:<(7#&(*/1:(64(l023%+,\3-,(7=.)0>_1(7=/1-,{.S
%J/13(7`5"0>#&%/146jGkK jZT|
S?E(7%(I+,%U@%;-,/1%4(Y#&%/13%+G@;_ N %1S 0>5/1C@%=V%Y#&%
-,/1C5=?#&%0>-,5/lS* %JK3/1%i:% N +,%/13(7`%X@;5_1%4s
X5\53((73:-,+,-,e%4%L@%=V% %+,#&%0>(7/1%=g-,/1M
C5=?#&%0>-,5/B4( +,i33%=?-,Jo+,%02/1:=?%(7/1%4(q+,5L33%=V-,XJo\53(O(7X@=u4(*CD(*02:<
5+,&0>/13+,:<% N +,( m jGTTFI5M% N +,(7yl@=U(7+3@(7=Y33%=?-,&4(i@:;5=(7S@;53(7=(7
%_1=V%
3/1%9`c-,:<%q4(i@;_1%45sUX1J[(7d0>/13+,:<% N +,( m jGT1TFY5M% N +,(7yh@=8fDFLS7 ( N (i(7;53-,=
3:-,+,-,e%/14L@.;3(7=(7/ 3W%@.+,-,02%02-,/1(76-,/K0>%# N -,S
%:% N +,%U0>=(7%4%7U@=Y33%=V-,d%_15=?%iJ5%9/1[:-,(*/1(7/R@(7=?#&-,5
4(L0>5/13+,:% m jGTTFWy
@%=?%I8 fF@5=4(*C(70>:^S?T:<(g_1-,e @=?\53(I+,l(7:%/14%=(l ~ jGf+, =?(*\3-,(7=(7/"S83(7M
4(Y@.5=3@.3(7:02/10>(74(*= m u|"~ yc0>3%+,\3-,(7=^@(*=V#&-,i\53(\3-,(7=?%U4(*@3(7"4(Y\3(Y+,%
:% N +,%Y(7%U0>=(7%*4%1S?%h:<% N +,%l4(7+G-,:(*#&%
0>5/1:<-,/13%/q-,(7/140>5/13+,:% N +,(* m jGT1TFY5M% N +,(7y
@=h8fDFS
G(*/1(7#&I:%# N -,(*/]`(7=4%41(7=5g024-,;55Y4(
4(*:(*020>-,/]4( N +,\3(7 m 4(7%4+,0>'yzS~ q#&%
(7(7/1:%Y(7;53/145"4(g:-,(*#&@ 4(Y(*{G@-,=?%0>-,5/ m :-,#&(*53:<yzS $ (*+G/13(7`0>4-,;5L-,#&@+,(*#&(7/1:%
3/ f}#[(VP<=<X%-\53(U4( N (7=?-,%
_1% N (7=3/K#&(7/1="%;55:<%#&-,(7/1:<94(=(70>3=?5643=V%/1:(U3/
3LC3(7=?:(S
AB30>_1%\3(VPQ%"_1%/9-,4 _1(70>_1%l%0>(7=0>%I4(Y+,%Y-,/1%4(70>3%4%Y40>3#[(7/1:%02-,/9(7/i`c(*=V-,/1(7
%/1:<(7=V-,=(7S_15#&%_1%@3(*:< #&302_1 (7C3(7=?e7 (*/i#&30>_15l#&%/13%+,(7h/13(7`l@%=V%g(*:%
`(7=V-,/"SFY#&@=3( N ((7/ 4-,=(70>:<5=?-,]wZ40GS
85=
=?%e/1(7 4(q=?(*/14-,#&-,(7/1:<5X.:-,#&(K:<=?%`(7+(K(*+,-,#&-,/1%X@(7=R@3(74(q(7=d-,#&@+,(7#&(*/1:%4
3:-,+,-,e%/14o4-,@%=?%4=( m :=?-,;;5(7=?y m `(7%(O@;5\+wG02/:=?- N wZ@-wG|6T ATyS8=C%`5=<X
0>5#&@=3( N (
(7+5/13(7`q0>5#&%/14 Z4[@%=?%d:<-,@5XG5@(*=V%45=(2X(7:<0GS>%# N -,7/O+,%g`-,:%W:-,(*M
/1(7/%_1=V%g3@=@-,@(7=?#&-,5X2/1 N %%4^(*/L+,%^:% N +,%^3 N J%02(*/1:(7X>%-\3(W+,5^@(7=M
#&-,5@%=?%W(7+,+,%4( N (*/u(*=10>/1);53=?%45^(7@%=?%74%#&(7/1:<(SFY#&@=3( N (dwG@;\+w-,/1:(7=?C%0>(7
@%=?%U`(7=%+,;53/1%W#&%/c(7=V%64(4-,%+,;%=h0>/O8:<;=(*S
T:% (7I+,%@=V-,#&(*=V% `(7=?-,/[\3(u=(7%*+,#&(7/1:(u=(7\3-,(7=(d3/1%(*{G@+,-,0>%0>-,/[@%=?%u+,533%=?-,5
(7{-,:<(7/1:<(7S (#&30>_1%U#&%/1(7=?%XC3( /1(*02(*%=V-,K(7:<O@=\3(+,%i/13(*`c%`c(*=V-,/n(*+,-,#&-,/1%
#&30>_1%6+,-#&-,:%0>-,/1(7XGJi+,%"+,30>-,5/(7"@=`c-,-,/1%+,(7 m s 5=?'M%=3/14yc\3((7=?%/ +,%
;5(7/1:<(
(7:% N %3:-,+,-,e%/14iJ5%
/19(U/1(70>(7-,:<%/"S

Migracion a v6.3

jZ(W=(*\3-,(7=(6+,%3:<-,+,-,e%0>-,/i4(g3/
u4(g3/
@%=?%g:4l%\3(7+,+,l\3(
4(7(7(*/q#&-,;=?%=4%:<564(0>3%+,\3-,pg_dump
(7=h`(7=V-,/ %/1:(*=V-,pg_dumpall
=4(U85:;5=(7S

Lista Detallada de Cambios


Correccion de errores
-----Correccion de cursores binarios rotos por implementacion de MOVE (Vadim)



Correccion para fallos de la libreria tcl(Jan)


Correccion para el manejo de matrizes (arrays), por Gerhard Hintermayer
Correccion de error en acl, y se elimina pqtrace duplicado (Bruce)
Correccion para psql \e con fichero vacio (Bruce)
Correccion para texcat en campos varchar() (Bruce)
Correccion para DBT Sendproc (Zeugswetter Andres)
Correccion para problema de sintaxis en vacuum analyze(Bruce)
Correccion para indentificadores internacionales(Tatsuo)
Correccion para agregaciones en tablas heredadas (Bruce)
Correccion fr substr() para datos fuera de rango
Correccion para select 1=1 o 2=2, select 1=1 and 2=2, y selec sum (2+) (Bruce)
Correccion para mostrar estado de del resultado cuando no hay tty de salida. La opcion -q
aun no lo devuelve (Bruce)
Correccion para count(*), argumentos con vistas y tablas multiples y sum(3)(Bruce)
Correccion para cluster (Bruce)
Correccion para PQtrace start/stop muchas veces (Bruce)
Correccion para una variedad de problemas como bloqueos ms recientes en espera
que tienen bloqueo antes que procesos en espera mas viejos, y teniendo gente bloqueada
en lectura no se comparte bloqueo si proceso que escribe esta esperando para cojer el
bloqueo, y los procesos escritores que esperan no obtienen prioridad sobre los
procesos lectores que esperan(Bruce)
Correccion para abortos en psql cuando se ejecutan consultas desde ficheros externos (James)
Correccion para el problema de multiples ordenaciones por columnas, cuando la primera
tiene valores NULL (Jeroen)
Utilizacin correcto soporte de funciones de la tabla hash para float8 e int4(Thomas)
Re-enable JOIN= option in CREATE OPERATOR statement (Thomas)
Se cambia la precedencia de los operadores booleanos para emparejarlos con el comportamiento esperado(Thomas)
Se genera elog(ERORR) en enteros que sobre-crecen (Bruce)
Se permite argumentos multiples en las funciones de clausulas de constraint(Thomas)
Se comprueba los literales booleanos de entrada para true, false,yes,no,1,0
y se envian a elog(ERROR) si no se reconocen(Thomas)
Correccion para objetos de gran tamano importante
Correccion para GROUP BY mostrando duplicados(Vadim)
Correccion para exploracion de indice en MergeJion(Vadim)

Mejoras
-------Sub consultas con las palabras claves EXISTS, IN, ALL y ANY (Vadim, Bruce, Thomas)
Nuevo Manual del Usuario(Thomas, others)
Aceleracion por alineamiento de algunas funciones frecuentemente llamadas
Deteccion real de bloqueos(deadlock), no mas expiraciones por tiempo(timeout)(Bruce)
se anaden las "constantes" SQL92 CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP,
CURRENT_USER(Thomas)
Se modifica la sintaxis para ser compatibles con SQL-92(Thomas)
Se implementa las clausulas SQL PRIMARY KEY y UNIQUE utilizando indices(Thomas)
Se reconoce la sintaxis SQL92 para CLAVES FORANEAS (FOREIGN KEYS). Se pone una
aviso (notice) en el elog (Thomas)
Se permite la clausula de restriccion NOT NULL UNIQUE (cada una de ellas
permitidas separadamente antes)(Thomas)
Se permite el estilo de arrojar no constantes (::") Postgres (Thomas)
Se anade soporte para las constantes boleanas de SQL3 TRUE y FALSE (Thomas)
Se soporta la sintaxis SQL92 para IS TRUE/IS FALSE/IS NOT TRUE/IS NOT FALSE(Thomas)
Se permiten cadenas mas cortas para literales booleanos(por ej. "t", "tr", "tru")(Thomas
Se permiten identificadores de delimitacion SQL92(Thomas)
Se implementa decodificacion para cadenas binarias y hexadecimales SQL92 (b10 and x1F



Support SQL92 syntax for type coercion of literal strings


(e.g. "DATETIME now")(Thomas)
Se aade conversiones para tipos int2, int4, y OID a y desde texto (Thomas)
Se utilizan bloqueos compartidos cuando se crean indices (Vadim)
La memoria libre reservada para una consulta de usuario dentro de un bloque de transaccion
despues de esa consulta sea hecha, se habia desactivado <= 6.2.1(Vadim)
Nueva declaracion SQL, CREATE PROCEDURAL LANGUAJE (Jan)
Nuevo interfaz para el motor de base de datos en el servidor (backend)Lenguaje Procedural (PL)
Postgres(Jan)
Se renombra la opcion pg_dump -H a -h(Bruce)
Se anade soporte Java para contrasenas, fechas euopeas (Peter)
Se utilizan indices para operaciones LIKE y ~, !~ (Bruce)
Se anade funciones hash para fecha (datetime) y marca de tiempo (timespan) (Thomas)
Se elimina Time Travel(Vadim, Bruce)
Se anade paginacion para \d y \z, y se corrige \i (Bruce)
Se anade soporte para conexiones de dominio Unix (Unix domain socket) al motor de base de datos y a
la libreria del frontal(Goran)
Se implementa CREATE DATABASE/WITH LOCATION y la utilidad initlocation(Thomas)
Se permiten mas palabras reservadas SQL92 y/o Postgres como identificadores de
columnas(Thomas)
Aumenta el soporte para SQL92 SET TIME ZONE...(Thomas)
SET/SHOW/RESET TIME ZONE utilizan la variable de entorno del motor de base de datos (backend) TZ(Thomas)
Se implementa SET keyword = DEFAULT y SET TIME ZONE DEFAULT(Thomas)
Se habilita SET TIME ZONE utilizando la variable de entorno (Thomas)
Se anade la variable de entorno PGDATESTYLE a la inicializacion del frontal y del motor de base de
datos(backend)(Thomas)
Se anaden las variables de entorno PGTZ, PGCOSTHEAP, PGCOSTINDEX, PGRPLANS, PGGEQO a la libreria de
inicializacion del frontal(Thomas)
Se configura automaticamente la zona horario en los test de regresion con "setenv PGTZ PST8PDT"(Thomas)
Se anade la tabla pg_descripcion para informacion sobre tablas, columnas, operadores, tipos y
agregaciones (Bruce)
Se incremente el limite de caracteres de 16 a 32 en los nombres de tablas/indices de sistema(Bruce)
Se renombran los indices del sistema(Bruce)
Se anade la opcion GERMAN para SET DATESTYLE(Thomas)
Se define un "ISO-style" formato de salida de fecha extendida con los campos "hh:mm:ss"(Thomas)
Se permite valores fraccionales para tiempos delta (por ej. 2.5 dias)(Thomas)
Se valida la entrada de numeros mas cuidadosamente para tiempos delta(Thomas)
Se implementa el dia del ano como una entrada posible para date_part()(Thomas)
Se definen las funciones timespan_finite() y text_timespan() (Thomas)
Se elimina materia archivada(Bruce)
Se habilita una base de datos de autentificacion pg_password que esta separada del fichero de contrasenas
del sistema(Todd)
Se vuelcan los permisos ACLs, GRANT, REVOKE(Matt)
Se definen funciones de longitud de cadena text, varchar y bpchar(Thomas)
Correccion para el manejo de herencia en consultas, y computos de coste(Bruce)
Se implementa CREATE TABLE/AS SELECT (una alternativa a SELECT/INTO)(Thomas)
Se permite NOT, IS NULL, IS NOT NULL en restrccines(Thomas)
Se implementa UNIONes para SELECT(Bruce)
Se anade UNION, GROUP, DISTINCT a INSERT(Bruce)
varchar() almacena solo los bytes necesarios en disco(Bruce)



Correccion para BLOBs(Peter)


Mega-Parche para JDBC... vease README_6.3 para lista de cambios(Peter)
Se elimina "opcion" no utilizada de PQconnectdb()
Nuevo comando LOCK y pagina de manual describiendo bloqueos(deadlocks)(Bruce)
Se anaden nuevos comandos psql \da, \dd, \df, \do, \dS, and \dT(Bruce)
Mejora de psql \z para mostrar secuencias(Bruce)
Se muestran NOT NULL y DEFAULT en tabla psql \d (Bruce)
Nuevo fichero de arranque de psql .psqlrc(Andrew)
Se modifican el script de muestra del arranque en contrib/linux para mostrar syslog(Thomas)
Nuevos tipos para direcciones IP y MAC en contrib/ip_and_mac(TomH)
Conversiones de tiempo en sistema Unis con tipos date/time en contrib/unixdate(Thomas)
Actualizacion del material contrib(Massimo)
Se anade soporte para conexion Unix (Unix socket) para DBD::Pg(Goran)
Nueva interfaz para python (PyGreSQL 2.0)(DArcy)
El nuevo protocolo para frontal/motor de base de datos(backend) tiene un numero version, byte de orden de
red (Phil)
Caracteristicas de seguridad en pg_hba.conf mejorada y documentada, muchas depuraciones(Phil)
CHAR() tiene ahora acceso mas rapido que VARCHAR() o TEXT
prepocesador SQL embebido en ecpg
Se reduce la carga de columnas del sistemas(Vadim)
Se elimina la tabla pg_time(Vadim)
Se anade el atributo pg_type para indentificar tipos que necesitan longitud (bpchar, varchar)
Se anade informe de final de linea fuera de termino cuando el comando COPY falla
Se permiten que los permisos en VIEW se configuren separadamente de las tabla subyacentes.
Por seguridad, se utiliza como apropiado GRANT/REVOKE en vistas(Jan)
Las tablas ahora no tienen por omision GRANT SELECT TO PUBLIC. Debes conceder explicitamente esos permisos.
Limpieza de ejemplos en el tutorial(Darren)

Cambios en el Arbol Fuente


------------Se anaden nuevas herramientas de desarrollo html, y caracteres flotantes en /tools/backend
Correccion para compilacion en SCO
Porte a computador Stratus, Robert Gillies
Anadido soporte para shlib para BSD44_derived & i386_solaris
Se hace la configuracion de Make mas automatizada(Brook)
Se anade script para comprobar los resultados del test de regresion
Se separan las funciones de verificacion sintactica en ficheros mas pequenos, agrupados juntos(Bruce)
Se renombran heap_create a heap_create_and_catalog, rename heap_creatr
a heap_create()(Bruce)
Parche para bloqueos en Sparc/Linux (TomS)
Se elimina PORTNAME y se reorganiza el material especifico de puertos(Marc)
Se anade fichero de optimizador README(Bruce)
Se elminan algunas recursiones en el optimizados y se limpia algo de codigo ahi(Bruce)
Correccion para bloqueo en NetBSD(Henry)
Correccion para el make libptcl(Tatsuo)
Parche para AIX(Darren)
Cambio IS TRUE, IS FALSE, ... a la expresiones utilizando "=" mas que a llamadas a funcion
istrue() o isfalse() para permitir optimizacion(Thomas)
Varias correcciones relacionadas con NetBSD/Sparc(TomH)
Bloqueos para linux Alpha(Travis,Ryan)
Se cambian elog(ALARMAS)(WARM) a elog(ERROR)(Bruce)
FAQ para FreeBSD(Marc)



Bring in the PostODBC source tree as part of our standard distribution(Marc)


Un parche menor para HP/UX vs 9(Stan)
New pg_attribute.atttypmod for type-specific info like varchar length(Bruce)
Parches para Unixware(Billy)
Nuevo bloqueo i386 para giro de bloqueo en asm(Billy)
Soporte para procesos en servidor (backends) multiplezados se elimina

Comienza un porte a OpenBSD


Comienza un porte a AUX
Comienza un porte a Cygnus
Se anaden funciones de cadena para la suite de regresion(Thomas)
Se expanden unos pocos nombres de funcion anteriormente truncados a 16 caracteres(Thomas
Emilinada llamadas a malloc() no necesitadas y reemplazadas con palloc()(Bruce)

Version 6.2.1

%
`1S 5S
(763/ %
`c(*=V-,/O4(Y0>5=?=(70>-,5/q4((7=V==^J94(Y3% N -,+,-,4%4O N =(U+,%
`1S
jZ3#&#&%=VJa
b jG(@(7=?#&-,:(Y%
+,%602%4(7/1%"(7{:(*/14(7=^+,-,/1(7%X@=ljGkt5S
b jG(-,/10>+,3J(7/O(VPQ(7#&@+,g4(UC3/10>-,/1(7g4(*(*/10>%4(7/1%415=?% m :=?-,;5;(*=Vy1@%=?%
-,/1(7=V:<%=h/15#&M
N =(7l4(U33%=?-,i(*/q%0>:3%+,-,e%02-,/1(7"4(:<% N +,%S
(7:%L(7
3/1%9`(7=?-,5/n#&(7/1=4( 02=?=?(*020>-,/R4(L(7=?=5=g N =(+,%9`1S i8%=?%i%0>:<3%+,-,e%*02-,/1(7
4(74(U-,:(*#&%I@=(7MQ`1S X(
=(7\3-,(*=?(3/O43#&@WwG=(7+,5%4]02#&@+,(7:<^S2AB-,=(U+,%g/1:%I4(U+,%
`(7=V-,/ `ccS U@%=?%
-,/1:=30>0>-,5/1(*S

Migracion desde v6.2 a v6.2.1

T:%9(7d3/1% `(7=?-,5/n#&(7/1=U4(i0>5=?=(70>0>-,5/n4(i(7=?=5=VS*~ &(i=(7\3-,(*=?(3/43#&@WwG=(7+,5%4


4(74(I+,%d`c1S X7@(7=(U=(7\3-,(7=(I4(74(0>3%+,\3-,(7=h`(7=?-,/ %/1:(*=V-,=%d+,%
`1S
+5%0>:3%+,-e%7=64(*4(d`1S X-(70>*PQ(7Y3/]43#&@6wZ=(7+,%4[(7/10>/1:=?%=?%g\3(d%`; m #&/1(7J5y(
0>%+,0>3+,%Y%_1=?%U0>5=?=(70:<%#&(7/1:<(SV545"+,%l:=?%"0>5=?=(70>0-,/1(7"4(Y(7=?==?(2":(*/14=V%/9(7C(70>:<u%+
%0>:3%+,-,e*%=+,5W(VPQ(70>3:% N +,(*S
}L:<=?%i#&%/1(7=?%94(L(7`-,:<%=g(7+43#&@WwZ=(*+,5%4n(7d3:<-,+,-,e%=g(7+-,;3-,(7/1:<(i0>5#&%/14[jZko4(74(
@\+@%=?%U%0>:<3%+,-,e%=^+,%d:% N +,%U4(-,:(7#&%d(*{G-,:<(7/1:(5a
update pg_aggregate set aggfinalfn = cash_div_flt8
where aggname = avg and aggbasetype = 790;

jZ(Y/1(70>(7-,:%U_1%0>(7=h(*:i%U:4%6+,% N %(*64(Y4%:<56(7{-,:(7/1:<(7X-,/10>+,3J(*/149:<(7#&@+,%:<(71S



Lista Detalladas de Cambios


Cambios en esta version
--------------Se permite bombres de columna TIME y TYPE (Thomas)
Se permite un rango grande de true/false como valores booleanos(Thomas)
Se soporta la salida de "now" y "current"(Thomas)
Manejo de DEFAULT con INSERT de NULL adecuado(Vadim)
Correccion para el proble de contar relaciones de referencia en el gestor de buffer(Vadim)
Se permite que las cadenas (strings) se extiendan a lineas, como ANSI(Thomas)
Correccion para cursor recursivo con ORDER BY(Vadim)
Correccion de computacion de avg(cash)(Thomas)
Correccion para especificacion de una columna dos veces en un ORDER/GROUP BY(Vadim)

Documentada nueva funcion de libpq que devuelve las lineas afectadas, PQcmdTuples(Bruce)
Funcion desencadenadora (trigger) para insertar nombres de usuario para INSERT/UPDATE(Brook Milligan)

Version 6.2

jZ(W=(*\3-,(7=(I3/L43#&@WwG=?(*:=?(g@%=?%I%\3(*+,+,5l\3(I4(7(7(7/L#&-,;=?%=4%:l4(74(W`(7=?-,/1(7
%/1:<(7=V-,=(7l4(U8:;5=(7S

Migracion desde v6.1 a v6.2

T:% `(7=V-,/&=(7\3-,(7=(
3/&`5+,0>%4 m 43#&@y02#&@+,(7:<O4( +,% N %(d4(u4%:Y(7/[cS JK3/1%
=(7:%*3=?%0>-,5/ 4(+,% N %(Y4(4%:<56(7/q1S
~ :(7(d\3(d+,%3:<-,+,-,4%4[@;543#&@&J @;543#&@%+,+4(d1S u4( N *( =V-,%d3:<-,+,-,e%=?(u@%=V%d`+,02%=
m 43#&@yc+,% N %(4(4%:WcS 1S

Migracion desde v1.x a v6.2

\3(*+,+,%W#&-;=?%0>-,5/1(*g4(74(U`(7=?-,5/1(*g%/1:<(7=?-,5=(76%d1S h4( N (7=?-,%/ %02:<3%+,-,e%*=?(U@.=V-,#&(7=


%
1S t@=?\53((7+C5=?#&%:<i4(Y%+-,4%
4(FI}L8 $ C3(#&(?P<=?%4i4(*4(+,%
`(7=?-,/K1S *1S

Lista Detallada de Cambios


Correcion de errores
-----Correccion de problemas con pg_dump para herencia, secuencias, tablas archivo(Bruce)



Correccion de errores de compilacion en desbordamientos para shifts, unsigned y prototipos malos


de Solaris(Diab Jerius)

Correccion de errores en lineas aritmetricas geometricas (malos calculos de intersecciones)(Thomas)


Comprobacion de intersecciones geometricas en los puntos de finalizacion para evitar lo feo del redondeo(Thomas)
Se cojen tentativas no-funcionales de borrado(Vadim)
Se cambia los nombres de la funcion de tiempo para ser mas consistentes(Michael Reifenberg)
Se comprueba las divisiones por cero(Michael Reifenberg)
Correccion para error muy antiguo que hacia que tuplas cambiadas/insertadas por un coman
fueran visibles para el propio comando (de ese modo teniamos multiples actualizaciones
de tuplas actualizadas, etc)(Vadim)
Correccion para SELECT null, fail FROM pg_am(Patrick)
No se permite SELECT NULL como EMPTY_FIELD(Patrick)
Se elimina senas innecesario de contrib/pginterface
Correccion OR(donde x!= 1 o x sea nulo no devolvera tuplas con x NULL)(Vadim)
Correccion para la funcion time_cmp (Vadim)
Correccion en el manejo de funciones con argumentos que no tiene el atributo primero en
las clausulas WHERE (Vadim)
Correccion de GROUP BY cuando el orden de las entradas es diferente del orden en la lista de
seleccion (Vadim)
Correccion de pg_dump para agrgaciones sin sfunc1(Vadim)

Mejoras
-------El parametro del optimizador genetico por defecto GEQO es ahora 8(Bruce)

Se permite el uso de parametros en la lista de consulta teniendo agraciones en las funciones(Vadim)


Se anade driver JDBC como una interfaz(Adrian & Peter)
Utilidad pg_password
Se devuelve el numero de tuplas insertadas/afectadas por una INSERT/UPDATE/DELETE etc.(V
Los disparadores (triggers) son implementados con CREATE TRIGGER (SQL3) (Vadim)
SPI (Interfaz de Programacion en el Servidor) permite la ejecucin de consultas dentro de
funciones C (Vadim)
Implementado NOT NULL (SQL92) (Robson Paniago de Miranda)
Se incluyen palabras reservadas para el manejo de cadenas (strings), uniones externas (outer

joins) y uniones (unions) (Thomas)


Implementados comentarios extendidos ("/* ... */") utilizando estados exclusivos(Thomas)
Anadido comentarios de una sola linea "//" (Bruce)
Eliminadas algunas restricciones de caracteres en nombres de operadores(Thomas)



Implementado DEFAULT y CONSTRAINT para tablas (SQL92)(Vadim & Thomas)


Anadido operador de concatenacion de texto y funcion (SQL92) (Thomas)
Soporte para sintaxis WITH TIME ZONE (SQL92) (Thomas)
Soporte para sintaxis INTERVAL unidad TO unidad (SQL92)(Thomas)
Se definen los tipos (de datos) DOUBLE PRECISION, INTERVAL, CHARACTER,
y CHARACTER VARYING (SQL92)(Thomas)
Se define el tipo FLOAT(p) y DECIMAL(p,s), NUMERIC(p,s) rudimentariamente (SQL92)(Thomas)
Se define EXTRACT(), POSITION(), SUBSTRING(), y TRIM() (SQL92)(Thomas)
Se define CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP (SQL92)(Thomas)
Se anade sintaxis y avisos para UNION, HAVING, INNER y OUTER JOIN (SQL92)(Thomas)
Se anaden mas palabras reservadas, la mayoria para cumplir con SQL92(Thomas)
Se permite la entrada de tiempo hh:mm:ss para tipos de marca de tiempo/tiempo
relativo (timespan/reltime) (Thomas)
Se anaden rutinas center() para lseg, path, polygon(Thomas)
Se anaden rutinas distance() para circle-polygon, polygon-polygon(Thomas)
Se verifica explicidad para puntos y poliginis contenidos en los poligonos

utilizando un algoritmo de cruzamiento de ejes(Thomas)


Se anade rutina para convertir circle-box(Thomas)
Se unen operadores conflictivos para diferentes tipos de datos geometricos(Thomas)
Se reemplaza el operador de distancia "<===>" con "<->"(Thomas)
Se reemplaza el operador "above", "!^" con ">^", y el operador "below", "!|" con "<^"(Th
Se anaden rutinas para recorte de texto en ambos extremos, subcadenas y posiciones de cadena(Thomas)
Se han anadido rutinas de conversion circle(box) and poly(circle)(Thomas)
Se permite que las ordenaciones se almacenen en memoria antes que en ficheros(Bruce & Vadim)
Se permite que funciones y operadores con tipos internamente identicos finalicen con exito(Bruce)
Speed up backend startup after profiling analysis(Bruce)
Se alinean frecuentes llamadas a funciones para mejorar las prestaciones(Bruce)
Se reducen las llamadas open() (Bruce)
psql: Se anade correccion para PAGER \h y \?,\C
Correccion para el paginador psql cuando no hay tty(Bruce)
Nueva utilidad entab (Bruce)
Funciones generales de disparadores para integridad referencial (Vadim)
Funciones generales de disparadores para tiempo transcurrido (Vadim)
Funciones generales de disparadores para la prestacion AUTOINCREMENT/IDENTITY (Vadim)
Se implemente MOVE (Vadim)
Cambios en el Arbol Fuente
------------Parches para HPUX 10 (Vladimir Turin)
Anadido soporte para SCO (Daniel Harris)
parches para mkLinux(Tatsuo Ishii)
Se cambia la terminologia geometica de caja de "length" a "width"(Thomas)
Se desaprueban campos incrmentales temporales no almacenados en el codigo geometrico(Thomas)
Se eliminan instrucciones de reinicio de INSTALL(Bruce)
Se mira en /usr/ucb antes de instalar(Bruce)
Correccion para el codigo de ejemplo de c++(Thomas)
Anadido -o a la pagina de manual de psql(Bruce)
Se previene que la longitud de la cadena relname no asignada sea copiada dentro de la base de datos (Bruce)
Depuracion del uso de NAMEDATALEN (Bruce)
Correccion para nombres pg_proc por encima de los 15 caracteres de salida(Bruce)
Anadida la funcion strNcpy() (Bruce)



eliminados algunos (void) repartidos que son innecesarias(Bruce)


nuevo directorio de interfaces(Marc)
Se remplazan las llamadas fopen() con llamadas a las funciones fd.c(Bruce)
Se hacen las funciones estaticas donde es posible(Bruce)
Se encierran las funciones no usadas con #ifdef NOT USED(Bruce)
Se eliminan las llamadas a difftime() en el soporte de estampacion de fecha para corregir SunOS(Bruce & Thomas)
Cambios para Digital Unix
Correccion de portabilidad para pg_dumpall(Bruce)
Se renombra pg_attribute.attnvals a attdisbursion(Bruce)
Pagina de manual "intro/unix" ahora es "pgintro"(Bruce)
Pagina de manual "built-in" ahora es "pgbuiltin"(Bruce)
Pagina de manual "drop" ahora es "drop_table"(Bruce)
Anadidas paginas de manual "create_trigger", "drop_trigger"(Thomas)
Anadidas constraints a los test de regresion(Vadin 6 Thomas)
Anadidos comentarios a la sintaxis del test de regresion(Thomas)
Anadido PGIDENT y programa de soporte(Bruce)
Commit masivo al ajecutar PGIDENT en todos los ficheros *.c y *.h(Bruce)
Ficheros movidos al directorio /src/tools(Bruce)
Guias de programacion de SPI y disparadores(triggers)(Vadim & DArcy)

Version 6.1.1
Migracin desde v6.1 a v6.1.1

T:% (7Y3/1% `c(*=V-,/&4(u0>=V=(*020>-,/1(7I#&(7/1=(7S~  (u/1(70>(7-,:% `c+,0>%4^wZ=(70>%=;Z%4(74(


+,%`(7=?-,5/qcS X*@.(7=u@%=?%Y023%+,\53-,(7=^`c(*=V-,/q@=(7`-,%1S? -,=? PQ%(Y%Y+,%l/1:%64(I`(7=?-,/94(
`1S U@%=?%02/1(7;53-,=l#&64(7:%+,+,(7S

Lista Detallada de Cambios


Cambios en esta versin
--------------Correcciones para SET con opciones (Thomas)
se permite a pg_dump/pg_dumpall preservar la propiedad de todos los
objetos/tablas (Bruce)
la nueva opcin \connect de psql permite cambiar el cdigo de usuario sin
cambiar de base de datos.
correccin de la opcin -debug de initdb (Yoshihiko Ichikawa)
limpieza de lextest (Bruce)
correcciones en la rutina hash (Vadim)
correccin en la aritmtica de construccin del mes en fecha/hora (Thomas)
correccin en la manipulacin del horario en zonas horarias en algunas
migraciones (Thomas, Bruce, Tatsuo)
timestamp sobrecargado al utilizar funciones standard (Thomas)
otras limpiezas del cdigo en rutinas de fecha y hora (Thomas)
\d de psql ahora es insensible a las maysculas (Bruce)
los comandos con \ de psql ahora pueden tener ; final (Bruce)
correccin de huecos de memoria en psql cuando se utiliza \g (Bruce)
correcciones mayores para la manipulacin final de la comunicacin con el
servidor (Thomas, Tatsuo)
Correcciones para el ensamblador de Solaris y los ficheros de
include (Yoshihiko Ichikawa)



pg_dumpall devuelve ahora el status correcto, corregida la portabilidad (Bruce)

Version 6.1

%@=3( N %4(W=?(*;=(2-,5/L(W_1%/%4%*@:<%4dJu#&4-,)0>%4d(7{:(*/1%#&(7/1:<(6@%=?%g+,%g`c(*=V-,/
`1S U4(Y8:;5=(7S
jZ(l_1%/%1%4-,4U:=(7/13(7`5^:-,@4(64%: m 4%:(*:-,#&(7X:<-,#&(7@%/1X2%/14i0>-,=0>+,(7y%+702/PQ3/:<
/1%:<-,`cK4(:<-,@U4( 85:;5=(7S*83/1:X02%PQ%X5=3:<%UJO@+,,;55/1U:<-,(7/1(*/&3UC5=?#&%:<54(
%+,-,4%0>/1-,:<(7/1:<(7@5=W(*/102-,#&% 4(u+,5Y:<-,@54(d4%:<5S2%%+,-,4% @+,,;55/1K(7/[#&-,0GS 3:
5+,L(Y_1%d=?(*`c-,%41i@%=V%_1%0>(7=02=?=?(*020>-,/1(7"=(7+,%:<-,`c%*6%
+,%
%+,-,4%
4(Y=(7;=(2-,5/K=V-,;5-,/1%+S
85:<;=(7W`ccS d-,/1:=4302(d3/]/13(*`ci5@:<-,#&-,e%4=6%+,:<(7=?/1%:-,`9\53(d3:<-,+,-,e%u%+,;=?-,:#& 1?
Dz> ST:u%+,;5=V-,:<#&5 -,/1:<=5430>(7/3/o0>#&@5=?:%#&-,(7/1:R%+,(*%:=?-,[(7/+,% =4(7/1%02-,/
4(+,d=(73+,:<%454(L+,%L02/13+,:%q0>3%4/1]+,%L02/13+,:%q0>5/1:<-,(7/1(i#&+,:<-,@+,(7U02%+,-,)0>%4=(7
#&+,:<-,@+,(7:<% N +,% m 4%/14R(7+h@:<-,#&-,e%4=u3/1%K(7+,(70>0>-,/B(7/B(7+l=4(7/r4(q(7`%+,3%0>-,5/1yzS
jZ(Y_1%/K#&54-,)0>%4L`c%=?-,%6@=3( N %"4(U=(7;5=(-,/]@%=?%
=4(7/1%=(7{@+,,0>-,:<%#&(7/1:<(U(7+=(73+,M
:%45XcJ&_1%0>(7=?+,&%-,/1(7/1- N +,( %q+,%
(7+,(70>0>-,5/1(*u4(7+^5@:<-,#&-,e%4=VS/1%
@50>%
@=3( N %
4(9=?(*;=(2-,5/r0>=V=(*@/14(*/r%K:<-,@ 4(q4%:u\3(q/r-,/1_1(7=(*/1:(7#&(*/1:(q4(7=?4(*/1%4.
m 02#&R@3/1:-,/1:<(7=?`%+,5 4(q:-,(*#&@yDX.J+,%L@.=?3( N %u\3(K-,/1`+,302=?%/r(*:<5:<-,@L(
C3(7=Ve*%/ (7{@+,-,0>-,:%#&(7/1:(Y02/ 2\9%]_^`^] J ?>c5\ S
%9-,/1:(*=V@.=?(*:%0>-,/4(+,5u(*@(*0>-,)0>%4=(7U4(i`c(*02:<=?(* m +,u0>5=0>_1(7:<(7d%+,=(24(745=4(i`%M
+,5=(*g%:<5#&-,0>y^@.%=(0>(d_1% N (7="0>%# N -,%49%+,;53/1% `(7eu:=?%I+,%I@=3( N %g4(d=(7;5=(-,/[=V-,M
=(4(?P<%/[(7:%/13(7`%i-,/1:(*=V@.=?(*:%0z-,5/1X
;-,/1%+,(7S
)0>_1(7=5Y%02:<3%+,(7
\a 3(U@3(*4(/1i(*=l0>5=?=(70:<%b ./expected/*.out
%I@=3( N %Y4(u=(7;5=(7-,/[0>5/c5%:<xLC%+,+,%/O%+1#&(*/15(7/[%+,;3/1%@+,%:%CQ=?#&%ST:K(
4( N (
%u+,%I4-,C(7=(2/10>-,%I(7/O+,%I-,#&@+,(*#&(7/1:%02-,/1(7Y4(
@s m yJ (7{@ m yJ %u+,Y#&(70>%/1-,#&5
4((71%+,-,e%0>-,5/q3:<-,+,-,e%4W@.%=V%+,%W0>/14-,0>-,5/1(*g4( N =(70>%=;Z%dJ93 N 02%=?;5%5S
u=(73+,:%4u!%+,(*%:=?-,5!Y(*/r+,%K@.=?3( N %K%+,(*%:=?-,%K4( N (7=V%/o@= N 02%=\3(q+,%O@=3( N %
!%+,(7%*:=?-,%!=?(*3+,:<%(
!C%+,+,-,4%7!$XG@3(*q\53(
+,I:<(7:4(
=?(*;=(2-,5/O(d(7`%+,%*/]0>/]3/]-,#&M
@+,( 4-,C<CS>jG-,/[(7# N %=;55XZ+,%L@=3( N %L!%+,(7%:<5=?-,%!h/1O@%=(20>(@=4302-,="=?(*3+,:<%4Y%+,(7%:<=V-,
(7/q#&-5#&\3-,/1%d4(Y@=?3( N % m -,/c3{.wG;0>0GwZ-,xyzS

Migracin a v6.1

T:%W#&-,;5=?%0>-,5/=(7\3-,(7=(l3/`5+,0>%4
02#&@+,(*:d4(6+,% N %(l4(64%:<5^1S WJd3i=(7:%3=?%70>-,/
(7/q+,% N %(4(Y4%:6(7/ 1S 5S
\3(*+,+,5Y\3( \3-,(7=?%/[#&-,;5=V%=64(74( `(7=?-,5/c(7Y-,/1-,0>-,%+,(7Y1S 64( N (7=?,%*/[@=?-,#&(7= %0>:3%+-,M
e%=(U%
1S tX7@=\3(U(7+ZC=V#&%:i4(%+,-,4%
4(UFI}L8 $ (U#&(?P<=?i(7/ +,%d`(7=?-,5/ 1S 5S

Lista Detallada de Cambios


Correccin de errores
-------------comprobaciones en la longitud empaquetada en rutinas de la librera
parche de prioridad en el gestor de bloqueos
comprobaciones para sub/sobrecarga de float8 (Bruce)
correcciones en cruces de mltiples tablas (Vadim)
correccin de un aborto de SIGPIPE (Darren)



correcciones sobre objetos grandes (Sven)


se permite que los ndices btree manipulen NULL,s (Vadim)
correcciones en timezone (DArcy)
select SUM(x) puede devolver NULL cuando no hay filas (Thomas)
se corrigen errores del optimizador interno y del ejecutor (Vadim)
se corrigen problemas cuando bucles internos en < o <= no tienen filas (Vadim)
se previene la re-inversin de clusulas join de ndices (Vadim)
corregida la clausula join para mltiples tablas (Vadim)
corregidos hash y hashjoin para vectores (Vadim)
correccin en btree para el tipo abstime (Vadim)
correcciones para objetos grandes (Raymond)
corregidos huecos en el buffer en ndices hash (Vadim)
corregido rtree para el uso de barridos internos (Vadim)
correcciones esenciales para el uso de barridos internos, limpiezas (Vadim, Andrea)
se impide la colocacin de buffers locales innecesarios (Vadim, Massimo)
corregidos huecos de buffers locales en abortos de transacciones (Vadim)
corregidos huecos de memoria del gestor de ficheros, limpiados (Vadim, Massimo)
corregidos huecos de memoria del gestor de almacenamiento (Vadim)
corregido que btree duplique la manipulacin (Vadim)
corregida la reencarnacin de tuplas borradas causada por vacuum (Vadim)
corregido SELECT varchar()/char() INTO TABLE hace campos de longitud cero (Bruce)
corregidas muchos huecos de memoria de psql, pg_dump y libpq utiliando Purify (Igor)

Mejoras
--------estadisticas de optimizacin de atributos (Bruce)
nuevo cdigo de carga masivo btree mucho ms rpido (Paul)
aadido BTREE UNIQUE para cdigo de carga masiva (Vadim)
nuevo aspecto del cdigo de depuracin (Massimo)
cambios masivos en libpq++ (Leo)
el nuevo optimizador GEQO acelera la optimizacin en tablas multi-tabla (Martin)
nuevo mensaje de alarma para inserciones no nicas en claves nicas (Marc)
update x=-1, sin espacios, ahora es vlido (Bruce)
se elimina la manipulacin de identificadores sensibles a las mayusculas (Bruce, Thomas, Dan)
la depuracin del servidor ahora imprime un rbol agradable (Darren)
nuevas funciones de caracteres de Oracle (Edmund)
nuevas funciones de palabra clave con texto plano (Dan)
se cambian a mensajes diferentes no tal clase y insuficientes privilegios (Dan)
nueva funcin ANSI timestamp (Dan)
nuevos tipos ANSI Time y Date (Thomas)
mueve grandes grupos de datos en el servidor (Martin)
ndices btree multicolumna (Vadim)
nuevo comando SET var TO valor (Martin)
status de transaccin de actualizacin en las lecturas (Dan)
nuevos ajustes locales para tipos de caracteres (Oleg)
nuevo generador de series de nmeros SEQUENCE (Vadim)
ahora es posible GROUP BY una funcin (Vadim)
reorganizada la prueba de regresin (Thomas, Marc)
nuevos pesos de operaciones en el optimizador (Vadim)
nueva opcin psql \z grant/permit (Marc)
nuevo tipo de datos MONEY (DArcy, Thomas)
incrementada la velocidad de comunicacin por el socket tcp (Vadim)
nueva opcin VACUUM para estadisticas de atributos, y para ciertas columnas (Vadim)
muchas potenciaciones de tipos geomtricos (Thomas, Keith)
Pruebas de regresin adicionales (Thomas)
nuevas variables de estilo de datos (Thomas, Vadim, Martin)



ms operadores de comparacin para ordenar tipos (Thomas)


nuevas funciones de conversin (Thomas)
no ms formato btree compacto (Thomas)
ser permite a pg_dumpall preservar la propiedad de las bases de datos (Bruce)
nuevas variables SET GEQO=# y R_PLANS (Vadim)
el viejo optimizador (!GEQO) puede utilizar planes del lado derecho (VADIM)
merjorado el control de tipos en el traductor de SQL (Bruce)
nuevos comandos SET, SHOW y RESET (Thomas, Vadim)
nueva opcin USER \connect basededatos
nueva opcin destroydb -i (Igor)
nuevos comandos de psql \dt y \di (Darren)
SELECT "\n" ahora genera nueva lnea (A. Duursma)
nuevas funciones de conversin de la geometra desde el formato anterior (Thomas)
Cambios en el arbol fuente
----------------nuevo guin de configuracin (Marc)
aadida la opcin de configuracin de lectura de lnea (Marc)
nuevos ficheros de plantillas especificas del Sistema Operativo (Marc)
ya no se necesita editar Makefile.global (Marc)
se reordenan los ficheros de include (Marc)
parche para nextstep (Gregor Hoffleit)
se elimina cdigo especfico de WIN32 (Bruce)
se elimina la opcin -e de postmaster, se mantiene slo la opcin postgres -e (Bruce)
se mezcla el cdigo de libreras duplicadas en clientes y servidores (Martin)
ahora trabaja con eBones, Kerberos internacional (Jun)
ms soporte a libreras compartidas
c++ incluye limpieza de fichero (Bruce)
Aviso sobre flex errneo (Bruce)
Correcciones en la portabilidad para DG-UX, Ultrix, Irix, AIX.

Version v6.0

\3(*+,+,5Y\3( \3-,(7=?%/[#&-,;5=V%=W4%:I4(*4(u`(7=?-,/1(7Y@=(7`-,%I4(u8:<;5=?(*U/1(*0>(7-,:%=?/
_1%0>(7=3/K`+,0>%4wG=(70>3@(2=V%02-,/"S

Migracin desde v1.09 a v6.0

T:%u#&-,;5=V%0>-,/[/1(70>(7-,:<% 3/]`c+,0>%4q0>5#&@.+,(7:q4(u+,% N %(d4(


4%:I1S t J 3/1% =(70>3@(2M
=V%02-,/q4(+,g4%:W(*/q1S 1S

Migracin desde versiones previas a v1.09 hasta v6.0

kL3-,(*/1(7l\3-,(7=?%/9#&-,;5=?%=4(74(g+,%l-,/1-,0>-,%+,(7l`(7=?-,5/1(*6cS 4( N 7( =?,%*/9%0>:3%+,-,e%=V(W@=?-,#&(7M


=&%K+,%K`c(*=V-,/r1S tX1J5%O\3(q(7+hC=V#&%:R4(9%+,-,4%O4(9FY}8 $ (9#&(VPQ5=?n%O@%=?:<-,=U4(q+,%
`(7=V-,/ 1S 5S



Lista Detallada de Cambios


Correccin de errores
-------------Error ALTER TABLE - corriendo el proceso postgress se necesita re-leer la definicin
de la tabla.
Se permite que vacuum se ejecute sobre una tabla o sobre la base entera (Bruce)
Correcciones en tablas.
Corregido una sobre-escritura en tabla en escritura de memoria (Kurt)
Corregido un error en btree elusivo en rango/no en rango (Dan)
Correciones en los ndices hash para algunos tipos como time y date.
Correcciones para la explosin del tamao de pg_log.
Corregidos los permisos en lo_export()(Bruce).
Corregidas lecturas no inicializadas de memoria (Kurt).
Corregido un error ALTER TABLE ... char(3) (Bruce)
Corregidas una pocas lagunas de memoria pequeas.
Corregida la manipulacin de EXPLAIN de opciones y cambiado el nombre de opcin del
path completo.
Corregida la salida de permisos de grupos de acl
Lagunas en la memoria (localizadas y eliminadas con herramientas como Purify (Kurt))
Mejoras menores de las reglas del sistema.
Se corrige NOTIFY
Nuevas instrucciones para ejecutar-comprobar.
Repaso general del cdigo del analizador/traductor para informar correctamente de los
errores e incrementar la velocidad.
Pg_dump -d ahora manipula correctamente los NULL (Bruce)
Se evita que SELECT NULL mate el servidor (Bruce)
Se informan adecuadamente erores cuando las columnas de INSERT ... SELECT no casan.
Se informan adecuadamente errores cuando se estn insertando nombres de columna que no
son correctos.
Psql \g nombrefichero ahora trabaja (Bruce)
Corregido un problema de psql con instrucciones mltiples en una lnea con mltiples
salidas.
Eliminados oids de sistema duplicados
SELECT * INTO TABLE . GROUP/ORDER BY daba un error de enlace si la tabla exista (Bruce)
Varias correciones a consultas que mataban el servidor
Las comillas al principio de una cadena a insertar produce un error (Bruce)
El lanzamiento de una consulta vaca ahora devuelve un status de vaco, no slo
la consulta " " (Bruce)
Mejoras
--------Se aade una pgina de manual para EXPLAIN (Bruce)
Se aade la capacidad de indice UNIQUE (Dan)
Se aade control de acceso vigilando nombre_host/usuario, ms que slo nombre_host y usuario.
Se aade el sinnimo != para =E (Bruce)
Se permite "select oid,* from table"
Se permite a ORDER BY especificar columnas por nmero, o por tabla.columna que no
son alias (Bruce)
Se permite el comando COPY desde la apliacin cliente (Bryan)
Se permite a GROUP BY que utilice alias de nombres de columnas (Bruce)
Se permite la compresin actual, no slo en la misma pgina (Vadim)
Se permite la opcin de instalacin-configuracin para auto-ayudar a todos
los usuarios locales (Bryan)



Se permite a libpq que distinga entre textos con valor y nulo (Bruce)
Se premite a los usuarios diferentes de postgres con privilegios de createdb
ejecutar destroydb.
Se permiten restricciones sobre quin puede crear funciones C (Bryan)
Se permiten restricciones sobre quien puede hacer COPY del servidor (Bryan)
Se pueden reducir tablas, pg_timer y pg_log (Vadim & Erich)
Cambiado el nivel de debug 2 para imprimir slo consultas, cambiado el formato de
la cabecera del debug (Bruce)
Se cambia la representacin de las constantes decimales desde float4 a float8(Bruce)
Ahora se fija el formato de fecha europeo cuando se arranca el postmaster.
Se ejecutan las funciones con el nombre en minscula si no se encuentran
con el nombre exacto.
Las correcciones del procesado de agregados/GROUP, permiten
select sum(func(x),sum(x+y) from z
Gist est ahora incluido en la distribucin (Marc)
Autenticacin Idendde usuarios locales (Bryan)
Se implementa el calificador BETWEEN (Bruce)
Se implementa el calificador IN (Bruce)
Libpq tiene PQgetisnull()(Bruce)
Mejoras de Libpq++
Nuevas opciones en initdb(Bryan)
Pg_dump permite volcar los oids (Bruce)
Pg_dump crea los ndices tras cargar las tablas, por velocidad (Bruce)
Pg_dumpall vuelca todas las bases de datos, y la tabla de usuarios.
Adiciones a Pginterface para los valores NULL (Bruce)
Se previene la ejecucin de postmaster como root
\h y \? son ahora legibles (Bruce)
Psql permite punto y coma escapados (\;) en cualquier parte de la lnea (Bruce)
Se cambia el promp de comandos de Psql para lneas intermedias en consultas
o en lneas entre comillas (Bruce)
Las variables char(3) de Psql se muestran ahora como (bp)char en salidas \d (Bruce)
El cdigo de retorno de Psql es ahora ms ajustado (Bryan?)
Se actualiza la sintaxis de la ayuda de Psql (Bruce)
Se re-visita y corrige vacuum (Vadim)
Se reduce el tamao de las diferencias de regresin, se elimna la
diferecia del nombre de la zona horaria (Bruce)
Se eliminan parmetros de tiempo de compilacin para capacitar
distribuciones binarias (Bryan)
Gestin inversa de mscaras HBA (Bryan)
Autenticacin segura de usuarios locales (Bryan)
Se incrementa la seguridad de vacuum(Vadim)
Vacuum ahora tiene opcin VERBOSE (Bruce)
Cambios en el rbol fuente
----------------Todas las funciones tienen ahora prototipos que se comparan contra las llamadas.
Se permite inhabilitar facilmente las declaraciones en Makefile.global(Bruce).
Se cambian las constantes oid utilizadas en el cdigo para los nombres de #define
Se desacoplan las defines de sparc y solaris(Kurt)
gcc -Wall compila limpiamente con avisos (warnings) slo a partir de construcciones
no corregidas.
Gran reorganizacin/reduccin del fichero de include (Marc).
Make ahora para en fallos de compilacin(Bryan)
Reestructuracin del Makefile(Bryan, Marc).
Se mezcla bsdi_2_1 con bsdi(Bruce)
Se elimina el programa MonitorSe cambia el nombre de Postgres95 a PostgreSQL
Nuevo fichero config.h(Marc, Bryan)
PG_VERSION se fija ahora a 6.0 y lo utiliza el postmaster.
Adiciones a la portabilidad, incluyendo Ultrix, DG/UX, AIX, y Solaris



Se reduce el nmero de #defines, se centralizan las #defines


Se eliminan OIDS duplicadas en las tablas del sistema(Dan)
Se elimina informacin duplicada en el catlogo del sistema o errores de informe(Dan)
Se eliminan muchas #defines especficas del sistema operativo.
Generacin/localizacin del fichero de objetos reestructurada(Bryan, Marc)
Reestructuradas las localizaciones de ficheros especficas de la
migracin(Bryan, Marc)
Corregidas variables no utilizadas/no inicializadas.

Version v1.09

K-,(*/1:X1_1(*#&5
@%=?%74O4(L=(7;5-,:<=?%=W+,5
02%# N -,5U4(74(1S L%icS t1S +,;3/1d4( +,5
0>%# N -,56+,-,:%46(7/q1S
(*:<% N %/qJ5%
-,/10>+,3-,4g(7/ +,%6`c(*=V-,/1(761S 5S
%
1S t1S

Version v1.02
Migracin de v1.02 a v1.02.1

\35:<(7/1(*#&5I3/O/13(7`9)02_1(*=?i4(
#&-,;=?%0>-,/]@%=?%d1S 5S 1ST:(
(7+50>%# N -,94(
0>@J5J
3/ ;3-,/ @%=V%U02/1`(7=?:-,=h+,56%/1:<-,;3g)0>_1(7=5"%0>-,-S
Nota: Las siguientes notas son para el beneficio de los usuarios que quieren migrar
bases de datos desde postgres95 1.01 y 1.02 a postgres95 1.02.1.
Si est usted arrancando con postgres95 1.02.1 de nuevas y no necesita migrar una base
de datos antgua, no necesita leer lo que sigue.

8%=V%Y%0>:<3%+,-,e%7=^%/1:<(7=?-,=?(* N %(*l4(Y4%:l@5:<;=(7tv`(7=V-,/1(7l1S 1S I%U+,%`c(*=V-,/


1S *1S X(=(7\53-,(7=(7/q+,W-,;53-,(*/1:(*g@%a
1S9 =?=V%*/1\3(
3/ /13(7`i@:<#&%:(*=l1S S
1S9 1%4-+,%l/13(7`%"CD3/10>-,/1(7"Ji@(7=?%4=("-,/10>+,3-,464(1S *1S U% N %(7l4(Y4%:"1S *
KcS 1S>T:< (_1%0>( (?P<(70>3:<%/14 (7+1/13(*`cK(7=?`c-,4=W1S *1S L0>/1:=?%L3R@=@-,% N %(d4(
4%: 1S qn1S *XJ%@+,-,0>%/14&+,%0>/13+,:<% -,/10>+,3,4%%+^)/1%+l4( (*:<( )0>_1(7=^SGjG(
@3(74(I_1%0>(7=^(7:#&3JiC%0>-,+,#&(7/1:<(Y0>/q@\+SzjG-Z3 N %(I4(Y4%:"1S 7UL1S 7
(I+,+,%#&%
!:(7:<4 N !X5J[_1%90>=V:<%4K+,5
02#&%/14d4(7+.)/1%+^4((7:(L)0>_1(7=]J]+,5
_1%i%+,`%4](*/
%44CQ3/10GS \+a
% psql testdb -f addfunc.sql

\3(*+,+,5 \3(q(7:*/r%0>:3%+,-,e%74 N %(7u4(94%:<u1S q N :(7/14=?/3/r%`-,n0>3%/14


(VPQ(70>3:(7/B+,%i4i+,:<-,#&%L-,/1:<=3020>-,/1(7i(7/B(7+")02_1(*=5X@3(*LJ5%[(7:/B@=(7(7/1:<(7(7/
1S 5S~ i_1%JL#&:-,`9@%=?%
@=(70>3@%7=?(S

Procedimiento de Volcado/Recarga Procedure

jZ-G(7:d-,/1:<(7/1:%/14i=(70>%=$;5%=3/ @;43#&@Oi0>@J9:<% N +,(7/1%#&(U:<i:<453:<Z(7/ #&49:<(7{G:<


;(*/1(7=?%4h02/q3/1%U`(7=?-,5/q@.=?(*`c-,%X*/1(70>(7-,:<%=?(VPQ(70>3:<%=(7+Z;53-,5/q4(I(74K-,;53-,(7/1:(I N =(
(7+Z)0>_1(7=L jGFYfDf%/1:<(7"4(0>%=;Z%=?+,L(*/K+,% N %(Y4(4%:SzT+ZC5=?#&%:<L%/1:<-,;53i3:-,+,-,e% N %UX



0>5#&9(*/14M5CM4%:<%7X#&-,(7/1:<=?%I\3(
(7+5/13(7`q#&%=0>%74="4(
(7/14MDCM4.%:<% m )/K4(
+,5W4%:<5y
(76d S $SG%# N -,7/1X+,%"02%4(7/1%"`%0>,%"(U0>%=;%/q%_15=?%
0>5#[9d(7/ +,3;%=l4(0>#&9~ gS
E(7%U+,%d@;-,/1%
4(7+Z#&%/13%+4(0>@J9@%=V%
 N :<(7/1(7=4(7:<%+,+,(7602#&@+,(*:S
sed s/^\.$/\\./g

in_file

out_file

jZ-(*:<93:(74o0>%=;5%7/14]3/1% 0>@-,% N -,/1%=?-,%9#&


`-,(VPQ%X[3/1%90>@-,%9\3(i/1[@=02(*4(4(
:43:X/1i_1%J90>%=?%70>:<(7=l(*/14M5CM4.%:%XJi@=l(7+,+,L/1i(U/1(70>(7-,:<%
0>5/1`(7=?-,5/"S
- following lines added by agc to reflect the case-insensitive
- aadidas las siguientes lneas por agc para que no sea sensible a las mayusculas
- regexp searching for varchar (in 1.02), and bpchar (in 1.02.1)
- regexp buscando varchar (en 1.02) y bpchar (en 1.02.1)
create operator ~* (leftarg = bpchar, rightarg = text, procedure = texticregexeq);
create operator !~* (leftarg = bpchar, rightarg = text, procedure = texticregexne);
create operator ~* (leftarg = varchar, rightarg = text, procedure = texticregexeq);
create operator !~* (leftarg = varchar, rightarg = text, procedure = texticregexne);

Lista Detallada de Cambios


Mantenimiento y desarrollo del cdigo fuente.
* equipo de voluntarios extendido por todo el mundo.
* el rbol fuente se encuentra ahora en CVS en ftp.ki.net
Mejoras
* psql (y la librera libpq que subyace) tiene ahora muchas ms opciones
para dar forma a sus salidas, incluyendo HTML
* pg_dump ahora extrae el esquema y/o los datos, con muchas mejoras para
asegurar que se complete.
* se utiliza psql en lugar de monitor en los guiones de rdenes de administracin.
monitor ser despreciado en la siguiente versin.
* mejoradas las funciones de fecha/hora
* la comparacin/insercin/actualzacin de NULL corregidos/potenciados.
* la librera y el interprete de rdenes de TCL/TK corregidos para que trabajen
tanto con tcl7.4/tk4.0 como con tcl7.5/tk4.1
Errores corregidos (anque demasiados numerosos para mencionarlos)
* ndices
* gestin de almacenamiento
* comprobacin de punteros a NULL antes de dereferenciarlos
* Correcciones en el Makefile.
Nuevas Migraciones
* aadida la migracin a SolarisX86
* aadida la migracin a BSDI 2.1
* aadida la migracin a DGUX



Version v1.01
Migracin desde v1.0 a v1.01

%g-,;53-,(7/1:<(7/15:<%I5/[@%=V% N (7/1(*)0>-, 4(


+,U33%=?-,5g\3( \3-,(*=(7/]#&-,;5=?%= N %(7I4(
4%:<5"4(@.5:;5=(7tv
1S
%
@:<;5=?(*tv
1S *
jZ-(7:Y3:(*4K%=?=V%*/10>%/14 4(g/13(7`%l0>5/9@:;5=(7tvY1S IJ/1/c(70>(7-,:%#&-,;=?%= N %(7h4(
4%:<5"%/1:<(7=?-,5=(7X/1L/1(70>(7-,:%d3:(*4O+,(7(7=+,9-,;53-,(7/1:(5S
8%=V%Y\3(@.5:;5=(7tv`c(*=V-,/q1S YCD3/10>-,/1(0>5/ N %(*64(I4%:<5l0>=(7%41%"0>5/q@:;5=(7tv
`(7=V-,/ 1S X7(U=(7\53-,(*=(/ +,g-,;3-,(*/1:(7W@%a
1S95- PQ(u+,%u4(*)/1-,0>-,/]4(
~ ABT YZuT~ *( /]=0GwZAB%*'(7)+,(S ;+, N %+c%udJ }fD ~ ABTM
T~ %
cS
1S9 (*02-,4%
-\53-,(*=(3:(74]%3:<(7/1:<-,02%02-,/ N %%4.%d(*/q(7+5=4(*/1%4=zS
%1S9jG-+,d_1%0>(7X4( N (63:<(74i0>=(7%*=3/L)0>_1(7=
+,+,%#&%4
!@.;_ N %!(7/L3i4-,=(0>:<5=?-,d4(
4%:4("/1-,`(7+73@(7=?-,5= m :<,@.-,02%#&(*/1:(l(7+7`c%+,5=c4(636e8uI y?S$=?0GwG+,- N @\hwG@;_ N %
#&3(7:=?%d3/K(?P<(*#&@+,i4(-,/1:<%{-,S
N SujG-1/1 \3-,(7=(d%3:(*/1:-,0>%0>-,5/ N %%4%u(7/](*+15=4(*/1%4.=<X@3(74(u3:<(74R0>#&(7/1:<%=
+,%d+,,/1(7%
HBA = 1

(7/ =0GwGA%'(*)+,(5S ;+, N %+


FY#&@=3( N (O\3(O+,%]%3:<(7/1:<-,02%02-,/ N %%4.%[(*/B(7+"5=4(*/1%4.= (K_1%[%02:<-,`%4
@5=l4(7C(70>:XJq-5/19-,;3(
+,g@%g L&%/1:(7=?-,=(7X(7+553:<MDCM:_1(*M N { 1S 7
/19+,(U@(7=?#&-,:<-,=V
0>/1(70>:%=h%
+,% N %(7"4(4%:WcS
1S9FI5#&@.-,+,(U(U-,/1:%+,(Y1S X*@(7=L~q}(VPQ(70>3:<(U(7+Z@%i-,/1-,:<4 N S
1S9 /1:<(7l4(Y_1%02(*=/1-,/1;53/1%
:=?%
0>%X7@%=(g3q@5:<#&%:(7=1S XJL=?(*@.%+,4.(Y3 4-,=?(*02:<=V-,
e8uI(7{-,:<(7/1:<(S
v1S95- PQ(U3]`%=?-,% N +,(Y4(U(7/1:<5=?/1i8u I %
3 N %(*64(Y4%:<561S X7@.(7=L)GPQ(7+,%d4(C=?#&%
\3(U+,5 N -,/1%=?-,561S (7%/ +,56\3(
(3:-+,-,e%/"S
1S9AB4-,)\3(U(7+Z)0>_1(7=%e8u I]wG8uET|"jZf}~ 4(v1S U%
v1S
51S9 =?=V%*/1\3(
3/ /13(7`i@:<#&%:(*=l1S 
x1S9 1%4% +,%/13(7`%YC3/102-,/1(7JO5@(*=V%45=(2-,/102+,3-,4%U(*/&1S   N =( N %(7Y4( 4%:<5
1S 1SVT:<i(U_1%0>((?P<(*023:<%/14(7+/13(7`i(7=?`c-,45=1S 02/1:<=V%d3O@=5@-,% N %(4(4%:
1S XcJn%@+,-,0>%/14&+,%u0>/13+,:<% 3/1-,4% JR%+,`%4%u(7/o(*+h)02_1(*=?&cS *:1S cS \+SZjG(
@3(74(_1%02(*=hC%0>-,+,#&(7/1:<(4(*4(Y@\+SjZ-3 N %(4(4%:W(+,+,%#[%d!:(7:<4 N !2a
% psql testdb -f 1.0_to_1.01.sql

J9(7/1:<5/10>(76(VPQ(70>3:<(U+,56-,;3-,(7/1:<(7W02#&%/14 m 0>@-,%=J9@(*;%=4(74(Y%\3,yza
- funciones incluidas aadidas que son nuevas en 1.01
create function int4eqoid (int4, oid) returns bool as foo
language internal;
create function oideqint4 (oid, int4) returns bool as foo
language internal;
create function char2icregexeq (char2, text) returns bool as foo
language internal;
create function char2icregexne (char2, text) returns bool as foo
language internal;
create function char4icregexeq (char4, text) returns bool as foo



language internal;
create function char4icregexne (char4, text) returns bool as foo
language internal;
create function char8icregexeq (char8, text) returns bool as foo
language internal;
create function char8icregexne (char8, text) returns bool as foo
language internal;
create function char16icregexeq (char16, text) returns bool as foo
language internal;
create function char16icregexne (char16, text) returns bool as foo
language internal;
create function texticregexeq (text, text) returns bool as foo
language internal;
create function texticregexne (text, text) returns bool as foo
language internal;
- funciones incluidas aadidas que son nuevas en 1.01
create operator
create operator
create operator
create operator
create operator
create operator
create operator
create operator
create operator
create operator
create operator
create operator
ticregexne);

= (leftarg = int4, rightarg = oid, procedure = int4eqoid);


= (leftarg = oid, rightarg = int4, procedure = oideqint4);
~* (leftarg = char2, rightarg = text, procedure = char2icregexeq);
!~* (leftarg = char2, rightarg = text, procedure = char2icregexne);
~* (leftarg = char4, rightarg = text, procedure = char4icregexeq);
!~* (leftarg = char4, rightarg = text, procedure = char4icregexne);
~* (leftarg = char8, rightarg = text, procedure = char8icregexeq);
!~* (leftarg = char8, rightarg = text, procedure = char8icregexne);
~* (leftarg = char16, rightarg = text, procedure = char16icregexeq);
!~* (leftarg = char16, rightarg = text, procedure = char16icregexne);
~* (leftarg = text, rightarg = text, procedure = texticregexeq);
!~* (leftarg = text, rightarg = text, procedure = tex-

Lista Detallada de Cambios


Incompatibilidades:
* 1.01 es compatible hacia atrs con 1.0 si el usuario sigue los pasos
marcados en el fichero MIGRATION_from_1.0_to_1.01.
En caso contrario, 1.01 no es compatible con la base de datos 1.0
Potenciaciones:
* se aade PQdisplayTuples() a libpq y se modifican monitor y psql para que lo utilicen.
* se aade la migracin a NeXT (requiere la implementacin de SysVIPC)
* se aade la sintaxis CAST .. AS ...
* se aaden las palabras clave ASC y DESC
* se aade internal como un posible lenguaje para CREATE FUNCTION
las funciones internas son funciones en C que se han linkado estticamente en el
servidor de postgres.
* se ha aadido un nuevo tipo "name" para identificadores de sistema (nombres de tablas,
nombres de atributos, etc.) Esto reemplaza al viejo tipo char16.
La longitud del nombre se fija en la definicin (#define)
NAMEDATELEN de src/Makefile.global
* un manual de referencia legible que describe el lenguaje de consulta.
* se ha aadido un control de acceso basado en el ordenador. Se utiliza un fichero de
configuracin ($PGDATA/pg_hba) para almacenar los datos de configuracin.



Si el control de acceso basado en el ordenador no es deseable, comente


HBA=1 en src/Makefile.global.
* cambiada la manipulacin de reges para hacerla uniforme con el cdigo regex de
Henry Spencer sin mirar la plataforma. Es cdigo regex est incluido en la distribucin.
* aadidas funciones y operadores para expresiones regulares insensibles a las mayusculas.
Los operadores son ~* y !~*.
* pg_dump utiliza COPY en lugar de un bucle de SELECT para incrementar el rendimiento.
Errores corregidos:
* corregido un error del optimizador que provocaba volcados de memoria cuando
se utilizaban llamadas a funciones en comparaciones en la clusula WHERE.
* se cambian todos los usos de getuid a geteuid se modo que se utilicen los
uids efectivos.
* psql devuelve ahora status distintos de cero en los errores cuando se usa c
* se aplican los parches pblicos 1-14

Version v1.0
Lista Detallada de Cambios
Cambio en el Copyright:
* Se ha aflojado el copyright de Postgres 1.0 para que sea
libremente modificable para cualquier propsito. Lea por favor el fichero
COPYRIGHT.
Gracias al Profesor Michael Stonebraker por hacerlo posible.
Incompatibilidades:
* los formatos de fecha tienen que ser MM-DD-YYYY (o DD-MM-YYYY si est usted utilizando
EUROPEAN STYLE). Esto sigue las especificaciones SQL-92.
* "delimiters" es ahora una palabra clave.
Potenciaciones:
* se ha aadido la sintaxis LIKE de sql
* el comando copy ahora recibe una especificacin opcional USING DELIMITER.
Los delimitadores pueden ser cualquier cadena de un nico carcter.
* se ha aadido la migracin a IRIX 5.3.
Gracias a Paul Walmsley y otros.
* se ha actualizado pg_dump para trabajar con una nueva libpq.
* se ha aadido \d a psql
Gracias a Keith Parks
* se ha incrementado el rendimiento de regexp para arquitecturas que utilizan
regex de POSIX regex debido a la memorizacin (caching) de patrones precompilados.
Gracias a Alistair Crooks
* una nueva versin de libpq++
Gracias a William Wanders



Errores corregidos:
* se pueden especificar usuarios arbitrarios en el guin (script) createuser.
* ya funciona \c para conectar a otras bases de datos.
* se ha corregido una mala entrada en pg_proc para float4inc()
* los usuarios con el campo usecreatedb fijado, ya pueden crear bases de datos
sin ser el superusuario.
* se eliminan las entradas del control de acceso cuando la entrada ya no tiene
ningn permiso.
* corregida la implementacin de formatos de fecha/hora no portables.
* aadidas marcas (banderas=flags) kerberos en src/backend/Makefile
* libpq ya trabaja con kerberos.
* se han corregido errores tipogrficos en el manual de usuario.
* btree con ndices mltiples no ha trabajado nunca, pero ahora le decimos que
no trabajan cuando intenta utilizarlo.

Postgres95 Beta 0.03


Lista Detallada de Cambios
Cambios incompatibles:
* BETA-0.3 ES INCOMPATIBLE CON BASES DE DATOS CREADAS CON VERSIONES PREVIAS
(debido a cambios en el catlogo del sistema y a cambios en la estructura de los ndices).
* las dobles comillas (") se desprecian como un carcter de limitacin para cadenas literales;
necesitars convertirlas a apostrofes ().
* el nombre de los agregados (como int4sum) se renombran de acuerdo con el SQL
estndar (por ejemplo sum).
* la sintaxis CHANGE ACL se reemplaza por la sintaxis GRANT/REVOKE.
* los literales flotantes (como 3.14) son ahora del tipo float4 (en lugar del float8
de versiones anteriores); deber realizar un transformado de tipos si su instalacin
depende de que siga siendo float8.
Si rechaza realizar el transformado de tipos, y asigna un literal flotante a un
campo de tipo float8, es posible que los valores almacenados sean incorrectos!
* se ha recompuesto totalmente LIBPQ para que las aplicaciones cliente (frontend) puedan
conectarse a multiples servidores (backend).
* el campo usesysid de pg_user se ha cambiado de int2 a int4 para permitir mayores
rangos de identificadores de usuarios de Unix.
* los portes a los sistemas operativos netbsd/freebsd/bsd se han consolidado en un
unico port derivado de BSD44. (Gracias a Alistair Crooks).
Cumplimento del estndar SQL (los siguientes detalles cambian para hacer a posgres95
ms ajustado al estndar SQL-92):
* se han incluido los siguientes tipos SQL: smallint, int(eger), float, real,
char(N), varchar(N), date y time.
Los siguientes son alias de los tipos postgres existentes:



smallint -> int2


integer, int -> int4
float, real -> float4
char(N) y varchar(N) se han implementado como tipos text truncados.
Adems, char(N) rellena a blancos el espacio no utilizado.
* se utiliza el apstrofe () para limitar cadenas literales; " (adems de \) se soportan
para permitir insertar un nico lmite en una cadena.
* se utilizan los nombres de agregados de SQL estndar (MAX, MIN, AVG, SUM, COUNT)
(Tambin, se pueden ahora sobrecargar los agregados, es decir, puede usted definir
su propio agregado MAX para disponer de un tipo definido por el usuario).
* se ha eliminado CHANGE ACL. Se aade la sintaxis GRANT/REVOKE.
- Se pueden dar privilegios a un grupo utilizando la palabra clave "GROUP".
Por ejemplo:
GRANT SELECT ON mi_tabla TO GROUP mi_grupo;
La palabra clave PUBLIC tambin est soportada para autorizar a
todos los usuarios.
Slo de pueden otorgar o retirar privilegios a un usuario o grupo cada vez.
"WITH GRANT OPTION" no est soportado. Slo los propietarios de clases pueden
cambiar el control de acceso.
- El control de acceso de defecto es autorizar a los usuarios slo a leer.
Deber usted autorizar explcitamente el acceso en insercin/actualizacin a
los usuarios. Para cambiar esto, deber modificar la lnea
src/backend/utils/acl.h
que define ACL_WORLD_DEFAULT
Errores corregidos:
* se ha corregido el error segun el cual los agregados de tablas vacas no
trabajaban adecuadamente. Ahora, los agregados ejecutados sobre tablas vacas
devuelven las condiciones iniciales de los agregados. As, COUNT de una tabla
vaca devuelve correctamente el valor 0. MAX/MIN de una taba vaca devolver
una tupla de valor NULL.
* se permite el uso de \; dentro del monitor.
* el mecanismo de notificacin asincrono LISTEN/NOTIFY ya trabaja.
* NOTIFY en el cuerpo de las reglas de accin ya trabaja.
* ya funcionan los ndices hash, y los mtodo de acceso en general deberan
funcionar mejor. La creacin de grandes ndices btree debera ser mucho ms
rpida. (Gracias a Paul Aoki).
Otros cambios y potenciaciones:
* se aade la instruccin EXPLAIN utilizada para analizar el plan de ejecucin
de una consulta. (es decir: "EXPLAIN SELECT * FROM EMP" muestra el plan de
ejecucin de la consulta).
* los mensajes WARN y NOTICE ya no muestran tiempo de ejecucin en s mismos.
Para activar el tiempo de ejecucin en los mensajes de error, descomente en
src/backend/utils/elog.h:
la lnea
/* define ELOG_TIMESTAMPS */
* En una violacin del control de acceso, se dar el mensaje
"Either no such class or insufficient privilege"
Este es el mismo mensaje que se devuelve cuando no se encuentra una clase. Esto



disuade a los usuarios no privilegiados de sospechar la existencia de clases


privilegiadas.
* se han hecho algunos cambios adicionales en el catlogo del sistema que no son
visibles para el usuario.
cambios en libpgtcl:
* se aade la opcin -oid al comando de tcl "pg_result". pg_result oid devolver
el oid de la ltima tupla insertada. Si el ltimo comando no fue una insercin,
pg_result -oid devuelve "".
* el interface de objetos largos est utilizable como comandos tcl pg_lo*:
pg_lo_open, pg_lo_close, pg_lo_creat, etc.
Potenciaciones de la Portabilidad y Nuevas Migraciones:
* Se han limpiado problemas con flex/lex. Ahora, se debera poder utilizar flex
en lugar de lex en cualquier plataforma. Ya se harn asumciones sobre la forma
de analizador sintctico elegido basadas en la plataforma que utilice.
* Ahora se soporta la migracin a Linux-ELF. Se han probado varias configuraciones:
Se sabe que la siguiente configuracin funciona:
kernel 1.2.10, gcc 2.6.3, libc 4.7.2, flex 2.5.2, bison 1.24
todo en formato ELF.
Nuevas utilidades:
* ipcclean aadido a la distribucin
habitualmente no se necesita ejecutar ipcclean, pero si cae su servidor y
deja segmentos de memoria ocupados, ipcclean los limpiara para usted.
Nueva documentacin:
* se ha revisado el manual del usuario y se ha aadido la documentacin de libpq.

Postgres95 Beta 0.02


Lista Detallada de Cambios
Cambios incompatibles:
* La declaracion SQL para crear una base de datos en CREATE DATABASE en lugar
de CREATEDB. De modo similar, el borrado de una base de datos en DROP DATABASE en lugar
de DESTROYDB. Sin embargo los nombres de los ejecutables createdb y destroydb
permanecen igual.

Nuevas herramientas:
* pgperl - una interfaz Perl (4.036) para Postgres95
* pg_dump - una utlidad para volcar una base de datos postgres en un fichero
fichero de script conteniedo los comandos de creacion. Los ficheros script estan
en formato ASCII y pueden ser usados para reconstruir una base de datos, incluso



en otras maquinas y otras arquitecturas. (Tambien es bueno para convertir


una base de datos Postgres 4.2 a base de datos Postgres95.)

Los siguientes portes han sido incorporados en postgres95-beta-0.02:


* el porte a NetBSD por Alistair Crooks
* el porte a AIX por Mike Tung
* el porte a Windows NT por Jon Forrest (hay mas gente pero aun no han hecho nada)
* el porte a Linux ELF por Brian Gallew
Los siguientes errores han sido corregidos en postgres95-beta-0.02:
* lineas nuevas no acaban en escape en COPY OUT y problemas con COPY OUT cuando
la primera linea es un .
* no se puede escribir un "retur" para utilizar el id del usuario por omision en "createuser"
* SELECT DISTINCT en tablas grandes aborta
* Problemas en la instalacion en Linux
* monitor no acepta el uso de localhost como PGHOST
* psql genera un volcado de memoria cuando ejecuta \c or \l
* la etiqueta "pgtclsh" desaparecida de src/bin/pgtclsh/Makefile
* libpgtcl tiene un nmero de puerto de defecto codificado en duro
* SELECT DISTINCT INTO TABLE se cuelga
* CREATE TYPE no acepta variable como longitud interna ("internallenght")
* resultados incorrectos utilizando mas de 1 agregado en una SELECT

Postgres95 Beta 0.01


E(7=?-,/ -,/1-,0>-,%+S

Tiempos Resultantes

T:W/ +,5W:-,(7#&@6=?(*3+,:<%/1:<(7"4(U(VPQ(70>3:%=h+,W:<(7:14(Y=(7;=(*-,/q0>5/K+,W0>5#[%/145
% cd src/test/regress
% make all
% time make runtest

I:-,(*#&@5 N %PQ -,/13{i1S 5S 5@.%=(0>(7/O:(*/1(7=W3/1%`%=?-,%0>-,5/O4(d%@=5{-,#&%41%#&(7/1:<( vf


4(U(VPQ(70>30>-,5/O%u(VP<(*0>30>-,/1X@=(73#[- N +,(*#&(7/1:<(d4( N -,49%u`%;3(*4%4.(*I4(U@+,%/1-,)0>%0>-,5/O(7/
+,56-,:<(7#&%W#&3+,:<-,:%=(7%S

v6.5

FY#&i_1%d-,4L(7+Z0>%i@%=?%
`(7=?-,/1(76@=(70>(24(7/1:<(7X+56:-,(7#[@5W(7/1:=(Y`c(*=V-,/1(7W/1L5/
4-,=(0>:<%#&(7/1:<(i02#&@%=?% N +,(7U@3(7:<&\3(i(i_1%/n%1%4-,4[/13(7`5
:(*:l4(i=?(*;=(2-,5/"ST/
;(*/1(7=?%+,X+,%
`1S vU(*W#&%W=?%@-,4%\3(U`(7=V-,/1(76@=(70>(74(7/1:<(7S
5-,(7#&@L02/
4(*% N -,+,-,:<%4^a
fsync()

Tiempo



Sistema

02:00 Dual Pentium Pro 180, 224MB, UW-SCSI, Linux 2.0.36, gcc 2.7.2.3 O2 -m486
04:38 Sparc Ultra 1 143MHz, 64MB, Solaris 2.6

5-,(7#&@W0>/

fsync()

_1% N -,+,-,:<%4^a

Tiempo Sistema
04:21 Dual Pentium Pro 180, 224MB, UW-SCSI, Linux 2.0.36, gcc 2.7.2.3 O2 -m486

8%=V%Y(7+-,:<(7#&%
-,/13{d%/1:(*=V-,=<X*+,%U3:<-,+,-,e%0>-,/94(I4-,02"pBMjGFYjGf5#&(VPQ=?(*6\53(+,5 m `-,(7M
P<y.f T]02/1430>(7/ %
3/1%d#&(VPQ=V%U4(U3/ vf (*/ +,%d`c(7+50>-,4%4 4(U+,56:(*:c4(=(7;5=(7-,5/"S

v6.4beta

h:-,(*#&@5l@%=V%Y(7:%Y`(7=?-,/9/1 5/i4-,=(70>:%#&(*/1:(W0>5#&@.%=V% N +,(*h%%\3(7+,+,l4(I`(7=?-,5M


/1(7"@=(70>(74(2/1:(*W@3(*:<i\53(%+,;3/1g:<(7:c4(Y=(7;=(*-,/q%4-,0>-,/1%+,(7"_1%/ -,4i-,/10>+,3-,4S
~ q N :<%/1:<(7X(7/O;(*/1(7=?%+,XZ+,% `1S @.3(74(
(7=W+,(7`(7#&(7/1:<(d#&%I=?%@-,4% \3(u`(7=?-,5/1(*Y@=(7M
0>(74(7/1:<(7 m ;=?%0>-,%7X=30>(_b yzS
Tiempo
Sistema
02:26 Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 2.0.30, gcc 2.7.2.1 O2 -m486

v6.3

h:-,(*#&@5l@%=V%Y(7:%Y`(7=?-,/9/1 5/i4-,=(70>:%#&(*/1:(W0>5#&@.%=V% N +,(*h%%\3(7+,+,l4(I`(7=?-,5M


/1(7@.=?(*0(74(*/1:(7^@3(7:
\3(W%+,;3/1:<(7:Z4(6=(7;5=(7-,5/%4-,0>-,/1%+,(7_1%/-,4
-,/102+,3-,45hJ
%+,;53/15W:(7:. N +,(7:<5g-,/102+,3J5(7/14i+,5I:<-,(7#&@g4(`c-,%PQ(
_1%/K-,49(7+,-,#&-,/1%45S~ 9 N M
:%/1:(7Xc(7/;(*/1(7=?%+,X1+,%q`1S q(7u3:%/102-,%+,#&(7/1:(9#&%u=?%@-,4%9\3(q`(7=?-,5/1(* @=(0>(74(*/1:(*
m ;=?%0-,%X=30>(_b yzS
Tiempo
Sistema
02:30 Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 2.0.30, gcc 2.7.2.1 O2 -m486
04:12 Dual Pentium Pro 180, 96MB, EIDE, Linux 2.0.30, gcc 2.7.2.1 O2 -m486

v6.1
Tiempo
Sistema
06:12 Pentium Pro 180, 32MB, EIDE, Linux 2.0.30, gcc 2.7.2 -O2 -m486
12:06 P-100, 48MB, Linux 2.0.29, gcc
39:58 Sparc IPC 32MB, Solaris 2.5, gcc 2.7.2.1 -O -g





Captulo 31. Arquitectura


Conceptos de Arquitectura de Postgres

/1:<(74(g0>/1:-,/13%=X24( N (*=V%W3:(74q0>5/10>(7=+,%I%=\3-,:<(70>:3=?% N -,02%I4(*+-,:(*#&%Y8:;5=(7S


T+h0>/150>-,#&-,(7/1:<o4(q0>5#&-,/1:(7=?%0>:<%/r+,% @%=?:(* 4( 8:;5=(7 4( N (7=?,% %0>+,%=?%=(K%+,;5
43=?%/1:(i(7+^-,;3-,(7/1:<( 0>%@:3+,^ST/o+,%dP<(*=?;5% 4(i+,% N %(7u4(i4%:<5X185:;5=(7 3:<-,+,-,e%K3/
-,#&@+,(]#&54(*+,r0>+,-,(7/1:(5wZ(7=?`-,4=4(]!@=50>(7@5= 33%=?-,!2S/1%&(7-,5/4(]85:<;=(7
0>5/1-,:(U(*/K+,6-,;53-,(7/1:<(7g@=0>(756/1-,{ m @=5;5=?%#&%y0>5@(7=?%/14^a
/ @=0>(7L4(*#&5/1-,93@(*=V`-,5= m
yX
postmaster
b +,%d%@+,-,0>%0>-,5/ 4(U-,/1:<(7=?C%0>(4(7+533%=V-, m CD=/1:(*/14](7/ -,/1;+,*y m @5=h(VPQ(7#&@+,X(7+@=5;5=V%M
#&%
yXJ
psql
b +,l3/1L#&l@=02(*l(7=?`c-,4=(7h4(g%0>0>(7 %U+,% N %(Y4(g4%:<5 mN %0>'5(7/14 (*/q-,/1;+,*y
m (7+Z@=0>(7
#&-,#&5yzS
b

postgres

/R/1-,0>
#&%/1(VPQ%q3/1%90>5+,(70>0>-,/o4%4%L4( N %(7d4(4%:d(*//1-,0>[_1:zS
G%+G02+,(70>0>-,postmaster
/9(Y4(7/1#&-,/1%
3/1%-,/1:<%+,%0>-,/9L3/i-,:<(SV%l%@+,-,0>%0>-,5/1(*l4(IC=/1:(*/14K\3(
\3-,(7=(7/&%020>(74(2=g%i3/1% N %( 4( 4%:<5U4%4% (7/R3/1%i-,/1:%+,%02-,/R=(7%+,-,e%*/R+,+,%#&%4%Y%L+,%
+,- N =(7=V%1S%d+,- N =(*=V%
(7/1`,%d(7+=(7\53(7=V-,#[-,(7/1:i4(7+33%=V-,9%d:<=?%`c*W4(+,%d=?(*4O%+
m ">
?I?D>zY5dz>5A> m %yQyX5\3-,(7/n(7/R3o:<3=V/c]%=?=V%/102%3/n/c3(*`cpostmasO@=50>(7
ter
(7=V`-,4=4( N %0>'(*/14 m 6> g"?2?zh55IV25A2 mN yy

F 5?0gQ * -5Ri>
>Q>
U25*1-
J&(q0>/1(70>:%q(7+^@=50>(7[0>+,-,(*/1:(9%+/13(*`c&(*=V`-,4= m 6>u???>?V
5 z>SA> m 0>yy?S
B @%=?:-,=Y4(i%\3,X1(7+@=50>(7&0>+,-,(7/1:<(qJR(*+^(7=?`-,45=(i0>#&3/c-<0>%/n(7/1:<=?(i(*+,+,5u-,/r-,/1M
:(*=V`(7/10>-,/4(7+
ST/0>5/1(70>3(7/10>-,%X^(7+"@=0>(7
(*:<[-,(7#&@=(
0>5=?=V-,(*/14X*(7@(7=?postmaster
%/14u+,+,%#&%4%X*#&-,(*/1:=?%l\3(I+,5l@=0>(75l0>postmaster
+,-,(7/1:<(IJ(7=?`-,45=^`-,(7/1(*/9J
`%/"Sz%d+,- N =(7=?,%
@(*=V#&-,:<(U%
3/K/1-,02i@=50>(7i0>+,-,(7/1:<(U:<(7/1(7=h#&+,:-,@+,(7W0>5/1(*{G-,/1(7
0>5/&@=0>(75(7libpq
=?`c-,4=(7S*jG-,/&(7# N %=;55XZ+,%i%@+,-,0>%0>-,5/&0>+,-,(7/1:<(-,;53(L-,(*/14]3/&@=0>(7
#&5/1M_1( N =?%1SV%60>/1(7{-,5/1(7"0>/K#&3+,:<-,_1( N =?%402+,-,(*/1:(5wZ(7=?`-,45=/1(7:/q%02:<3%+,#&(7/1M
:(u5@=?:%4%Y(7/
S2 /1%L-,#&@+,-,0>%0>-,/&4( (*:<%i%=\3-,:<(70>:3=?% (7Y\3((7+
Jq+,I(7=V`-,4=(76-libpq
,(*#&@=(
02=?=?(*/K(*/]+,%u#&-,#&%u#&\3-,/1% m (*+(7=?`-,45=l4( N %(postmaster

4(
4%:yX
#&-,(7/1:<=V%^\3(g(7+0>+,-,(7/1:<(g@3(74(W0>5=?=(7=1(7/i0>3%+,\3-,(*=-,:<-,^S? ( N (W3:(74q:<(7/1(7=(*:<u(7/L023(*/1M
:%X5J%9\3(L+,d)0>_1(7=
\3(i@3(*4(7/R(7:%=g%0>0>(7- N +,(7U(7/R3/1%9#&\3-,/1%90>+,-,(7/1:<(7X@3(74(*/
/1 (7:%=?+, m (*:<%=?+, +,02/q3/9/1# N =(Y4(I)0>_1(7= 4-,C(7=(2/1:(*y(7/9+,%#&\3-,/1%
(7=?`-,45=VS
( N (7=?,%q:<(7/1(7=
:%# N -,7/r(7/B0>3(7/1:<%K\53(
J+,(*=V`-,4=(7 @:<;5=?(* 02=?=?(*/
N %PQ](7+.3(7=M-,44(7+!3@(7=33%=?-,5!W4( 8postmaster
:;5=(7S7~ 5:<(7(L\3(L(*+3@(7=33%=?-,]4(L8:M
;=(*^/1u:<-,(7/1(W@=?\53g(7=3/33%=V-,
(7@(70>-,%+ m (74(*02-,=<X>3/i33%=?-,d+,+,%#&%4d!@:<;5=?(*!yX
%3/1\3(U(7/ #&30>_1I-,:<(7#&%W(7:U-,/1:<%+,%4L%$SAB6%/1X(*+3@(*=?33%=?-,94(U8:;5=(7



4(7)/1-,:-,`%#&(*/1:( a /1[4( N (L4(L(7=I(7+3@(7=33%=V-,]4( /1-,{GX!=5:<! bGT/R023%+,\53-,(7=Y0>%X


:4L+,L)0>_1(7==?(*+,%70>-,/1%4i0>/B3/c% N %(K4( 4%:4( N (7/r(*/10>5/1:<=V%=?( N %PQn(7:(
3@.(7=33%=V-,4(U85:<;=(7S



Captulo 32. Extensor SQL: Preludio


T/9+,%
(70>0>-,/q\3(-,;3(*X:=?%:<%=(#&W0>#&i%1%4-,=(7{:(7/1-,/1(76%+G8:<;=(*6jGkO3%/14
@(7:<-,0>-,5/1(764(7+Z+,(*/1;3%PQ(a
b
b
b
b

C3/102-,/1(7
:-,@.5
@(7=?%45=(*
%1%4-,45

Como hacer extensible el trabajo

85:<;=(7W(7g(*{G:<(7/1- N +,(d@.5=\3(
+,%W5@(*=V%0>-,/1(7W/]0>%:<%+,;g(7/K4-,0>SjG-(*:<uCD%#&-,+,-,%M
=V-,e%74 0>/]+,Y(7:%/14%=?(2I4(d-,:(7#&%I=(7+,%0>-,5/c%+,(7XG% N (d\3(d+,%-,/1C=V#[%02-,/[(d%+,#&%M
0>(7/1%(*/ N %(7h4(I4%:<5X:% N +,%X02+,3#&/1%X7(7:<0GS X*(*/9+,L\53(Y(Y0>#&3/1#&(7/1:<(0>5/10>(Y0>5#&
-,:<(7#&% 4(
0>%:%+,;55S m +,;53/15Y-,:(7#&%I+,q+,+,%#&%/O4-,0>02-,/1%=?-,q4(
4%:<5yzST+c0>%:<%+,5;5
%@%*=(70>(Y%+Z33%=?-,L0>#&i3/1%
0>+,%(7X0>#&i:= N PQ(7:<i0>3%+,\3-,(7=?%X*@(7=L ABjd+,L%+,#&%M
0>(7/1%L(*/n3/1% N -,+,-,:<(70>%1S7/1%4-,C(7=(7/10>-,%L0>+,%`((7/1:<=( 8:<;5=?(*
J](7+.(7:%/14%=g4(-,:(7#&%
=(7+,%*02-,/1%+,(7W(76\3(U85:<;=(76%+,#&%0>(7/1%d#&30>_1%6#&%6-,/1CD=?#&%0>-,5/K(7/ 3]0>%:<%+,;9
/1
5+,r-,/1C=V#[%02-,/4(O:<% N +,%JB0>5+,3#&/1%X^-,/1r:<%# N -,(7/-,/1CD=?#&%0>-,5/ N =(O39:<-,@X
C3/102-,/1(7JK#&(7:<544( %020>(7^ST:%Y02+,%(*Y@3(74(7/[(*=g#&4-,)0>%4%Y@=I(*+133%=V-,X
J 4%41K\53(u8:<;5=?(* N %%u+,% @(7=?%0>-,/]-,/1:(*=V/1% (7/O:4%W3Y0>+,%(7X(7:q-,;5/1-,)0>%L\53(
85:<;=(7 @3(*4(q(7=U(*{G:<(7/14-,4R@=
+,533%=?-,5SG8=
02#&@%=?%0>-,5/1X1+,%O0>/1`c(*/10>-,5/B(7
\3( +,-,:(7#&% 4( N %(94( 4%: @3(74(7/(7=
(7{:(7/14-,45 +,%#&%/1:<(K0>%# N -,%/14&+,
@=50>(741-,#&-,(7/1:<5i0>54-,)0>%4L4(7+l ABj[o0>%=;Z%/14o#[543+,i(*@.(70>-,%+,#&(7/1:<(K(70>=V-,:<5
@=h(7+`(7/14(*45=4( ABjS
85:<;=(7
(7d:<%# N -,(7/n4-,:-,/1:<&%q5:<=5d;5(7:<5=(7
4(L4%:<5
(7/n\3(q(*+^(7=?`-,45=Y@3(74(L-,/1M
0>5@=?%=Y0>4-,;](702=?-,:]@5=Y(7+33%=?-,[%9:<=V%`c(*
4( N - N +,-,:(*02%d4(L0>%=;%L4-,/1%#&-,0>%S}
(7%X(*+133%=V-,K@3(74(u(7@(70>-,)0>%=W3/&)0>_1(7= 4(0>4-,;K N P<(*: m @WS2(VP?S X3/&)02_c(7=O0>#&M
@-,+,%4S  N - N +,-,:(70>%4( -,/1:(7=0>%# N -,yg02/B+,o\53( (K-,#&@+,(7#&(*/1:%[3/B/13(7`o:<-,@o
C3/102-,/1(7IJK8:<;5=?(*I0>%=;%*=V% +, \3(d=(7\3-,(7=?%1ST+c0>4-,; (70>=?-,:q(7/OjGkL&(7I#&%Y4-,)0>-,+
4(i%1%4-,=Y%+(7=?`-,45=VST:%q_1% N -,+,-,:<%4@.%=V%q#&4-,)02%=+,%K@(7=?%0>-,/o%+`3(7+,^_1%0>(i4(
85:<;=(7I+,% 3/1-,0>%3-,:<(u@%=V%u@=::-,@Y=?%@-,4I4(d/13(*`c%I%@+,-,0>%0>-,5/1(*IJ (7:=30>:<3=?%
4(%+,#&%02(*/1%#&-,(7/1:<S

El Tipo de Sistema de Postgres

T+h:<-,@4( -,:(7#&%O4( 8:<;=(*L@3(*4( (*/1:=?%=


(7/r0>=?-,-,@=d`c%=V-,#&(74-,S5:<-,@5
(7:%/4-,`-,4-,4u(7/:-,@ N %(iJR:-,@ 0>5#&@3(*:<Su:-,@ N %(i/r@=(70>-,%#&(7/c:(
(75Xc0>#&  Xc\3(9(7d-,#&@.+,(7#&(7/1:<%4&(7/+,(7;53%P<(*u0>5#&&FSu(7/1(*=V%+,#&(7/1:(i(902=?=(7M
@/14(Y%+,L0>#&3/1#n(7/1:<(Y0>/150>-,4L02#&!% N :=?%0>:4%:%Y:J5@(7!*8:;5=(7"@3(74(I5@(*=V%=
5+,q0>/]+,Y:-,@I4(
#&(7:<545Y@=`c-,:<5I@.5="(*+c33%=?-,qJ +,q(u(*/1:-,(7/14(u(*+0>#&@5=M
:%#&-,(7/1:K4(u+,5U:-,@4( +,%L(7{G:<(7/1-,/&\3((7+.33%=?-,O4(702=?- N (S>5U:-@50>5#&@.3(*:<
5/&+,
0>=(7%41
0>3%/14K(7+.33%=V-,K0>=(7% 3/1%i02+,%(5STAB8n(73/&(VPQ(7#&@+,O4(3/&:-,@.O4(
0>5#&@-,02-,/"S
85:<;=(7I%+,#&%0>(7/1%d(7:Y:<-,@5I(*/]5+, 3/O(*/1:-,4 m \3(d(7+5)0>_1(7=q\53(d%+,#&%02(*/1% :<4%
+,%l-,/1:%/10>-,%"4(I+,%l0>+,%(7y@(7= (7+Z33%=?-,L@3(74(I!#&-,=?%=^4(7/1:<=5!.4(Y(*:<5":<-,@564(74(
(7++,(*/1;3%zP<(g4(g@(7:<-,02-,/iJ@:-,#[-,e%=3h=(70>3@(7=?%70>-,/9@= m @.5=(VPQ(7#&@.+,5y4(*)/1-,=-,/14-,02(*
(7/+,5^%:=?- N 3:S% N %(64(W:<-,@4(W85:<;=(7^(7:%I#&%^4-,`c-4-,4%g(7/:-,@hJu:<-,@h4(7)/1-,M
4"@.5=(7+Z33%=?-,S?5":<-,@564(Y0>/1:=30>02-,/ m 02#& 5D y/ +,5"\3(Y/q0>5#&@-,+,%45



4(7/1:<=q4(7+c-,:(*#&%1S:-,@Y4(7)/1-,4Y@=g(*+133%=V-, 5/[02=(7%*4U@.5=W(7+33%=V-, 4(


+,%
#&%/1(*=V%
4(*02=?-,:%U% N %PQS

Acerca de los Sistema de Catalogo de Postgres

8%=V% -,/1:<=?430>-,=?/15U(7/[+,
0>/10>(7@: N %-,024( +,%L(7{G:<(7/1- N -,+,-,4%4XZ_1(7#&U4((7:34-,%=
0>5#&u(g4-,(4i%/+,5l0>%:<%+,;S?83(74(W%+,:<%=V(g(7:%I(70>0>-,5/i%_15=?%X2@(7=d%+,;3/1%(*020>-,M
/1(7I#&%g:%=41(u/1 (7=?%/K02#&@=(7/14-,4%g-,/[+,%u-,/1C5=?#&%0>-,/[4%4%u%\53-,X%-c\53(u#&%=?\53(
(7:%O@%;5-,/1%]0>5#&r@.5:(*=V-,==(7C (7=(7/10>-,%1SZ549+,9-,:(*#&%i4(O02%:%+,;L:-,(7/1(*/3/
/15# N =(d\3(d(7#&@-,(7e%@= 1 S>%I-,;53-,(7/1:<(7Y0>+,%(7I0>/1:-,(7/1(*/[-,/1C5=?#&%0>-,/[\3( 4( N (
4(i(7=
3:-,+^@%=?%K+, 33%=?-,u)/1%+,(7S m %JR#&30>_1%u:<=? -,:<(7#&% 4(q0>%:<%+,5;5X.@(*=?
(7:6=V%=?%*#&(7/1:(/O@.(74-,4W4-,=(*0:%#[(7/1:(5S y

D EgQ B >Q& * Q55 32>5?


Nombre del Catalogo

Descriccion

@;57@0>+,%

@(7=?%4=h4(Y02+,%(*W4(Y#&(7:4i4(U%0>02(*

@;574%:% N %(
@;570>+,%
@;57%::<=V- N 3:<(
@;57-,/14(*{
@;57@=0
@;57:<J@.(
@;57@(7=?%:<5=
@;57%;;5=(7;%:(
@;57%#
@;57%#&5@
@;57%#&@=50

N % (4(U4%:
0>+,%(7
%:<=V- N 3:<564(0>+,%(7
-,/14-,02(*W(70>3/14%=?-,5
@=0>(74-,#&-,(7/1:<5 m %# N WFBJ9jGkLy
:<-,@ m %# N 5 N %(Ji02#&@+,(?P<y
5@(*=V%45=(7
0>/PQ3/1:DiJ90>/P<3/1:<94(YCD3/10>-,/1(7
#&(*:4i4(%020>(*
@(7=?%4=h4(Y#&(7:<5494(%0>0>(7
@=V:<(4(@(7=?%4=4(Y#&(*:4i4(Y%0>02(*

F 5?0gQ1?>Q1>>]
>75 025>D5?
T+#&%/13%+4(g=(7C(7=$(*/102-,%Y4%Y#&%h4(*:%+,+,(g4(g(7{@+,-,0>%02-,/L4(I(*:<5l0>%:<%+,;hJ3l%:=?- N 3M
:Sz (0>3%+,\3-,(7=^#&%/1(*=V%X G5z>?DWV>D>$5W  >?1? #&3(7:<=V%U3K#&%J5=
(7/1:<-,4%4(7YJ]3U=(7+,%0>-,/1%#&-,(7/1:<](7/R(*+.-,:<(7#&%94(0>%:<%+,;^S m 5U%:<=V- N 3:<5U\3(L/1](



=(7)(7=$(7/ %d:=?%6(7/1:<-,4%4(76/195/K#&:<=?%4g-/19/K@%=?:(U@=?-,#&%=?-,%
4(U+,%d+,+,%`c(5SzT:<(
4-,%;5=V%*#&%O@.3(*4(9(*=U#&%uR#&(7/1L-,/c02#&@=(7/1- N +,( _1%:<%K\53( =(7%+,#&(*/1:(i0>5#&-,(*/10>( %
#&-,=V%=h+,g0>/1:(7/1-45W4(+,g0>%:%+,5;556J9`(7%U02#&9(U=(7+,%*0>-,5/1%/K(7/1:<=(-S8=l%_15=?%X+,
@=?-,/102-,@%+Z(*;3-,=h(7:(Y4-,%;=?%#&%ca
T/R`%=V-,%
4( +,%
(70>0>-,5/c(7
\53(`c-,(*/1(7/%L02/1:<-,/13%02-,/1Xc@=(7(7/1:<%=(#&d`%=?-,%0>5/1M
3+,:%W0>#&@3(7:%6(7/K+,5W0>%:%+,;5564(7+-,:(7#&%u\3(U@.=?(*(*/1:%/ -,/1C=V#&%02-,/K\3(U/1(7M
0>(7-,:<%#&59@%=V%[(*{G:<(7/14(*=(7+6-,:<(7#&%1SA-,=?%4(7:([4-,%;5=?%#&%[@4=(7#&q_1%0>(7=\3(
%+,;53/1%"4(U(7:<%"02/13+,:%W0>5#&@3(7:<% m \53(%
#&(7/134L(U0>#&@5/c(7/O4(:=(76i0>3%M
:<=K@%=V:<(7y(*%/&ABY0>5#&@=(*/1- N +,(7#&%UC%0>-,+,(7Y4((*/1:(*/14(7=<X4%4O\3( (*=V%i0>%@.%7e
4(g`(7=+,l%:=?- N 3:l3%4"(*/i+,%l0>+,%`(7h-,#&@.5=?:%4%h4(g+,5lC=V#[3+,%=V-,l4(g02/13+,:%
4(Y5:<=V%60>+,%(7S
b A30>_1%i02%=?%*02:<(7=?-,:-,0>%i4-,:<-,/1:% m 02+,%(*X%:<=V- N 3:<5XC3/102-,/1(7Xh:-,@Xh#&(*:4594(
%0>0>(7X(7:0>y(7:<%/ (7:=(70>_1%#&(*/1:("=(*+,%02-,/1%4%*(7/ (7:(6(*\53(*#&%1S$/ -,#&@+,(W0>5#&%/14
4(Y02=(*%70>-,5/K@3(74(#&54-,)0>%=#&30>_15W4((7:<5W02%:%+,;S
b W:<-,@5WJ9@=0>(74-,#&-,(7/1:<565/ (7+,(*#&(7/1:<5WCD3/14%#&(7/1:%+,(7"4((7:<(U(7\3(7#&%1S
b

Nota: Usamos las palabras procedure y function de forma mas o menos indistinta.

8=V%02:<-,0>%#&(7/1:<(:<54L02%:%+,;5L0>/1:-,(7/1(
%+,;53/1%
=(7C(2=(7/10>-,%
%
-,/1:%/102-,%W(7/ 3/1%
L%#&M
N %I0>+,%(7S28=W(VPQ(7#&@+,X585:<;=(7YC=(703(*/1:(7#&(*/1:( 3%)=?#&%Y4(d:<-,@ m @=W(VPQ(7#&@+,X
4(YCD3/10>-,/1(76J9@(7=?%4=?(*y5@%=V%U-,4(7/1:<-,)0>%=-,/1:%/10>-,%63/1-,0>%W(*/ 5:<=5602%:%+,;55S
%Jq#&30>_15g5:<=?g%:=?- N 3:IJq=(7+,%0>-,/1(7g\53(
:-,(7/1(*/]-,;/1-,)0>%4I N `c-,XG@(*=9_1%J
:="#&30>_1 m @%=V:<-,0>3+,%=#&(7/1:<(U%\3(7+,+,"\3(U:-,(*/1(7/q\3(U`(7=^0>5/ +,W#&(*:464(Y%0>M
0>(7yG\53(6/1d+,5:<-,(7/1(7/"S$%=(7+,%0>-,/1(7(7/1:<=("@;5%#&X@;5%#&@X@;5%#&@=0>X@;5@(*=V%:<5=
Jo@;5@0>+,%9/@%=?:<-,023+,%=$#&(7/1:(]4-,)0>-,+,(7q4(K02#&@+,=(7/14(*=XJB(7=V%/4(*0>=?-,:%i(7/
@=C3/14-,4%74 m (7/&+,%9(70>0>-,/n N =(:-,@d4(-,/1:(*=VC%(J]5@.(7=V%45=(2
4(L-,/14-,0>(7y%/1:(*
4(Y\3(U(7:34-,(*#&56+,%6(7{:(7/1-,/1(7 N %-,0>%S





Captulo 33. Extendiendo SQL: Funciones


8%=V:<(4(i4(*)/1-,=I3/:<-,@[/13(*`c[(*d+,%94(7)/1-,0>-,/4(iC3/10>-,5/1(*d\3(i4(70>=?- N (7/R3o0>5#&M
@=V:<%#&-,(7/1:<S?FY#&i0>5/1(70>3(7/10>-,%X*#&-,(7/1:<=V%"\3(Y(7l@- N +,(Y4(7)/1-,=h3/1%/13(7`%UC3/102-5/
-,/K4(7)/1-,=l3/K:-,@L/13(7`5X+,90>/1:=?%=?-,i/19(*W0>-,(7=?:^S85=h(7+,+,94(*0>=?- N -,#&560>5#&i%1%4-,=
/13(7`%"C3/10>-,/1(76@%=?%
85:<;=(76%/1:<(7"4(U4(70>=V- N -,=0>5#&L%1%4-,=/13(7`5W:-,@S
85:<;=(7"jGkL]@=@=?0>-,/1%
:<=?(*6:<-,@W4(YC3/10>-,/1(7a
C3/102-,/1(7W4(+,(7/1;53%PQ(U4(0>/13+,:<% m C3/10>-,5/1(*W(*0>=?-,:%"(7/ jGky
b C3/10>-,/1(7L4(O+,(7/1;53%PQ(O@=50>(743=?%*+ m C3/10>-,5/1(7L(70>=V-:%L(7/1X^@= (VPQ(7#&@.+,5X^8FY
8jGky
b C3/102-,/1(764(+,(*/1;3%PQ(U4(Y@=?;5=V%#&%0>-,5/ m C3/10>-,5/1(76(70>=V-,:<%"(7/ 3/ +,(7/1;53%P<(4(@=M
;5=V%#&%0>-,5/q0>#&@-,+,%4L:%+,(*W0>5#&LFYy
FY%4%u0>+,%( 4( C3/10>-,5/&@3(*4( :<5#&%=g3/&:<-,@ N %(*XZ3/&:<-,@O0>#&@3(7:KK%+,;3/1%0>5#&M
N -,/1%0>-,5/n0>5#&&%=?;53#&(7/1:<5 m @%=#&(7:<=5yzS74(*#&Xc0>%4%90>+,%(i4(iC3/10>5/n@3(74(i4(*M
`5+,`(7=h3/K:<-,@ N %(Ui3/K:-,@i02#&@3(7:<STg#[WC0>-,+4(7)/1-,="C3/10>-,5/1(*gjGkLX%Z\3(
(7#&@(*e%7=(7#&g0>/O(*+,+,%S5W(VPQ(7#&@+,g(7/K(7:%d(70>0>-,/O(
@3(74(U(*/102/1:<=V%=h:%# N -,7/O(*/
J
S
b

funcs.sql

funcs.c

Funciones de Lenguaje de Consultas (SQL)

% C3/10>-,5/1(*LjGk(VPQ(70>3:%/r3/1%]+,-,:%K%= N -,:<=?%=V-,% 4(q02/13+,:%LjGkLX.4(7`+,`c-,(*/14n+,


=(73+,:%415g4(U+,%u+,:-,#&%u0>5/13+,:<% 4(
+,%d+,-,:<%1S>%WC3/10>-,5/c(7IjGkL](*/O;5(7/1(7=?%+54(7`3(7+,`(7/
0>5/PQ3/1:SjG-3L:<-,@d4(6=(7:<=V/1U/1d(6(7@(70>-,)02%g0>#&d3/
X(7/1:/10>(73/ (7+,(*#&(7/1:<
%= N -,:=?%7=?-,i4(*+=?(*3+,:<%4194(+,%
+,:<-,#&%d0>5/13+,:<% (7=?
4(*`c3(*setof
+,:^S
T+0>3(7=?@ 4(Y3/1%C3/102-,/9jGkK\3(I-,;53(%Yj
4( N (7=?,%Y(*=3/1%+,-,:<%U4(I0>/13+,:<%"(7@%M
=V%4%76@=h0>%=?%0>:(*=?(26(7@%0>-,L(*/ N +,%/102J9(*/1:=(@.%=V*/1:(7-,"4(7/1:<=L4(0>5#&-,+,+,%6-,#&@+,(7S
~ :%=g\3(+,%
0>#&-,+,+,%
-,#&@+,(*
3%4%Y(*/n+,%U0>/13+,:<%U(L4( N (7/&(70>=?- N -,=g0>5#&O,#&M
N 5+,W4((70>%@(7X@.=?(*02(*4.-,7/c45+,%60>5/ 4 N %=V=?%"-,/1`(7=V:<-,4%S
h%=;3#&(*/1:h4(W+,%ICD3/10>-,/9jGkL9(g@3(74(7/L=(7CQ(7=(*/102-,%=.(7/i+,%0>5/13+,:<%l3%/14u3/1%
-,/1:%{-,)e/"ajeK( =(7)(7=( %+^@=?-,#&(7=
%=;3#&(*/1:X,e %+(7;53/14XJn%30>(7-,`%#&(7/1:<(S
jZ-3/n%=;3#&(*/1:[(*u02#&@+,(?P<X.(*/1:/10>(7u3/1%q/15:<%0>-,5/ > m @=(VPQ(7#&@+,&!`eS (*#&@!y"(
@3(74(g3%=^@%=?%%0>0>(74(*=%U+,%l@=@-,(74%4("%:=?- N 3:l4(7+%=;3#&(7/1:<@.%=V%+,+,%#&%=%
C3/102-,/1(7S

Ejemplos

8%=V%g-,+,3:<=V%=.3/1%C3/10>-,/LjGkq(7/10>-,+,+,%X20>5/1-,4(*=(g+,
-,;53-,(7/1:<(7X*\53(W(W@4=?,%I3%=.@%=?%
0>%=;Z%=h(*/ 3/1%d0>3(7/1:<% N %/10>%=?-,%1a
create function TP1 (int4, float8) returns int4
as update BANK set balance = BANK.balance - $2
where BANK.acctountno = $1
select(x = 1)
language sql;

/33%=?-,o@4=V%[(VPQ(70>3:%=u(7:<%[C3/10>-,/@.%=V%O02%=?;5%*=Ke*1S ](*/+,%[023(*/1:%[5]4(O+,%
-,;3-,(7/1:<(UC5=?#&%1a
select (x = TP1( 17,100.0));



T+h#&-,/1:<(7=(7%/1:<(q(?P<(7#[@+,-,;53-,(7/1:(O:<#&%O3/1%]%=;53#&(7/1:<n(7/10>-,+,+,4( :<-,@TA8*X.J
4(7`3(7+,`(Y=(73+,:<%46#&+,:<-,@+,(7a
select function hobbies (EMP) returns set of HOBBIES
as select (HOBBIES.all) from HOBBIES
where $1.name = HOBBIES.person
language sql;

Funciones SQL sobre Tipos Base

%9C3/102-,/ojGko#&d-,#&@+,(9@- N +,(i/1&:<-,(7/1(i%=;53#&(7/1:dJ[(*/102-,+,+,%#&(7/1:(94(*`c3(7+,`(
3/ :-,@ N %(*X:%+Z02#&
a
int4

CREATE FUNCTION one() RETURNS int4


AS SELECT 1 as RESULT LANGUAGE sql;
SELECT one() AS answer;
+-----+
|answer |
+-----+
|1
|
+-----+

~ :%=\53(Y4(7)/1-,#&l3/1%U+,-,:%Y N PQ(7:<-,`L@%=V%I+,%YCD3/10>-,/ m 0>5/9(*+/1# N =?(I|6TjZ yQX*@(7=


+,%U+,-,:%U N PQ(7:<-,`c4(I+,%
0>5/13+,:%U\3(+,+,%#&%U+,%
C3/10>-,/q N =(7(70>=V- N -,+,%U+,-,:<%
 N PQ(7:<-,`L4(
+,%
C3/10>-,5/"S85=h(7:X(7+=(73+,:%4L((*:-,\3(*:%d%/1s (7=h(7/q`(7e
4(U/1(S
Td0>%-:%/C0>-,+^4(*)/1-,=UC3/10>-,5/c(7ujGkLr\3(9:#&(7/o:-,@ N %(i02#&&%=;53#&(7/1:ST/
(7+c(?P<(*#&@+, 4(
% N %PQ5XG/15:<( 0>#& /15Y=(7C (7=V-,#&Y% +,5Y%=;53#&(7/1:<5I4(7/1:=q4(
+,% C3/102-,/
0>5#&6e
Jme1a
CREATE FUNCTION add_em(int4, int4) RETURNS int4
AS SELECT $1 + $2; LANGUAGE sql;
SELECT add_em(1, 2) AS answer;
+-----+
|answer |
+-----+
|3
|
+-----+



Funciones SQL sobre Tipos Compuestos

+(7@(*02-,)0>%=CD3/10>-,/1(7g0>/O%=?;53#&(7/1:<5W4(U:<-,@5W02#&@3(7:<5 m :<%+,(760>5#&qTA8yX4(7M
N (7#&h/1 +,(7@(70>-,)02%=.\3Y%=?;53#&(7/1:<u\3(7=(7#& m 0>5#& _1-,0>-,#&6#&h%=?=V- N %I0>5/me
Jneyh-,/1&:<%# N -,7/R+,d%:<=V- N 3:<5
4((7(i%=;53#[(7/1:^S785=I(VPQ(7#&@+,X1 N (7=?`c(L+,%9C3/10>-,/
43 N +,(*%+,%7=?J9\53(U@=50>(7%
0>3%+Z(7=?,%
3O%+,%=?-,L-5(Y4 N +,%(5a
CREATE FUNCTION double_salary(EMP) RETURNS int4
AS SELECT $1.salary * 2 AS salary; LANGUAGE sql;
SELECT name, double_salary(EMP) AS dream
FROM EMP
WHERE EMP.cubicle ~= (2,1)::point;

+---+-----+
|name | dream |
+---+-----+
|Sam | 2400 |
+---+-----+

~ :(i(7+3&4(L+,%q-,/1:<%{-,e1S %*+,%=?JZS/1:<(7d4(L%4(7/1:<=V%=?/1d(7/n(7+:(*#&% 4(9+,%dC3/10>-,5M


/1(7U\3(i4(7`3(7+,`(7/R:-,@d0>#&@3(7:X14( N (7#&d@=(7(7/1:<%=g@=?-,#&(7=]+,%9/1:%0>-,/4(L+,%
C3/102-,/]@%=V%u@=J(*02:<%7=6%:=?- N 3:S2%uC5=?#&%u(7/10>-,+,+,%4(
(*{G@+,-,0>%=l(7:q(7g\3(u@4(7#[5
/15=?#&%+,#&(*/1:(U3%=+,%d/15:<%0>-,5/ %:<=?- N 3:< m 0>+,%(7ycJi02+,%(5S %7:<=V- N 3:<9-,/14-,:<-,/1:%#&(*/1:(a
- esto es lo mismo que:
- SELECT EMP.name AS youngster FROM EMP WHERE EMP.age
SELECT name(EMP) AS youngster
FROM EMP
WHERE age(EMP) = 30;

30

+-------+
|youngster |
+-------+
|Sam
|
+-------+

FY#&q`(7=(7#&X-,/](7# N %=?;5XG/1q-,(7#&@.=?(
(*I(7:(
(7+0>%ST:%u/1:%0>-,/[4(
C3/10>-,5/O(7
-,#&@=V:<%/1:( 0>3%/14\53(7=(7#&L3%=
3/1%]C3/10>-,5/\3( 4(7`3(7+,`%O3/1%]/1-,0>%]-,/1:%/c02-,%1S
%0>(7#&
(*:<[(7# N ( N -,(7/14[+,%q-,/1:%/10>-,%90>#&@+,(7:<% 4(*/1:=O4(i+,%9CD3/10>-,/1X1%:=?- N 3:[@=
%:<=V- N 3:<SzT:<i(763/ (VPQ(7#&@+,i4(U3/1%
C3/102-,/K\3(U4(7`3(7+,`(Y3/1%d/1-,0>%d-,/1:%/10>-,%dTAB8Wa
CREATE FUNCTION new_emp() RETURNS EMP
AS SELECT \None\::text AS name,
1000 AS salary,
25 AS age,
\(2,2)\::point AS cubicle
LANGUAGE sql;



T/o(*:<(902%&_1(*#&5 (7@(*02-,)0>%4&0>%4%q3/1R4(9+,5 %:<=?- N 3:<u02/r3/r`%+,=U0>5/1:<%/1:(*X


@(7=]0>3%+,\53-,(*=0>5#&@.3:<%0>-,/o[(7{@=(7-,/(i@4=V%q_1% N (7=Y3:-,:<3-,4&@=U(7:%d0>5/1M
:%/1:(7S (7)/1-,=^3/1%YC3/10>-,5/90>#&L(*:<%I@3(74(g(7=4(7+,-,0>%4S+,;53/15l4(I+,%4(7)02-(7/10>-,%
#&"-,#&@=V:<%/1:(*W/O+,g-,;53-,(7/1:(*a
%d5=4(*/K4(U+,% +-,:<%d N PQ(7:<-,`q4( N (U(7=l(*{G%0>:<%#&(7/1:<(U+,%d#&-,#&% \53(d%\3(7+,+,%u(7/ +,%u\3(
+,%:<=?- N 3:<5%@%=?(2e0>%/ (7/ +,%g=4(7/ FY|"TYTi 1T m 
023%/14
(VPQ(70>3:(63/1%g0>/13+:%
S yS
b jG(i4( N (9(7/10>%-,+,+,%=+,%u(7{@=(7-,5/1(7 m 3%/14a a y"#&3Jn0>3-,4%4%#&(7/1:(iR`(7=?q(7+-,M
;53-,(7/1:<(U(7=?=?=*a
b

WARN::function declared to return type EMP does not retrieve (EMP.*)

+1+,+,%#&%=W% 3/1%iC3/102-,/&\3(u4(7`3(7+,`%3/1%-,/1:<%/10>-,%X5/1K@54(7#&5Y N :(*/1(7=g+,%L-,/1M


:<%/10>-,%U0>5#&@.+,(7:%cSV ( N (7#&W N -,(7/q@=J(*02:<%=^3/q%:<=V- N 3:<LC3(7=?%U4(Y+,%
-,/1:%/102-,%U N -,(7/
@%%=^+,%d-,/1:<%/10>-,%
0>5#&@+,(*:%d%
:=?%dC3/10>-,5/"S
b

SELECT name(new_emp()) AS nobody;


+-----+
|nobody |
+-----+
|None
|
+-----+

 %g=V%e5/ @=+,%g\3(*X(*/L;5(7/1(7=?%+,X>4( N (*#&5^3%=.+,%g-,/1:%{G-,^4(6C3/10>-,/i@%=V%W@.=?J5(70>:%=


b 
+,"%:=?- N 3:"4(+,6`%+,=(7l4(=(*:=V/14(I+,%
C3/102-,/q(7"\3((*+Z@%=?(*=^/1i0>5#&@=(*/14(
+,%
:<=V%d-,/1:%{G-, m 45:<y1@%=V%U+,%
@=5J5(70>0>-,5/ 0>3%/14L(02# N -,/1%u02/ +,+,%#&%4%6%dC3/10>-,5M
/1(7S
SELECT new_emp().name AS nobody;
WARN:parser: syntax error at or near "."

FY3%+,\3-,(*=l0>+,(70>02-,/K4(
5=4(7/1(*W(*/K(*++,(*/1;3%PQ(
4(U0>5/13+,:<% jGk[(U@.3(*4(7/ (7#&@%\3(7M
:%=ZP<3/1:<%lJi(g@3(74(*/94(7)/1-,=^0>5#&3/1%UC3/10>-,5/"S?%h=4(7/1(7l@3(*4(7/i-,/10>+,3-,=3@4%:<(7
m (7W4(70>-,=X702/13+,:% QR B / DlX I)2L D XJ L C D y1%02#&;B ,C *ED
SjG-,/K(7# N %=;55X
+,%=4(7/[)/1%+c4( N ( (7=W3/cB C *EDr\3(4(7`c3(*+,`c% +, \3(( (*@(70>-,)\53( 0>5#&K(7+c:-,@
4(=(7:<5=?/14(U+,%
C3/10>-,5/"S
CREATE FUNCTION clean_EMP () RETURNS int4
AS DELETE FROM EMP WHERE EMP.salary = = 0;
SELECT 1 AS ignore_this
LANGUAGE sql;
SELECT clean_EMP();
+-+
|x |
+-+
|1 |
+-+



Funciones de Lenguaje Procedural

+,(7/1;53%PQ(7h@=02(*43=V%*+,(7h/1u(*:</0>5/1:=3-Q44(7/1:<=d4(W85:<;=(7SjZ(6@.=?@=02-,/1%/
0>5#&d#&43+,0>%=;% N +,(7S$85=.CD%`c=c4-,=V P<%(6%6+,%g450>3#&(7/1:<%0>-,5/@%=?%W(*+8i(7/ 0>3(7:-,/
@%=?%W+,4(7:<%+,+,(7 N =(6+,%g-,/1:%{G-,^Ju0>5#&d+,%I0>+,33+,%gjI(W-,/1:(7=?@=(7:<%W@=(7+7#&%/1(?P<%45=
4(7+Z8gS
%J46+,(*/1;3%PQ(7"@=02(*43=V%*+,(7"4-,@/1- N +,(7602/q+,%U4-,:<=V- N 30>-,/K(*:</14%=^4(I85:<;=(7
m 8ZFYqJL8jGkyX7J5:<=5"+,(7/1;53%PQ(7"(Y@3(74(7/94(7)/1-,=VSV -,=? PQ%(% ?*15$$?  >z? ?
? @.%=V%#&6-,/1CD=?#&%0>-,5/"S

Funciones Internas

%C3/102-,/1(7U-,/1:(*=V/1%
5/nC3/10>-,5/1(*
(70>=?-,:%(7/RF\3(L_c%/R-,4O(7/1+,%e%4%7U(7:<:-,0>%M
#&(7/1:<((7/ (7+@=02(* N %0>'5(7/14O4(U8:<;5=?(*Sz%
0>+,33+,%d4%
(7+Z/1# N =?(U(*/ +,(7/1;3%zP<(UFB4(
+,%
C3/10>-,5/1X\3(
/19/1(70>(7-,:<%d(*=l(7+#&-,#&q\3(U(*+/1# N =(U\3(U(
4(70>+,%=%d@%=?%
(7+53i4(
jZkgS m 85=6=?%e/1(7I4(u0>#&@%:- N -,+,-,4%4R0>/[`(7=V-,/1(7I%/1:<(7=?-,=?(*XG3/1%0>%4(7/1%ujL`%0>,%
(I%0>(7@.:%Y02/9(*+G-,;/1-,)0>%44(I\53((7+/15# N =(Y4(Y+,%YCD3/10>-,/q(7/9+,(*/1;3%PQ(YFr(7l(*+G#&-,#&
\3(i(7+/1# N =(i(7/njGkLWS yl~q5=?#&%+,#&(7/1:<(7X:<54%
+,%dC3/10>-,/1(7d-,/1:<(7=?/1%d@=(7(*/1:(7U(7/n(7+
N %0>'(*/14&(d4(70>+,%=?%/K02#& C3/102-,/1(7YjGkR43=?%/1:<(u+,%u-,/1-,0>-,%+,-,e%0>-,/[4(d+,% N %(
4(d4%M
:X@(7=q3/&33%=?-,K@.54=?,% 3%=9* / D F I)R *ED Q H R @%=?% 02=(*%=6/15# N =(7Y4(u%+,-,%
%4-,0>-,/1%+,(7"@%=?%U3/1%dC3/10>-,5/K-,/1:(*=V/1%1S

Funciones de Lenguaje Compilado (C)

%YC3/10>-,5/1(*U(*0>=?-,:%(7/[F(@3(74(7/[0>5#&@.-,+,%=I(*/& N PQ(7:<5U\3((@3(*4(7/[0>%=;5%=64(
C5=?#&%4-,/1#&-,0>%X2JL3%=@%=V%I-,#&@+,(7#&(*/1:%=CD3/10>-,/1(7"jZkq4(7)/1-,4%h@=(7+33%=V-,^SV%
@=?-,#&(7=?%i`c(*e9\3(9+,%9CD3/10>-,/4(*)/1-,4% @=I(7+^33%=?-,[(7
+,+,%#&%4%i4(7/1:=[4(7+ N %0>'(7/14X
(7+0>%=;5%745=U4-,/1#&-,02R0>%=;5% (*+0>54-,;R N P<(7:<R4(9+,%KC3/10>-,5/o(7/o#&(*#&5=?-,%XJR(*/1+,%e%q+,%
C3/102-,/0>5/(7+"(VPQ(70>3:% N +,(K(7/(VPQ(70>30>-,5/4(O8:;5=?(*SZ%]-,/1:%{-,LjZk@%=?%* / D
F I)R *ED Q H R (7/1+,%e%+,%YC3/102-,/qjGkLq%Y+,%UC3/102-,/9(*/90>54-,;5 FB4(g3/1%U4(I4lC5=?#&%S?jG+,%uCD3/10>-,/]jGkR:<-,(7/1(d(7+#[-,#& /1# N =(u\3(d+,% CD3/10>-,/](7/O0>54-,;5qF(u3%u+,%@=?-,#&(7=?%
C5=?#&%1S*T+%=;53#&(7/1:<O0>%4(*/1%i(7/R+,%90>+,33+,%Ljq(7U(7+/15# N =(L4(L0>%#&-,/1 m @%:_1/1%#&(7y
0>5#&@+,(*:L4(7+)0>_1(*=?L\3(U0>5/1:<-,(7/1(
(7+ N P<(*:90>#&@-,+,%4L\3(U(U@3(74(U0>%=;Z%=h4(C=V#&%
4-,/1#&-,0>%1SjG-(7+/15# N =(g4(g+,%C3/10>-,5/9Fo(*h4-,C(7=(7/1:<(g4(7+/1# N =(I4(*(7%4u4(W+,%YC3/10>-,/
jZkX(*/1:/10>(7W(U3%
+,%d(7;53/14%
C5=?#&%1SzT/K(*:<%
C=V#&%d+,%
0>+,33+,%
j :<#&%d456%=;3M
#&(7/1:<5Y0>%4(*/1%XG(*+c@=?-,#&(7=q(7Y(*+c/1# N =?(u4(7+02%#&-,/1 02#&@+,(7:< 4(7+c)0>_1(7=q N P<(*:K\3(
(d@.3(*4(
0>%=;%=h4(
C5=?#&% 4-,/1#&-,0>%XJ (7+c(7;53/14q(7I(*+,# N +, 4(d(7/1+,%0>(
\3(d(7+c0>%=M
;%45=h4-,/1#&-,0>94( N (*=V% N 30>%=VST:(# N 5+,q4(
(*/1+,%0>(U(7g+,q(7+/c5# N =(
4(UC3/10>-,5/
(7/q(7+0>4-,;LC3(*/1:(UFS
Nota: Despus de que se use por primera vez, una funcin de usuario, dinmicamente cargada, se retiene en memoria, y futuras llamadas a la funcin solo incurren en la
pequea sobrecarga de una bsqueda de tabla de smbolos.

%90>%4(7/1%9\3(i(*@(*0>-,)0>%q(7+)0>_1(7=] N PQ(7:< m +,%q0>%4(*/1%9(7/+,%q0>+,33+,%qjGyl4( N (7=?%q(7=


(7+ V>V2  4(7+^)0>_1(7=R4(90>54-,;5R N PQ(7:<@%=V%q+,%OC3/10>-,/1X3/1-,4R@=d0>#&-,+,+,%
-,#&@+,(7SGjG-h3/r,# N +,4( (7/1+,%02(9( 3%O(*/r+,%O0>+,33+,%O jZX1(7+h,# N +,n4( (*/1+,%02(9(
4( N (7=%I3/1-,=@=0>5#&-,+,+,%-,#&@.+,(7h:%# N -,7/1X2Ju4( N (7=?,%6(*=(7{%0>:%#&(*/1:(6(*+#&-,#& \3(W(7+
/15# N =(g4(Y+%C3/10>-,5/q(*/9(7+0>4-,;5LC3(7/1:<(IFSVT/9-,:(*#&%l/1-,{
+,%Y5=4(*/  -,#&@=?-,#&-,=V
:4d+,d,# N +,cd4(L(*/1+,%0>(L4(L3/n N PQ(7:<&\3(i(i@3(*4(L0>%=;%*=4(LC=V#&%q4-,/1#&-,0>%1S
m 8:;5=(7l/1 0>5#&@-,+,%=V3/1%UC3/102-,/q%3:<5#&:-,0>%#&(7/1:<(77(I4( N (I02#&@-,+,%=^%/1:<(7l4(I\3(
(3(U(7/ 3/1%d5=4(7/9FY|6TITO5~qFYfD}~SzE(7=% N %PQ@%=?%
-,/1C5=?#&%0>-,5/ %4-,02-,/1%+S y



Funciones de Lenguaje C sobre Tipos Base

%d:% N +,%d-,;53-,(7/1:<(u4%d(*+:<-,@qF=(7\3(*=V-,4L@%=?%d+,5I@.%=V#&(7:=GI(*/O+,%WC3/102-,/1(7IF\53(
(0>%=;Z%=V/q(7/q85:<;=(7Sz%0>5+,3#&/1%d! (7)/1(74Of/1!4%
(*+Z)0>_1(7=4(Y0>% N (*02(*=V%Y=(7%+ m (7/q(*+
4-,=(0>:<5=?-,
yZ(7/L(7+\3(g(7+:-,@ F(7\53-,`c%+,(7/1:(g(I4(7)/1(S?jG-,/i(*# N %=;X
-5-,/10>+,3J5( .../src/backend/X7(7:W)0>_1(7=56(-,/10>+,3-,=V/O4(YCD=?#&%
%3:<5#&:<-,0>%1S
utils/builtins.h

D EggQ D  * \*7g


WW?5 025>
Built-In Type

C Type

% N :<-,#&(
N 5+
N {
N J5:(7%
0>_1%=
0>-,4
4%*:(*:-,#&(

N 5+,3:<(75-,#&(
N 5+
m }n?y
mN J5:(7%?y
0>_1%=
FYf
m %:<(75-,#&(y

-,/1:<
-,/1:<`c(*0:=
-,/1:<
%:<

-,/1:
m -,/1:`(70>:<5=?y
-,/1:
%:
5= m %:U?y

%:<x

%:
5= m %:xU?y

+,(7;
/1%#&(
-,4
-,4`c(*02:<=
@%*:_
@-,/1:
=(2;@=0
=(2+,:-,#&(
:<(7{G:
:<-,4
:<-,#&(7@%/

m jGT.?y
m ~ %#&(7y
-,4
m -,4`(70>:<5=?y
m 8I ?y
m 8}fD~qO?y
=(7;5@=G0I=l|"Tu8|6}F
|6(7+,%:-,`(75-,#&(
m :(*{G:?y
fD:<(7#&85-,/1:<(7=
m 5-,#&(7jG@%/qy

:<-,/1:(7=?`%7+
3-,/1:
3-,/1:
{-,4

5-,#&(7f/1:(7=?`%+
3-,/1:<
3-,/1:<
m 6f y

Defined In

3:-,+,wG/% N :<-,#&(S _
-,/10>+,34(5wZ0GS _
3:<-,+,wG;1(*5M4(70>+,S _
-,/10>+,34(wG@:<;=(*S _
~nwZ
-,/10>+,34(5wZ@:;5=(7S _
-,/10>+,34(wG0ZS _ =
-,/10>+,34(wG@:<;5=?(*S _
-,/10>+,34(wG@:<;=(*S _
-,/10>+,34(wG@:<;5=?(*S _
-,/10>+,34(wG@:<;=(*S _
-,/102+,34(5wZ0GS _ =
-,/10>+,34(wG@:<;5=?(*S _
-,/102+,34(5wZ0GS _ =
-,/10>+,34(wG@:<;5=?(*S _
-,/10>+,34(wG;(*5M4(*02+,S _
-,/102+,34(wZ@.5:;5=(7S _
-,/102+,34(wZ@.5:;5=(7S _
-,/10>+,34(wG@5:<;=(7S _
3:<-,+,wZ;1(*5M4(70>+,S _
3:<-,+,wZ;c(75M4(*02+,S _
-,/102+,34(5wZ@:;5=(7S _
3:<-,+,wG/% N :-,#&(S _
-,/10>+,34(wG@:;5=(7S _
:<5=?%;5(wG-,:(7#&@.:=VS _
-,/10>+,34(wG0GS _ 5=
-,/10>+,34(wG@:<;5=?(*S _
3:-,+,wG/% N :<-,#&(S _
-,/102+,34(5wZ0GS _
-,/102+,34(5wZ0GS _
-,/10>+,34(wG@:;5=(7S _

fD/1:<(7=?/1%#&(7/1:<(7X85:<;=(760>5/1-,4(7=?%d3/K:-,@ N %(U0>#&93/K! N +, N 4(U#&(7#&=?-,%!2S%6CD3/1M



0>-,5/1(7i4(7)/1-,4%i@5= (7+633%=?-,r\3(]3:(*44(7)/1([ N =(O3/:<-,@B(7/:3=?/4(7)/1(7/+,%


C5=?#&%](7/B\53(O8:;5=(7L@3(74(K@(7=?%=
 N =(K*+ST:<n(7X^8:;5=(75+,r%+,#&%0>(7/1%=?OJ
=(703@(7=?%=?d+,4%:g4(*4(d4-,0>qJ 5+,q3%=?u3gCD3/10>-,/1(7I4(*)/1-,4%I@="(7+33%=?-,
@%=?%-,/1:<=5430>-,=^JL@=50>(7%*=h+,"4%:X7%02#&@%=?% N :(*/1(7=h+,%%+,-,4%U4(g+,W4%:SV
:-,@ N %(Y@3(74(7/9:(7/1(*=l3/1i4(U+,56:=(7"C=V#&%:<W-,/1:<(7=?/15W-,;53-,(7/1:<(7a
b
b
b

@% N i
J `%+,3(7X){G(*4M+,(7/1;5:_
@% N i
J =(7CQ(7=(*/102(*X){(74M+,(*/1;:<_
@% N i
J =(7CQ(7=(*/102(*X`c%=V-,% N +,(7M+,(7/1;5:_

":<-,@"@5=`%+,5=^+,L@3(*4(7/9:<(7/1(7=^X*U N J5:(7"4(I+,5/1;5-,:<34 m -,/102+,3-Z3K0>5#&@.3M


:%45=?%U@5=?:<%d:-,@g@=l`%+,=h4(5:<=56:<%#&%1yzS85:<;=(76#&-,#&95+,i@%%
+,W:<-,@5
(7/1:<(7=u@5=^`%+,=VS? ( N (*=V%:<(7/1(7=^0>3-,4%4 %+4(7)/1-,=^3":<-,@5l@%=V%Y\3(:<(7/1;5%/9(7+#&-,#&
:%#&%1 m (7/ N J5:(*y(7/R:<54%U+,%
%=\3-,:<(70>:3=?%S8=Y(VPQ(7#&@.+,5X(7+:<-,@
(7U@(7+,-,;5=5
@=?\53( (74( N J:<(7(7/&%+,;53/1%#&\3-,/1%UJO4( x N J5:(*U(*/&5:<=?%X5#&long
-,(7/1:=?%\3((*+.:-,M
@
(7Y4( N J:<(7(7/]+,%L#&%J55=?,%4(d+,%Y#&\3-,/1% /1-,{ m %3/1\53(u/1K(7/&+,%#[%J=?,%
4(902int
#&@3:<%45=(* @(7=?/1%+,(7yzS/1% -,#&@+,(7#&(7/1:<%0>-,/B=V%e5/1% N +,(94(7+:-,@
(7/o+,%
int4
#&\3-,/1%6/1-,{d@4=?,%
(7=*a
/* 4-byte integer, passed by value */
typedef int int4;

T/R(7+5:<=]+,%45X+,d:<-,@5
4(L+,5/1;5-,:<34B)GPQ%94(L0>3%+,\3-,(7=I:%#&%1[(L@3(74(7/R@%%=g@=
=(7CQ(7=(*/102-,%cS8="(VPQ(7#&@.+,5X%\35(
@=(7(7/1:<%d3/1% -,#&@+,(*#&(7/1:<%0>-,5/O4(U(VPQ(7#&@+,q4(U3/K:<-,@
4(8:<;5=?(*a
/* 16-byte structure, passed by reference */
typedef struct
{
double x, y;
} Point;

jZ+, +,6@3/1:<(7=h%U:<%+,(7l:<-,@5l(I@3(74(7/i3%=%+,%_1=?%U4(I@%%=+,60>#&L%=?;53#&(7/1:<5
4(d(7/1:=?%4%u 4(d=(7:=?/1 (7/]+,%YC3/10>-,/1(7Y4(d8:;5=(7S5-,/1%+,#&(7/1:<(7X:<545Y+,Y:-,@Y4(
+,5/1;5-,:<34[`%=?-,% N +,(U(
4( N (*/q@%%=:%# N -,7/ @="=(7C (7=(7/10>-,%1Sz54g+,g:<-,@W4(U+,/1;5-,:34
`%=V-,% N +,(L4( N (*/n0>#&(7/1e%=g0>5/n3/R0>%#&@]+,(*/1;:<_4((7{G%02:<%*#&(7/1:(i N J5:(*XJ[:45U+,
4%:<5i\3(]([:<(7/1;%/\3([%+,#&%02(*/1%= 4(*/1:=o4([(*(]:<-,@B4( N (*/(7:<%= -,:<3%4q(7/+,%
#&(7#&=V-,%U-,/1#&(74-,%:<%#&(7/1:<(Y%
0>/1:-,/13%02-,/ 4(Y(*(Y02%#&@L+,(*/1;:<_"SzT+Z0>%#&@+,(7/1;5:_q(7"+,%
+,5/1;5-,:<34]:<:%+4(U+,%
(*:=30>:3=?% m (*"4(70>-,=<X-,/102+,3J5(U(7+:<%#&%1i4(7+02%#&@i+,(*/1;:<_K#&-#&cyzS
854(*#&564(7)/1-,=l(*+:-,@L:(7{:<i0>5#&L-,;53(a
typedef struct {
int4 length;
char data[1];
} text;

} N ` -,%#&(*/1:(7X(*+50>%#&@.i4%:<%
/19(763)0>-,(7/1:<(7#&(*/1:(
+,%=;5i@%=?%
%+,#&%02(*/1%=:4%6+,%W0>%M
4(7/1%6@- N +,(*G(7W-,#&@5- N +Q(d4(70>+,%=%=":<%+5(7:=30>:3=?%u(7/]FS+c#[%/1-,@3+,%=":<-,@5g4(U+,5/1M
;-,:<34n`%=?-,% N +,(7XG4( N (7#&Y:(*/1(7=W0>3-,4%4q4(u=?(*(*=V`%*=g+,%0>%/1:-,4%4R4(u#&(7#&=V-,%0>5=?=(70>:%



J]4(-,/1-,0>-,%+,-,e%=g(7+.0>%#&@K+,(7/1;5:_"S78=Y(VPQ(7#&@+,X-.\3-,-,7=?%#&5
%+,#&%0>(7/1%=W N J:<(7U(7/
3/1%
(7:=30>:<3=?%
:<(7{:X@4=?,%#&"3%=h3/ CD=?%;5#&(7/1:<L4(U024-,;5i0>5#[9(7:(5a
#include "postgres.h"
...
char buffer[40]; /* our source data */
...
text *destination = (text *) palloc(VARHDRSZ + 40);
destination- length = VARHDRSZ + 40;
memmove(destination- data, buffer, 40);
...

_1=?%i\3(i_1(7#&d`-,:[:<54%d+,%U(7:=30>:3=?%U@5- N +,(7
@%=?%i+,d:-,@.5 N %(*X5@54(7#&
#&5:<=V%=h%+,;53/1g(VPQ(7#&@+,W4(UC3/10>-,/1(76=(7%+,(7SVjG3@/1;%d\53(
(7"%a
funcs.c

#include = string.h
#include "postgres.h"
/* By Value */
int
add_one(int arg)
{
return(arg + 1);
}
/* By Reference, Fixed Length */
Point *
makepoint(Point *pointx, Point *pointy )
{
Point
*new_point = (Point *) palloc(sizeof(Point));
new_point->x = pointx->x;
new_point->y = pointy->y;
return new_point;
}
/* By Reference, Variable Length */
text *
copytext(text *t)
{
/*
* VARSIZE is the total size of the struct in bytes.
*/
text *new_t = (text *) palloc(VARSIZE(t));
memset(new_t, 0, VARSIZE(t));
VARSIZE(new_t) = VARSIZE(t);
/*
* VARDATA is a pointer to the data region of the struct.
*/
memcpy((void *) VARDATA(new_t), /* destination */
(void *) VARDATA(t),
/* source */
VARSIZE(t)-VARHDRSZ);
/* how many bytes */
return(new_t);
}
text *



concat_text(text *arg1, text *arg2)


{
int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
text *new_text = (text *) palloc(new_text_size);
memset((void *) new_text, 0, new_text_size);
VARSIZE(new_text) = new_text_size;
strncpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1)VARHDRSZ);
strncat(VARDATA(new_text), VARDATA(arg2), VARSIZE(arg2)VARHDRSZ);
return (new_text);
}

}L/ }jGhwG
s (Us 3+,4[:<J5@(a
CREATE FUNCTION add_one(int4) RETURNS int4
AS PGROOT/tutorial/funcs.so LANGUAGE c;
CREATE FUNCTION makepoint(point, point) RETURNS point
AS PGROOT/tutorial/funcs.so LANGUAGE c;
CREATE FUNCTION concat_text(text, text) RETURNS text
AS PGROOT/tutorial/funcs.so LANGUAGE c;
CREATE FUNCTION copytext(text) RETURNS text
AS PGROOT/tutorial/funcs.so LANGUAGE c;

T/9:=l-,:<(7#&%X@4=?,%#&l:(*/1(7=^\3((7@(*02-,)0>%=+,%U(*{G:<(7/1-,/q4(7+G/1# N =(Y4(7+)0>_1(7M
=L0>#&&S + m @%=?%U-,/14-,0>%=l\53(U(763/1%U+,- N =?(*=V% m  N - N +,-,:(*02%y10>#&@%=?:-,4%yS

Funciones del Lenguaje C sobre Tipos Compuestos


:<-,@5
02#&@3(7:<5
/1[:-,(*/1(7/n3/nC=V#&%:[)GPQ[0>5#&]+,%
(*:<=302:<3=?%
4(FLS7%U-,/1M
:%/102-,%"4(U3/K:<-,@i0>5#&@.3(7:9@3(*4(7/ 0>5/1:<(7/1(7=h0>%#&@56/13+,+S4(*#&X+,5W:-,@g0>#&M
@3(7:I\3(u5/[@%=V:<(d4(
3/1%IPQ(7=V%=\3,%u4(d_1(7=(7/10>-,%u@3(74(7/O:(*/1(7=60>%#&@I4-,C(7=(7/1:<(7
=(7@(0>:<q%u5:<=5I#&-,(*# N =?g4(
+,%u#&-,#&%gP<(*=V%=\3%d4(
_1(7=(7/10>-,%1S85="(7+,+,5X8:<;=(*I@=5M
@=?0>-,/1%
3/1%d-,/1:(*=VC%eU@=50>(743=?%7+5@%=?%
%0>0>(741(7=l%d+,602%#&@5W4(+,g:<-,@5W02#&@3(7:<5
4(74(LFSFI3%/14[8:<;5=?(*d@=02(*%93/n0>5/PQ3/:[4(-,/1:<%/10>-,%X10>%4%9-,/1:<%/10>-,%q(i@%M
%=Vd% 3&C3/10>-,5/O02#& 3/1%(*:<=302:<3=?% @%0>%u4(d:-,@
SjG3@5/1;5% \3(u\53(*=(7#&
TUPLE
(70>=V- N -,=3/1%dC3/102-,/ @%=?%U=(7@/14(7=%d+,%
0>5/13+,:<%
* SELECT name, c_overpaid(EMP, 1500) AS overpaid
FROM EMP
WHERE name = Bill or name = Sam;

T/q+,%d0>5/13+,:<%d%/1:(*=V-,=<X@54(7#&W4(7)/1-,=h025`(7=?@%-,4 02#&^a
#include "postgres.h"
#include "executor/executor.h"

/* for GetAttributeByName() */

bool
c_overpaid(TupleTableSlot *t, /* the current instance of EMP */



int4 limit)
{
bool isnull = false;
int4 salary;
salary = (int4) GetAttributeByName(t, "salary", &isnull);
if (isnull)
return (false);
return(salary limit);
}

(*+,% C3/10>-,5/&4(u-,:<(7#&%4(u8:;5=(7\3( 4(*`c3(*+,`c(d+,U%:<=?- N 3M


:GetAttributeByName
IC3(7=?%u4(u+,% -,/1:%/10>-,%%0>:3%+S5-,(7/1(d:=(7g%=;3#&(*/1:a>(7+%=;3#&(7/1:<q4(d:-,@  8T
@%%41q% +,%uC3/10>-,5/1X(7+/15# N =(
4(7+5%:<=V- N 3:<94(7(7%45XJq3/O@%=?#&(7:<=i4(U=(7:<5=?/1q\3(
4(70>=V- N ( -6(7+"%:<=V- N 3:<r(7L/13+,+S
%+,-,/c(7%=?]+,5i4%:<5L%@=@-,%4%*M
#&(7/1:<( 4(uC5=?#&%L\3( 3:<(74@3(*4GetAttributeByName
%0>/1`c(*=V:<-,=g3R`%+,=g4( =(7:<5=?/1 %+1:<-,@K4(7(7%4^S8=
(VPQ(7#&@+,X5-.:-,(7/c(3/&%:=?- N 3:K/1%#&( \3((74(7+.:<-,@K/1%#&(7X5+,%i++,%#&%4% %
GetAttribu(*=V%
%a
teByName

char *str;
...
str = (char *) GetAttributeByName(t, "name", &isnull)

%
0>5/c3+,:<%d-,;53-,(7/1:<(U@(7=?#&-,:<(U\3(U85:<;=(760>5/1e0>%
%
+,%dC3/10>-,5/ 0>`c(*=V@%-,4ga
* CREATE FUNCTION c_overpaid(EMP, int4) RETURNS bool
AS PGROOT/tutorial/obj/funcs.so LANGUAGE c;

3/1\3(I_1%JC5=?#&%h4(I0>5/1:<=?3-,=/13(7`%h-,/1:<%/10>-,%"4(g#&4-,)02%=+,%l-,/1:<%/10>-,%l(7{-,M
:(*/1:(74(74(64(*/1:=U4(63/1%YC3/10>-,/LFIX>7:%5/L4(7#&%-,%4U02#&@+,(?P<%^@%=?%W4-,0>3:<-,=?+,%
(7/q(7:<(U#&%/13%+S

Escribiendo cdigo

_1=?%Y`+,`c(*#&5h%I+,%I:<%=(7%g#&4-,CD0>-,+4(W(70>=?- N -,=CD3/10>-,/1(7h4(*++,(*/1;3%PQ(W4(W@=5;5=?%#&%M
0>-,5/"SW`-,^a>(7:%d(70>0>-,5/O4(7+5#&%/13%+5/1q+,(
_1%=Vd3/K@=;=?%#&%4=VS ( N (
:(7/1(*="3/K;=?%/
0>5/10>-,#&-,(7/1:R4(iF m -,/10>+,3J(7/14&(7+3&4(i@3/1:<(7=5uJR(*+^%4#&-,/1-,:<=?%4=U4(i#&(7#&=V-,%
#&%+,+,02y.%/1:<(7g4(
-,/1:<(7/1:<%="(70>=V- N -,=lCD3/10>-,/1(7IF@%=?%d3%=V+,%W0>/]85:<;=(7S>3/1\3(
(7M
=V%L@- N +,(i02%=;5%*=YC3/10>-,5/1(7U(70>=V-,:<%U(7/R+,(7/1;53%PQ(7
4-,:<-,/1:d%iF(7/R85:;5=(7X5(7[(*U%
#&(7/134&4-,C02-,+ m 023%/14&(7u@- N +,(q_1%0>(7=?+,&0>5#&@+,(*:%#&(*/1:(7y"@5=\3(9:= +,(7/1;53%zP<(*X
:%+,(7u0>5#&n5}L||"~ Jn8%0>%+h%K#&(7/134R/1-,;53(7/B+,%O#&-,#&% z>?V>n
>o?
 \3( FLSGT:<n(*X.5:<=5+,(7/1;53%PQ(7 /1n@%%/r%=;53#&(7/1:<5 J4(7`3(7+,`(7/o`%+,=(7 (7/1:<=(
C3/102-,/1(7u4(q+,% #&-,#&%OC5=?#&%1S85=U(*:<%K=?%e/1X1%3#&-,=(*#&5u\53( +,%uC3/10>-,/1(7 4(93
+,(7/1;53%PQ(4(U@=;=?%#&%*02-,/K(7:/ (70>=?-,:%"(7/ FS
%UCD3/10>-,/1(7 F 0>5/:-,@ N %(i0>5#&&%=?;53#&(7/1:<5d(i@3(*4(7/n(702=?- N -,=4(i3/1%qC5=?#&%
(7/10>-,+,+,%1SG(7\3-,`%+,(7/1:<(7F 4(q+,5L:-,@.5-,/1:<(7=V/1L4( 8:<;5=?(*L/%0>02(*- N +,(* (7/B3/
)02_1(*=?nF (O-,/c02+,3J5(]02#&r3/)0>_1(7=
PGROOT/src/backend/utils/builtins.h
4(0>% N (70>(2=V%cSzT
:L(U@3(*4(0>5/1(*;3-,=h(702=?- N -,(7/14
#include



utils/builtins.h

%+Z@=?-,/10>-,@-,i4(*+5)0>_1(7=CD3(*/1:(UFS
%"=(7;5+,% N -,0>%"@%=?%U0>/1:=3-,="C3/10>-,5/1(*WF/ +,%W-,;53-,(7/1:(*a
%u#&%J=?,%d4(U+,I)0>_1(7=5W02% N (70>(=?% m -,/102+,34(*y.@%=V%
8:;5=(7g4( N (7=V%/ (7:%=lJ5% -,/1M
m `c(*=h5-,;53=V%
ySz ( N (7=V%
-,/10>+,3-,=l-,(7#&@=(
:<%+,%4"(7/
b

PGROOT/include

-I$PGROOT/include

(7/i3"+,/1(7%l4(I+,+,%#&%4%%0>0GSV`c(*02(*X*@54=V%U(7/10>/1:=?%=^\3(/1(*02(*-,:<%U)0>_1(7=l02% N (*M
0>(7=?%\53((7:/q(7/9(7+Z0>4-,;5LC3(7/1:<(Y4(*+Z(*=V`-,4=^#&-,#& m (7l4(70>-,=<X7/1(*02(*-,:<%U3/q)0>_1(7=
\3(i/1&_1(*#&5u-,/1:<%+,%4[(*/-,/10>+,34(7yzST/n(75
02%u@3(74(L/1(70>(7-,:%=Y%1%4-,=I3/1&
#&"4(
-I$PGROOT/src/backend
-I$PGROOT/src/backend/include
-I$PGROOT/src/backend/port/ = PORTNAME
-I$PGROOT/src/backend/obj

b
b

m 4/14(mpg8}|~ ABTrqo(*W(*+5/1# N =(4(7+@3(*=V:<5X@.5=h(VPQ(7#&@+,X%+,@_1%


=l@%=0>yzS
+5=?(*(*=V`Z%="#&(7#&=?-,%XG3(
+,%W=?3:<-,/1%I4(
8:<;5=?(*g@%+,+,0YJ @C=(2(
(7/]`(7ed4(
+,%g=3:-,M
/1%Y4(u+,%i+,- N =(7=?,% 4( F0>5=?=(7@5/14-,(7/1:(*Y#&%+,+,0dJOC=(7(ZS*%L#&(7#&=?-,%i=(7(7=?`%4%@5=
@%+,+,50g(+,- N (*=V%=V
%3:#&:-,0>%#&(*/1:(U%+)/1%+4(U0>%4%
:<=?%/1%0>02-,/1X@=(7`-,/1-,(7/14LC%+,+,5
4(Y#&(7#&=V-,%1S
jZ-,(*#&@=(0>7/1:<=?(*((7/R+,5 N J5:<(7d4( 3
(7:=30>:3=?%U3%/14[#&(7#&(7:l N e(7=^S*E%=V-,%
=3:-/1% m :<%+,(70>5#&O(7+.#&7:<4]4( %020>(* _1%_1X_1%_iPQ5-,/nJ](*+.%+,;55=?-,:#&]=?:y0>5#&M
@3:<%/CD3/10>-,/1(7 4(]+, N -,:<q@3=q0>5/1:<(7/1-,4 (7/3(*:<=302:<3=V%cSf/10>+,3-g3:(*4
-,/1-,0>-,%+,-,e%L:45
+,5
0>%#&@5U4(L3(7:=30>:3=?%X5@3(*4(L_1% N (7=g`c%=V-, N J5:<(7d4( =?(*+,+,(7/1
4(u%+,-,/1(7%0>-,/ m %;53ZPQ(7=(7/&+,%L(*:<=302:<3=?%y\3(@3(74(*/&02/1:<(7/1(7=g`%+,5=(7Y-,/10>=V=(*02:<5
 N %3=?%1S
%g#&%J=?,%I4(W+,h:-,@h-,/1:<(7=?/15h4(W8:;5=(7(W4(70>+,%=?%/ (7/
X2@5=.(7u(7
postgres.h
3/1% N 3(7/1%-,4(7%I-,/102+,3-,=^-,(7#&@=(g(7(g)0>_1(7=u:<%# N -,7/"SfD/10>+,3J5(7/1
4@5:<;=(7S _L-,/102+,3-,=?
:<%# N -,7/q(7+,;S _OJL@%+,+,0GS _ @5=h3:<(74gS
FY#&@-,+,%=gJ]0>%=;5%7=g3024-,;5O N PQ(7:O@%=?%L\3(L(@3(*4%L0>%=;5%7=g4-,/1#&-,0>%#&(7/1:<((*/
8:<;5=?(*I-,(7#&@=(
=(7\3-,(7=(0%; m  N %/14(*=V%y.(7@(70>-,%+,(7SE(7= 5os>>>5V>W
V2,1t2 V @%=V%g3/1%Y(7{@+,-,0>%0>-,5/4(7:<%+,+,%4%W4(g0>#& _1%0>(7=V+,
@%=?%g39-,:<(7#&%I5@.(7M
=?%:<-,`c0>5/10>=(7:<S

Sobrecarga de funciones

jZ(@3(74(i4(7)/1-,=U#&
4(93/1%qC3/10>-,5/0>5/(7+#&-,#&R/1# N =(*X1-,(7#&@=(i\3(9+,u%=;3M
#&(7/1:<5l\3(I:#&(7/9(*%/i4-,C(7=(7/c:(7ST/9:=?%h@%+,% N =V%*X7+,"/c5# N =(7l4(g+,%hC3/10>-,5/1(*l(
@3(74(*/ ?>z> 1> S>/1% C3/10>-,5/[@3(*4(u:<(7/1(*=g%4(7#&W(7+1#&-,#&K/15# N =( \53( 3/[%:<=?-,M
N 3:^S2T/O(7+c0>% 4(
\3(u_1%J% %# N -,;u(74%4[(7/1:<=(
3/1%C3/102-,/[ N =?(
3/[:<-,@ 0>5#&@+,(?P<
Ji3/K%:<=V- N 3:<L4(*+5:<-,@L02#&@+,(VPQX(U3%=?
-,(7#&@=((*+%:=?- N 3:^S

Conflictos en el Espacio de Nombres

@%=V:<-,=
4(K85:<;=(7L`1S X.+,%]C5=?#&%]%+,:<(7=?/1%:-,`%O4(K+,%]0>+,33+,%]j&@%=?%O+,%[=4(7/r4(
jZkJ* / D F I)R *ED Q H R 4(7(7#&@%=?(PQ%](7+h/1# N =(K4(9+,%]C3/10>-,5/BjGk4(7+/15# N =(
4(LC3/10>-,5/n(7/n(7+0>54-,;5[C3(7/1:<(iFLS7T:%9(7
%_1=V%9+,%9:<70>/1-,0>%9@=(7C(7=?-,4.%q@%=?%i=(7%*+,-,e%=I+,%
 N =(70>%*=?;5%
4(YCD3/10>-,/1(7S



Pre-v6.6
8%=V%"C3/102-,/1(7^(702=?-,:<%^(*/FIX(7+7/1# N =?("jZki4(70>+,%=?%74
(7/K* / D F IKR *ED Q H R 4( N (
(7="(7{%0>:%#&(7/1:(
(*+#&-,#& \3( (*+/1# N =(u=(*%+4(d+,%uC3/10>-,5/](7/](*+0>54-,; F m 4( N -,49%
(7:L4( N ((7=3/ /15# N =(U4(YC3/10>-,/O4(F+,(*;%+,yzS
%Jn3/1%O3:-,+l0>/1(70>3(7/10>-,%O4(q(7:(q=(7:=?-,0>02-,/"aG#&-,(*/1:=?% +,% =3:-,/1%L4(q0>%=;% 4-,/1M
#&-,0>%d(7/+,%K#&%J=?,%q4(i+,5u-,:<(7#&%u@(7=?%:<-,`cu(7:</o#&%d\3(qC(*+,-,02(*d4(i@(7=?#&-,:<-,=V+,(
0>%=;Z%=l0>3%+,\3-,(*=l/1#&(7=L4(U+,- N =?(*=V%"0>5#&@%=?:<-,4%6\3(U0>5/1:<-,(7/1(7/O/15# N =(764(UC3/10>-,5M
/1(70>5/-,02:<-,`5 m 02/B-,47/1:<-,0>5/1# N =(7yDX.@3(74(7/1X.4(K_1(70>_1X0>_1%@30>(7%*=u+,%K02%=?;5% 4(
C5=?#&%g-,/1:<(7=(7%/1:<(7S8=6(VPQ(7#&@.+,5X-3:<(74[4(7)/1(d3/1%C3/10>-,5/O4-,/1#&-,0>%#&(7/1:<(d02%=?;5%*M
4%i\3(L=(73+,:<%i:(*/1(7=Y(*+#[-,#&]/15# N =(L\3(L3/1%9C3/10>-,5/R@(*=V:<(7/1(70>-,(7/1:<(L%i8:<;=(*X(*+
0>%=;Z%4= TFn}jZwGY4-/1#&-,0>d_1%0>(W\3(W8:;5=(7+,+,%#&(W%I+,%IC3/10>-,5/4(7/1:<=
4(W*+#&-,M
#&]@=(7C (7=?- N +,(7#&(7/1:<(L%i4(VPQ%=g\3(L8:<;=(*
+,+,%#&( %93C3/10>-,5/"S78=Y(7:<5X5-\3-,(7=(L\3(
3OC3/10>-,/O(3(U(7/ 4-,C(7=(2/1:(*W%=\53-,:<(70>:<3=?%X=(70>#&(7/14%#&"\3(U/1i N =?(*02%=;3(I+,5
/15# N =(7"4(U+,%6C3/10>-,/1(7gFS
%JU3/L:<=302U-,/1;(*/1-,5>
@%=?%W=(7+,`c(*=1(*+@.=? N +,(7#&%W\53(g(6%0>% N %"4(64(70>=V- N -,=VS %4
\3(
/1i_1%J9@= N +,(7#&%6%+5 N =?(*0>%=;Z%=lC3/10>-,5/1(*gjGkLX3:<(74]@3(74(U4(7)/1-,=l3/K02/PQ3/1:94(
C3/102-,/1(7lFo0>5/i/15# N =(7l4-,C(7=(2/1:<(7lJ(7/1:/10>(7l4(7)/1-,=^3/90>/P<3/1:<L4(gC3/10>-,5/1(*"jGk
0>5/O-,47/1:<-,02Y/1# N =(*Y\3(u:<5#&(*/[+,Y:-,@Y4(d%=;3#&(7/1:<I%@=@-,%4gJK+,+,%#&(7/O%+,%
C3/102-,/ F0>5=?=(7@/14-,(7/1:<(S
}L:<=?%Y+,30>-,5/q(7/13%=+,%Y0>%=;Z%4-,/1#&-,02%X*-,/1 (7/1+,%e%=3hC3/10>-,/1(7l%+ N %0>'(7/14q:M
:-,0>%#&(*/1:(J[4(70>+,%=%=?+,%U02#&[C3/10>-,5/1(*
f~ T|6~qgS*T/1:</102(*Xc+,%UC3/102-,/1(7U4( N (7/
:(*/1(7=U:4% /1# N =(7uF4-,:-,/1:<5@(7=&(q@3(74(7/4(70>+,%=?%7=
0>/r+,5#&-,#&L/1# N =(7
jZk m -,(*#&@=(9\53( +,L:<-,@ 4(q3 %=;53#&(7/1:<5 4-,)(7=?%/1X1@5=
3@3(7:yzST:<%KC=V#&%
(7`-,:%+,%U N =(*02%=;5%4(Y3/1%
C3/10>-,5/qs =?%@@(*= m (7/1`+,`c(*/1:(7ycjGkX70>5/q+,%4(7`(7/1:%zP<%4(
3/[#&%J55=g(7C3(7=?eq@%=?%@.=?(*@%=%=W3/&(VPQ(70>3:<% N +,( 4(*+ N %0>'(7/14&%L#&(*4-,4%1S m T:<%@0>-,5/
(7:U4-,@.5/1- N +,(U+,i(7/ +,%
`(7=?-,5/ 1S vJ9@:(7=?-,=(7X4%4\3(+,%6`(7=?-,/1(76%/1:(*=V-,=(7
=(7\3(7=?,%*/nCD3/10>-,/1(7d-,/1:<(7=?/1%d@.%=V%L:(7/1(*=Y(7+#&-,#&[/1# N =?(i(*/njGkr\3(L(7/n(7+0>54-,;5
FLS y



Captulo 34. Extendiendo SQL: Tipos


FY#&u(g#&(*/10>-,5/1 %/1:<(7=?-,5=?#&(7/1:<(7X2_1%J 4h0>+,%(74(W:<-,@5(7/i8:<;5=?(*a:<-,@5 N %( m 4(*M
)/1-,45(7/]3/&+,(*/1;3%zP<(4( @=;=?%#&%0-,/1yJO:-,@02#&@3(7:<5 m -,/1:<%/10>-,%yzS2(VPQ(7#&M
@+,9(7/(7:<%[(*020>-,/_1%:<%[+,594(O,/14-,0>(7L4(O-,/1:<(7=?CD%e]([@.3(74(7/(7/10>/1:=?%=u(7/
comJ
SW(?P<(*#&@+,560>5#&@.3(*:<g(7:</ (7/
S
plex.sql

complex.c

funcs.sql

Tipos Definidos por el Usuario


Funciones Necesarias para un Tipo Definido por el Usuario

/o:-,@R4(7)/1-,4n@=d(*+h33%=V-,R4( N (q:(*/1(7=
-,(7#&@=(9CD3/10>-,/1(74( (*/1:=?%4% Jn%+,-,4%1S
T:%"C3/10>-,5/1(*g4(7:<(7=?#&-,/1%/ 0>5#&9%@%=$(*02(Y(7+:-,@9(*/ +,%W0>%4(*/1% m @.%=V%+,%d(7/1:<=V%4%
@=
(7+Z33%=?-,LJL+,%
%+,-,4%U@.%=V%(7+Z33%=?-,5ycJ90>#&i(=;%/1-,e%U(7+Z:<-,@i(*/q#&(7#&=V-,%1SV%UC3/1M
0>-,5/4(W(7/1:<=V%4%W:#&%I3/1%Y0>%4(7/1%g4(60>%=?%0>:(2=(74(*+,-,#&-,:%4%g@5=./13+,+0>5#&u3i(7/1:<=V%4%gJ
4(7`3(7+,`(+,%u=(7@=$(*(*/1:%0>-,/O-,/1:<(7=?/1% m (7/ #&(7#&=V-,%y.4(7+:<-,@S%dC3/10>-,5/K4(
%+,-,4%d:<5#&%
+,%O=(7@=(2(7/1:<%0>-,5/B-,/1:<(7=?/1%]4(7+l:<-,@J4(*`c3(7+,`(q3/1%]0>%4(2/1%]4( 0>%=?%0>:(*=(4(7+,-,#&-,:<%4%
@=/13+,+SjG3@/1;%q\3(9\3(7=(7#&u4(*)/1-,=Y3/:-,@.&02#&@+,(VPQR\3(i=(7@=(2(*/1:% /1#&(7=
0>5#&@+,(?P<S>~q%:3=?%+,#&(7/1:<(7X(7+,(*;-,#&g=(7@=(2(7/1:<%=l3/K0>5#&@+,(?P<9(*/O#&(*#&5=?-,%u0>5#&9+,%d-,M
;3-,(*/1:(U(*:<=302:<3=V%U(7/ FLa
typedef struct Complex {
double
x;
double
y;
} Complex;

J[3/1%q0>%4(7/1%L4(L+,%qCD=?#&% m {XJ5yl0>#&&+,%9=?(*@=((7/1:<%0>-,5/n(7{:(*=V/1%94(L+,%902%4(7/1%1S*T:<%
C3/102-,/1(7W/15=?#&%+,#&(7/1:<(d/1q/]4-,CD0>-,+,(7g4(
(*0>=?- N -,=X(*@.(70>-,%+,#&(7/1:<(d+,%uC3/10>-,5/O4(U%+,-,M
4%1SVjG-,/ (7# N %=;55X_c%J9`%=?-,5"@3/1:<5W%
=(70>5=41%=7a

+.4(7)/1-,=Y3o=(*@=$(7(7/1:<%0>-,5/R(*{G:<(7=?/1% m 0>%4(7/1%y Xc=(*023(2=4(\3(L%+.)/1%+4( N ( (70>=?- N -,=


3/9@%=V(7=.02#&@+,(7:<J =? N 3: @%=?%(*%Y=(7@=(2(7/1:%02-,/90>#&L3 C3/10>-,5/94(I(*/1:=?%4%b
Complex *
complex_in(char *str)
{
double x, y;
Complex *result;
if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2) {
elog(WARN, "complex_in: error in parsing
return NULL;
}
result = (Complex *)palloc(sizeof(Complex));
result- x = x;
result- y = y;
return (result);
}

%UCD3/10>-,/K4(%+,-,4%
@3(74((7=l(7/10>-,+,+,%#&(*/1:(5a

char *
complex_out(Complex *complex)
{
char *result;
if (complex == NULL)
return(NULL);
result = (char *) palloc(60);



sprintf(result, "(%g,%g)", complex- x, complexy);


return(result);
}

( N (*=V% -/1:(7/1:<%=W_1%0>(7=6+,%gCD3/10>-,/1(7Y4(d(7/1:<=V%4%J %+,-,4% -,/1`(7=V%Y+,% 3/1% %+,% 5:<=V%cS


jG-/1[+,[_1%0>(7X:<(7/14=?9@= N +,(*#&%
(7=?-,d0>3%/14]/c(70>(7-,:(i`5+,0>%=I3
4%:<5U(7/n3/)M
0>_1(7= JO4(7@37+,(7(7=?+, m @=g(VPQ(7#&@+,Xc(*/&+,% N %( 4( 4%:<54(u5:<=V%i@.(7=?/1%i(7/&:<=V%
0>#&@3:%4=?%yzS>T:<(d(7I3/[@= N +,(7#&%u@%=?:-,0>3+,%=?#&(7/1:<(u0>#&/[0>3%/14q_1%JK/1#&(7=
(7/q@.3/1:m5:<%/1:<(U4(@=l#&(*4-,S

8%=V%K4(7)/1-,=d(7+l:-,@.o0>5#&@.+,(VPQ5X^/1(70>(7-,:<%#&50>=(7%=
+,%4CD3/10>-,/1(7L4(7)/1-,4%@=u(7+
33%=V-,0>5#&@+,(*{G-,/ Ji02#&@+,(7{3:1%/1:<(764(0>=(7%*=l(7+:<-,@a
CREATE FUNCTION complex_in(opaque)
RETURNS complex
AS PGROOT/tutorial/obj/complex.so
LANGUAGE c;
CREATE FUNCTION complex_out(opaque)
RETURNS opaque
AS PGROOT/tutorial/obj/complex.so
LANGUAGE c;
CREATE TYPE complex (
internallength = 16,
input = complex_in,
output = complex_out
);

FY#&u(I4-,0>3:-, %/1:<(7X28:;5=(7l5@.5=?:%Y::<%+,#&(7/1:<(I`(70>:<5=(7 m u%=V=?%J5yZ4(W:-,@.5 N %(S


4(*#&7X85:;5=(7W@=V:<%u`c(*02:<=?(*64(d:<-,@g4(7)/1-,4g@="(*+533%=?-,9:<%# N -,7/"SFY3%/1M
4q3:(74&4(7)/1(u3/]:-,@.5X8:;5=(7Y%3:<5#&:<-,0>%#&(7/1:<(u@=@=?0>-,/1%u@=V:<( @.%=V%u`(70>:M
=(7
4(9(*(9:<-,@^S8=U=V%e7/1(7u_1-,:<5=?-,0>%X.(7+:<-,@[`(70>:=:-(7/1(q(*+^#&-,#&&/1# N =(9\53(q(*+
:-,@K4(7)/1-,4K@=Y(7+.33%=?-,O0>/R(7+.0>%=?70>:(*=I3 N =?%J%4 i%/1:(*@3(7:^S*U:<-,@
0>#&M
@3(7:u/1R/1(70>(7-,:<%/o/1-,/1;53/% C3/10>-,5/4(7)/1-,4%K N =(q(*+,+,5X4%4.R\3( (*+-,:(7#[%KJ5%
0>5#&@=(7/14(0>5#&L/K@5=h4(7/1:<=S

Objetos Grandes

9:-,@.5q4-,0>3:-,45q_1%:<%&(7:(]@3/1:<B/:<45q N PQ(7:q!@(*\3(71![(7:B(*X/
#&(7/1=(7"\3(Ux](7/q:%#&%1S
Nota: 1024 longwords == 8192 bytes. De hecho, el tipo debe ser considerablemente menor que 8192 bytes, dado que las pginas y tuplas de sobrecarga de Postgres deben
caber en esta limitacin de 8KB tambin. El valor real que cabe depende de la arquitectura de la mquina.

jG-G3:(74K/1(70>(7-,:%3/q:<-,@#&";=?%/14(I@%=?%U%+,;5 0>5#&L3/q-,:<(7#&%
4(I=?(*0>3@.(7=?%70>-,5/q4(
4023#&(*/1:6 @%=V%Y%+,#&%0>(7/1%= N -,:<#&%@X/1(70>(7-,:%=?U3%=+,%-,/1:(*=VC%eY4(g;=?%/14(7l N PQ(7:
4(8:<;5=?(*S



Captulo 35. Extenediendo SQL: Operadores


v5xwzy_{S|7W } {~wzu},|{~{S|7,w1{~,r_,|{5xl,w1{,9|4{S|4o19;{~  
}|4{~{S| E},,|4|4|{# {S|4o{Sy |4x||4cxc c{S|)|},|{~{#},,|4,|
x|4{#,},{~)1|4{S|4wz|4> },|4{ {| E_,|Kwz|4yc1|4{S|4wz|4>1,c|4{Swz},|){Sy,
c|4wz %,
xw1,o cy,
;|4 xxw1|4c
%},,|4|3|w1|4{c{7|4 }|4{~{
o{{S|4xwz6E,{z{|w1 {{~>,;|4{{S{~SM},,|4,|4w1||4{wz},|r},|{~{S|4_,|4{S
7j%,|4{S|4xm},{~E,{73|4w1||4{_,|3 },|4{ {|wz|4|xyo,%,x{~
3},|{~{7|49`, {xwzow1o7}, {,c0 ,1, ,o|4wz|
_,|3o|E|wz{xz6{S|4|w1 o|4#wzn,|4|4},{c|4{S%o{S|4{
1,oMx,_o|4wz|3wz|4
|E_,|3}|o{|{|4 }|4{~{~jM|4c{Sy , },|4{ {79|4 m,M,o{x
w1 wzo}, {,|mo{Sym1{co Go ,|;,;},|4{r|% x,w1
wzc{ox,wz#,|E,x3|4 },|4{ {~~U, )|>|4xw1|r },wz,x|4{3|oK0|4l
},o{|4x31 {~co Mo`~c|4{S|4Kxw1owz9x,y{z4|4o,x|>w_o{~{|4,w1 
1{cwz
xw1|0|49|~.|4c},;|
o{S|{, },|4{ {},{
,c{91,c|4{Sro c},|~. loM 
w1{S >,cc 0_,|K6|4c3o{S|44,%,|4, c|4wz}, c},|~.4v{c|4{SM|4o|4x
w1c,01, _,|3y0|4 w1{yx.|w1 o|4#}|c# {S|4{7|4}|4{~{~
CREATE FUNCTION complex_add(complex, complex)
RETURNS complex
AS $PWD/obj/complex.so
LANGUAGE c;
CREATE OPERATOR + (
leftarg = complex,
rightarg = complex,
procedure = complex_add,
commutator = +
);

 {0},,|4c #o|4{
SELECT (a + b) AS c FROM test_complex;
+-----------+
|c
|
+-----------+
|(5.2,6.05)
|
+-----------+
|(133.42,144.95) |
+-----------+

M  w1{S >|4c Ecxwz{~Mo co{S|4{,c},|{~,{{M_,` v,{~)o{S|4{9,},|


{~{,{xc|w1| cw1|n,{y,c|4wz_,|{,G1},{n,{_,|4{S E
,n{Sy,c|4w1|4{S| o1},{`K,{~|4{S|   }{ o|4c|w1M3x|4wz|4o>|
{Sy,c|4wzmx6,o#w1|4c{S|4_,|{~ },{ > 6v, , {S|4{ },|4{
 {~mx|4wz|4o KZU) , 1 c,w1{7cxwz{~,m|4|wzm|~.|4c},|4
,
oo},o r},{c}w1c{%[ox,w1 ,|4c;|n ,|4w1|4;o|4{Sx[|
KUZ
, },{S|o| w1{oo |49|>},wzco 



Informacin de optimizacin de operador


Autor: Escrito por Tom Lane.

K;|o G|m,G },|4{ {Ev,xwzy_{S|4


},,|4|%o,{3c, x|4w1| } 
|4E_,|6o|4[xxw1|cm x,w1|43o|4{So6|) c|,},|{~ {#x|6oc}, {w1xwz
x|4w1| 9|4|x|4{}{ _|4rx|4c},{S|3_,|
x|4},{S}4 l},{S_,|
|4#},,|4|
o|4{ox|{~|c|4wz|
,c9{~},,
|~.|4o, |0o ,wzK|
,xK|_ },|4{ {~
v,|4{Sx,w13},{S |4|x|4|4E|4xwz{>x|4y,{S_,|%|4xwzc|4j)c {{|ow1,xn|),
x|4w1| E|> },wzcom},,|4|9{|xwz{|;  _,|4,|4xx,wzc|4wz|3|4{{~
|4x_n w1{
o x0cjG},,||43n},|4{E0|w1|4o0|6 },w1c 
|4xw1|y_,{Sc|%|4K,o x|4o,|4o|_,|Mox,w1)},,|4|4|~.|4o,w1{x|
c|4wzc|4wz|3|Em| |{~
|w1| #|3 },wzcoo |49},,||4Mx|4{y{S| y_#|4_|4{ |49},xwz|4{~
{S|4|Ev, wzy_{S|l,#|o{},wz4_, w1 _,|4#_,|33|{~x 0|4wz|4|_

COMMUTATOR (conmutador)
x|4wz|4o KUZ) , x|4m}{ _|4c{n, },|4{ {
_,||4%|o 
c,w1,{
|4 },|4{ {_,||xw1x|4|4, )|4oc%_,||4}|4{{ |4%|
oc,wz {|4 },|4{ {nx_1 |49y,1;j},{0w1  r#}, |49{S|4
|3|4wz{~
jjxM w1
_,|
|49wzc4|4oc,wz {| xv, {|~.|4c}, l},|{~{S|4
,  ,
yo},{9,6wz},
|w1
},{~wzo{x %,x,c|4wz|#|4w1{S|xonwz
 {|K|4j },|4{ { , |4,x,c|4wz|>o c,w1wz_6o mxy_Kcxc v,|{K|4j },|4{ {
6|4#o c,w1w1_moM,
4w1},0|{Sy_,c|w13_,|4{S3|,6 },|4{ {o c,w1,
|4|44cxc_,|#|4wz},0,|
{Sy,c|4wz6|{|o|>xMoc,wz {z4Ko||{~xSw1 o|4|4j c{S|>|j}|4{{
oc,wz {9|>w1 M|v,xwzy_{S|4E|4o|wzK}{~)x|4{#;|wzK|4 c,wz{9
|4x%|wz,%m_,|3| |wz0x|4{7},{S_|4K|4M0x|4wz|4o KUZ) ,
,Ewz%|wz|4,|43) },|4{ { c,w1{},{x4cc0x|411oc,wzwz|
w1Mx c|4wz|E ,6wzM|4xwz|4,|4K,;},{|r},|{~ {S| o c,w1,{S|4x
oxx ;,;},_,wz%c|4y_x c6},|4|9|4j},{c|4{S)x|4{|4,K{S|4,{~
 |mMwz{S,,|M[x|4,cwz,K[,)x,o ||4xwz|;}{ |4c
Kc4wz,n|4 cw1{3;x|4wz|4o KZU) , |4|4}{~c|4{>},|{~{r_,|mw1
||jM|4wzo|4E},{S ||{#,M|4n)x|4y,K,|4, n|
},|4{ {)|4x|_,|
v, wzy{|7x|#_,|r },|4{ {S| c,w1w1_ _|4|%|9r},{S| o,_|9>x|4y,
)|4,oc,w1 cw1oc|w1| _|4{6|4{K|c6x|4wz|4o 6UUK
1wz4wz|3|4M
},{c|4{0|4,o 
;wz{,c|4{;c)|wz|xc|w1|; ,{0|w1|4o KUZ)
, |;c|4,o |4 ,Kv,xw1y{S|4x},{S |E3},{c|4{0|4,o 6x|E
o,|4wz 6UU
, o|9{S|41|4{d| >>,m},|{S|4{|4lxw1||4w1||4lxwz|4c>
{K,K|4wz{~,Kx|4o K},{K||}|4{~{|n6wz){S|4 },y },|4{wz{|
xxw1|cxwz3|4wz{r| x0wz|4{Ewz 7x c|4wz|>},{~>|4j c{S|r,|4
},|4{ {z_w1}, |%{Sy,c|4w1
_,|4{Sn[|{| ox[,Gwz},c|6{S|4x,w1,|4
M_||>w1 ,|Kv,xw1y{S|4x},,|4||4,o{|4|4x|)},,wz6},{c|4{K|w1{
)ow1 y,|4 },|4{ {|4{~oK|4xK|4w1{)| xUrwz{S| o,
wzJ|4,K|4x|4y,G },|4{ {z,|4xxw1|4nn wz,|4wz{~x|4o o Z
1 {~c Uo |x|4y,|  wzJw1{wz)|,x{
|4 },|4{ {
x|4o Kwz|4>|),|)x|46| w1c wz|4{>,nc|4xx.|),|)|4{{S{~o1Mwz



xwz|>},{S |c|4wz661o 0o{{S|4owz4c|4wz|3|4;_|4{x|,|Ev,xwzy_{S|4wz|4{{S|4


03 },|{K|4 {~
3c|4{0{S|4o c|4E|Eo|4{ox

NEGATOR(negador)
3x|4wz|4o0M , j|4},{S_|4 c_{03; },|4{ {_,|E|||4y{|
}|4{~{_,|9|4xw19x|4,
|4,S;x w1{S 7|4oc_,|#,6 },|4{ { |4||y_ {
|
,n},|{~{#cc>{S|4wz{n{S|,wzE,|E1 _|4>y,16
_}{~)wzE>}, x|4E|4wz{~,>jj ;wz%_,|K[|4Ew1cn|4|4y {#| v, {
|~.|4c}, ,  ,,  M,}{7,|3|4y{S|},{~E0c{
|>w1}#|Ewz
1|{| K| KMUUK , _,}{>|)},|{~,{S|4E,{x_},,|4,|4[|{>_
c|4wz|6c{So4,0 cc|4y {S|40|w1{S|6x|4xnxy_,o{; lc|43y,1Gl
},{3wz6j6|4|4_,_|w1|3},{~E},|{~,{S|4,{|4{S|x
K},|{~{3|m|4yo G|4|mwz|4|4{3|4ccwz},c|m{Sy_,c|4wz[|4{S| [j
_,|4{SMoc|4 },|4{ {#|4cxcc_ |4wzo|43y,_,|6o KZU) ,
x6|4 c{S|3|},|{~,{|4o|4xw13|{,6|4M0x|4wz|4o
M ,
v,{ _|4|4{M , |r|
coK_,,)},{~)},wzco n|
>ox,w1>|4x|
_,|
},|4{cw1|
|4l},{S|4x|rocMMK[1 x|4{xc},,or|cKj xwz;},{S| o|
c>x|4y,|)E_,|Kwz|4|E}|4x{z }, {S_,|KMK>},,||4cx|4{#x|4{w1 E c
,0ox|4o,|4o
|>wz{~{S|4o wz{S, o |4
v,{S||9 },|4{ {S||4y {S|47},,||4%x|4{,|4,,x|jcxc)c4w1 )|4l},
o6}{~E},{S|4|Eo c,w1,{S|4

RESTRICT (Restringir)
|w1|  ,  jx|r},{S_|4,j c{K,)1o |
|4xwzconx||4ow1_
|{S|4xw1{oo)},{#|4 },|4{ {1 w19_,|#|4xwz
|4,K c{|,|91,o 0,6 c{S|
|,K},|{~,{`|w1|4o ,  mxn|4w1|#wz|4|4Kx|4wz
},{# },|4{ {|
{_,|E{S|4wz {~%{S|47 ,|4 3,|43|w1{|r;|wzc {||4ow1_)|
{S|4xw1{o %|7x,},|{_,|>1{o %,|r7|4%,Ew1rxwz1o|4{m,Ex|4wz|4o
|Eo  M |4M|4 1 {~c,{ j o,|# ;c|Ex|4x|31 {
field OP constant

},{|7}|4{~{3o {~{|4wz|,U_{0o wzwz|},{w1 ,{~jxw1xxw1|;7 },w1c


 {r|6y_,m|46|Kocw1wz30_[mx|4{9|4c3}, {>mx|4wz|4o
M m_,|rwz|4|9|4xw1|#1 {~c,{~1K,#},xr>o xw1wz|9|4xw1rrE,|4{S4|4|
},,|4||xw1{},{S|4y,w1,wz|4#|4|4x0|4,
|Eo x#},{~E_,|3x{~_| KMU
UK ,
x {|40,|4_1,o|7|#|4xwzc 6||4ow1_|#{|wz{ o 6|wzrc9|4
oo|||wz|o},w1, }|4{S3 {w1,c|4wz|#w16},,|4|,x,c|4wz|xc|4w1|,x{
,%|4xwzc {|4xw1,{,|4xwz|4cE},{>c,o |rwz,7},{S }, },|4{ {S|Sxw1 
|4xwzc{S||wz{
eqsel for =
neqsel for E
scalarltsel for
scalargtsel for

or
or

=
=



v,,|4|E},{| | {7}, o%o,{~ xm_,|0|4xw1#x ow1|y_ {x},|4{S%|#wz|4|4Mx|4wz


xwz;},|4xo|4{Sxr|#|4  w1} c|4w1|#o|},w1{`>xc|4w1|9,r1{~oo 6},|_,|4
|
r,>|4n)w1 K wz},oc|4wz|){S|4o{ c|4wz|K,)1{~oo },|4|
o|4},w1{6,%1{xo[_,||4},||)| |)Eo wzwz|4E3,|4n|c|4
{~y_K|E_ {S|4},{3|4o,c
|>0w1_33 , m0}| {co
{S|4x y_}, {|4 ) G K)m},,|4xw1
x}, |0},{0|4|4xw1c,{7|
|4ow1_  , o|4},wz{`%,%1{o c,[}, _,w1nc3{~y6,| },{~KEcc
oxw1w1|4)o c},{x},|4{S[xx,o|4wz|4c|w1|; |{~{K},{Mx|4{3oxwzxx
|4x},|4oc|w1|#|4x|9_,|rx w1{S)|wzc },{S|c|4w1|9o|4n|~z {_,|r
x},|4{Ex,}, x |>o,_,|4{c|{~~cxcoc|w1{ #x },o

},,|4|#1{S|4o,|wz|4c|w1|
|4xo},{~x|0|3,x{|_x|4m|_x|4},{
},|{~,{S| 9_,|0wz|4
|4c,;wz
;c,;x.
||4ow1_o,x;|49mx{S|4c|w1|3|4,|w1|
%6|4_,_|4wz|4xv,{7|~.|4c}, _l0|4l},{S|4x {S|y_,{ },|4{{S| |4c},{S|~.#1,
|4wz _,x0|_x|4  {S|>0x,}, x _;_,|3|4 #,x,c|4wz|Ex m|4c},{S|`.|4M,0},|4|
1{~o |3|w1{|4M,0wz
},,|4,|4#,x{7o{~wzx|4 mxo{Sy_wzx|4},{
oc},{~o |4 {S|3w1}9,|Ewz#_,|
w1||4mo|4{w1Kxy_,oKx|4o|E|>x|4{o |{~wzK|4m|4xo{S|4n4{~o #}{~>oc
},{4o |4E|){y E},x|4{|4wz},M|w1MK_,|4 E|4w1| 3}, {#
{S,w1) _|4{w1wz x {`1x{Sjo|49j,w1jwjx|41,ol jo1|w1,c|w1|4l|4x
w1{S,w1)|4|0x|4{{S||4c},}, {1o |4r},|{Swzw1},|0|4wz, 9wz{~_4
,|
,0o,c0,|E0wz3},ywz_},|},|4{S)|4x%60},x)w1 _ 1 w1% ||wz
o 
|y_,{1,o},|4{ScM|4xw1co |4},wzc,{3[|4xwz{~Gwz
|4;oc%},{
M0,o |47o |4|#||4ow1_%x|4},{~9 },|4{ {S|4y_|cw1{ 7|
x{jjx|49jw~y|4 x|41,  j{S|4|}, xw1 x|4Mo w1x|4`o|4xw1|
|4xo{~wzm|4xwz
xMx%c{x},|{Kw1},,||4_,|4{S|4{,x{~16 ,xmc|z {c|~.{{xx

JOIN (unir)
%x|4wz|4om1 M_x|0},{S | c{~m,m1,o|K|xw1co x|4| wz_3z
},{K|}|4{~{#1 w1K_,|K|4xwz|4E,c c{S|)|,%1, ,cc{S||K,
}|4{~{l)x|4w1| ) xc|4w1|;w1||4Ux|4wz}{~M },|4{ {| K{
_,|%{S|4w1 {%_{S|0 ,|4 lm|m|4wz{~3|6,|4xw1c,{Ex|4|4ow1_K.|40,
}, |4{)_,|1{ooZ|%,6|,Z},{)|Mw16xwz1o|4{`o o|
x|4w1| 3M |41{c,{
table1.field1 OP table2.field2

},{0|4}|4{~{7o{{|4w1| n;
|w1|4o ,  l|wz,
 },wzc {
c,[xxwzoc|4wz|;}|4{~nw1|4 |m|4,o{Eo,|%}, |x|4o|o#.|
},{S|3_,|3wzc|3|c|{7w1{x.
ocwz|4x,|4xw1|;o},wz,},{S ,{{`|4j} {
o c|o{{,1, U|4xwzc
 {~)x|4|4ow1_>. },|4{SMxc|w1|Kx,y|4{{S|4cE_,|w1,x|4E,|) 0|wzc {S|4
|4xw1{`#x y,
|4},o|_
eqjoinsel for =
neqjoinsel for E
scalarltjoinsel for or =
scalargtjoinsel for or =
areajoinsel for 2D area-based comparisons
positionjoinsel for 2D position-based comparisons
contjoinsel for 2D containment-based comparisons



HASHES(desmenusamiento)
>|w1|4o0 jMx|4xw1E},{S|4x|4wz|4|ro|>xxwz|4c3_,|>|4xw1E_|;,{,;c|w1
;xK. c},{
,x;|K. {S|
|4xw1|
},|{~{~ jM)xc|w1|w1||
x|4w1,},{~9 },|4{ {S| 7{~7_,|9{S|4wz{K_{S|4{ )|4KE},{owz 9| },|4
{~{wz|4|3_,|3|wz{y_,%0y_,Mw1}%|E,w1 
%x,}, o Gx,_o|w1|6|)xM.|43_,|6|4}|4{~{.},,|4|Kx|c|4wz|6{|
w1 {{7 KM_|4{S|4{S _},{3},{||E_ {|_,|4{S %|4{S|xxj_{S|
},,|4xw1 >|4n,|{S|4w1|r{S|4o},|4wz|4rx ,z [,o6 > c},{{K)|4 E|4wz
c},ow1c|w1|6,c|_,|6|{S|,wz|4, },|4{{.|4|)|{> ,[1
x wzo|46,o[wz|4|x|4wz|4x},| ,o{
jMc},{ },|4{ {| m,|x|
{S|4}{S||w1;y,c|4wz|_
)|M|4o y,Zyo|4K,,o|4wz|4c|4wz|,|4|4}|4{{3wz,_c|z {
{S|4}{S||w1o [},{ry_,,G},,{~6_wmw1_}, {S_,|6m1, xx|{~mo c},,w1
x{S|0K{S|},{d|4x|4wzo|
)c|c{)| >_{S|9xwz|4|4{|o,|4w1)_,|
xy_,
on 0wzlv, {9|~z|c}, y_,|Kwz|4{_E|w1|c},|4Ey_,[w7Kw1
|4 },|4{ {|
y_,,|
w1|{~_Mox|{~KEwz|4{>|w1|c},>y,|4Ex
|4 3wz|4|c%cxc%,{~  x,xcx [,E},,wz3|4E4wz _,|
|4xw16xy_o
|#_,|0|4 ,x;|. 7|w1{S|3oc}, #|Ew1|4{_ 9},{S,o{3{|,wz
 31|{|w1|4Ex,|4Ec},|4c|w1oc,m.,|4Ec},|c|4w1|4[ w1{S
c,l}, {,|
,
1{oo{Sy_3|39},{S|9_,|0|4|4{y,{7{S|4x,w1{M|4_
{S|71|4{S|4wz|476, Ex|4{~%oc}{~}, {x0.v,|4{Sx|4j },wzc {|4y|
,{7,ox|E1|4{S|4wz|E|. jwz x r},{S| 9_,|0|4 },|4{ {7|Ey_, .)|
xy_,|rx|4{~|4o w1{ oMM_,|{S|4c9|4x|0w1},M|0oxxw|4ol|4wzo|r
c{Sxc 9y,M|3w1|{~_ #o c%wz #},{~Ex
MKw1c4;c,|>,|4},|4| E|Ec,0|4;o,|4,Mx0.M},,|4,|>1{
|4[o|4{r
o 0|44v,{3|z|c},xwzGw1},n,|6w1|4
,;|4xwz{S, wz,{~m|mo,
},,|4||4{#,|6|Kwz3x[w1|{S|4x|4Ex|4y_,{Sc{So{#|4 },|4{ {9|)y_,
jM1jc|4 x_,x4wz|4x {|4wzwz{SK },|4{ {},{E|y_,{{w1|9_,|E #wz
x,xx [y_,|0%|4{SSKwz{S|~.|4c}|43_,|6 0wz},|)w1 E|K},,wz,wzwz|
xKx|4y_,{S },{#r.` {S|c_,_,|o,c},K|4xw1{S|| 
|},,wz;,wzwz|4x7c|;o|{Uc% |{x%{S|461|4{S| w1|4m,|{d|4wz|4
},wz{ |4K|wz>}|4{S|%|4xw1Z|4, m},{~o c},{{6y_,`,w1 o|4x7x
y_,[,|K},,w1 wzw1|6|wz,_|4x|)c{Sox|4x ,[c 0o|4{SM,cc3o|4{S
},{S|4c|4wz|nJx|4{y, m}, {6x. },|{G|4m|{~Jy_,,;}, {
o_,|4{wz{S%},{S |x>.#
#,wzc>|>|},{#9o,w1%},{Sj|4c|4wz|#|4|4{,x{oc|w1|# ,M
},{3y,|>},|{~{S| #,|3 6}, {~0x|4{c},|c|4wz0}, {c|c c},1

SORT1 and SORT2 (orden1 y orden2)


0x|4wz|4o x|4xwz
},{S|4x|4wz|4|0o|3 xwz|4c_,|0|4xwz}|4{cw1m,x{|4 c4
w1 c|4{Sy_|9z ,{.,},{6,m.xMx{S|K|4, },|4{ {# {{~|w1|_ c
|4|4%|{7|},|oo xw1c}o6|xw1l},|{~{o{{|4w1|r|4|r|{7y,},{3
y_, 9},{| |3w1}%|3w1 m|w1|4 #j 0G 0 c{~|4 },|4{ {
|E {S|4; , },|4{ {~_},{~0wz}, #|>w1 _,|4{SKm|{| K{S|4x},|4owzc|4w1|
U|4{Sy|,z %|wzr0x _{S|#9|49|# {,|4{wz_,|4{S|4{S|x|%,
{S|,|4yx},|4o {>|4n}{~|4owzo|4x n_ Ew1}, >|w1 >|4|x|4{
},wzE|6x|4{9{S| 3o c},|4wzc|4wz|4_|4,},|{~{.|4|Kx|4{9,n_,|6},|4
xc|w1|wz|4|4{4lw13 K},{S||_ {| ,| y_)|4)|cxc,y{|)9_,x_,|



)| {S|4,n},{ow1oK|wzMxy_,o%_,||4 },|4{ {. c|4|


c}, {w1{x|)on
y_,9v,|4{SMxw1wz|xz , o,3w1}, E|),w1 E_,|4{S E|{| o
w1,_|4{S 6|rx|4{,n|~z {|4cxc` c|4 7_,_|4wz|47w rw11 |4},x|9,{
w1}, |Ewzxwzw1 #wzwz%oc6x|4M|4 #o c},wz_|yoc|4wz|_xv,{7|~.|4c},
|4 },|4{ {#|Kywz1|{~x,x1w1%|3,|_4j | |wzc 0 },|4{ {S|4>|
}{,|4;_,|3wz{~y0c #wz}, #|Ew1 |4M,
|o|o0yo
c},wz|_
,3x|9|x},|4oo) },|4{ {S|},|{~,{S|4x{wc|4{Sy|4o|44 },|4{ {o{{|4wz|90c
> },|4{ {S|4r{S|41|4{S| o >|4|4n{S|4wz {~{ {S|4> ,|4  |4 },|4{ { 
|4|wz|4|4{cw1},|,w1 |#|w1{9y,|4wz},
|#{Sy,c|4wz
_,|4{S3|4
}|4{~{o{{|4wz|E;|4 },|4{ { 
|4|Ewz|4|{c #wz}, 9|Ew1 #|>|4wz{~,
y_,|4
,wz},c|6{Sy,c|4w1|4{S|4xc,|4 },|4{ {>o {~{|4wz|_1 cno KUU

, M , ,|xw1y,o_,|M|c{S|;|47 },|4{ {0|4)x,o|4wz|},{


|4x},|4o,o{|4 },|{~,{z%|4 xwz|4c
|4o},4
,|Eo|4{|4wz{~,|E },|4{{x|4o
x wz|xwz|3|4 },|4{ {7|>y_,3w1|#_,|3 wz{S
c},{ow1o6wz|4|4Ex|4x {|4{9x|4w1| 0j }{~K, },|4{ { , _
,
}|4{~{S| #{S||{S|o #,|4|4Mx|4{x|4c}{|Ec{ , x{wz4,m|3,x{c|{y|
z  },|4{ {S|9c{ r
c#{S|4x,w1{
|4o1,x,|4#|4x},|4{x}, {
{~4 |49,|3|{S|4c|4M,Mc c|4wz
M{S|4xw1{oo|4) |) {S|M },|4{ {S|4)_,|MwzJc{Soc|4{Sy|4y|llx
w1{S|wz{ o |4%x o {~{|4wz|4c|4wz|Eo|4|}, { > Kv, },|4{S6,
c|4{Sy|7.},,|4|E1{|4Mw1|4c}%|E|z| ,o x y,0m|4_|4{S
l },|4{ {|9y_,mc|4{Sy_|z |r|4|#w1||4{,moc,wz {1lcxcKj
 >w1}>|
wz>x ny|4x M,n },|4{{|y,c{S|4wz;xx c1|4{S| 
wz|4 
)|4|m|4{E },|4{ {S|4
|m {S|4   , wz|4|4[ )cc Kw1})|mwz
,|4{S6%|4{S| om|E|4wz{3o cm|4 },|4{ c|{y|~.|3|;cxcxxwz
},|4{ {S|  _x|4{# c{ ,   w1cwz|4|4> },o|4n|4xwz|)},{S |4c
||#,|>K)},{S_o%},{E|},| ,o{|4j} wzc|4wz|_SM w13,|>xj w1},
|,w1 %_,|4{SG|4{S|  ;xJ1|4{S| w1|y,U||4xw1 ; },|4{ {~K|m|4
cxcU_,|o,_,|4{)},|{~,{Kj },|4{SG|;wz,_|4{SJc|~. {|m {,|4 %
o c},w1_ |n M{S|4%|c,w1Uo m},|{~,{S|4% 7ZUc|4{Sy_|z
1{`
,o {~



Captulo 36. Extensiones de SQL: Agregados


 Ey_{S| y_>|nv,xwzy_{S|4>|4xwzn|4l},{S|4xE|4w14{c 3,|1,o|3,|wz{~o
|0|4xw19,|4o{1l,y_{S|4y;},,|4|0|4xwz{|;|wz4{cr|0,|4xw1,;_,|

|4>c , ,o,M,Kwzo%|4>},{S o|4x y,>1,o|3||4xw1Mc
{~,_ {},{w1o,{7|4
wzoo%oo,M|4,|4_m|4xw1m1x,o0|
xw1l>|)o{S|4w1|
yy_{S|4ywz|c|w1{E_,|) w1{Exx|K},{S|4 o,},4c|x|4xw1,
w1|{~6x1,oj,|4,cr,My{S|4y%_,|0wz
x c|4wz|31,o|4,c r,
y{| y_,|6oc},,wz%,m1, [|K 0w1{,w1 E|Ko6xwzo`j,c|43,
|~.|4c},M|0|4xwz|)wz},M|0y_{S|4y`,c7oc|4K|no|4{Sm|c},{S||0|4_ {
|6;xw1o;ow1,,mxGw1 w1`)w1{S| c w1},_,|%|wz;w1|4y{n|v, wzy_{S|
},{3{S|4{|4xw1
o
CREATE AGGREGATE complex_sum (
sfunc1 = complex_add,
basetype = complex,
stype1 = complex,
initcond1 = (0,0)
);
SELECT complex_sum(a) FROM test_complex;
+--------+
|complex_sum |
+--------+
|(34,53.9)
|
+--------+

xc|4wz|>|4,c x,o|4xw1c 7|},| ,o,my_{S| y__,|>o c},,w1>,


1, )_,|#|4|4},|4,|4w1||w1{,w1 |oxwzoS ,wz_|4|44|~.|4c},
co c,|m|4xw1|;w1},[|my{| yj ,wz>o c|4o|4{Sn|%M
w1 w1},{oKxwzoy {~|_{,|xwzo _,j,w1c>K{,wz
w1|y_{mwzK},{;o|4{r|4wz{~xz},{3 xwz{SwzM{,wz; {S|c|4w1;1,|
,x{y,c|4wz
CREATE AGGREGATE my_count (
sfunc2 = int4inc, - add one
basetype = int4,
stype2 = int4,
initcond2 = 0
);
SELECT my_count(*) as emp_count from EMP;
+-------+
|emp_count |
+-------+
|5
|
+-------+

_|4{4y|4|9,|z|c},M|0,y{S|4y4;_,|
{S|4_,|{|Ew1wz;,K1,o},{  ,
{#%x,c%ow1,,%1,o[},{~K  ,{#|o w1,{9ow1,` ,w1 E
xw1o#x;},{S |x4xl{S|4x},,|4xw1
,_},{~
|_y_{S|4y4,;|49x,cK wz,
_r},{|lo w1 {owz`)w1c77{Swzwz},l)wz_,|9,w1c
wz|4{~ {c|4wz|rxo cKwzc46E{S,wzE|9_x%|4w1|{~r|9v,xwzy_{S|47w1_},
{~3  ,{
_x ,|30xc
}{7|4owz {~



CREATE AGGREGATE my_average (


sfunc1 = int4pl,
- sum
basetype = int4,
stype1 = int4,
sfunc2 = int4inc,
- count
stype2 = int4,
finalfunc = int4div, - division
initcond1 = 0,
initcond2 = 0
);
SELECT my_average(salary) as emp_average FROM EMP;
+--------+
|emp_average |
+--------+
|1640
|
+--------+



Captulo 37. El Sistema de reglas de Postgres


 xwz|4c)|;{S|4y
|;},{S,ooxUo  |},w1,n|4w1|mxc},|4x,},|{Scc
oE},,wz
x,wz|4Ec},o 0|4c|,ow1,,|)|4  y,3|K|wz3},,wz3
31,c|4wz
w1|{o0|4,xwz|4cm|6{S|y_E|6v, xw1y{|
x|6},,|4|[|4owz{~{>|4
o 
 S7o   


y,mwz{S;xxw1|c;|x||wz%|4,|4{S|y_6|nx|n,|n,w1 mowzl
 xw1xw1,c|w1|0},{S |c|4wz#Mx},{~ {S|491
},{wz{|3_,_,wz{3|4
w1{~c6c#w1,|>`w1{y_y|4{`co|4mx|3c},|c|4wzM|4Mv,xw1y{S|4 c
1, |4mwz{~yy|4{l
lxxw1|cE|9{S|4y,|r{S|4|o{`wz,{~>|9_,|4{|471|4`xwz|4c>|r{S|y_xE}{~wz{,|9 {~
|49wz w1c|w1|01|4{S| w1|

r},{So|4,c|4w1 9co|4 9; rwz{~yy_|{~  c,o
_,|4{|4},{~>w1 c{|4mo ,|4{ ;{S|4yK|4wzo|4},xE3_,|4{Kc o
>j },w1c{},{>|z| ,o ~c,6},,|4{Sx 46},,|4|9,w1{~x|>,|>c,o
1{cxw1|4E cn},{S o|4c|4wz _xw10|{~x |40,|4,|4yz|6,|K_,|4{,},
  
 m| o   o  
|4{|3|4xwz|3xwz|4c|3{S|4yx|3o,wz|0|4 )  


 

Qu es un rbol de query?

v,{~Koc},{S|4|4{#ocw1{x.6|4xxw1|cm|){S|4yx |0|4o|{Mo o|4{>o,x|


_o0% ,|#x x,},,w1#mx,#{S|4x,wz l
xxw1|c|m{S|4yx|mwz,|4w1{S|%|47wz{~, wz {E|m_,|{~[|4},wzc {~llc
%xm|4wz{,ow1 {z,{ ,|Km_,|4{ _0{S|4yE|6{S|4|o{w1,{6|, wz y_
o,|4xmwzc4%{~ |47|#|{~| %y_,>1{co%|4lw1{
pg_rewrite
M
o{|
|{S;;c,  E{_ |4#|,|4{M cM{S|4x,w1oK|
|4xwz|c  x[},,w,x
,wz},,wx [|c},{S|)wz|4Eoc|4wz{~, wz{#cxcn}, {K|4{E},{S , ,o |
|4xw1|>c w1 6},{S| |3oc|w1|E{S|4}|4x|4w1|3oc%,0xw1{S,o _jK9
 {  ,|4#,{ _|0_,|{~>r,{S|4},{S| x|4wzow1|4{|0,wz{S, o
K |%|mc |,|mc cx|4},{~
},{~wz|4
c|{S|4
_,|;;o c},|
xw1 { |4|_,|4{xK_|o,
{{4oc 7|44c w1 {|v,xwzy_{S|4oK_|4
|6|4,y[m[wz|4o|4c
_,|{~||4G|wz|4{1o|6|%,,{~cwz|4{ow1_0oo|4
|%{S|4y
co|4)|4G|owzy_|;xxwz|4c
|4xwzGc |4
w1c_o cc{_ |40|%_,|4{|4l;n|4xw1G1{cwz|4pg_rewrite

o cMxm||y
},|4{SK wz|4|4M|4low1c|4w1|>0cxc
 {co
|4|4{>,{|;,|4{{S|4,|4{S|%|4j}|4{|4o|4{;xw1wz|;,,{co,c|c},|4om
w1{z{
|G|4xwz|4cM|;{S|4ylv,,|c{S|4o{S{3_,|Mc|w1{)|4xwzM|x},|4{c|4
6c,%|Ko1
xc%|4_xM%,%xw1%,|) z|w1_x_|4y_,6|4}, _,|4
o1>0,0wz0|>{~y 6w1  # 9 w1 |40|4l},{S|4x||Eo,,  v,,|4xw1
_,|09{S|4}{| x|4wzo|r|3j6n|0{|9|3_,|{~|rx,,o|4wz|4r},{0|4wz|4|{
|4xxw1|4c|>{|y_|wz|E o,c|4wzmm|3|4x|4{~0o cm|4|{~  |4|4{3,{|
6},{S| |4{ oc>o |o|43|c{S|4E{S|4_,|{~E|4c>|o{},o|3|
xy_,|4Mc|4wz|_

Las partes de un rbol de query


,Mx|)||4c>{S|4},{S| x|4wzo|4E|K[|) 3{~ |4E|),|4{|4>|4c|4xwz|) o,
c|4wz|4|4o|4x{)|{o},E|r|4wz, {},{w1|4,|>>wz{S, o%_,|Ex|>E{Swz
|4%|4)_,|>|4xw1>|4m>|4xw1{S,owz{>|4j{~ l|r_,|4{S7},{wz|47|r,m{|>_,|{~
x



w1}%|3o cc%1o ccw1},|4


wz|K|3,[_ {rx|4o,|K
o|)| c_,|6},{S,jz|4{,|Kw1{
, o Mj Mj )v, ),,
0wz3|3{y%1{4y|4wz|4
,mw1%|K{~yn|43,mxw1;|63{S|4|4
_,|6x|m,wz[|4m_,|4{4
,0xw1{S,o , 4x #{S|4o|9w1{
},{3o_|E K
j 3|w1{>|4mEw1>|4j{y6,|4w1,o3,Ew1>6_xw14Ko|>|j c
{|M},{)|4_,||[|w1,on|4J% wz{~6},{w1|%|n,|4{Z,{|
_,|4{ |4wz{~|30wz
|E{y%x|3oM},{7,o|3|4M,y_{7|E},{
 c{|E cm|4xwz{;|4,
xw1{S,ooj69xxwzm},,|4|>o,{{~{7 ,%x|
mc|4 K7w17|r{~y |r{S|y_S|z|4n},|9|4xw1|r ,c|w1)
c,|4xw1{;|4x
xw1,o 
0{S|4o1{S|4x,w161{S|4x,w1{S|4wz
K%o|>E3wz3|r{~y_)_,|E,|4w1,o3E{|o%|r{;{S|4x,w1
|E0_,|{~j
,|4{|4j m{cc|4wz|#
wz|4|4K,>{S|o){S|4x,w1d4ox
|4x},|4
|
,6j M, |4r},{o},c|4wz|),|4w1oKK,6x|4o,|4o > 
 ;  , %mx|Exowz|3_,j}, {x|4},{
9_,|4{|4 ; )v nM)j){S|4 {S|,wzm|>)wz)!
xwz  |3w1|{~;|41|4ow1K #oc l
0xw13.|4wz%wz{Sy|wzwz
>wz0 z|4wz_6|0wz3,|>|4l},{S|  |4_,|>||4;|4j{S|4x,wz|r3_,|4{
M|4 6|E,
j 4|4l},{S|4x|#x_,|3oxwz{S|40x
,
|)%,|4{~jjc3|j},{S| |4E|4wz{S|)E},{`3o_|,  K 19|
 %,
{S| _w1,{0|>w1 # c_{S|#|>w1{,w1 #,|3,0{S|4ox
7_,|4{|4)M6| |wzm,3wz3 z|w1_K},{S_,|>6},{S ,o|4my,
{|,wz)|
|4ol|4}w1c,{{0,|4w1{
|},|o },{~
,xw1
.|4wz%ov,|4{S%|wzm ,{{S|Ewz{~|4xwz|4c
|3{S|y_m% c|4wz{S|4c 9c
w1{S|_v,{0|4 xxw1|4c
|>{S|4y_40wz
z|4wz_m|4xw13 _
6|{~| Mj ;>wzE .|4w1_|o{|97,|4_,7,|r{%r>{S|4
{|,wzSo ,c7_,|9)},{|4o|46|%r{S|4o 6{S|4x,wz
x|4{K
},{9|4, },w1c{9o[,m|j},{S|4x coxw1w1|6M)9j 3|j},{S|4x |4E|
0o,, )
m|E0o,x,0j |M Mj U 
c_,|4{|43Kv, ,|4xo{~|K0,|4_E,3_,|6{S|4|4c},4{cm w1{E_|~.
 {~K|4 },w1c{9,{~KE ,cE_,|6},{S| o|4cx|4{w1|4l},{S|
 |4>_,|
{S|4o,},|4{` E_ {S|49,|#,>|zr|4r,|4_oU{),
|4w1{m|}|4o, c[no|%)94;},{wz|6|%;_,|4{[_,|%{| y|%
|4j}{| x|49|w1{,w16,w1{,w1 |4l},{S|  
E|4w1{3|3
xw1
z|w1_;owz|4|3,|4l},{S|x ,|
}||3x|4{,M_ {
xw1wz|4_,m_{4|6}wz%,w1{,w1|6,m|K0{S|4o |4E|4[
w1|{y_ ,Z},{c|4wz{S,J{~ ||j},{S|4x |4K|4o|Mc)
,o |4x xw1w1|4x_{|4x4 },|4{ {||4wz

"

0o,,o 
6o,,o c|K3,|4{|4E|4E,%|4l},{S|4xcc,xc{>Kwz{~6|KEo
w1|4,>|4cE|4wz{~>|K%wz% 4.|4wz_, {9{S|4xw1M|)|4xw16|j},{S|
|, |4M_,|o|
x) },|4{o Mj lKv, j),cMj 
},{97,7|4{S|4x,w10l|4|{~rx|4{,|z| ,wzr7ro,x>;
|E,0xw1{S,ooMK9
w1|>wz|4{
,3 wz{~3},{w1|E|6,{~ ,|6_,|4{ _o cn%o,x,m ) __nwz|4|4
w1|4{4#_,`oxwz|4c)|{S|y_rx,wzw1,|)r|4wz{~,4r,}{||w1|9c|4wz{~
|4xw1E},oK{|y_x},|{SK_,|4%wz|4|3c,o%,|3o|4{ M #1,
c|4w1 ,|44xwz|4cr|{S|4y KKv%n|4,9 {c9|4x},|4o4|4)r_,|},{| o|
,0|4,o|E,
_xw14m,M|4o|4xw13|{ o,c|4w1

Las vistas y el sistema de reglas.


Implementacin de las vistas en Postgres
9_xw1>|4v, xw1y{|>|
c},|c|4w1n,w1M|4xxw1|c6|
{S|4yo)||4oj
61|4{S|4o3|4wz{S|
CREATE VIEW myview AS SELECT * FROM mytab;

%
x|4o,|4o
CREATE TABLE myview
(la misma lista de atributos de mytab);
CREATE RULE "_RETmyview" AS ON SELECT TO myview DO INSTEAD
SELECT * FROM mytab;

v,{S_,|m|4xw1|4)|jowz4c|w1|;_,|;o|;wz|4{c|4wz|M|7oc r  E 
xw1Mwz|4|Ky,3|41|4owz>o w1|{~| K||4 0|4>,|K%1{co cx{S|),
_wz%|4[|4,xxw1|4nm|Kow1y3|Kv, xw1y{S|40|0|4lowzc|4wz|K|4cxcn_,|%},{~K
w1_)|r|wz|c },{9w1{,ow1 {S|4|#_,|4{|4x
1|4{S|4 9|w1{S|,rw1
%,
_xw1 %cxc{S|4o |4xw16|4%cc}, {~wzw1|E},{7 {~

Cmo trabajan las reglas de SELECT


{S|4y_#K , cx|0},oM
w1 ##|{~|9oc;| wzc;},x jo,x;x
|4oc%6| M 4)v %),9Gwz|4|4M1|4{S| w1|#x|4cw1o|
7 w1{7|%_,|9c o%|4l{ l|9w1{,oo6|4m,y{|9o{S|{,),|4_~v,{
|4 {|y_j x|3|4xo{~|4;#},{c|4{
owz,c|4wz|4l|4|
|4{xM,)o nM||x|4{,)oonj c||4r,
Mj `xw1r{S|4xw1{o )x|#{|_,|4{#},{~9o|{{|y_x|4y,{~owz{>r},|{~wz,{`
}, {,x,{ {S{x4K{S|4xwz{~y|>{|y_76 , M3{S|4y7},{>xwz{S|4|4
|~.|4c},;},{|4xw1|0 o,c|4w1Mx  r_wzr,9_,| |y_, >  , r
y,3 wz{~E_xw1E,wzE},{6|)%|)|4xw1E 0},{c|4{E_wzEx|K},|4{x
>cw1{S|r|4{S|4y7}{~> },|4{o|4,| ; )v K)
|Kc n_,|6|{S|,wznx|{~%,m_xw1%,|mx|6o c},{wzm c,mwz%{S|4



oy_,1o |
cyolMc|,|~.|4c},c1o},{m|4c},|4{1__,
6x|4K|4cx,,{Sv,|4{SM|4Ec|~.{rw1||4{r,c|z|c},_,|) ,{%wz E3},,w1
x ,wz 9},x;},xm_,|
w1||4{c,o >|~.|4c}, r1|4{S| w1|49_,|wz|4|4{_,|n|4o{
|4x},,4
9x||#wz|4o|4xw1,9},{9|~.|4owz{7|z|c},|#cr, |4{9},{Swz
|4}, {S_,||wz| c_{S||4o|4xwz9w1|4|{xwz3|44|4y,xz|},{ o|4,{~4v,9j},yK
__,|0| |wz{S|4c 9,)},|4_,|4)1,oc1_,|
|4_,|4_
|4c|4 {|09
{S||w1|4{S  {S|4c |4xw1
1,oMo c
CREATE FUNCTION min(integer, integer) RETURNS integer AS
BEGIN
IF $1 < $2 THEN
RETURN $1;
END IF;
RETURN $2;
END;
LANGUAGE plpgsql;

w1_{S||#_,|3|4o|4xwz{S|c 9|# #}{~c|{~|o{},o|#|xwz|4c


|
{S|4y4 |4xw1
CREATE TABLE shoe_data (
shoename
char(10),
sh_avail
integer,
slcolor
char(10),
slminlen
float,
slmaxlen
float,
slunit
char(8)
);

datos de zapatos
clave primaria (primary key)
nmero de pares utilizables
color de cordn preferido
longitud mnima de cordn
longitud mxima del cordn
unidad de longitud

CREATE TABLE shoelace_data (


sl_name
char(10),
sl_avail
integer,
sl_color
char(10),
sl_len
float,
sl_unit
char(8)
);

datos de cordones de zapatos


clave primaria (primary key)
nmero de pares utilizables
color del cordn
longitud del cordn
unidad de longitud

CREATE TABLE unit (


un_name
char(8),
un_fact
float
);

- unidades de longitud
- clave primaria (primary key)
- factor de transformacin a cm

v,|4x,|Mc_ {M|; xwz{SK|4_M},w1 x,},,|4|m|4wz|4|4{3,|M|4xwz|M|4),


|~.|4c},|Kw1 3{S|4c|4wz|K,wz|4|c|4E |{~wz,|K},wz E|c|4c,
_,|3%| |xw1Mo{S |4x},|{K 9{0c1o
_0y_ {{
_wz {S|4{d|4c #o c
CREATE VIEW shoe AS
SELECT sh.shoename,
sh.sh_avail,
sh.slcolor,
sh.slminlen,
sh.slminlen * un.un_fact AS slminlen_cm,
sh.slmaxlen,
sh.slmaxlen * un.un_fact AS slmaxlen_cm,
sh.slunit
FROM shoe_data sh, unit un



WHERE sh.slunit = un.un_name;


CREATE VIEW shoelace AS
SELECT s.sl_name,
s.sl_avail,
s.sl_color,
s.sl_len,
s.sl_unit,
s.sl_len * u.un_fact AS sl_len_cm
FROM shoelace_data s, unit u
WHERE s.sl_unit = u.un_name;
CREATE VIEW shoe_ready AS
SELECT rsh.shoename,
rsh.sh_avail,
rsl.sl_name,
rsl.sl_avail,
min(rsh.sh_avail, rsl.sl_avail) AS total_avail
FROM shoe rsh, shoelace rsl
WHERE rsl.sl_color = rsh.slcolor
AND rsl.sl_len_cm >= rsh.slminlen_cm
AND rsl.sl_len_cm <= rsh.slmaxlen_cm;

o c >  E  },{KKxwz


1_,||4E6c>xc},|K,|)wz|4|4
cx#o{S|4{~,{S|4oUx |4o|M,|shoelace
w1{M|4
_,|; |;_,|;
,%{S|4y%|6{S|4|4xo{w1,{6_,|%|_|)x|4{>} 6x|4c},{Spg_rewrite
|6_,|6m{S|4 cx|o|6x|4
{S|4.|4{;|4wz;|;{yc|m,_,|{~jlM{S|4yM[wz|4|m ,oo G|m{S|4y
1x ,wz|4;{S|4y%j 4},,|4xw16_,|0{S|4y m},,||4;wz|4|4{S
xn|4E|)w1}, ; |n_|4%|x# M w1||)_,|6%o,,  c|K3{S|y_>
xccxcc_,|;0o,,oo|%
|{~|ljm o ,|m
{S|4y0wz|4|%,
ooo 
3 o ;|E{S|4y4|4,;{|>_,|4{%|E|4,0 },E|4j wz3|>3xw1{S,oo
, n||oc6|3o{S|4 |E0_xw1
Nota:: Las dos tablas de rango extra para NEW y OLD (llamadas *NEW* y *CURRENT*
por razones histricas en el rbol de query escrito) que se pueden ver en la entrada
pg_rewrite no son de interes para las reglas de SELECT.

 {~},, n

4|},{S},|w1{E|,
w1| |3x},{~c|{~0junit
 shoe_data
|4M|4xw13,shoelace_data
al_bundy=>
al_bundy=>
al_bundy=>
al_bundy=>
al_bundy=>
al_bundy->
al_bundy=>
al_bundy->
al_bundy=>
al_bundy->
al_bundy=>
al_bundy->
al_bundy=>
al_bundy=>
al_bundy->
al_bundy=>
al_bundy->
al_bundy=>
al_bundy->
al_bundy=>

INSERT INTO unit VALUES (cm, 1.0);


INSERT INTO unit VALUES (m, 100.0);
INSERT INTO unit VALUES (inch, 2.54);
INSERT INTO
(sh1,
INSERT INTO
(sh2,
INSERT INTO
(sh3,
INSERT INTO
(sh4,

shoe_data VALUES
2, black, 70.0,
shoe_data VALUES
0, black, 30.0,
shoe_data VALUES
4, brown, 50.0,
shoe_data VALUES
3, brown, 40.0,

INSERT INTO
(sl1,
INSERT INTO
(sl2,
INSERT INTO
(sl3,
INSERT INTO

shoelace_data VALUES
5, black, 80.0, cm);
shoelace_data VALUES
6, black, 100.0, cm);
shoelace_data VALUES
0, black, 35.0 , inch);
shoelace_data VALUES

90.0, cm);
40.0, inch);
65.0, cm);
50.0, inch);



al_bundy->
(sl4, 8, black, 40.0 , inch);
al_bundy=> INSERT INTO shoelace_data VALUES
al_bundy->
(sl5, 4, brown, 1.0 , m);
al_bundy=> INSERT INTO shoelace_data VALUES
al_bundy->
(sl6, 0, brown, 0.9 , m);
al_bundy=> INSERT INTO shoelace_data VALUES
al_bundy->
(sl7, 7, brown, 60 , cm);
al_bundy=> INSERT INTO shoelace_data VALUES
al_bundy->
(sl8, 1, brown, 40 , inch);
al_bundy=>
al_bundy=> SELECT * FROM shoelace;
sl_name
|sl_avail|sl_color |sl_len|sl_unit |sl_len_cm
-------+-----+-------+----+-----+-----sl1
|
5|black
|
80|cm
|
80
sl2
|
6|black
|
100|cm
|
100
sl7
|
7|brown
|
60|cm
|
60
sl3
|
0|black
|
35|inch
|
88.9
sl4
|
8|black
|
40|inch
|
101.6
sl8
|
1|brown
|
40|inch
|
101.6
sl5
|
4|brown
|
1|m
|
100
sl6
|
0|brown
|
0.9|m
|
90
(8 rows)

xw1E|4#3, cx|4o
_,| },,|4|ro|4{|4;x,#_xw1x|>c6_,|3 
w1{S rw1 c{S|4c >},{|4j} {Kx|0|
r{S|4y#|rxwz j c K
x|4 | 1,|Ewz|4{},{|w1,6}, {|w1{,ow1 {m},{S jz6,{~ |Ewz{~,oo 
SELECT shoelace.sl_name, shoelace.sl_avail,
shoelace.sl_color, shoelace.sl_len,
shoelace.sl_unit, shoelace.sl_len_cm
FROM shoelace shoelace;

|4xwz|x||xwz|4cc|{S|4ylxwz|4cn|{|y_6_x.nw1{_46|nw1_
|6{y_ coc},{S,|4;xn{|y_
|4
},{my_,;{S|4o ,
x|},{So|4xK|4w1{6|Uw1|{pg_rewrite
y_},{
1|4,oGxwz {~
|4o,|4wz{~03{|y_ x|o| o |{~ |Ewz{~shoelace
, o
SELECT s.sl_name, s.sl_avail,
s.sl_color, s.sl_len, s.sl_unit,
float8mul(s.sl_len, u.un_fact) AS sl_len_cm
FROM shoelace *OLD*, shoelace *NEW*,
shoelace_data s, unit u
WHERE bpchareq(s.sl_unit, u.un_name);

M w1|4x|3_,|0|_wz{~, wz{7ocm|4 oo,m;


o,,oo|4Mc#
#,o
|49},{S},xv,|4{Sm|3| ;|wzmmoc
,x_}{~c|4{7},xm|4{S|4| o{w1,{
|4c|4o{wz|E{y_x{ |>w1{,oo;|4wz  |9|4|
SELECT shoelace.sl_name, shoelace.sl_avail,
shoelace.sl_color, shoelace.sl_len,
shoelace.sl_unit, shoelace.sl_len_cm
FROM shoelace shoelace, shoelace *OLD*,
shoelace *NEW*,
shoelace_data s,
unit u;

c|4},|)%o,,oo[|%oo[|)3{S|y_>{~ |Kwz{~, o
{S|4x,w1wz|>|
SELECT shoelace.sl_name, shoelace.sl_avail,
shoelace.sl_color, shoelace.sl_len,



shoelace.sl_unit, shoelace.sl_len_cm
FROM shoelace shoelace, shoelace *OLD*,
shoelace *NEW*, shoelace_data s,
unit u
WHERE bpchareq(s.sl_unit, u.un_name);

c|4m|l},x%${S|4|4c},>w1 7{||4m|l{|9w1{,oo_,|rx|9{S|4,|4{S|4
9|4wz{~,4|#9w19|{y
19,o>|#x||4xwzr},{ o|4x3|4K|4xw1|c c|4wz},{
}, {9ro{{S|4x},,|4w1|>|4j}{||4>|
Kwz6 z|w1_Mo{{S|4x},,|4w1|
shoelace
0
0oo |>#{S|y_~,{S|,wzK|40_,|4{m,`
SELECT s.sl_name, s.sl_avail,
s.sl_color, s.sl_len,
s.sl_unit,
float8mul(s.sl_len, u.un_fact) AS sl_len_cm
FROM shoelace shoelace, shoelace *OLD*,
shoelace *NEW*, shoelace_data s,
unit u
WHERE bpchareq(s.sl_unit, u.un_name);

v,{~{|4{|wznx|J,nxwz{,ooZj6{S|4,,x,{G,cG|4|4{
w1| |{
SELECT s.sl_name, s.sl_avail,
s.sl_color, s.sl_len,
s.sl_unit, s.sl_len * u.un_fact AS sl_len_cm
FROM shoelace_data s, unit u
WHERE s.sl_unit = u.un_name;

xw1c[},{c|4{c{|y_c},o,__Z|w1{mx|n |U|4xw1 cwzc|


{~y_[M {S|4o|)|Mc ,|M|4xwz|4c|m{S|4yowz,Moc}{ [
|4wz{~,4)|%Mw1;|m{y_cy,|4wz|M||4|7,c|4{ScMx |4o|%K)j
|
wz|4|,c{|y_},|4{SGx|w1{|cwzn|{~y m|wz
{S|4.|4{S| shoelace
|Jy,|M6_{|4),|4{|;w1{,oo,|c,G_,|x|
y_ {v,,|4xw1_,|6w1 EE|4wz{>{S|4xw1w1|4E|4c6w1K|K{y|4cwz|4
|4n{S|4yr|
|4ncxM{S|41|4{S|  xx|) K|,|

w1_3|0{~ypg_rewrite
o,{S||xo{~wz,{)|wz
oc},|w1;|_{S|4x,w1m,%|3}
_ },wz
c {~o,}w1c,{#y{6r|4wz{~r|4lw1{K|n)w1)|){y;_,|KM|4xwz
{S|4.|4{S| 4#},{7{~_|#||_{ ,|3w1{,oo%|4_}M},{S,o%}{7|4},
, {j},wzc {|_|{~
x|4{|4low1c|4w1|E|4cxc;_,|
x _,|4x|
w1| |
0j Mw1|{~ {|,y{|E
x|4|4oo ,|E
_wz
 {3|41{S|4wz4c  j},{S|c3|r_,|E ,|,{ wz|4{},{S| |;|4mxw1|
,|4{S|4coc},{{x|K}w1 E,|4_x_o cnx[ 0,|0{S w1|{~x |{S|4[|4_{
6cxc6},wz m|{S|4Z|4_{
c|4wzc|4wz|4|c G|| |wz
w1c_;o{S |4
| |wzoo|4{6},wz 6},{~%_,|w1|||4U|4c U {S |4K|4Z|4xw1|
cc|w1[1|4 {3[|4wzc 1[,|4c
}{~; )_,|mw1|4yM,c|4{S[y_,
x}|4{{
M xwz{S|3|4x|4c 0{S|4{3 x,w10x_|>|Ewz l
al_bundy=> SELECT * FROM shoe_ready WHERE total_avail >= 2;
shoename |sh_avail|sl_name
|sl_avail|total_avail
-------+-----+-------+-----+------sh1
|
2|sl1
|
5|
2
sh3
|
4|sl7
|
7|
4
(2 rows)



,
|40,y,{S|%
},w1 x_cx|6_,|%xc }wz
,|%w1},nx;|%x{~_|41
o{S |47x'&> mc{{S|xK},4wz _,|>|4o|wzmo {,|4c{~{S |47)x m
c|4o,#},{3 9,|4{S w1|{~x
0x0,|4w1{,owz{|4|4xw10_|43|4 {~ |Ewz{,o 
SELECT shoe_ready.shoename, shoe_ready.sh_avail,
shoe_ready.sl_name, shoe_ready.sl_avail,
shoe_ready.total_avail
FROM shoe_ready shoe_ready
WHERE int4ge(shoe_ready.total_avail, 2);

x)x|{~)K},{c|4{{S|4yK} )},{)){S|4o
|4{ |>w1{,oo

shoe_ready

MKo cM{|,wz

SELECT rsh.shoename,
rsh.sh_avail,
rsl.sl_name,
rsl.sl_avail,
min(rsh.sh_avail, rsl.sl_avail) AS
total_avail
FROM shoe_ready shoe_ready, shoe_ready *OLD*,
shoe_ready *NEW*,
shoe rsh,
shoelace rsl
WHERE int4ge(min(rsh.sh_avail, rsl.sl_avail), 2)
AND (bpchareq(rsl.sl_color, rsh.slcolor)
AND float8ge(rsl.sl_len_cm, rsh.slminlen_cm)
AND float8le(rsl.sl_len_cm, rsh.slmaxlen_cm)
);

{|4)o,x, ; |4o,oo x|4{


,;,|3},|{~,{S|4|3wz},
;Ko ,m|j},{S| xm%|{S%n w1{m%m|{|x4v,|4{S|mo|Kc|4
|4y||3_,|_|4x 0
n{S|y_,},{#} {1)|c3_,|x0c xw1{c
|4wz{|r},{4wz|4x},{3y{S,},{|4;,,|4 y_o|4;|4 {S|4%|4;_,|Ex|E|44
ocM|4xwz)|)|4w1{|0)w1
owz,c>o n#{|y_r},{
K{S|4
|E{y%00,|3|E{||{| mwz|4|3,3{|y_shoe
~{S|4xwzK|E}, {~K|4
SELECT sh.shoename,
sh.sh_avail,
rsl.sl_name, rsl.sl_avail,
min(sh.sh_avail, rsl.sl_avail)
AS total_avail,
FROM shoe_ready shoe_ready, shoe_ready *OLD*,
shoe_ready *NEW*, shoe rsh,
shoelace rsl, shoe *OLD*,
shoe *NEW*,
shoe_data sh,
unit un
WHERE (int4ge(min(sh.sh_avail, rsl.sl_avail), 2)
AND (bpchareq(rsl.sl_color, sh.slcolor)
AND float8ge(rsl.sl_len_cm,
float8mul(sh.slminlen, un.un_fact))
AND float8le(rsl.sl_len_cm,
float8mul(sh.slmaxlen, un.un_fact))
)
)
AND bpchareq(sh.slunit, un.un_name);

Zn|4w1|6},oc>K{S|4y_K},{
,|K_6  |c3|4n1|4xwz6_|46|
,M{~ |Ewz{~, o M_,|3|4,}o%shoelace
c#o c}, %wz|4|4c



SELECT sh.shoename, sh.sh_avail,


s.sl_name, s.sl_avail,
min(sh.sh_avail, s.sl_avail) AS total_avail
FROM shoe_ready shoe_ready, shoe_ready *OLD*,
shoe_ready *NEW*, shoe rsh,
shoelace rsl, shoe *OLD*,
shoe *NEW*, shoe_data sh,
unit un, shoelace *OLD*,
shoelace *NEW*,
shoelace_data s,
unit u
WHERE ( (int4ge(min(sh.sh_avail, s.sl_avail), 2)
AND (bpchareq(s.sl_color, sh.slcolor)
AND float8ge(float8mul(s.sl_len, u.un_fact),
float8mul(sh.slminlen, un.un_fact))
AND float8le(float8mul(s.sl_len, u.un_fact),
float8mul(sh.slmaxlen, un.un_fact))
)
)
AND bpchareq(sh.slunit, un.un_name)
)
AND bpchareq(s.sl_unit, u.un_name);

c{S|4, c )wz{_|4;M,xw1{S,ooGKZ{S|,|;x|4M|4_,_|4wz|m|4GMx
,|4 xwz|4c
|>{S|4y_l
SELECT sh.shoename, sh.sh_avail,
s.sl_name, s.sl_avail,
min(sh.sh_avail, s.sl_avail) AS total_avail
FROM shoe_data sh, shoelace_data s, unit u, unit un
WHERE min(sh.sh_avail, s.sl_avail) >= 2
AND s.sl_color = sh.slcolor
AND s.sl_len * u.un_fact >= sh.slminlen * un.un_fact
AND s.sl_len * u.un_fact <= sh.slmaxlen * un.un_fact
AND sh.sl_unit = un.un_name
AND s.sl_unit = u.un_name;

},{S o|4x4M{S|4o,{_m,|4xxw1|c6|0{S|4yr{S|4|4xo{`M,Kj c
|
,)xwzK|4
,{|0wz{~,, o _,|
|49|4_,_|4wz||4low1c|4wz|
;_,| 
,|4x|
w1| |
|E6w1|4|{_xw1
Nota: Actualmente no hay mecanismos de parar la recursin para las reglas de las vistas
en el sistema de reglas (slo para las otras reglas). Esto no es muy grave, ya que la
nica forma de meterlo en un bucle sin fin (bloqueando al cliente hasta que lea el limite
de memoria) es crear tablas y luego crearles reglas a mano con CREATE RULE de forma
que una lea a la otra y la otra a la una. Esto no puede ocurrir con el comando CREATE
VIEW, porque en la primera creacin de una vista la segunda an no existe, de modo
que la primera vista no puede seleccionar desde la segunda.

Reglas de vistas en instrucciones diferentes a SELECT


)#|4wz|49,|4_{~ _,|3w1{,oo;x|
wzo%|4)|x {},o|0#{|y_
|_xw1%xw1n { xw1 mxJ|4wz},|o c1occw1},|4rc{S|4o
{S|4x,w11{S|4x,w1{S| wz4)|6|4o 3{|y_E|)xwzE|4o|4xwz[|4xw1E1 {~c
o|4



Mx,K},o),|{| oK|4wz{S|;,U{ 7|Mwz{,o },{,j


,[},{o,_,|4{
w1{S[oc,jK_c|4wz|4,wz|4|4wz{ )wz},K|; c x
|4xw1m_|4mm{S|4 {|xwzc},,w1mm;|w1{%|6;wzm|6{y_,|m{m|4
{S|4x,w1 ,_,|4{9 w1{%ox%|3 ,w1c|4w1|)y_,`v, {9|4_wz|4|4, 3w1
w13mw1 Mwz{~,wz0m #{~ |4|3w1{,oo ;},{~3xw1{S,oo,|4
SELECT t2.b FROM t1, t2 WHERE t1.a = t2.a;
UPDATE t1 SET b = t2.b WHERE t1.a = t2.a;

xM},{ow1oc|4w1|Ew1o l
w1#|>{~y_6 wz|4|4M|4wz{~},{3w1wz
%wz
xw1.|4wz_mowz|4,
{|3_,|3},,wz
wz{~,wz%%|E
|4wz{3|
0wz0{y%},{3
wz0wz
E|4l},{S|x |40|)o,,o [oc},{~c 3w1{,w1 E%|Kc_ 3{~y 3}{~
0y,#
3o |o| |_,|3c{ |4|Ewz{~,oo ;;,y_{70}|4|E|z| ,o
xc{S|4S,mc>. |4wz{|97,wzSv,{rE)v,  o n_,|
},{d|4o|4G|Mw1w1 ZKwz z|w1_}{
|47 },wzc {z,G|
{|>w1{,ooM, |>|4|3oc
UPDATE t1 SET a = t1.a, b = t2.b WHERE t1.a = t2.a;

}, {7|46| |~z|owz {7o {~{S|{x {S|E.M},{S ,o{~E|4j wzc|4wz|E|cc>z,|y_6|


{S|4x,w1#_,|
SELECT t1.a, t2.b FROM t1, t2 WHERE t1.a = t2.a;

v,|4{S,J},|4_,|4},{S|coJ|4Kv, 9|~.|4o,w1 {) ,,{~|_,||4


{S|4x,w1%|>.x|40o|{S|4w1|x6},{S,o|E,
.,|4y%{S|4x,w1wz|>,|E,,3
1|4{S|oE|4w1{S|9,moc), MK,mo c)Kv, MEc},,3|lc,{
1 |4{`|4|~.|4o,w1 {~ c { mo o|31c{%|;|4 {_ |3wz{~, _,|
|4xw1K|4,0)v mx|>|>{S|4x,wz6|4|4{>{70Ew1Ew1~v|{S(
oo,|r
%,0_,|%c|4|6x|4{>{S|4|4c},4m}{E;,|4_m,),},|~.|4o,wz|
,
z no ,) ,oo _,|
}, w1|4oc|w1|
}, {~K},{S ,o{o,_,|4{,c|4{S;|
,|w1{S
| )
%E|4M,,c|{S%|4xo o
v,{~6{|x_|4{9|4xw1|6}{ |4c |6|K w1{%|4wz{%m%xwzm.|4wzn|3xwz{,o
o|4)v, mK)9`|4|4wzo {|9w1,},>ow1,1 ,{{S|w_wz,},|>ow1
xw1|r|4,;wz{~,wz6|rxwz|4c0o ; {~ wz|{wzo|4x},|4o|4 wz|4|>|4,|E%}
x c|4c|_ _,|6},{~K K,  o|46w1 |4owz},,|4|,w1{~x|)}{~
|4owz{{3,,|}|4o, M|4U,w1M|M ;_,|Mo w1|4|Mc|6,|M,
wzxK,m,o6 _,|E|rwz~j{~3o m|4l wzE3xw1E.|4wz |4z,|4y
|E{S|4x,wz, x|3}, {~3|{7 c
SELECT t1.a, t2.b, t1.ctid FROM t1, t2 WHERE t1.a = t2.a;

w1{
 {
|41,o c|4wz;wz{Sm|4wz|3| v,xwzy_{S|49|3w1
mx
{S|4| o{w1|4;|wz|3c c|4w1 m|}{|46},{7%_,|  M 6 |4c,
{~},,,K},w1|4,|4_){S|4x,w1w1|0x|0x|4{~wz)|4)wz
wz{9{S|4wz{~{~|3|
ow1|n) _| |{`K|
Kw1,},)|
K,Ko,M wz}wzKr|4wz{~,roc6
cl x|Kj.%|4owz {r,|)onowz,|4|4wz, {9|Kwz{ o cow1,
1 wz)|m|4xw1|6c  ;,Mw1|4{ {Ex|%o,w1;wz{~3|4occw|6;wz{~xoo c|
c}, {o,, },,|4|>{|4c|w1|3|c{~



o|4,nw1 n| },|c0n},|4c|4wz|;},o{r


{S|4yE|%0_xw1
|4low1
|4wz|E|4M
cxc
1{c0|4Mo,_,|{ocxM6m,|{S|o
c

El poder de las vistas en Postgres


j 00w1|{~ {,|4c,|4xw1{#o c
|4xwz|4c9|{S|4y,o{}, {~9|4,o |4|
_wz|4;|4{~ |Ewz{~,, o ;{y`;|4x|4y,%|z|c},,0xc},|>,
|0,K_xw1)o{S|4m,n{ _|
w1{,oo,_,|
|4r,9.c|0o,wz{Smw1_r1 
,0x|3,w13_|4o|4 M1|4{S|wz|3 c{|
Beneficios

 9|4|4,o9|0c},|4c|4wz{9_wz9o |_xxw1|4nK|3{S|4y#|4xw1|4_,|
|4},
w1c0w1||;wz,M;1 {~co Gx {|%mwz
wz|4|4_,|m|{E{S|4_x4xc
r{S|4o |4r|w1{S|
|4xw1>wzxlc>>o,,  |4r{S|4xwz{~owzrK},{~wz{|
6|
, |K3xwzx_c00o,,  |43|6%|{~n{y__w1 n|4[,[,o
{|rwz{,o [|4xwzE|w1c46>wz,o;o,>_,|4{K{yj|4>
z |4w1{S|0_xw1  {~|_ },w1c {|4|0|4o{7o_|9c|~.{{S,wz)}{~
|z| ,
w1{_,|4{ ,w1c9 {cow1|4y
|4 },w1c{zlc|~.{|{~
| x 
K1 {~n6|4n,|)x|)c},|c|4wz%|4xxw1|c6|{|y_E|4nv, wzy_{S|>|y_,{)_,|Kw1 )
1{coMx {|>
_,|4{m|4xwz0,w1|_

Puntos delicados a considerar

M,,mw1|c},|46|4j_,|9|4xwz|4cE,|r{S|4y|rv, xw1y{S|47x|ro x|4{Ey_ w1,`


,%|3{S|4y#;x|3{S|4o c|44;|4, ;,y{7|4|_|0wz{x.4|4{
9{S|4y
|xwzd% ,x
|4xwz{|y_|_wz)},{S _|c,},{S_,|#|xxw1|c9|
{S|4y4|4{~9o}#|#},o{`x|#|4o,c|4wz|#|4Kcxwz{,oo|7_,|#|4Kj
1},{|~.|4c}, mwz{~.{0|4M,
)v _,|3,wzo|3wz|E,
_xw1
),{~wz|3|4x|0wz|4c}, |4|4x{{d ;x|
,{~y;o
c,o9o{ow1|4{xw1or9
w1{,ow1 {#n},wzc {~xxw1|4cm,|K{S|4y31,)_,|4o6_|46cE|4xo
w1,4[|4G,)o}, |4x|; _[ _|4Mc,o7|mow1,{~O}, {
|4 |36
% y_,|46o|4{~{)E},|4{~wz{S|4x},{~  4Kx|>},,x)c>E {l{|,wz
1,;|7xwz|4c,|;{S|4yo,)o},4o|4x|M|4xo{~wz[|4|4xwz|;,o,c|4wzj
|4c{Sy %wz,_3y_,oxwz{Soo |4#6c|~.%y,1m|
0ox_,|3%x x }, {~wz}, {|4 },wzc {|>_,|4{|4|3v,xwzy_{S|4
xwz ;o,cy_{S|y_wz|4|4;c },{S|c|j},{S| |4y{S|

y>|4n9 ,,oo|>|4|4,w1{~x|
|4nx,x|4|4ow1 ow1,c|4w1|
|4r},
x|
o|4{,r. c|
r_xw1>|4>,|o,6,||rw1|y_),Ko ,c
y{S| y_46 c},{{ #  {S|4y{S|4y |4;0o,,  U|4wz{~w1wz
|4K}, x|o o{
|4xw1K|4l},{S|4x |4Ky_{S|4yK|4U1,o|46oZ %{y,c|4wz
}{ }m,wz{|4M0|o |>#_xw1l

xwzK|;, ,|4)x Ux}, {~wzl |4{wzc|4wz|M|4)x|4o{S|4|4xo{~{3,
j xc},|r|4%,E,4}|4{S|47,m}, o)c, l3_xw1>|47},{~wz|r,|r,
._,|3 |>,0Kv, 9
o,x,# ) G|4M|4,o |49|>#_xw1%|4xw1;x },{wz
j m|4xwz0x}, {~wz3|4M#| |4|3_wz
MM,%,|46{ n}, {#%_,|K|}w1c,{9,|4|4{Kc},,{# xw1{S,o
o|4#|0{|4|0wz{~,oo ,||_wz{~,, wz{7,o)}{
},{S ,o{|_,m




cw1 |4>|0)xw1l>|
K9,w1 {|
|y_{{),|
,|)|4xwzrcwzo|4>,|4
x},{d|o;|4;|4 1,w1,{S

Efectos colaterales de la implementacin


#,wzoK|44xxw1|c>|{|y_|o{w13},{#c},|4c|w1{_xw1w1||y,
|41|4ow1 owz|4{|4_|4{w1,6y,|4wz|3m},{S| o|3w1{~.{
al_bundy=> INSERT INTO shoe (shoename, sh_avail, slcolor)
al_bundy->
VALUES (sh5, 0, black);
INSERT 20128 1
al_bundy=> SELECT shoename, sh_avail, slcolor FROM shoe_data;
shoename |sh_avail|slcolor
-------+-----+------sh1
|
2|black
sh3
|
4|brown
sh2
|
0|black
sh4
|
3|brown
(4 rows)

w1|4{S|4xwz|M|6,||4o y_|M{S|4wz {~},{ Mj J %,|4w1,o


o,|; z|w1 ) ._,|Mx|;x|4{w1[,lj|4n_{yc[},{S| o|M|4
xU{~6||,{| wz {~K|30x|E,|3w1 x}, |4c 9_|4{_,|3|4 , |{S
shoe_data

|3
x|3|0wz},{

{S|4o ,|3)_xw1
},{S|4o|Ewz|4|{ {~
,|0|
shoe
wzG|1|4ow1_c|4wz|E|4xd
v,|cw1c_Mw1|4wz{,
)4%x6w1||3,0ooo #{0_,|
r,>x|){{MM6xy,|4w1||~.|4o,on|_o, c},{)|4,o|4{S;xw1
w1c6o|4{S
{~},{|4xw1| c}, {~wzc|4wzM|4>_,|
|4{ |
Kwz{,o },{~ Mj
o|{S|41|4{S|o%6%{S|4o
|cy_,m_{|_,%xw1% z|w1_o w1||
xm_ {S|4 xw1wz|4v,{|4%shoe
m;{S|4y_,|0},o{7;x|3cw1||0 c{
xw103|~.|4o, x|4{w1 x|3
,)|4 cxcmc m},{30),9
v,{~Eoc{|4xw1 }, |4c #|{{S|4y_,|3c ,|4M|4 c}, {~wzc|4w1%,|E
_,|4{|41j xxw1|>|4|4 w1|4c3|E
xy_,|w1|3x|4oo

Reglas sobre INSERT, UPDATE y DELETE


Diferencias con las reglas de las vistas.
m{S|y_%_,|n|n|4,|4},{n6 ; )v  Z)  wzwzc|4wz|
1|4{S| w1|4|9|rx|rm|4xo{~wz)|4%Ex|4o mwz|4{{,},{~r_xw1lSv,{~c|{ 4x
oc, >  )},|4{cw1|>c
v,,|4|4M6w1|4|{oo
v,,|4|4Mwz|4|4{c,w1}|49oo |4
0},{~E | Mj O|# },o`
},x|4, 1{|o|; mK x|E_||M,w1|l
v,,|4|3|{7o,,oo|4
{S|4y

"

|y_, mc , |_{ |3wz{,o M|4|4 xw1 M,y{|3|o{S|4Mo|4{S


%_{{|#|>w1{,oo;,| 9%},,|4|4;|x|4o{7|{y`

Cmo trabajan estas reglas


Uw1|y_E|4Mc|4wz|3
wzl
CREATE RULE rule_name AS ON event
TO object [WHERE rule_qualification]
DO [INSTEAD] [action | (actions) | NOTHING];

n_,|Kxy|`>{S|4yr|)}w1|c,|4xwz{~{S|4y_>_,|K|4xwzn|4,EK M
4)v %),9
K},,4wz|0w1 c
9{S|4y},o}, {|xxw1|c),|3{S|4y_#o,6
{|oM{S|4x,w1
n|4wz},n|6o cn,|6,{ |%wz{,ox y_,|
, z|w1cc| 
w1| c|w1[|4U| c >  )9jv,{{S|4y)|;,},wz|4,|4xxwz|4c
|K{S|4y>o{S|4%,%xwzm|K{|3,|6w1{,oo  c|4wz|6%xw1m|){~ |4E|
w1{,ox c|4xw1)_o v,,|4|
|4{o|4{S;1},{Ko_|;6 M1,)Mc,w1},|
oo|4v,{)xc},,o{zj_|4{S|cr,{S|4y ,)ooxw1){S|4y
},,|4|0wz|4|4{
,0o,,  M%6m},,|4|>|{ M O%
o6,3|#,o,oo M|3,
{S|4y_9,9,
{S|4xw1{o M_,|0x|3o|3 ,mo
o|4|E,
{S|4y0x|3|_|{~4M{S|44{7mo,6xxwz0 ,oo x mx|3},,|4|
{S|4.|4{{0},x|4,1{S|4o|9M 7j%K)_,|3xoc|4wz|Ex 3{|o;
oc6.|4wzm1},|4{S) , {~owz|4{xwz #|4x},| |4xx
)|K|4xwz|6cw1||4c 0o,w1{Sox3_,|6},{S , |c3xy_,|4wz|40{~ |4E|Kwz{,o
oM},{3,
{S|4y0|>,
 o 
jo,,ooM ;
*

{|wz{,o }{~)) o n|K{S|4y)KK_,|)x|)),; ,


 ;
#{||3w1{,oo; {y_|l

jo,,ooM},|{Ko Mj
{|wz{,o }{~)) o n|K{S|4y)KK_,|)x|)),; ,
*
 ;
#{||3w1{,oo; {y_|l
j|E0o,,ooMm6x|3 ;
 {|0w1{,ox |0
oo |0
{S|4y
_,|
|0,%o,
*
oo ,|E0{S|4y0m3 ,oo ,|E#{|4|>w1{,ooM {~y|4
j|E0o,,ooMmx|3 Mj
{~ |Ewz{~, o ;|E0 o ;|E0{S|4y330_,|3x|EM)0o
*
 ;|30{S|4y0%0o,, o M|E #{ |4#,|Ew1{,ooM {~y|l
l{ |9wz{~,oo % {~yll_,|r|9|9E)>o,, o %|#>{S|4y
*
|4y
_c|4w1|x3{|y_E%|4 Mj )4|{~ |Ewz{~, o ;{y xoc{x|
|79#xw1dv,,|4xwz
_,|x0{S|y_ M o,, ,4||4{~ |
w1{,ox {y__wz|4{cc 0o ,[clcwz w1,|K,3{|4E|)w1{,oo
},{3,
{S|4y3o ,0 o 



 9{|r|0w1{,ooy_||4{ 9},{w1{,|0roo|49|09{S|4y9x|
o o
|4m|xwz|4c0|r{S|4|4xo{~wz,{~>|r,|4_6},,|4|9x|4{_,|E w1{{S|4y},o{S|4xwz|4
|4[c3nc|4
{ |40|Kw1{,oo4)|6|4xwz|6c 0{_ |43|Kwz{~, o [|
7oo|47|97{S|4y7||4{~4%w1|4|{|4% wz{)wz},)|# c 4|46wz{3{S|4o
{S|4x,w1`)| w1{S3c o|4xw1|}{ o|4x0{S|4o,{_3w1|4{c{#|)K,o|_M0,6cw1|
|6{S|4o,{~x |4
o c},0owz,c|4wz|6|% )mw1|{~o |44wz{~3 )mwz|4{o|40,
xy_,|3|m{S|4y#,|3,},wz|E},{
},o{ l|4 xxw1|4c|3{S|y_x,c{~
,|
x|3
},{S,oK,M, |>|4w1{S|>co|4,o |49|>{|y_%{wz00w1{xoo
 {|,|w1{,oo)| w1{ |4),o |4|4owz y_3|xwz|4c
xMx%},w1lx)0_|4
_,|3|4 },,|4|4Mo|4{{S|41| {S|4o0
|4w1{#,pg_rewrite
|3w1
|6{y_},{%M K)y_,3x,wzw1,o|0{[xn|4o0w1|0|6x|{
,w144v,{%o,_,|4{9{S|41|4{d| 6%M_%xw1m .|4w1_|6%_,|4{n {y_x|
{S|4 x_,x,m,)|w1{0o {~{S|}, |4w1|_xx|0|4o,|4wz{|4x|4w1{|3|4l
},{S|x [|)wz,c|4cK{S|41|4{S|  )|K w1{Sc M x|Kcwz|4|Ky,_,|KK
,_,|{{S|4.|4{S| )6, |
{S|4|4c}
}, {#){S|41|4{|4oK)K|w1{|
Kwz
|E{y%_,|3|
{S|4x{S|4x,w1
Una primera regla paso a paso.

,|{S|4c#w1{o|4{ rocr|o n


x_|0{|4o
6

v,{~)|4 o{S|4{|cE,6wz6,|) y_,6{S|4y6,|K|4xo{~K>|4shoelace_data


wz{~> K_|4
_,|3x|E{S|4o|E,3Kv,  {S|

shoelace_data

CREATE TABLE shoelace_log (


sl_name
char(10),
sl_avail
integer,
log_who
name,
log_when
datetime
);

shoelace changed
new available value
who did it
when

CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data


WHERE NEW.sl_avail != OLD.sl_avail
DO INSERT INTO shoelace_log VALUES (
NEW.sl_name,
NEW.sl_avail,
getpgusername(),
now::text
);

K%|4w1|>wz|4{S|4xwz|E|43o{ow1|{`o;,| ,+ |4;3{S|y_,|E3oo Mj


},{3wz|4o|4{w1|jwzxj;|4 |4 w1{,owz{_|4{~0|4M|4 c c|4wzm|4 >  )_,|
|4w1},; .|4w1_M|4
|4r,wzm|0w1},;1| j|0wz|4w1)o|4{,Kox
w1w1|
|
4`o n4lshoelace_log
w1)||4x|c  |
c |{~,c{o wzwz|)|46oo
|%{S|y_mw1 0|4wz{
,|4 y[w1|{~G; {|m;xw1{S,o _ > 
)9xMm|#|4xm|jowzc|4wz|3m_,|0_,|4{S|c
o{~ wz|4{` |4_
_wz{,ow1 {
0oxwz{S{,M`1|4o1 {~_,|3x|4{
|4_,3||c c|4wz;|3
|~.|4o,oM1wz|4wz
c|4 , + wz|4lw11
 { o|
al_bundy=> UPDATE shoelace_data SET sl_avail = 6
al_bundy->
WHERE sl_name = sl7;

% xwz{ c{~c#|4;
w1_0|E y7
al_bundy=> SELECT * FROM shoelace_log;
sl_name
|sl_avail|log_who|log_when
-------+-----+-----+--------------------sl7
|
6|Al
|Tue Oct 20 16:14:45 1998 MET DST



(1 row)

6,|;|49.,xw1G_,| xwz{SK|4x},|{~c |4c)_,M ,{{[|4Ux c{~


wz{,ow1 {3 {S|n,{7,|;wz{~, U1|4xwzM_|4MM},{w1|m|4{~ |mwz{~, o
{y|4xw13{|xw1%}, {S_,|EEx|E|E },|4{o;||40o ;|r0{S|4y3},{
{S|4y_,|E,},wz|4
UPDATE shoelace_data SET sl_avail = 6
FROM shoelace_data shoelace_data
WHERE bpchareq(shoelace_data.sl_name, sl7);

M6,0{S|4y0},{ yx|4 | _,|3|4K Kv, MoM


|4l},{S|x ,|Eo,o
oM|E
{S|y_
int4ne(NEW.sl_avail, OLD.sl_avail)

%,
 o
INSERT INTO shoelace_log SELECT
*NEW*.sl_name, *NEW*.sl_avail,
getpgusername(), datetime(now::text)
FROM shoelace_data *NEW*, shoelace_data *OLD*,
shoelace_log shoelace_log;

M
|w1{| c 7r9|#rxwz>|xxw1|cE},y{S,|4dx},|4oc|4w1|#c},,r
xwzo K,|_,|_,4x
x|y#{S|41|{S| #9;KJ|4) Mj o
,x
|4_ {cw1M| ,,%| Mj oK||4o M1|4{S|  K|4wz{|
, Mj
,K;, ; Zxj  |_|{~ |0w1{,ox n_ 9wz|4|4
w1_|9{~y_ xwz.|4wz 4}||46w1|4|{ ,oo |4wzj},wzc,{| ,|
c>w1{S|Kxo{S|4{,c}n||~z|oo n|w1{S|4x,w1 j_{~{Mx|4o,|4o {{
|Eo|4xz 6o,_,|4{7wz{Sm},{0|4x|3{ |3wz{,o xj%m{S|41| {S|4o#|
|4wz{~,4>|Kwz)|{yM},{S|4_r_{~ |
w1{,ooj4xwz|)x|)o |{~wz|)|n,
},|;|z| ,o 1_|4{x Mj ,,oo G|m){S|4y4)wz|4{ {
},,|4|ro|4{~wzc|4wz|3{S|4x,w1{|Mc{~wz|4
n{S|4y|4m,c{S|4yn Mj o,, |c _,|n|4xwz|4cc|{S|4y
|4|4{`r| _|4{,{_ |4|w1{,ood9 o )|r{|y_c,o9|{~
|3wz{~,oo  {~y`|_},{c|4{},xl)w1
|0{y;|0),|4{~m{y|4xwz
o{}, {~,3{,|Ew1{,oo;,|>0oo ,|>{S|4y4xxw1K0oc6{S|4x,w1,
INSERT INTO shoelace_log SELECT
*NEW*.sl_name, *NEW*.sl_avai,
getpgusername(), datetime(now::text)
FROM shoelace_data shoelace_data,
shoelace_data *NEW*,
shoelace_data *OLD*,
shoelace_log shoelace_log;

m|4l|y_,K},x 4x|>|>E ,,oo m|>E{S|4y_|rc,6_,|r|4{S|4x,w1K|


{S|4xw1{y_|>0#|4;#_,|3x c|
INSERT INTO shoelace_log SELECT
*NEW*.sl_name, *NEW*.sl_avai,
getpgusername(), datetime(now::text)
FROM shoelace_data shoelace_data, shoelace_data *NEW*,
shoelace_data *OLD*, shoelace_log shoelace_log
WHERE int4ne(*NEW*.sl_avail, *OLD*.sl_avail);



|4w1|{o|{3},x|m,|; ,,oo |mK{|)|;wz{~,o 


{~y|4x
{S|4xw1{y_|;|4.,|4yM|){S|4x,wz Ecr,KxE,>wzo,r},
{ |4{ |
w1{,ox {y_`
INSERT INTO shoelace_log SELECT
*NEW*.sl_name, *NEW*.sl_avai,
getpgusername(), datetime(now::text)
FROM shoelace_data shoelace_data, shoelace_data *NEW*,
shoelace_data *OLD*, shoelace_log shoelace_log
WHERE int4ne(*NEW*.sl_avail, *OLD*.sl_avail)
AND bpchareq(shoelace_data.sl_name, sl7);

%|j},x) ,w1{S
x|>x,xw1wz,_|;7{S|41|4{S| oM }, {|4w1{|93xw1E.|4wz
_6|{~ |Ewz{~, o M{y 6o #{S|4.|{S|4o0{~_| {{S|4x},|w1|
|E0{S| ;{S|4x,w1
INSERT INTO shoelace_log SELECT
shoelace_data.sl_name,
6,
getpgusername(), datetime(now::text)
FROM shoelace_data shoelace_data, shoelace_data *NEW*,
shoelace_data *OLD*, shoelace_log shoelace_log
WHERE int4ne(6, *OLD*.sl_avail)
AND bpchareq(shoelace_data.sl_name, sl7);

},x%3{||4c},
{S|41|4{d| #K },{{S|41|4{S| o#|3{S|4o;{S|,wz
INSERT INTO shoelace_log SELECT
shoelace_data.sl_name, 6,
getpgusername(), datetime(now::text)
FROM shoelace_data shoelace_data, shoelace_data *NEW*,
shoelace_data *OLD*, shoelace_log shoelace_log
WHERE int4ne(6, shoelace_data.sl_avail)
AND bpchareq(shoelace_data.sl_name, sl7);

[|4xw1)|4~)|rc)_,|r3clc3{S|,oo;|93x>|4lxwz|4c3,|r{S|4y7|
xw10|3,{|4|>w1{,ooM_,|3x %cc%_,|3xw1{S,o _|4
INSERT INTO shoelace_log SELECT
shoelace_data.sl_name, 6,
getpgusername(), now
FROM shoelace_data
WHERE 6 != shoelace_data.sl_avail
AND shoelace_data.sl_name = sl7;
UPDATE shoelace_data SET sl_avail = 6
WHERE sl_name = sl7;

xw10o|~.|4o,w1,
|4|4xwz|m {S|4[|4xn|4
|4j wz4n|4w1|mc_,|%;{S|4yM,|4,|_4
xxwzw1,o |4)co,,oo|
,
x|4y,{[_,|;xM,|4{~[ {y_1,|4x|
,
UPDATE shoelace_data SET sl_color = green
WHERE sl_name = sl7;

nx|%{~%|4xo{~wzny,m|w1{m|4[;wzm|6y_;_,|%|4xwzm|m|4{~ ,|
w1{,ox  {~ymowz|4|0,
|4wz{0|3
xwz) .|4w1_m},{~0x,|3c
n_,|mM x_x|4{M{S||c},m}, {3x|o|4w1 {S|4x,wzn|4
_,|4{m, 
INSERT INTO shoelace_log SELECT



shoelace_data.sl_name,
shoelace_data.sl_avail,
getpgusername(), now
FROM shoelace_data
WHERE shoelace_data.sl_avail !=
shoelace_data.sl_avail
AND shoelace_data.sl_name = sl7;

o
o,,  M,o)x|4{
o|4{w1x)
_|4
_,|0m;,|{S|o#
|_|3{~
|wz{~,oo K|w1{S|, Mj [dj , Mj [ )j w1{z{~9wzc
4
_,|4{; {~y__co
c,wz},|4ro cl)|0c ;_,|0 _,|4x|
},|4K|4 o c
UPDATE shoelace_data SET sl_avail = 0
WHERE sl_color = black;

x|4{~owz,o,wz{,1xx'$[xv|{Snx'$;w1|4|mx_ )
w1|,o,,ooG| %{|)|wz{~,, x Z {~y|46|4K1|4{S| w1|oc
{S|4x,w1%wz|4|4c 9|{~ |Ewz{~, o Mo
INSERT INTO shoelace_log SELECT
shoelace_data.sl_name, 0,
getpgusername(), now
FROM shoelace_data
WHERE 0 != shoelace_data.sl_avail
AND shoelace_data.sl_color = black;

xw1|6{ |%wz{~, o x|4y,{c|4wz|%|{~wz{mw1{S|40,|4_


|4wz{4
|6;w1m|
yxG|6|4 ,w1c|4w1|>o{{S|4ow1
)c}, {~wzwz|{|o{S{0_,||47{ |wz{~,oo {y|M|~.|4o,w1|4,w1c 
`y|4w1|K|6w1{,o9|%v,xwzy_{S|40 {S|c|4w1m|o w1,{E|%o c
|4wz{S|%m|~.|4o,
o[|6
 0{~ |43|Kwz{~,oo _|Kc n_,|6|4,x|4y,n},,|4,|K_|4{>oc
{S|4 },{|4}{~c|{jjEKv, ,|4{ExK|~.|4o,w1,E},{c|4{S 4wz
|wz{%r ) ,|9c _,|# ; ;|4 y_yyK{9|4o w1{
y,
,0},{0_,|3x|o|4wz  )m{3,|~.%y,{xwz{

Cooperacin con las vistas


K1 {~cK| )|
},{Swz|4y|4{r{S|o|49xwzK|
6c|o)}, x_[|
_,|My_,|4},,|4 ; )v Z)Uwz
x|4K|4)},|{~cwz{3x,
{|4|>w1{,ooM{S|4o{{d|{~|>,|4_ {S|c{S|4y
CREATE
DO
CREATE
DO
CREATE
DO

RULE shoe_ins_protect AS ON INSERT TO shoe


INSTEAD NOTHING;
RULE shoe_upd_protect AS ON UPDATE TO shoe
INSTEAD NOTHING;
RULE shoe_del_protect AS ON DELETE TO shoe
INSTEAD NOTHING;

{;w1|4wz;o|4{>o,,|4{~m,|m|wz0},|{~o |4
|;{S|4oxwz

|47xxw1|c|M{S|y_
},o{~MK{S|4yl)_|4,|MK{S|4yw1|4|;ooshoe
|4K
x Mj )l0xw1{S|4x,w1wz|E|3{~ |4|Ewz{~,oo |wz{0_o%
_,|4{m
|4_ |{~%_|4nm,|mccm},{%x|4{>},wzcn|~.|4o,w1,nw1{3
ow1,|4xxw1|c
|3{S|4y_



Nota: Este hecho debera irritar a las aplicaciones cliente, ya que no ocurre absoltamente nada en la base de datos, y por ello, el servidor no devuelve nada para la query. Ni
siquiera un PGRES_EMPTY_QUERY o similar ser utilizable en libpq. En psql, no ocurre
nada. Esto debera cambiar en el futuro.

K01 {c0c ,wzo


|E,wz{|4 xxw1|4c
|>{S|4y_|#o{S|4{{S|4y_,|3{S|4|o{
;|4 {|>w1{,ooM|4M,6_,|3y0
}|4{~ Mo{{S|4ow1E|4Mw1{S|4|4
v,{~Eo|4{|4xw16|4M
_wz
4o{S|4{S| c#xy,|4wz|49{S|4y
shoelace

CREATE RULE shoelace_ins AS ON INSERT TO shoelace


DO INSTEAD
INSERT INTO shoelace_data VALUES (
NEW.sl_name,
NEW.sl_avail,
NEW.sl_color,
NEW.sl_len,
NEW.sl_unit);
CREATE RULE shoelace_upd AS ON UPDATE TO shoelace
DO INSTEAD
UPDATE shoelace_data SET
sl_name = NEW.sl_name,
sl_avail = NEW.sl_avail,
sl_color = NEW.sl_color,
sl_len = NEW.sl_len,
sl_unit = NEW.sl_unit
WHERE sl_name = OLD.sl_name;
CREATE RULE shoelace_del AS ON DELETE TO shoelace
DO INSTEAD
DELETE FROM shoelace_data
WHERE sl_name = OLD.sl_name;


{0|4y
,}_,|4wz|E|3o{S |4|3},4wz 900wz|4
| m|w1||3,
y_{
xw1m|K{~wzo, l n|43},{w1o,{c|4wz|K,|4no|oo,x_nn_,|4{S|
c6ow1,c,c|4wz|_xw1nx |4o|_Zx,y_{zo{S|4c K%w1_
},|4_,|x,3,|r4l}|E|{~wz{w1 |93xw1E|r{~wzo,x6 w1{> ;,
w1{S,o%|},| ` #oc >  c},|4wz #x 
CREATE TABLE shoelace_arrive (
arr_name
char(10),
arr_quant
integer
);
CREATE TABLE shoelace_ok (
ok_name
char(10),
ok_quant
integer
);
CREATE RULE shoelace_ok_ins AS ON INSERT TO shoelace_ok
DO INSTEAD
UPDATE shoelace SET
sl_avail = sl_avail + NEW.ok_quant
WHERE sl_name = NEW.ok_name;

 {~ },,|4|>|w1{x|3m |{7yK c


al_bundy=> SELECT * FROM shoelace_arrive;



arr_name |arr_quant
-------+-----sl3
|
10
sl6
|
20
sl8
|
20
(3 rows)

6,|>|4|4low1c|w1|r%_,|33|4M0xwz0|E{~wzo,){S|4c ,0{},3c{
|4; 9wz owz,|4
al_bundy=> SELECT * FROM shoelace ORDER BY sl_name;
sl_name
|sl_avail|sl_color |sl_len|sl_unit |sl_len_cm
-------+-----+-------+----+-----+-----sl1
|
5|black
|
80|cm
|
80
sl2
|
6|black
|
100|cm
|
100
sl7
|
6|brown
|
60|cm
|
60
sl3
|
0|black
|
35|inch
|
88.9
sl4
|
8|black
|
40|inch
|
101.6
sl8
|
1|brown
|
40|inch
|
101.6
sl5
|
4|brown
|
1|m
|
100
sl6
|
0|brown
|
0.9|m
|
90
(8 rows)

w1{xc#o{S |4{S|4o||4y 
al_bundy=> INSERT INTO shoelace_ok SELECT * FROM shoelace_arrive;

%o c},{Sn#{|xwz 
al_bundy=> SELECT * FROM shoelace ORDER BY sl_name;
sl_name
|sl_avail|sl_color |sl_len|sl_unit |sl_len_cm
-------+-----+-------+----+-----+-----sl1
|
5|black
|
80|cm
|
80
sl2
|
6|black
|
100|cm
|
100
sl7
|
6|brown
|
60|cm
|
60
sl4
|
8|black
|
40|inch
|
101.6
sl3
|
10|black
|
35|inch
|
88.9
sl8
|
21|brown
|
40|inch
|
101.6
sl5
|
4|brown
|
1|m
|
100
sl6
|
20|brown
|
0.9|m
|
90
(8 rows)
al_bundy=> SELECT * FROM shoelace_log;
sl_name
|sl_avail|log_who|log_when
-------+-----+-----+--------------------sl7
|
6|Al
|Tue Oct 20 19:14:45
sl3
|
10|Al
|Tue Oct 20 19:25:16
sl6
|
20|Al
|Tue Oct 20 19:25:16
sl8
|
21|Al
|Tue Oct 20 19:25:16
(4 rows)

1998
1998
1998
1998

MET
MET
MET
MET

DST
DST
DST
DST

xw1;|4,;{Sy;;|4x|%},{c|4{ Mj O, M|xw1 {S|4x,w1  x


|4xo{~} M|{~
,wzc
|4|4xw1|0 ,c|w1m1},|{S%m|4,wzcm|~.|4c}, 1v,{~n|4{S
|4xw1_E
x0|>w1{,ow1 {S|4
INSERT INTO shoelace_ok SELECT
shoelace_arrive.arr_name, shoelace_arrive.arr_quant
FROM shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok;

 {0x|3},o3
},{c|4{0{S|4y x |4o|4 mx|3_,|4_|_
UPDATE shoelace SET



sl_avail = int4pl(shoelace.sl_avail, shoelace_arrive.arr_quant)


FROM shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
shoelace_ok *OLD*, shoelace_ok *NEW*,
shoelace shoelace
WHERE bpchareq(shoelace.sl_name, showlace_arrive.arr_name);

;
wz{~)|
 Mj n{y_x{S|
o,wz_,|4{M{||4xo{`w1x|},
xwz|4cc|{S|4y6|,|4_c} shoelace_ok
Z|cx|4y_,n{S|y_ x |4o|4,},
},{S,o|
UPDATE shoelace_data SET
sl_name = shoelace.sl_name,
sl_avail = int4pl(shoelace.sl_avail, shoelace_arrive.arr_quant),
sl_color = shoelace.sl_color,
sl_len = shoelace.sl_len,
sl_unit = shoelace.sl_unit
FROM shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
shoelace_ok *OLD*, shoelace_ok *NEW*,
shoelace shoelace, shoelace *OLD*,
shoelace *NEW*, shoelace_data showlace_data
WHERE bpchareq(shoelace.sl_name, showlace_arrive.arr_name)
AND bpchareq(shoelace_data.sl_name, shoelace.sl_name);

6wz{6_|46|3,6{|y_ Mj K|{_ |w1{,oocwz|4{{9x|K|| M


w1||M_,||4xw1_,|4{,Z,w1_xw1
jv,|4{S|xwz|4cn|{S|4yKG
shoelace
w1|{~c,c G|wzM,|4wz|%c ,|;
o w1;[},oMM{S|4y ,x|o|
},{S,o|4
UPDATE shoelace_data SET
sl_name = s.sl_name,
sl_avail = int4pl(s.sl_avail, shoelace_arrive.arr_quant),
sl_color = s.sl_color,
sl_len = s.sl_len,
sl_unit = s.sl_unit
FROM shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
shoelace_ok *OLD*, shoelace_ok *NEW*,
shoelace shoelace, shoelace *OLD*,
shoelace *NEW*, shoelace_data showlace_data,
shoelace *OLD*, shoelace *NEW*,
shoelace_data s, unit u
WHERE bpchareq(s.sl_name, showlace_arrive.arr_name)
AND bpchareq(shoelace_data.sl_name, s.sl_name);

)|;,||m},o,c{S|4y;|;,},,w1|%}, {3|4[_,|4_|;My_{{EM{S,|4
|4yc #9{S #|{S||4x {wz{#,c|{
$dxwz#|x|},o##{S|4y yx|o|
_,|3},{S , |r|4 {|Ew1{,o ;|4lwz{~
INSERT INTO shoelace_log SELECT
s.sl_name,
int4pl(s.sl_avail, shoelace_arrive.arr_quant),
getpgusername(),
datetime(now::text)
FROM shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
shoelace_ok *OLD*, shoelace_ok *NEW*,
shoelace shoelace, shoelace *OLD*,
shoelace *NEW*, shoelace_data showlace_data,
shoelace *OLD*, shoelace *NEW*,
shoelace_data s, unit u,
shoelace_data *OLD*, shoelace_data *NEW*
shoelace_log shoelace_log
WHERE bpchareq(s.sl_name, showlace_arrive.arr_name)



AND bpchareq(shoelace_data.sl_name, s.sl_name);


AND int4ne(int4pl(s.sl_avail, shoelace_arrive.arr_quant),
s.sl_avail);

{4|3 ,o|xwz|4cr|{S|4y,x||4xo| wz#|,||{_ |4|wz{~, o


y_||4{ lK|>|4xw13 {cw1|{~ccoM {~ |4|Ewz{~, o ;
,|4_,|3x
y_,|4
wz{S, o |,|3K
INSERT INTO shoelace_log SELECT
s.sl_name,
s.sl_avail + shoelace_arrive.arr_quant,
getpgusername(),
now
FROM shoelace_arrive shoelace_arrive, shoelace_data shoelace_data,
shoelace_data s
WHERE s.sl_name = shoelace_arrive.arr_name
AND shoelace_data.sl_name = s.sl_name
AND s.sl_avail + shoelace_arrive.arr_quant != s.sl_avail;
UPDATE shoelace_data SET
sl_avail = shoelace_data.sl_avail + shoelace_arrive.arr_quant
FROM shoelace_arrive shoelace_arrive,
shoelace_data shoelace_data,
shoelace_data s
WHERE s.sl_name = shoelace_arrive.sl_name
AND shoelace_data.sl_name = s.sl_name;

j{S|4x,w1)|4_,|E ,w1 ||4;|rE{S|4o 4x|Ex|4{w1;|mwz{ocm}, {


ow1,o |4),wz|4{So|4{4 c_G}, {3ow1,x |4K,o,{w1c){S|4yxw1{
|4x0ow1,4o ,|,
,w1xwz6|4x%x|3{S|4,o|>
,_,|4{|4
M%},|4_,|;|4wz|3,wzwz;|4xy{~|_xU{m|##_,|4{|4x,|4x {S,
{~c _,|33{S|4
}{S|o|E,_|4o|4|4;0wz3|r{~y_ %|
x|
,|4|4{{S|4,o{7
,shoelace_data
)x  ,_ },w1c {;c},,|4xwzlM}, {|4m|_}|
|~.|4o,oM},{3
x3|4xwz|4c
|>{S|4y_,|E Mj x|4{
Nested Loop
-> Merge Join
-> Seq Scan
-> Sort
-> Seq Scan on s
-> Seq Scan
-> Sort
-> Seq Scan on shoelace_arrive
-> Seq Scan on shoelace_data

c|4wz{~_,|3 cwz|4,6
|w1{3|jwz{~30
w1_3|E{y%|4|{~
x|4{
Merge Join
-> Seq Scan
-> Sort
->
-> Seq Scan
-> Sort
->

Seq Scan on s

Seq Scan on shoelace_arrive

_,|E},{S ,o|>|4low1c|4wz|3cxc|4w1{|4;0{S|4M|E y|4o{z4|4xxw1|


c
|3{S|4y
},{  %,{~{K|4lw1{
|3
{S|4o
x ,w1
c|4wz|E|4o|4x{~G|4lcc%{~{%  |4wz%x|>},{S ,o|>shoelace_data
|r,|4_%|4;EKv, 9
v,|4{S6|{~0,Mwz{~_zK{S|4c|w1|E,{SKo|4{_,|3wz6|0}, |



K|4c wz{oU,|7xwz|4cn|;{S|4y_)|Mv, wzy{|6|;}, |4{~M


xw1,wzK{S,)_,|K_|4|
o{S |4>|
},w1 Z,| , K,|4x|)cy
|4G|4mx xw1,wzw1c4|%||4y_w1|4,Z}, o|4cx,G|4|4ywz|_v, {K|4
|43x|>|4c},|4E|>wz|4c},6|4;w1|c},6|;_,| j},0o {S|_,|ExMx ,w1c|w1|
_|4|4~xwz0_|4E3},|4) )))E},{|7|Eo {,|4cy_|w1%,|> {~E
|4
}x|M_,{~{>wz{Sc {1oc[4x|;o c},{Sc|w1cM c},{{Ey_ },{S|4}4{x
x|E|Ew1 },{~3 {S |4#{S x
al_bundy=> INSERT INTO shoelace VALUES
al_bundy->
(sl9, 0, pink, 35.0, inch, 0.0);
al_bundy=> INSERT INTO shoelace VALUES
al_bundy->
(sl10, 1000, magenta, 40.0, inch, 0.0);


{E_,|{|r{S|4_x{o{S |4|>) % ;y,;},{|>},w1 l,j}, {~
{S|4{
co c},o_,|{~Uo_|4G|J|}, |4c 6},{S|4},{4{,nxwzn
|41|4ow1
CREATE VIEW shoelace_obsolete AS
SELECT * FROM shoelace WHERE NOT EXISTS
(SELECT shoename FROM shoe WHERE slcolor = sl_color);

o0x3|4
al_bundy=> SELECT * FROM shoelace_obsolete;
sl_name
|sl_avail|sl_color |sl_len|sl_unit |sl_len_cm
-------+-----+-------+----+-----+-----sl9
|
0|pink
|
35|inch
|
88.9
sl10
|
1000|magenta
|
40|inch
|
101.6

{S|E r)))
o{S |49cy_|w1|_|{~4c r_x{7 w1|#|3,|
}c 9
o|4{~K|9,|4_ },|4{S|4x|r|4wz{SK},{S |4cS3|w1{>{Sx3{{c lv{~>o|4{
,}, ocr, },{)v, xw1y{S|4xM{{c>{S| wz4c|w1| nxny{zj {S|4{S|4
c,
,|4_0_xw1
CREATE VIEW shoelace_candelete AS
SELECT * FROM shoelace_obsolete WHERE sl_avail = 0;

G6{S|4c |3|xw101 {~c


DELETE FROM shoelace WHERE EXISTS
(SELECT * FROM shoelace_candelete
WHERE sl_name = shoelace.sl_name);


al_bundy=> SELECT * FROM shoelace;
sl_name
|sl_avail|sl_color |sl_len|sl_unit
-------+-----+-------+----+-----+-----sl1
|
5|black
|
80|cm
sl2
|
6|black
|
100|cm
sl7
|
6|brown
|
60|cm
sl4
|
8|black
|
40|inch
sl3
|
10|black
|
35|inch
sl8
|
21|brown
|
40|inch
sl10
|
1000|magenta
|
40|inch
sl5
|
4|brown
|
1|m
sl6
|
20|brown
|
0.9|m
(9 rows)

"

|sl_len_cm
|
|
|
|
|
|
|
|
|

80
100
60
101.6
88.9
101.6
101.6
100
90

K)J|U_wzo U,x|4| w#oco,oo _,||Uw1 w1,wz


%m_xw13,o{S,4,x,|6,m|K|43cc
w1||6,mxx|4| w|
ooo cowz|4|4,%xwzmn |Kx|6,wz[o,c3oo,43_,|4,
{S|4| o{w1E|4;,m,o6{~ j|rw1{,oom,|> {~{3 w1 {S|4_,|{~ |>,Ew1_
{S|4`
v,|4xK,|>Kc,K}, 7ox |4|4m|4c,K{|4l|4m7,|>x|>,>oxw1{S,oo
xc{x|40|o|4x{~~v,|4{S6c|Ew1{_,
,M}, o%_,|3|4xwz%1,o|
La verdad es: Haciendo esto encontr otro bug mientras escriba este documento. Pero
tras fijarlo comprob un poco avergonzado que trabajaba correctamente.

Reglas y permisos

)|4cc{S|4|4xo{`w1,{c|m_,|{~|;},{)|4xwz|4c[|{S|4y_m|v,xwzy_{S|4x|
oo|4[; w1{wz_xw11|4{S|w1|4)|%
|;M_,|4{[ {~y`Kwzc
{S|4y4|3,},wz|44|wz%},,||Eo,{oo|4x6||x {w1,{00wz
7{S|4y|r{S|4|4xo{`w1,{36w1|4|m,;},{S },|4w1{~)1|4{S| o~},{S },|4wz4{6|r,
{S|4 1wz
m_wz|49,w1 cw1oc|w1|0|4},{S },|4w1{`;|39{S|y_|0{S|4| x {w1,{
|4,3},{%|44xxw1|4cm,|m{S|y_
|6v, xw1y{S|4
ocm|4oc}, {w1c|w1n,|4
xwz|4cm|%o w1{S |6 o|4x,|6|41|4ow143{S|4o |40,|mx|%,wz|4m
{S|4y4 c},{S ,{w1|>
{||4x {`w1,{
w1{ },|4{c 9|},{S},|w1{K|

{S|4 l wz{~
_,|0
{S|4y
|E
|4,xwzmo|3_,|0|4 ,x{~%m|4o|4xw1|
x6},|4{c 9}{~E#wzjxwz
_,|34 o|E{S|41|4{|4o0|4Mx,#_,|{~|l
v,{|z|c},K%,x,{w1||r,Exw1>|r,c|{S7|9wz|441 |4m>_,|9y_, x
},{,r w1{S > n|w1|{~r},{K)x|4o{S|4w1{~|4K o  },,|4,|o wz{S,{#
xy_,|4wz|_
CREATE TABLE phone_data (person text, phone text, private bool);
CREATE VIEW phone_number AS
SELECT person, phone FROM phone_data WHERE NOT private;
GRANT SELECT ON phone_number TO secretary;

M|%|4lo|4},wzc4|x,},|4{S,x,{~[|mMx|;|mwzx},,|4|4oo|4| {
MMw1
}, |4wz_v,|4{S|4nc M cx|4o{S|4w1{n},,|4|j nwz{~%|
_wzm}, |4,c{S|_4,xwz|4cm|6{S|y_3{S|4|4xo{`{~mmj |6}, |4,c{S|
|4U,j J|}, |4,w1,|o,,  U|,| Gx|,xoU
|4wz{~,4ro,;`},{~_7x|41xK_|4
_,|
|4,,{~;x|4|4},{S },|4w1{~%|0},
|4,c{S|46|4owz{K o||)%}, |4w1)x|Koc}{,|_6 wz{~%x,3},|4{cxx
_,|4{[x|Mox|{~M,wz{Moc},{S oG},{Moo|4| {0M},|,c|4{0x|
{S|40|4wzo|4x|3c %,|3|Ec_,|3
x|4o{S|4wz4{0},,|4,0,w1{~
 %},|4{cx mx c},{S 6{S|4yn{S|4y)|c,_,|n|o{|w1{~n|% {
,o_,|M},,|4,|;_|4{3 K,c|4{S)|;w1|41[},,o llv|{Scx|4o{S|4w1{},,|4,|
o{| { w1{3_xw106,wz{{|4oo|4x)0|4E},,ow1  |4 ,,|4{~E},,|4|r_|4{
>w1 >|)}|4,c_{S|Kwz{r|6_wz6|
K| {S|4wz{~ M_,|)K| {S|w1{~
m},,|4|Eo|4{|9o{S|44{,)_xw1
|
oo|4),{| wzc|4w1|0}, |4w101{S|4c|4w1|
x},,|4|4},|4{SMwz{~z{},,|4xw1_,|KoKo |M {w1{6%wz{xo c,{w1|
noc},{S oJ|%},|4{cxx w1Z},{S w1Uo c|4,,{wz|4ycwz c|
_,|K%x|4o{S|4wz4{%%|4{w1_xw16%},|,c{S|4|4},,|| /
.Exo |
c|w1c|4w1|>|4x},,4xo,_,|4{7oo|4x60
_xw13|E|o{|w1{`#1{



y,|4}, {M},|4x{0_,|;|4xw1|; |_,|4{S|4yM{S|4y_M|4),Uyj.|4{Sc|Mx|4y,{


},|4{S|r|4o6K)|4~j|4xw1)Kw1{x.x|43x|4o{S|4wz4{3}, {>y_||4{~{Ew1_>o
cco,c|}, |4,c|4{o},{ 7wz_,4wz,7 d)|4xw1|
oxx|4{_mx,},{S },
wzx_c}, {m,wz{{r|4o |; ,_,|4{m_,|%|4
_,x|4{K[ M_,|4{S|K,|4o{>` 1|4[ j,y,|4[|4[_,|4o,c
o|E%w1|4{ {z|4|4cc|wz%|> _|4{x {S|E,|4xw1{S #}, xm |{7|4 (
.39
xw1|Kn|4oxcnw1n_1{x.6},{%{S|4yE|K,},w1|_|,|~.|4c},,|6%x|4o
},{S|_|},{S },|4wz{G|%wzK|nx||wz6| 1x,}, |4,|
1,|4{~;|cxc }, {M|4{3,wz{[ ;, ; )v 
MK,K6_wz6x |4o|) ` v|{Sx j |4nx |4o|4 yK o n|
m{S|4y%|6|4xo{~{r|4wz{~,3,|4,y[||4{6x|4{E|z|4o,wz%o |4lwz_ ,},{%|{
|4w1{#|4 y_j},|4{S%|_;}||3o{S|44{,|4_9|4wz{x_}, {c},,{
{S|4c |{#|4lxw1|w1|4
Atencin: GRANT ALL actualmente incluye permisos RULE. Esto permite al usuario
autorizado borrar la regla, hacer los cambios y reinstalarla. Pienso que esto debera ser
cambiado rpidamente.

Reglas frente triggers

nc,oEEox>_,|)|)o|4n,wzw1{yy_|4{>_,|K}||4n |{~x|w1c4
w1;|4xxw1|c6|>{S|4y4E|
v,xw1y{S|4M_,|ow1,c|w1|
x|},,|4|
c
,
},|4c|w1{#%wz{~3,|){S|4yE [y,3w1}, 3|K{S|4xw1{oo|31oxwz{~w1xE},
x_|0xwz,{,{S|4y_
o,,o0|
{S|4| xo{~,_,|4{;MK M x|4_{7|
; ,c[},{S|o|m|4G w1{Mw1},|{c|w1 o|4) K,w1 xG|4c )x|4
oxc|4wz|4%|4x6%|4,0,|40|j|3| |wz;o c},{So |4#}{~E_{S|4
_xo|K|ox0,|9},4{S|4o|4{,6_ {_,
{,6c|x.|#||{~{S {1o|3|4|4{
o|4{|r}, { {0o,wz{y_y|4{~
v,{# w1{S ,cwz{~yy_|{#_,|Kx|)x},{S|
6},{~wz{#|), Mj |n,%_wz6},,||
o|4{)cxc6|r,3{S|4y4xw1,{ wz7|mo,_,|4{ w1{S)xw1)K,},{c{3
x|4{S ;|4;,3xwzv,|4{S)%},,|4|>o|4{%cxc%|;,0Kv, 6,3K,
}, {,|K,w1 E{|4|3|c6{S|4o n_wz6,|K},,|4|{# c},{S _x }, {
|46|4w1{yy_|4{7,o
},{0|{7c m,0{S|4y0}, {0_,{` 
v,{~60w1{w1c|4wz0_,|6},,{~[c},|4c|4wz{x|m,|6c01 {cx,|4},|4|{`m|4
,,|9>x|#|w1 7o,x|4rrc|~. {SKKwz{~yy_|{,x|rx},{~9},{~9o9,>1|4xwz
Kn{S|4yc},n|4#{~ |w1{,ooJGy|4|{~n,Uo ` )|c U_,|
x7x|c,},,Uc,o),K|4,xwz{S, o {S|4y {S|4[,|{~
o l,x,c|4wz|>{~>,%c|~.{{S|4x,w1_,|>,mwz{y_y|4{_,|rx|>c>},{r 
,0_, m|4|{~E|~.|4o,w1{x,# },|4{o|#c,o_|4o|4
v,{7|~.|4c},x%,w1
CREATE TABLE computer (
hostname
text
- indexed
manufacturer
text
- indexed
);
CREATE TABLE software (
software
text,
hostname
text
);



- indexed
- indexed

c
wzwz|4|4;c,o #c{S||r,%|4o|>x {|>xwzc|3|4,ox
o,c
 xw1c|0o w1|4|3| c{S|3|E,cmo,,oKoc},|w1m|{S|
 {M{S|4y_jw1{yy_|4{0||4{m|4x|4o|{E|4{{n|m,|mwz;x1w0+M{S|
_,|x|{S|4,|4{U,Z w> {{~,l,n|_,||4wz{~yy|4{)x|c},{o,
_,{{3,|3 c},,wz|4{zx|3},,|4|E,x{
xw1{S,oo
DELETE FROM software WHERE hostname = $1;

|4;,;},;}{|},4{)6m},x{|xw1,c|r|4;|4}{~c|4w1{S,E{S|4y3|4|
{~3x|4{7|4xo{~wz0oc
CREATE RULE computer_del AS ON DELETE TO computer
DO DELETE FROM software WHERE hostname = OLD.hostname;

|4{S|n9{0|4M_,|3x|31|{| oM #wz}, 9|E||4wz|_;|4 ox%|>,


DELETE FROM computer WHERE hostname = mypc.local.net;

cw1no c},,w1|{6|n{S|4_x[}{Ko|c1{},EZ_,|{~Z[}, {K|4#w1{y_y|4{


w1c_|4|{~x|4{0,{~{c|;o|m{},[wzc4_,|{~|4lw1{M},{M
{S|4y3x|4{0,
DELETE FROM software WHERE computer.hostname = mypc.local.net
AND software.hostname = computer.hostname;

v,,|4xw16_,|3|EM {S| 6o|4},{S },4,x|4 }w1c{o{S|4{3,M},M|


Nestloop
-> Index Scan using comp_hostidx on computer
-> Index Scan using soft_hostidx on software

)|c M_,|
M{~co)1|4{S|4o|
|on|4wz{S|0Kc},|c|4w1 n|
w1{yy_|4{%|30{S|4y M
y_,|4wz|0|4|4wz|4_,|4{S|4c 9c wz{{ {~{{ #)))3 {,|4
 {S|ro,;xwzc|
|4c},|4o Mmr}x|4r|{~|r},{
o|4{|
K0|
DELETE FROM computer WHERE hostname >= old
AND hostname < ole

)|E|4},M|E|z| ,o },{~E0_,|4{m|E0{S|4y_3|{~
Hash Join
-> Seq Scan on software
-> Hash
-> Index Scan using comp_hostidx on computer

0 w1{0_,|4{%},x|3|4
DELETE FROM computer WHERE hostname ~ ^old;

oM,M},M|E|z| ,o
Nestloop
-> Index Scan using comp_hostidx on computer
-> Index Scan using soft_hostidx on software

xw1mc,|wz{K_,|0|4_}w1c{; c},{S,|4)_,|0Ko,,oox{S|0xwzc|
|4Zoc},,wz|4{w1cJ||4{x|,wz},{,{{}{o||4Zx1w0+M{S|
 |E%c,w1},|4#|4l},{S|x |49,|Eooo M co M)_,|3|4o|
|4)9_|4{ K{|y_|j}K|9,|4{d4w1{yy_|4{x|4{9 o0,r_|4#},{~#o,#,9|



)))K_|~. >{S|4 {S|4r_,||{~ {~{ xM_,|


{ cM{S|4x,w1%,n{~{
}, {o|)x {S|o c},,w1|4{))){~{ r}, {#o|
 {S|x w0+M{S|_oKc}|4c|4
w1 J|n{S|4y_nG{co ,;,|4{~|mx{S|o|4 |4},|4|4{|4w1n
},{Sc|6,|>0wz3x 0w +M{S|Ex0{S|4y3x|4{0c{},E|4;,0xw1,o M|E{{~,
x|4o,|4o`o ))))|~.|4o,o|>|0_,|4{|4rx{S|
|4_y_|4xwz{jv w1 c[wz|4c}, ,x
xwz,,|49|o|Ex|3|4o,|4wz{~;|4M
c|4c {~0oo_
0,wzc
_,|4{m_,|3_|4{S| c#|4
DELETE FROM computer WHERE manufacurer = bim;

)|6,|4_c|4xw1n,|4|4{%{>occ{S|,wzco 
,0},{m{{~{>|6o c},,w1|{
v,{|40|wz{y_y|4{x},{{~|,|4_0c,o_,|4{|4x{S||44|z| ,wz{~dv,|4{SE|44},|
{|y_x|4{
|3,|4_m,, |36 {S|3{{~,|3o|j m,x
wz{S6o|3|4Moc},,wz|4{
Nestloop
-> Index Scan using comp_manufidx on computer
-> Index Scan using soft_hostidx on software

Koc6{S|4xwzK|30|{~%|E{S|4y
DELETE FROM software WHERE computer.manufacurer = bim
AND software.hostname = computer.hostname;

Mo_,|4{),|3|4xw1 9ox l#_,|4{|49|jwz{~


|xxwz|4c|0{|y_#x|4{Mc9%c|4
|4}|4|4wz|4|4,c|4{S6|E,#| wz#|M0_,|4{
6wz{Kxwz cxc Eox>|Kv, [ |),|4},|4|
|4 c|,nwz{~,wz
x
 o M|4|4{E{|{~x|3mx0_|4{~x 0|Ev, wzy{|xj0|}|4ooo ,|
wz{~,wz7},{~>owz|4oc|4wz|9{S|4y7x|93|4xwz1Kw1|{~rxM{S|4y{S|4x|4

 j
w1|%
},|4{c|4o|wz|4 K|0c m|0}, {7{

,o
{c
|o{S|4{r{S|4y9oc|6||~.|4c}|x|4 | y|47o|4{0o %,ro,, 
|9{S|4yx
9o c{|xwz3,9_,|4{o ,|9x|{S|4#x|4c},{S|4oo,x
x|4wz{~,wz_,|6 3w1|4{S|%},,|4,|Kx|4{9 n_M|Ky,K {c%}, {,|K
},{S|4o|E|4M
xw1
z|w1_;|E
,|4{~%o` ,Kx|
w1|3|>| lx|4{~3,
,|4_
|w1x.
|xxw1|c
|3{S|4y#x {|E#w1{y_y|4{x
},wzco |Ewz{~yy_|{
|4|4{`;1{r}, {3|4,o|4|4xw1|%ox}, {S_,|%|4|dzc|%_,|mxoo  cx|
{Mo,,Gwz{~,wzc|4x},|4o,ocx|4;ow1, |wz o,w1cMxU1, 9
3|o ;|>,Mwz{~yy|4{x6},|4{cw1|E|}|4oo{|||E,4|rc %_,|Exx|
w1 oK,),|w1{yy_|{|{~c;Ko|4{nw1{x.oxxw1|cK|
{S|4y9Mx{
c{~rwz>.|4wz)Kx,},{~c{>>,|4{~)o},{, c},|4wz)|4w1{,w1
x|)6wz )|c_,|K6{S|4y o,,oK  {6x,3{{ Exwz|4|
y6_,|0o|4{~

{S|y_
 |{~xy_,ow1_c|w1|;c|4wz)_,|mKwz{~yy|4{,)oo |4
Moc;{S|4x,wz3.ry_{|9;co,, xl,xw1, |_,|
1
|4
}w1c,{~l|4|4c r,y_{Mc{w1xKwz{7,y{~c{~wzmxo,,%},,|4|
o,{7,y_{M },|4{SK{7|4 w1 _,|0o{{S|4ow1 },,|4|E,,{o_,|4{7 _6xw1
0o|4



Captulo 38. Utilizacin de las Extensiones en los ndices



},{So|c|4wz|o{w1
wz;_,|%},|4{cw1|G|{>,|4_cw1}, ,|4_
1, |4rM,| r },|4{ {S|4j|4c{Sy_ lw1 _;}, |4c r|4,{,o|
x|4o,{K1wzocK,M1w1{S| |4 1wz{S|4|>Kc4wz,6|>o |)xx{S|E,;,|4_Kw1},
%x,# },|4{ {S| l
   SS `>nw1m|4{S|4Ec,|4x
U{S|x|9,|4_c|4wz| 4 2 1 o4S K 1 oo 3  
w1{0 9owzy 9_,|0|4|cc,o{}{~3},|{o{7
v,xw1y{S|4oc;,wz{
,;w1},6|4,%}{|4 ,x,{~K },|4{ {||4, #}, {|x,{%o ;,M
o|)1|4E|4o{z

)| {S
w1,,c|4wz|4pg_am,
_c|4lpg_amop,
wz|%,Go cpg_amproc,
cxc},|%pg_operator
},{M |{>|4xwzpg_opclass
)|4c wz{{S|4c
oc
c,o{7|4xw1 9owzy 9
wz{~_4|3,|~.|4c},m|z| ,wz|_x,
,|4_
ox|3|3 },|4
{~{},{~0|c4w1 6|3oo|4x61wz{S||3_,|3co|4|>%{S||E,c|4{S #o c},|~.#|4
{S|;x ||4wz|E|E_ {7 ,w1
mox|
w1||%,MxwzoM}{~mo6c4 n|%oo|4x|},{>|4
,,{~pg_am
x },{wz|;|%oo|4x;;c|4c {1|4}|wz;w1|4y{n|4v,xwzy_{S|},|4{S
w1  # #,|4cc4w1  #|>o |6|4xw1;|4xo{~wz_,dx|4x_,|4c
|4
42568795 :;<>=?@8A B8CEDFG5IH8DIC8JLKJ8H8M9NOD

Atributo

Descripcin

cc|
cP +M,|4{

cwz{w1|y_|4
c,},}{w
c{S|4{xw1{wz|4y

cy_|w1wz}|
c|{~w

 c{S|3|4c4wz,m|Eoo|4x
,|4w1,o {|>.|4wzm|4},{S },|4wz{6|
|4xw1
xwzo
|4;},y,x|4{
,c|{6|E|wz{w1|4y},{0|4xwz|Ec4wz,
|3oo|4x61_4x|rc#_z
,c|4{S%|>{,wz#|Ex}, {w1|3},{~0|wz|
c4wz%|Eoo|4x61_4x|Ec#.
o|4{SK |4 o|3% {S| |rx|4o,|4o
|
{S|c|4wzxm|4c|{S%|
|4xw1{wz|4y0|4 },|4{ {,|3|4xw1{wz|4y_E_,|
|4xo{~|>
| ,| 3|E {,|4c|4wz

o {|,|E},{So|4,c|4w16},{0
{S,w1#|Ewz|4{3o|4cw1 m|
oo|4xv, {|~.|4c}l_,j},{S| |
|4wzo,{S|4{S|4y},{S#},{3{~{zo|4{{4{
m w1||4{xwzo#|,|E|4 c4wz,%|
oo|4x

|4wz, {0|M.|4wzG1.|4ow )9|xwzo|4


x|,wzoc,
o| {|4#|6c,wzw1,m|#wz{ox|4`M
||4o|4x{0_pg_am
,|#)9dy{|y_,|,9,|4_
xw1o0|;|4xw1E x|4%_,|>|4|>wz|4{S|4x{|>||4|4wzo,{|> .|4w161.|4ow )
|E0xwzo
|4c4wz m|Eoo|4xK_,|3_,|4{S|3|4lwz|4|4{
SELECT oid FROM pg_am WHERE amname = btree;
+---+
|oid |



o1 RQ91S 1 U T o71  o 7 V  1 

+---+
|403 |
+---+

Kwz{d|c|4x|3ocXW @8YE@8Z 4 |,3 x,%[]\ @E^ @ }, wz|4{{~


 w1{,w1
wz|4|0oc;,|wz{{o c},{ |4#|4wz{|3wz
}, 3|wzamstrategies
v, {r|z|c}, E1w1{S||4rc}, |4[,c{S|c|4wz|wz{ wz|nEo
_|4x,|nc|{)[c_ {~ cUv xw1y{S|4m}|4{~cwz|,,{|{)},|{~{S| x7
},,|4|6wz{r|4c{S|K|}|4{~{1}, {#|~ {9 `1 |w1,o{#_,Kwz},M|
oc},{~o n|4)||4oy_, Ec4w1  3,|)oo|4x;c}|y,c {,|4
c|4wzv {|~.|4c}, 4 1wz{||47|4l},{S| m,3{S|4o;|9o,x;|4%,m{S|4ow1y_,
c|4wz{~3_,|6,m|4xwz{S, wz,{~6|Kwz3|6wz},x[|4l},{S|4x6,oc|w1|%xc{
|0w1>x|4|4_ {|
,K1,oxv,xwzy_{S|4>| |wz)y_,)1{c) 
xwz|4wz|6},{6wz|4{},{S|4w1{> 3{|_,xw1 0|c,3ox,w1_|w1,o|},|{~{9
|4o|4,
xx|9},,|4|,wz{,,6o|#|4lwz|4wz|_,wz
c},o>_,|rv, xw1y{S|4| |wz
o o|4{z}, {>|~.|4c}, __,|6
},|4{ {| 3  #n #},{w1o [,,wz{S||4v xw1y{S|4
,w1|wz{~w1|4y#},{)|j},{S| x{|4xr{S|4o|>|4w1{S|0 >},|{~{S| rMr1 {~cr|4
_,|3},,|4|;,w1{~x|E{S| {{|{#o|4
)|4,{%,|4_Ko .wzK|>|4xwz{~w1|4y7|wz>cE,|4loo|9|9|4xw1>|4l},xo 
},|4{SE|4l}, {| c o c
1 )|4xw1{wz|4y_,wz{S||},{S_,|| |wz{#o o|4{
},{ry_{S|4y{,E,|4_Eox|>|9 },|4{ {~mEox|
|4jwz{_,wz)cxw1{wz|4y_|
|4
|,c|4{Sc|%|wz{~w1|4y0|4,},{~m|4xwz|;cw1 pg_am
c|%oo|4xv,{M )1wz{| |4x
|4xw1|>,c|4{S%|4xwz|4xw1{wz|4y_o {~{S|}, |4;
42568795 :;<>_?@8A `9a5`>DbPMc5Aedf<9`9aDD

Operacin

ndice

c|4 {_,|
c|4 {_,|3%y, 
y,
c{_,|36y_, 
c{_,|

||4K_,|M|{~|4o|4x{y{S|4y{3},{S |c|4wz6o{{S|4x},,|4w1|)K c
},{4o |4Kc|4o){{~Mw1
_4|mc)x. lo y_[|
c4wz|o |M},,|4,|),wz{9|4xw1 3cpg_amop
|{SE||4xw1{w1|y_ xcw1|4|{r|c ,|w1K|4
w1},[|;wzx},{M{S|4x_|4{3o cG},{wz {0|47,wz{S|4| oo{3x|4|4owz,|w1
o4w1|{~MMx|)}{|o,},|0,no|{6|
E|w1|r},{)y_{S|4y{}{ o|4c|4wz 
oc},{S|4,>,|>|4|9|4lxw1{,mo z,,w1)|9},{So|c|4wz},{
%wz #|4cwz},|Ew1 # |E},,||E },|4{{,1wz{S|4|_ int2, int4, oid,
y,>_|4o|4xE|wz{~w1|4yr},{S },{So n61 {~n cx,o|w1|K},{~){S|4x
_|4{,> {cE|#,wz{,mo|_ y,cw1 ,|roo|4x
{S|4|{S|46 wz{~{,wz
|#x}, {w1|9},{>}|{,1, {~Sv {|~.|4c}, |4lcw1 |9o |01w1{S|4|||9x|4{, 
},
|0on},{~{ ro_|49m|4w1|{~c{x,|4rc {_,|4jy_,_l;c|4 {_,|
3 w1{~)|>c|4{3y|4lc4w1 6|>oo|4x 1w1{S|4|r|4|r|{ },3|roo{
w1|{~x|4oo|, |4xl;w1c#|3{S|4ow1y, ,wz},|{~o |4mo{{S|4x}, |4
K{S|_,wz >|4,x,{M|4n>o ,wz>j6,x{,wzEcxwz{~wz_r,w1
}, {7 9c4wz |Eoo|4x w1|4{c|w1|_
v,{~)c|z{9_|4{x>{S,w1E|Kx }, {~wz|Koxxw1|w1|c|4w1|6|w1{S|w1 3 3cw1 
|Koo|4x|Kv,xwzy_{S|4x
o,_|6,[wz{wzc
,wz|Kwz{~,wz
pg_am



amsupport

o1_ 2Q9USo 1  T 7 7,1 S o S7 V  1 

co|4
|,c|4{Sm|0{S,wzr|
 }, {~wz|
,w14r}{,c4w1 ;|0oo|4xv,{
1wz{||x|wz|E,c|4{SK|4,h
gE0{S,w10|>w1 c0 #o_|46|4_,|4_|>1)4 
|4},||4Kx3},{~c|{o_|E|4c|4 {_,|y_,4%c{7_,|3
x|4y,
Nota: En trminos estrictos, esta rutina puede devolver un nmero negativo (< 0), 0, o
un valor positivo distinto de cero (> 0).

%|4wz{
|4[},yx m|,c|{S|6|wz{~w1|4yE|4,
},{m|4c4w1amstrategies
[|%oo|4xn|4o,|4xw1 j
},{S |c|4wz
},{~;c|{3_,|c|{
_,|0;y_,|4wzo4w1|{~;},{d|4o|4|4
)|
c|{~
xc{z
|4#x
c|4wz|>|4,c|{S6|r{S,w1|Ex },{wz|Epg_am
_,|E{S|4,|4{S|r|c4wzK|>amsupport
 o|4x~{S,wz
{S|4|4#|wzMxw1,|Mwz{S6
|c4x
|4wz{~
, 0x|4 c4wz6|Eoo|4x%x }, {~wz
%m,
|4{Syo>_,|> xj)o|4
{S|4x {~{K{S|4 amorderstrategy
||4j,c|4{S
|9{S,w1r|#|4xwz{~w1|4y#_,|#o {~{S|4x}, |}|4{~{amorderstrategy
| {,|4c|4wz`v, {|~.|4c},
r_,|9o{{S|4x},,|9,c|{0|#|4xw1{w1|y_r|#`c|{
w1{S|4|wz|4|
amorderstrategy
_,|4
0},{lc
ox|3|3wz|4{4#|#},y },oxlxxwz0ox|3w1|4|3 c;,o
x
o{r,[ c{S|6nwz},n}, {>|41|xw1no [, 94[},yc } %ox|K|6 },|4{ {
1w1{S| |w1|4|n, .,w1Z|},{S |c|4wzx|,Un o |x {w1 mc;{{~
y,>ox|4E|) },|4{ {S|4>1} x|4xx

|4o|4x{n_,|mK94y{S|4y,|%,Mxwzoo Gxint2_ops,int4_ops,
U c{|%|%ox|%|my}oid_ops
|4{~{r1},{
|~.|4c},


||4xw1)xw1o%|E,Ko|
1
pg_opclass
oid
{~|43| complex_abs_ops
wz{~ox|4
INSERT INTO pg_opclass (opcname, opcdeftype)
SELECT complex_abs_ops, oid FROM pg_type WHERE typname = complex_abs;
SELECT oid, opcname, opcdeftype
FROM pg_opclass
WHERE opcname = complex_abs_ops;
+----+-----------+--------+
|oid
| opcname
| opcdeftype |
+----+-----------+--------+
|17314 | complex_abs_ops |
29058 |
+----+-----------+--------+

M w1||_,||4 }{~xxwzon|
x|4{1|4{S| w1|_;Gx|},{S|4 o
},|K}, {9|4xw146wz|4{S|4c E|4xw1|)n|4{Spg_opclass
|4xxwz|4cm|4x},,4Ey,_,|6oc3|
o|4{6o | |w1},m_,`
)|6|4xw1mc|4{~m{%wz|4|4c ,[c4wz|6o |c,mox|6|6 },|4{ { ,
|4o|4xw1c6,Z .,w1|},|{~ {S| |},{So|4c|w1},{|4,{
},|{~ {S|4
1,|m,o,wznwz|4|4|4xw1|%c,`v,{;Mox|%|% },|4{ {Eoc},|j},0|4
w1{S| |4x # },|4{ {S|4_,|3|4o|4xw1cx
valor
valor
or-equal)
valor
valor
or-equal)
valor

absoluto menor que (absolute value less-than)


absoluto menor que o igual a (absolute value less-thanabsoluto igual (absolute value equal)
absoluto mayor que o igual a (absolute value greater-thanabsoluto mayor que (absolute value greater-than)



o1 RQ91S 1 U T o71  o 7 V  1 

,}yc |>|4o,y_6_,|Ec},|4c|w101,o |4#,|4,|4xw13co|4


|4;|4 {So_
PGROOT/src/tutorial/complex.c
v,{~wz|),|4oynx|4{6},{| ,6|4xw1|_41 w1||)_,|6xc|w1|6c xw1{{S|4c 0|},|{~
 {
,|;y,Z|4|4{|wz[|M )|~.|4c},  6 w1{S )o,w1{S[}|4{{S| )xUc,
xc{S|4 |{~x|E

},{~0c#|w1|l
complex.c complex.source

#define Mag(c) ((c)- x*(c)- x + (c)- y*(c)- y)


bool
complex_abs_eq(Complex *a, Complex *b)
{
double amag = Mag(a), bmag = Mag(b);
return (amag==bmag);
}

M6,}{7,|Eoxc},{wzw1|#_,|3x,o|4|{~{
v,{~c|{ 4 w1|x|E_,|Ex|E|wz;|4,|4,6 },|4{ {S|c|4 {_,|4c|4 {7_,|EKy_,
y_,lc_ {_,|0;y_mc_ {_,|0},{
xj  r|4xw1 r },|4{ {| 9|4xw1
|4, >},{
x.ME c{S|4m9 int4
7  )oE,|4_ 3 },|4{ {S| 
}, {)x,},,|4xw1 int4
|o c},{wz|c|4{nxw1wzv{~y{wz{
_,|v xw1y{S|4m,x
|4xw1 >,|4_E },|4{ {S|4>|4n_|4K|) Ew1|{~ {S|4x|>|4o|4x{_,|x|4c c{~,
xw1wz)_,|E|4 ~xw1|9|4,m}wzK |)9},,|4,|rx {| {dy_{},|{~{S|4|4mv, wz
y_{S|}|4{S%x;x |4}|4{{;
xm|,m,M},{09w1}, 9|3 9{y,c|4
w1 ~|4o{zlK9~wz|4|6|K},{>wzw11K},,||>|{),|4_c|4wz|_
v,xwzy_{S|43noc}{,|;|xw1no,|4,|%,,|},|{~,{zx,|
_,|%|4|)|{
o v{~;|4_wz{E|4xwz|m}{ |4cx|mwz{n_{S|x},{S|
},{M  },|4
{~{S| o|)|4xwzc3c4wz,E|) o|4xMx|4y,{~c|w1|)|4no,Mw1|w1|
o|4{{S|4x {~{ l
 w1{SM},,wzc}, {w1wz|)|>_,|)wz,>>1, |4E|
}|4{{,|4_,|4_|4n_ {|
yo9, |49c4w1  r|
o |xm ,|w1o|4xw1|
|4o 1v,{wz{S; j
1, |4,|;x },{w1|m|,|4_|4o,_,|4{3o x_,|m|4c4w1 c|moo|4xn},{w1o,{
|4x},|4{
 gK||4xwz|ox j,|4wz|4{S; xy {,wzK,_|4|{So_m|4r)`{S,w1
|>x },{wz|4c|4o 3o,Kwz{~wz_c|4wz{wzKcx,},},{w|>3 x|

pg_am
Kwz{d|c|4xw16c|4wz|_v, { {y{S|4
CREATE FUNCTION complex_abs_eq(complex_abs, complex_abs)
RETURNS bool
AS PGROOT/tutorial/obj/complex.so
LANGUAGE c;


{K|)E },|4{ {S|E_,|>,wz{ cx|) w1{z > c{S|4>|
}|4{~{S| |4|x|4{3,o )|4w1{S|%wz  )},|{~{S| _,|;w1 cG, },|4{
ov,{)|{ > c_{S|>| },|4{ {S|4rxwz>c>{~{_)nxo,},
int4

}|c# |{7,3 x,w1x{S|

pg_operator

/*
* esta consulta utiliza el operador de expresin regular (~)
* para encontrar nombres de operadores de tres caracteres que terminen
* con el carcter &
*/
SELECT *



o1_ 2Q9USo 1  T 7 7,1 S o S7 V  1 

FROM pg_operator
WHERE oprname ~ ^..&$::text;

},{_|4{)xx  c{|nc,o,},,},{ ;w1}, m|)9 _,|4{S|_ %o


x>c},{wzw1|>_, [>},{S o|4c|4wz 31_,| c>1,o| |4,>c
{{~,;91,o|49|3{S|4xw1{o ;|0x|4|4ow1_,|3,oK9x||4{~
,w1{
xc|w1|K3,|Kx|K,xcx.L
g6wz|4x|K_,|Kxwzw131, |4E},{6 3 
c|4 {,|4y,c_ {
_,|_  xwz)|4|4}{ }, {S {x|4,|4c4wz |;oo|4
x1{M ,wz|4wz|,wz{
|47 },|4{ {l)|4|4{Mo},{0 %c{S|4K},{
1, |43|K{S|4xwz{~ooc|K,  },|4{S,wzo|63n_{S|0|)},{ o|4c|w1_,|
|4,%||,w1cm}x
CREATE OPERATOR = (
leftarg = complex_abs, rightarg = complex_abs,
procedure = complex_abs_eq,
restrict = eqsel, join = eqjoinsel
)

4yx|9|%o,|4wzE_,|9x|9|4,|4moo},|{~{S|4o{{S|4x},,|4w1|7rc|4 {1c|4 {
%y,y,c_ {zmc_ {6y_,`
0ox|4c #wz|4{c~0,wzc0ox0,|E|4o|4xw1co|4{|4ow1,4{0wz
xv{~0 |{7|wz4|4o|4xw1c 9 #xy,|4wz|49wz{wz l
pg_amop

42568795 :;<>:?@8A B8CEDFG5IH8D

pg_amproc

Atributo

Descripcin

c},

|4
|E
xw1o
|
},{31w1{S||
 oid
)$|>{{~ pg_am
|
|33wzo
|
}{~
oid
, 6pg_opclass
_,|3wz,%|4
_complex_abs_ops
|40|
4_4|>{{~
17314

|E },|{~,{S| #},{~E0ox|E|
}|4oid
{~{1} x1_,|3 _wz|4{S|c
|4wz{S%|E,Mc,wz

c},o
c}, },{

w1 o|4>|4o|4xwzc 3
>|E ,
} |4{ {S|E_,|K c E|)|{~,xo{S|
c00c{S|43|6wz
oid

},|4{ S{ |4E_,|%w1 c
{Sy,c|4wz
|6w1},
com4mx xo{|4c # 9,|4xwz{ 
plex

SELECT o.oid AS opoid, o.oprname


INTO TABLE complex_ops_tmp
FROM pg_operator o, pg_type t
WHERE o.oprleft = t.oid and o.oprright = t.oid
and t.typname = complex_abs;
+----+------+
|oid
| oprname |
+----+------+
|17321 |
|
+----+------+



o1 RQ91S 1 U T o71  o 7 V  1 

|17322 | =
|
+----+------+
|17323 | =
|
+----+------+
|
|17324 | =
+----+------+
|17325 |
|
+----+------+

1)|,|4_ y,7|#x,,c|{ ,|
x|4{6x|4y,{c|4wz|9,|{S|wz|4  },|4{
 {|#|4 r_,||xw1c 9wz|4{S|4x 9xoid
 r_,|
w1|4|
9&$4xwz)&$4o
_{S| %,|K9 w1|{~|{~},{ |4c|w1|,wzw1 oid
xG|_|M,xwzw1,{%x.
}, {7|4xwz#{S|4~M{S|4c|4xwz%oM,
x|4wz|4o0j 
 {6|4xwzcExw1 3},{6ow1,4{
c,|4xw1{%,|4_K |)|) },|4{ {~
3o 3c#c}{w1w1|E|;w1 0|4xwz0|4pg_amop
l},oo;|4_,|E },|{~,{S|4|wz; {,|4
 r|4x|0c|4 {_,|
xw1)c{,|4|
y_{S| y_c>#wzo>|4o|4
pg_amop
x{~l
INSERT INTO pg_amop (amopid, amopclaid, amopopr, amopstrategy)
SELECT am.oid, opcl.oid, c.opoid, 1
FROM pg_am am, pg_opclass opcl, complex_abs_ops_tmp c
WHERE amname = btree AND
opcname = complex_abs_ops AND
c.oprname = <;


{0y
mcxc; #wz{S9 },|4{ {S| 9x,wzw1,|4%|4_d|4
w1|4{So|4{`
|4
|E{{0;|4 |4M
,w1c
|4xM w1||3|_ {S|4`c|{7_,|4|4`c|4 {_,|0
y_,|4`y|f$`c{7_,|3%y, |4%`c{_,|4|4
},{lc},x|m{S|4ywz{{c`{S,w1n| }, {~wz|4
},{S|4_c|4wz||4xo{w1n|4Zc|4l
},oo ,|
_
|c|4xw1[{S,w1|[x },{w1|c|4xwzco|4| [ |
o,pg_am
_Ko||4oid
xwz% c},,|4xwz%}, {r|
|c4wz|K o|4xM|4
|
pg_amproc

ox|E|3 },|4{ {xv,{c|4{S |4o|4xw1n9{S|y_oid
xw1{{7
1, |4Mv xw1y{S|491{S| oid
o|{S|
_,|6},,xc
|4 y _,|%c},|4c|w1m|4xwzM{S,wz;,|4,{So_||4,o,
c},|4c|w1c ##{S,wz#| },|{~ {
CREATE FUNCTION complex_abs_cmp(complex, complex)
RETURNS int4
AS PGROOT/tutorial/obj/complex.so
LANGUAGE c;
SELECT oid, proname FROM pg_proc
WHERE proname = complex_abs_cmp;
+----+-----------+
|oid
| proname
|
+----+-----------+
|17328 | complex_abs_cmp |
+----+-----------+

1)|m,|
xc|{Sc|
x|4{M},{S |4c|4wz|%xw1wzc[|4|%x,xw1wz{[x.
oid
}, {7|4 _ 7
{ ,|
_|4 v,|c
y{|y_{
,|0xwzo
|E
xy_,|w1|3c|4{~
INSERT INTO pg_amproc (amid, amopclaid, amproc, amprocnum)
SELECT a.oid, b.oid, c.oid, 1
FROM pg_am a, pg_opclass b, pg_proc c
WHERE a.amname = btree AND

"

o1_ 2Q9USo 1  T 7 7,1 S o S7 V  1 

b.opcname = complex_abs_ops AND


c.proname = complex_abs_cmp;


{%|4o|4xw1c0y_{S| y_{>,m|4xwz{~wz|4y%|K},{%},|{~cwz{r,|m|,w1},|m
|4l4,4Mo|4c E|4xw1,w1 w1{Sw1},|4[},y },|{{S|4,wzc 3 3cc_
}|4{~{S| 
INSERT INTO pg_amop (amopid, amopclaid, amopopr, amopstrategy)
SELECT am.oid, opcl.oid, c.opoid, 1
FROM pg_am am, pg_opclass opcl, complex_abs_ops_tmp c
WHERE amname = hash AND
opcname = complex_abs_ops AND
c.oprname = =;

v,{~,w1{%|4xw1|o||4,Go,x, M ,|4o|4xw1nc,o{mox|
,|30xy_,|4wz|0c|4{
pg_operator

UPDATE pg_operator
SET oprrest = eqsel::regproc, oprjoin = eqjoinsel
WHERE oprname = = AND
oprleft = oprright AND
oprleft = (SELECT oid FROM pg_type WHERE typname = complex_abs);
UPDATE pg_operator
SET oprrest = neqsel::regproc, oprjoin = neqjoinsel
WHERE oprname = AND
oprleft = oprright AND
oprleft = (SELECT oid FROM pg_type WHERE typname = complex_abs);
UPDATE pg_operator
SET oprrest = neqsel::regproc, oprjoin = neqjoinsel
WHERE oprname = AND
oprleft = oprright AND
oprleft = (SELECT oid FROM pg_type WHERE typname = complex_abs);
UPDATE pg_operator
SET oprrest = scalarltsel::regproc, oprjoin = scalarltjoinsel
WHERE oprname = < AND
oprleft = oprright AND
oprleft = (SELECT oid FROM pg_type WHERE typname = complex_abs);
UPDATE pg_operator
SET oprrest = scalarltsel::regproc, oprjoin = scalarltjoinsel
WHERE oprname = <= AND
oprleft = oprright AND
oprleft = (SELECT oid FROM pg_type WHERE typname = complex_abs);
UPDATE pg_operator
SET oprrest = scalargtsel::regproc, oprjoin = scalargtjoinsel
WHERE oprname = > AND
oprleft = oprright AND
oprleft = (SELECT oid FROM pg_type WHERE typname = complex_abs);
UPDATE pg_operator
SET oprrest = scalargtsel::regproc, oprjoin = scalargtjoinsel
WHERE oprname = >= AND
oprleft = oprright AND



o1 RQ91S 1 U T o71  o 7 V  1 

oprleft = (SELECT oid FROM pg_type WHERE typname = complex_abs);

G}, {wzcm }, {7 {S|4yxw1{c ,


,|4x {},oM|>|4xw1|3wz},
INSERT INTO pg_description (objoid, description)
SELECT oid, Two part G/L account
FROM pg_type WHERE typname = complex_abs;



Captulo 39. GiST Indices


G1 {~co x {S| j |xw1|4Owzw1}#,j , |4{_||4 ) i)))yxwPjo
c,x{S|1|4{S| w1||4x_,|c|{S|o)||j0|4wzw1}jx_11wz}# , |4{`|4| ) i)))}|4{ 
jc_c|4lwz|6cE|4owz{%wz|4{S|4xwz|K|4[|4xwzn|K6_|)|Kwz 0|K,|4{_|4|4
w1wz}#,|},o o |4{_||4 |# i)))_, k~
Autor: Esta extraccin de un e-mail enviado por Eugene Selkov Jr. 4 contiene buena informacin sobre GiST. Seguramente aprenderemos ms en el futuro y actualizaremos esta
informacin. - thomas 1998-03-01

,|4 c},|4n| {r_,|m|4w1|;c_,|;|wzm},x },|4{Sn}, {Ecc|4 1ox


|y{~;},{wz{>|z|c},>j[), _c4w1 M|
o |;jc_)|4xw1)|4|4
{|>},xwz{S|
x
src/backend/access/gist
lc},|4)w9|4{_||4R l||4Z Z,wz{ ,ooZ| mcw1  %|4c,|4xwz{~
c|4oxc|ro|4|}o|4},{> x.)},y_  4wz|4{|4wz|4{S %wz|4xw1
oc(
| +Mwz[n |{~_| + w1|)c|4w1 3|4c xw1{wz|Kx},wz|4mc|4oxc
1{7 _ l|4x},yolwz|4y|4{7w1|4{_w1|4lw1_4x|3wzc4Mjnw|4{|4|4R m.
G|7|~.|4c},|mox.|;x}|M_,|M_|4{S| cK,,c|w1|4G|7{S|4c|w1[
,w1{|4_o|0jcc|
,o j},|4{Sm;;wz|4y_;,o |4o { |4
c|4wz|#y_{|#|ox.}{~9o c},{S{~dKw1{S 7|~.|4c}, 7wzc4K1o {S|4lo|4},wz
}, y o w1,_|E,|4{{ { o|4{
test=> create index pix on polytmp
test-> using gist (p:box gist_poly_ops) with (islossy);
ERROR: cannot open pix
(PostgreSQL 6.3

Sun Feb

1 14:57:30 EST 1998)

M|4w1||4x|4wzG,||4xw1|c|4xy_|M||4{{S{,},{| o|x|4{
y__,||4|{~4c
},{S|y,wz{0 |4x{{ {S|41c{0w1c4M0M w103c#_z ~6_,|3xy|4{{
_,|46_,|y,|4U|_  wz{ xy{,6|M,n1, , y_oo 1wzc|%61,|4wz|4
{y|43 w13{{%c},,|40c},{Sx|%1_4|6|z,wz7n
, z||
_,|
},|4x {S|3|4xw1xU|3},{S| |Ecm|4
cl}|4{S%mc|0y,wz{0cw1|4|{~%c|4
w1{_,|3%w1wz0y|4wz|3 c},|4wz|4wz|3x}, _|
K}, owz9|;#,|w1|4
M1o}|,wz{
|4U_||M{y;vo
n9G{S|4{S| {Go ||z
w1,wz{|)},xwzy_{S|4! p6},{~Ko|4{1,o{ w1|w16cw1|4|{~y_|4{ },|4{S
xK,m|4xo{w1 {|>c_|4,|4c,%}, {Sq
| gxc},|4c|4wz|>))1,o{y_,mc 
K|w1 j}|4{S6o{S|4K_,|3 {~3|4#,M}, o%c}, {~wz|E_,|3|c_||>{y_`
 c},#1,|4w1|4||~.|4c},c|w1c|4w1|#,|4x.
|},y`x{S1xc},|4c|4wz|
|4lw1{~.|K|{So_wz{ _Z_|4,|
},{S|4_c|4wz|
c|4o,x,}, |)_,||4xw1K,
_|4 },{|4z6|E},y`x{S9|,|wz{S%ox |4M},y_x_`jx{Sj},yy_xwzx
$ 3 c_ 3_,|Ko|6% 0,o|4{S 3
1,|4{S cw1  0x {o
| ro,|4 x},{S w1 w1},
|
,o |4Ewz},|4oxw1y,|4{K||4x c|w1|K,|4x|4o,%{xw1{)|)_{|4
,wz>,c},{9,|)},{S|4wz|4x>},{6o w1|w1{96yo}|4{S,|K|4xw1
0|4{S|4%#o c,o[
M6,M cc|4wz{m|4M}, _}{ j x_`



- - theres a memory leak in rtree poly_ops!!


- - create index pix2 on polytmp using rtree (p poly_ops);
(- - existe una fuga de memoria en el rtree poly_ops!!)
(- - crea un ndice pix2 en polytmp utilizando rtree (p poly_ops)

v,|4x3_,|0}, {~0|4xw1{{S|4,m ,,c|4{S6|3_|4{ |3v,xw1y{S|4wz|4{~ {|


w1|w1Ko ,wzUxxw1|c6x|)_ Mw1,_|_,|)wz{~{|4}, xw1cxwz|4{#|4n,
|4Ec,w1
Uno w1,,{6n{~,|4wz{|j,J{~w1 },|4{Swzc4Jy_{|4o|4{nc
|~.|4c}, #|3,w1 M|3 wz{S|4|_

Notas



wzw1}# jzj  |4{|4|4j ) i)))yxw


wzw1}# jx_11wz}# , |4{`|4| ) i)))}|4{~x `ozc
$wzw1}# j|4}, o  |{~|4|4j |4# i)))
cw1 |_ 4{ v
co ` y
1wz}#jx1wz}# o |4{~| |4 |4#j},,7jyw~j},y_y w~}y_yxw wzy_
wzw1}# jy_ow o |4{_||4 |4# i)))yxw

Captulo 40. Enlazando funciones de carga dinmica


)|4x},,4|Eo{S|4{%{S|4yxw1{{,01,o;|0}, {|,,{ |4wz{~.%|4xwz3},{o
w1oc|w1|Kwz|4{c v,xwzy_{S|4xx|4c{Sy||Ko{Sy_{>|o|4{S|Ko,y_.|4wz
1|_ y 
,, w1|4oo c},{w1_,|c},|c|4wz||4x1,o, cx|M
c|4o .o
nwz|4{{c|4wz|4_v,xwzy_{S|40o{Sy_%|o yn|4w1|4n},n|6|~.|4o,omc|4
%_,|6|0| |{~ ,[|6},|4{cw1{r_,|6|4oyx|m {Sy4,coc|w1|4
},,|4|;w1||4{0_,|oc},{|4{3|4xw1|M yG|;yc|4x},|4o`j|wzx|4o
oc|4l},o6{S|4_| c|4wz|Koc{S|44{#6oc}o[|4|4M|4o|4x{Mw1|
|E_,|0},,|0o{Sy_{x,91,o|9|4M,|{~_ {v, wzy_{S|#|4|~.|4o,ox;wz|4x|0_,|
|4xw1|>},{So|4x%3 c6{S|},|ow1K |E0_|4{xM
)|4|3|4xwz{},{S|4}{~m},{~
||4{1;{S|4||{zl;{S|41{d||4|4{#},y#|3c,|4oc
}, {|  o1K|4l|{z1.4}, {xj|4o|4xwzE1 {~c m|4x},| o |4
cx_0},_,|4wz|43|6},{S,|4m|6{S|4y{S|x ,|4,{S|4ow1 {~

w1||4m_{|z|4n},|r|4x9w +M|r},{So|4xjjo c},{S|4|96PGROOT/src/regress
_,|r{S|4m|4xwz},{S,|4x
%||4{~3wz|4|4{y,},{S _|c
0xy_,|w1|3wz|4{c y
x|3,x{~3c#|4w1|_
  E 2w ) 1 x9yoz O) 1 o |{|4_,|)v, wzy{|3 |
o co|4{SM z|w1
,o|4{S z|w1cx|6o}M||x|4{_{>v,xw1y{S|43|4|~.|4o, c
1,o |4
c_
{|4|4,o|4{S%,|4;x}, |49}{~3,o |49|>},{So| #v, xw1y{S|4
v, wzy{|>o|wzM,|c|4oxc|o{Syco6},{S },{So ;}, {#|4
xxw1|c
},|{~wz_
z; So x _ o   ; KS1  |{7|4c_,|m,xw1|4o|
o~ }E  1 o > 1 o  %
o ,o|{6.|4wzm
,|E},{ ,o{ w1{S%w1},m,|3o|4{S6.|4wzm1},{|~.|4c}, j,
},{S y_{c;|~.|4o,w1|;[,M_ wz|4ooc}{~wzlxw1[x|;{S|;},{3c|[|4
},{S y_{cE|Eo,y,{~ |E|4 1

xy_,|4wz|4{S|4xw1{o |4y|4|4{|4m wz#x|3},o;wzc4Mwz|4lw16y,|4wz|_


{S,w1
0 {S|4M},{0o{S|4{
1,o|4|4m|{x,wz|#| {z

|3|c},|4{o j`1;{S|41|{{|0
{S| wz{ #_x|49},{~

c,)|
|0x|
|4xwz0|~.|4o,w16|x|4{_ {v,xwzy_{S|4
Sugerencia: Las rutas relativas tambien funcionan, pero hay que terner en cuenta que
seran relativas al directorio donde reside la base de datos (que es generalmente invisible para las aplicaciones finales). Obviamente, no tiene sentido hacer la ruta relativa
al directorio en el que el usuario inicial la aplicacion final, dado que el servidor puede
estar ejecutndose en una mquina distinta.

_,x,{mv, wzy_{S|9|4|Ex|{o},0|3{S| {{| {


{S,wz),0

{,|4|3 {S|4o

|6m1,o cx|{Eo},%|6||4{>|,o|4{Sn z|w1,wzn|40x,}, {,|m|,|{~_ {
v, wzy{|7x|r|z|4o,wz>o c),,{v, wzy_{S|) c)|4x,{_,|9oE|l},{So|
,`x1Mo|4{|4 , |{S%|4 |4 {S|4owz{%|>_|4_x,},|4{ {m||37jmm|z| ,wz|
},{~E|4 ,,{%d},xwzy_{S|4x|4,M|4{{ {|4lw1{S|4c4c|w1|3o c,
 c{|,|c |4, |4) ,o|4{S0 z|w1 
||4)|4xw1{|4Ko,ow1
|4wz{S|Ex o #xc #|4, 9|4;v, wzy{|
#oc},{6| M  {~nc|4wz|[Zx},|n|n; },o|M|4x},|4o|4
|4o|{7},{#,x{,9wz|4{|,|4o{Sy4,{,,co
|4x_xw1|c`) 0|#_,|
|4xwz% o{{0|>,{~x|3|4o c}, {| _,|3_|4y
M|4xxw1|4c
},|4{wz



ULTRIX

c,)1o4|4xo{~{,,o|4{S 7.|4wz|#o{Sy>,co>z) n
`) nnw1||
y_,c|4oxcn},{mwz|4o0 c},{w1,xn},{>nw1w1 c}w1|m{|wz{
o|4E>w1|{~1x|#|4o{Sy_{,coSv,{ w1{E}{~wz|4 w1|{S|4c _,|r{S|.|4xo{~{
,o{Sy {com;}{w1_|jm;},,{|c#,{_|4{S4|{~# w1|4o9 c
},{w1x.MK nj6,oK{S|4xwz{~oo|4>_,||4|
},{ ,o{o, |{M z|w1
o;0 },oM1]
);wz|4x|E_,|E|w1{w1E|4,c|4{S(
)K|4wz|4{` `xv,{7|~.|4c},
# simple ULTRIX example
% cc -G 0 -c foo.c

},{S,o|6,o|4{Sn .|4w1ccn1 c|m},,|4,|mx|{Eo{Sy_ccoc|w1|%|4


v,xwzy_{S|40xM6
|E{S|4{|> {Sy_E%|4Ko`

DEC OSF/1

x.m) Kj},,||3o_|4{w1{o,|{, |4{S;.|4wz;|4,.|4wz; c},{wz


|~.|4o,w1,6|4 o c%o M|4o,# },o|lx3{S|4M|| |4xw16|_
# simple DEC OSF/1 example
% cc -c foo.c
% ld -shared -expect_unresolved * -o foo.so foo.o

 4.|4wzmo c},{w16{|,wzwz|E},,|4|3|w1 o|4#x|{o{Sy_6|4v, xw1y{S|4 ,K|4x


},|4o,_,|E|4lc{S|E|o|4{SK 4.|4wzK},{30 {S|4m|ro{|o0|>{|4c{S|
|4,o|4{S.|4wzUoc},{~wz1w1|{~c|4 xE|4,y{K,||4#,|4#,o|4{S .|4w1
{c`
Sugerencia: En realidad, Postgres. no se preocupa del nombre del fichero, mientras sea
un fichero objeto compartido. Si prefiere denominar el nombre del fichero compartido con
la extensin .o, esto estar bien para Postgres, siempre que se asegura de que se envia
el nombre correcto al comando de creacin. En otras palabras, ha de ser consistente. Sin
embargo, desde un punto de vista prctico, no recomendamos esta prctica, dado que
puede acabar confundindole respecto a que ficheros han sido convertidos en objetos
compartidos, y que ficheros no. Por ejmplo, es muy dificil escribir Makefiles para realizar
un enlace automtico, si tanto los ficheros objeto, como los objetos compartidos tienen la
extensin .o

jl|4,o|4{S_,|9|4x},|4oor)|4%.|4wz c},{wzr},oo6lx|ro y_{~

SunOS 4.x, Solaris 2.x y HP-UX

x.mj,6K llj {9 KmMv,onl r, |{ r z|w1 r},,|4|o{S|4{|0o c},


|47o y_1,|4w1|M U},{c|4wz{S)|}|4o|4)|4o c}, {zoU_,|x|},{S ,o|
,
wz|4o c},{w1,x#},x#|4o|4x{#|4Mv1onxoc;xy|o,_},{
c|4wz{ )o|0_,|)|4_oc},{| |
Mv,o
nU},{S ,o)||4 cM y
|4},||4wz|;|m}xo`1`v xw1 ,|4},|4|w |`v 1 1|4},{c|4wz{S
n|4c6y_,9{|wz{ o |4r_,|{cc|w1| n| |{~#|4){S_,wz|4ow1,{



v x,o|4{Sm 4.|4wz;)|3o_|4{w1{x||,wz|4ooc},{~wz,m|4
|4wz{|r|4)|>Mv,1(no;E} M1~j K|4xw16,|3oc} },|{SK|
{S|4|4cc},|K_,|3 9oc},{3o|4{wz%|4xw1%x 
# simple HP-UX example
% cc +z +u -c foo.c
% ld -b -o foo.sl foo.o

c E, |{ 6 xc|o E|4cKw1|{~ {#,x|4oo |o{|)K


{S||mo{S|4o G|m1, |4)_,|;, |{c||47|;[_,|;o{Sy_{31},{0|z|4n},
},,|4|>{~|E
ooM|3
 w1|4o
o c},{~wz%o|4{Sn xxxz6,KK
|4y%x`
# simple SunOS 4.x example
% cc -PIC -c foo.c
% ld -dc -dp -Bdynamic -o foo.so foo.o

%z6 {# |4


# simple Solaris 2.x example
% cc -K PIC -c foo.c
% ld -G -Bdynamic -o foo.so foo.o

# simple Solaris 2.x example


% gcc -fPIC -c foo.c
% ld -G -Bdynamic -o foo.so foo.o

,
)| |>wz|4o c},{wzx4},,|4|rw1||4{_,|E|4x},| ,o{wz|4ooc
},{w1o|41{c|c|4w1|rwz|4o|>xxw1|c4o c6 w1|4o|
%cw1|4cw1ox|4M0|4
|>{S||4|3





Captulo 41. Triggers (disparadores)


v,xwzy_{S|46w1||y%wz|4{1 |6o|w1|o cv,|4{ov,_wz xocG
, 1 _o v,lc4[|43}, |%c{rm1,o| o cnoo|4
  3 d
w1{yy_|4{~;wz{_,|3|4_|4wzw1{yy_|{70_|4 j UM6|4xw1Mx },{wz|4;
_|4{~x  wz,` owz,c|4wz|3|49}x|0|4x},|4o, { n  |4 Mj
)6Kv, |E,{|y_xwz{S6on%,M|4_|4w16w1{yy_|{

Creacin de Triggers

l,;|4_|4w1)wz{~yy|4{o,{{||4cxw1{ {|>wz{~yy|4{~1c)z| ,wz{_o


6|4xwz{S, wz,{~)yj{~yy|4{~)w1) ,{{S|4w1j{~yy|4{Kw1)1|4xo{~wzKcExz cK
01,oMw1{yy_|{},{0},{S o|4x4{7|4 |4_|4wz
n1, Jw1{y_y|4{)|4|x|4{)o{S|4cw1|m_,||4w1{yy_|{1U||o|4{|o cU,
1, Mx{y,c|4wzxmo y|3{S|4wz{6 },o l
0xw1j},{3
o{S|4 M|3wz{~yy_|{~|4
xy_,|4w1|_
CREATE TRIGGER trigger name BEFORE|AFTER INSERT|DELETE|UPDATE
ON relation name FOR EACH ROW|STATEMENT
EXECUTE PROCEDURE procedure name ( function args );

j c{S|E|4wz{~yy|4{|>,{Ex|E||3|4c{7|w1{y_y|4{~~j|E,x3o c%{Sy,c|4wz


|4o c% 6v 
>},{Exy|w1|3,|4w1|{~cEE1, ;|4|rx|4{7c>w1|1 _K|4x
},,4  ||4_|4w1
xy,|4w1|)|4|4c|w1M|4_oc,|w1|{~cK|4n_,||4_|4wzj>|{~)c,K)1
ox}, |0|},| ,o{c,w1},|49||w1 #,wzK|4 },|4{{
 c_{S|3,|E
{S|4 {S| wzc|4|w1|4{c{3
wz01|4owz43},{7|4 |4_|4wz
3xwz{,oo  |4wz|4{c0x|w1{yy_|4{x|3|~.|4o,w1{~E},{3o3,0| wz
%|4Mwz|41%|},,|>_,|3
x|4o,|4o0x|30 c},|w1
 c_{S|3,|4},{So|4,c|4w161},{So|4,{|Ec|4|4
1,o c
 m{Syc|w1 mx },x mnc1,o|4J[|wz{S,ow1,{ ,{{|w1j{~yy_|{~)wz_
},{S}xw1M|},x{ 3{Sy_,c|4wz EKK1,o c|4>},|4{cw1{9)w1{y_y|4{E1|4{S| w1|4>o
{S|4_,xw1 c{|#c{703cc1,o
|c4xl,o },,||3x|4{,wz
},{~
x},{{xw1wz9{S|o|41|4xw1#1,
o|4xc,4`y_||4{w1{yy_|4{71, x`
c;|~.|4c},;|3,wzo |0m|o{w1 l|
},,|4,|3o|4{,1, y|4|{~_,|
w1 co c{Sy_,c|w1 K6c{S|%|oc}G|x|4{w1n|c{S||,,{
1|4on1w1c|wzc},9ow1,|4%|Z|4xw1},|4{cw1|}{|~.|4c}, 7,wz{
%w1{y
y_|{~>|c3|4_|4wz ; [},{6{S|4{9,c|y_,c|w1,w1 cw1o|)6 {S|4o
|){S|y_xw1{S E|4c,%wz6|Kwz{xo |4j|K}, {K,w1{#wzc4c},{~K{|y_xwz{~{
ow1,o |4#x |4,w1%|4;,|4_|4wz6)v, 9
,1, |4w1{y_y|4{{S|4w1 {),6{S| 9|wz,},1M|},,},| j4|~.|4o,w1 {~dwz
|4y
{~3},{~w1{y_y|4{ w1{ _ l,9},|{~o Mj )K
Kv, 
},|4{S)},|4{cw1|>%xy|w1|33#w1{y_y|4{_ 9{S|4w1 {{7;KM|Ey_ {{3},|{~
o)},{9wz,},#owz,1
||wz|c 09wz,},#
x|4{#x|4{w1,ow1,j{{~1
,|4__|4{r,},,wz|4{S; w1{mw1,},;1x|4||w1 Mj nKv, 7,|mx|{~
x|4{w1
1o cn;|;_|4{x|6;w1,},;owz4,M|oxn|%)v 7|4
,y_{7|>
w1,},0 {y_`



M w1{,|) o},{#},{wz|| > [  |4{~ ,wzx|4{


ocE|4)|441,w1,{S |4cx4c|,)w1{yy_|4{|4|4,0}{~|44cn
|4_|4wz
|49cxc9{S|4o |44{S|||~.|4o,oK| wz{y_y|4{|c},{S||4o|_xw13},,|4|
x|4{7oc6||1,wz,{S
4,r1,oKw1{yy_|4{|~.|4o,w19o ,wz7jKm1,wz3v |w1  |7|4xw11,o|
},,|4|mx},{{,|4_wz{~yy|4{~xwz6|o oKoc6w1{y_y|4{|4moxoMK
y_,
cwzo |4l},ow13|4Mow16,c|4{S%|>||4|3oo
,w1{y_y|4{>|4c}, {E, Mj U|%x|4{wzM,;,|4_;w1,},;|4;cxc{S|4
oj|4wz{y_y|4{#x|4{Kc;|
|1}, {|4,|4_ ;  ow1,c|4w1|Mx|
},{S}{Sx y,c| cU,|o{S oJ1|4wz r},{n|4xwz% x m},|{G|4xw1
},,|4|%oc{~v,{0|4cc|w1|4lxw1|m,1,oGc;1,_,}, &1|G
w1|wz|9{|y_{S| x;|r,w1Ey,wz4o },{>},{~{3{S|4o,{`x,1ox  |4
xcxc

Interaccin con el Trigger Manager

cx|;c|4o  o[,1, U|4)c}{0|4cwz{ {3|


w1{yy_|4{,1w1{y_y|4{cy|4{1x9|4xw1{S,owz{#j{~yy_|{~)wz ,{{|w1j{~yy_|{~)wz0|4,MK
mx|0ov, {mo, |4c|~.{|{~,o{| ,{~{S| w1j{~yy|4{Kw1
mx|4
;K
},{ },m;xy_{|4_ {M)Kz,xwz;|4x},,4|3 _wz|4|{ {co},{0|4_
w1{7c
01,ow1{yy_|4{_,|3%},{So|4M|4 cxwz{~,{|Ewz{~yy|4{l
0|4xwz{Sowz,{~0j{~yy|4{)w1E|3,|4,|E|4Mx{Sjo,|_joccjw1{yy|4{~ 
typedef struct TriggerData
{
TriggerEvent tg_event;
Relation tg_relation;
HeapTuple tg_trigtuple;
HeapTuple tg_newtuple;
Trigger *tg_trigger;
} TriggerData;
tg_event
describe los eventos para los que la funcin es llamada. Puede utilizar
las siguientes macros para examinar tg_event:
TRIGGER_FIRED_BEFORE(event) devuelve TRUE si el trigger se dispar antes;
TRIGGER_FIRED_AFTER(event) devuelve TRUE si se dispar despus;
TRIGGER_FIRED_FOR_ROW(event) devuelve TRUE si el trigger se dispar para un
evento a nivel de fila;
TRIGGER_FIRED_FOR_STATEMENT(event) devuelve TRUE si el trigger se dispar
para un evento a nivel de sentencia.
TRIGGER_FIRED_BY_INSERT(event) devuelve TRUE si fue disparado por un INSERT;
TRIGGER_FIRED_BY_DELETE(event) devuelve TRUE si fue disparado por un DELETE;
TRIGGER_FIRED_BY_UPDATE(event) devuelve TRUE si fue disparado por un UPDATE.
tg_relation
es un puntero a una estructura que describe la relacin disparadora. Mirar
en src/include/utils/rel.h para ver detalles sobre esta estructura. Lo ms
interesante es tg_relation->rd_att (descriptor de las tuplas de la relacin)
y tg_relation->rd_rel->relname (nombre de la relacin. No es un char*, sino
NameData. Utilizar SPI_getrelname(tg_relation) para obtener char* si se
necesita una copia del nombre).
tg_trigtuple

"

es un puntero a la tupla por la que


tupla que se est insertando (en un
actualizando (UPDATE).
En caso de un INSERT/DELETE esto es
cutor si
no se desea reemplazar la tupla con

es disparado el trigger, esto es, la


INSERT), borrando (DELETE) o
lo que se debe devolver al Ejeotra (INSERT) o ignorar la operacin.

tg_newtuple
es un puntero a la nueva tupla en caso de UPDATE y NULL si es para un INSERT
o un DELETE. Esto es lo que debe devolverse al Ejecutor en el caso de un
UPDATE si no se desea reemplazar la tupla por otra o ignorar la operacin.
tg_trigger
es un puntero a la estructura Trigger definida en src/include/utils/rel.h:
typedef struct Trigger
{
Oid
tgoid;
char
*tgname;
Oid
tgfoid;
FmgrInfo
tgfunc;
int16
tgtype;
bool
tgenabled;
bool
tgisconstraint;
bool
tgdeferrable;
bool
tginitdeferred;
int16
tgnargs;
int16
tgattr[FUNC_MAX_ARGS];
char
**tgargs;
} Trigger;
tgname es el nombre del trigger, tgnargs es el nmero de argumentos en
tgargs,
tgargs es un array de punteros a los argumentos especificados en el CREATE
TRIGGER. Otros miembros son exclusivamente para uso interno.

Visibilidad de Cambios en Datos

| y_r|#_;,|9oc 7|4Kv,xwzy_{S|4S,{~w1|r|~.|4o,o6|#,Eo ,wz 


oc{S|4 9}, {|
cc1_01,o|9j6 jv mc|4w1|3wz{~yy|4{~x|
xM_|lv, {|~.|4c}, |4M0o ,wz
INSERT INTO a SELECT * FROM a

)w1,})|{~wz
 U_|6}{~M|47}{ },[j U||ow1 |4xwz,}, 
wz|4wz{S|xcxcn1xjz|w1nK{|y_K|o|,o}, {)x,},,|4xwzrx
{S|4x,{_#
v,|4{S6m_,|3{S|4o {S{|4xw16x{S|E_x|4M0 o,c|4w1 |Ejv
Los cambios hechos por la consulta Q son visibles por las consultas que
empiezan tras la consulta Q, no importa si son iniciados desde Q (durante
su ejecucin) o una vez ha acabado.

xw13|4,0wzc4)},{ wz{~yy|4{~x4n|4w1{x|x|4{~wz9,9w1,}#1w1yw1{yw1,},|4
n|40x|%m
o x,w1|[w1{yy_|{> c|4wz{~
_,|%|4xw1;wz,},m1{|o4



x|4{w1r|m_|c% x,w1%|,wz{~yy|4{ _ U},{mo x,w1;|


w1{yy_|4{ 9  o}, xw1|4{ {~9

Ejemplos

M6|~.|4c}, 9coc}|~.#|4M{Sjjw1|4xw~{S|4y{S|4x{S| y_{S| #m|o w1{yx},`


M|0_,,|~.|4c},Mc,x|4oM {S|0|4,xM|
w1{y_y|4{ 1,ow1{y_,|4_,|4_|
|4,c|4{Sc|mw1,},
|4G;{S|4o Gwzw1|4xw|my_ {; },|4{oMo x,w1w1|4wz
x|4{w1{rMKG|;1` |6owz,%occ,;{S|4xw1{o [MKU;KG},|4{Sn {~wzm
w1{xoo
#include "executor/spi.h" /* Necesario para trabajar con SPI */
#include "commands/trigger.h" /* -"- y triggers */
HeapTuple trigf(void);
HeapTuple
trigf()
{
TupleDesc tupdesc;
HeapTuple rettuple;
char *when;
bool checknull = false;
bool isnull;
int ret, i;
if (!CurrentTriggerData)
elog(WARN, "trigf: triggers sin inicializar");
/* tupla para devolver al Ejecutor */
if (TRIGGER_FIRED_BY_UPDATE(CurrentTriggerData->tg_event))
rettuple = CurrentTriggerData->tg_newtuple;
else
rettuple = CurrentTriggerData->tg_trigtuple;
/* comprobar NULLs ? */
if (!TRIGGER_FIRED_BY_DELETE(CurrentTriggerData->tg_event) &&
TRIGGER_FIRED_BEFORE(CurrentTriggerData->tg_event))
checknull = true;
if (TRIGGER_FIRED_BEFORE(CurrentTriggerData->tg_event))
when = "antes ";
else
when = "despus ";
tupdesc = CurrentTriggerData->tg_relation->rd_att;
CurrentTriggerData = NULL;
/* Conexin al gestor SPI */
if ((ret = SPI_connect()) < 0)
elog(WARN, "trigf (lanzado %s): SPI_connect devolvi %d", when, ret);
/* Obtiene el nmero de tuplas en la relacin */
ret = SPI_exec("select count(*) from ttest", 0);
if (ret < 0)
elog(WARN, "trigf (lanzado %s): SPI_exec devolvi %d", when, ret);
i = SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1, &isnull);



elog (NOTICE, "trigf (lanzado %s): hay %d tuplas en ttest", when, i);
SPI_finish();
if (checknull)
{
i = SPI_getbinval(rettuple, tupdesc, 1, &isnull);
if (isnull)
rettuple = NULL;
}
return (rettuple);
}


{jo c
},6o{S|4wz|0w1|
w1wz|4xw16w11j {S|w1|01,ow1 cw1{y1{S|4wz{r },_,|
}4wzw1  x y_,y_|
vac=> create
for each row
CREATE
vac=> create
for each row
CREATE
vac=> insert
NOTICE:trigf
INSERT 0 0

trigger tbefore before insert or update or delete on ttest


execute procedure trigf();
trigger tafter after insert or update or delete on ttest
execute procedure trigf();
into ttest values (null);
(fired before): there are 0 tuples in ttest

- Insertion skipped and AFTER trigger is not fired


vac=> select * from ttest;
x
(0 rows)
vac=> insert into ttest values (1);
NOTICE:trigf (fired before): there are 0 tuples in ttest
NOTICE:trigf (fired after ): there are 1 tuples in ttest
^^^^^^^^
remember what we said about visibility.
INSERT 167793 1
vac=> select * from ttest;
x
1
(1 row)
vac=> insert into ttest select x * 2 from ttest;
NOTICE:trigf (fired before): there are 1 tuples in ttest
NOTICE:trigf (fired after ): there are 2 tuples in ttest
^^^^^^^^
remember what we said about visibility.
INSERT 167794 1
vac=> select * from ttest;
x
1
2
(2 rows)
vac=> update ttest set x = null where x = 2;
NOTICE:trigf (fired before): there are 2 tuples in ttest



UPDATE 0
vac=> update
NOTICE:trigf
NOTICE:trigf
UPDATE 1
vac=> select
x
1
4
(2 rows)
vac=> delete
NOTICE:trigf
NOTICE:trigf
NOTICE:trigf
NOTICE:trigf

ttest set x = 4 where x = 2;


(fired before): there are 2 tuples in ttest
(fired after ): there are 2 tuples in ttest
* from ttest;

from ttest;
(fired before):
(fired after ):
(fired before):
(fired after ):

there
there
there
there

are
are
are
are

2 tuples in
1 tuples in
1 tuples in
0 tuples in
^^^^^^^^
remember what we said

ttest
ttest
ttest
ttest
about visibility.

DELETE 2
vac=> select * from ttest;
x
(0 rows)

Nota: Aportacin del traductor.Manuel Martnez Valls


En la version 6.4 ya existian los triggers, lo que eran triggers para tuplos, (FOR EACH
ROW) pero no para sentencias (FOR STATEMENT), por eso creo que es importante
poner disparadores para sentencias, no disparadores solo.
Los trigger son parte de lo que se conoce como "elementos activos" de una BD. Asi como
lo son las constraints tales como NOT NULL, FOREIGN KEY, PRIMARY KEY, CHECK.
Una vez definidas ellas "se activaran" solo al ocurrir un evento que las viole, un valor nulo
en un campo con NOT NULL, etc
Por que entonces llamar triggers a los triggers? ;Con ellos se quizo dar mas control al
programador sobre los eventos que desencadenan un elemento activo, se le conoce en
ingles como ECA rules o event-condition-action rule. Es por ello que los triggers tienen
una clausula BEFORE, AFTER o INSTEAD (por cierto pgsql no tiene INSTEAD) y bajo
que evento (INSERT, UPDATE, DELETE) pero de esta forma el trigger se ejecutara para
tuplo (o fila) sometido al evento (clausula FOR EACH ROW) pero el standard (que pgsql
no cubre completamente) dice que puede ser tambien FOR EACH SENTENCE.
Esto provoca que se ejecute el trigger para toda la relacion (o tabla) para la cual se define
(clausula ON). La diferencia para los que lo han programado, por ejemplo en plpgsql,
queda clara entonces: cuando es FOR EACH ROW en la funcion pgsql que implementa
el trigger se tiene un objeto NEW y uno OLD que se refiere a la tupla completa, en el
trigger de STATEMENT tiene un objeto NEW y OLD que son la relacion (o tabla) completa
Esta claro entonces que es un poco mas dificil implementar un trigger para statement
que para fila (todavia pgsql no lo tiene).
Finalmente este es un buen ejemplo de que por que pgsql dice que "implementa un
subconjunto extendido de SQL92", no hay trigger en SQL92, son del SQL3.



Captulo 42. Server Programming Interface


, 3  () t1 S  1 jv ly|,x|4{wz|wz
w13{S,6jK6_,|4{|4|
|  SE
,|{S.|4,|4 ,owz|E_|Ev,{S |,{~ y,y_|v,y|>Mw1|{~w1|
c|4wzmoo|4xwz|4x|3o},w1|4
c1owz jv .,xw76x|4wwz_|Kw1|{~1o|1owz3w1xc},1noo|4x>w1w1|Kv,{x|4{z
v,|4{zK},w1c|4{j| ,wz {jv 6 |4#x c|3c|4c {~mcy|4c|4w~
j_Zcx,|{~xw1
y +M| ,xq
|  P 1 1 ow1c|4Ujv wz|4{ |;1, wz 6
 1 ` {,x|4{S1| ,|4 11,ow1 #,xy;jv
v },{So|4,{S| {S|' +M_ |4%xc|91,},},|4{ll|4owz {,%wz|9jv cy_|4{,|
w1|%l|4o,w1 {3wzc{,_ ,{3_,|4{|46wz|4{3},{S |,{S|
c[|;o|U[wz|%j| ,wz{
{S,y;_,|4{|41{ ,{7},{So|4,{S|
M w1|44w1w,{y;|4l|4o,w1M 0|{~m{S 
},{So|,{|rw1|Ew1{xow1 M9 {~wz|4
w1|o w1{S
+M w|6{S|w1,{|4wzn_ ,{E},{S o|4,{d|_ w1|4{z_E
+ {G
+M|6{S |4
o wz|nx|4{_|4(
{ +Mq
+Mw>1{)w1||4lw>occO1{S wz| |w_X
+M9|
oy_|M,wz,{S|E_|4{ 
6wz|4{{S|4xwz{~owz>{S|0wz|)wzw1M|4l|4o,w1|
 M,M   [1wz{~owz
owz{S xw1wz|4c|w1xo{x {7 },|4{wzxe
+M x%|Eoy|4Mwz|3,wz,{S|_
_x,o |x1,jv 1,ow1 9{S|4wz,{~%01|4ywz_|3{|,w1|4wz|4{30{S|4w1,{|4Mw1|4y|4{
_,|%{0jv {S| x,w#y7_{~_|)|4x {|4|4, +MlK|4{{S{z|y_wz_|; {
M){S|4x,|
w +M |3{S|4w1,{|4

Interface Functions
SPI_connect
Nombre
SPI_connect

|4ow1,{},{S o|4{S|>w1%wz|3jv cy|4{~

Synopsis
int SPI_connect(void)

Inputs

M |

Outputs

w
|4wz,{~Mxwzw1,
v /.E 6;M
o| wz|4



KM;
v 
 wo| wz|4

Description
},|4#
|4owzw1mwz|0v,xw1y{S|4o_|49xn ,n wz91,o
w1SPI_connect
%_
+M|4|4mw1|j| ,wz|#_,|4{|4` c|#,w1wzKv 1,ow1 7c)|#o|4%1{S
,1 |4owz|4},{S |,{| 
n%y|4wjv   6;M |{~{S {
o|4M1{ ;{|4
o|4owz|4},{S o|4,{S|r|_ y7{S| wz%o SPI_connect
|E},{S o|4,{S|>1{S wz|4{o| wz|4
| ow1, +M|wz| %}{ o|4,{S
| +M||wz
,x|jv ,{},{S|4w},{So|4,{S|
+M_ w|E|3wzmo w1,|0w1%,|3jv 1wz|4{w1|3on{S|4w1,{
# |4
SPI_finish
%wz|3o w #},{~ wzo|_

Usage

nnfnGwzc9pp&1

Algorithm
SPI_connect

}|4{~1 {c#wz|31,+My7

w1|4w1|3jv wz|4{~xwz{S, wz,{S|4#1 {|{~%|4l|4o,w1 Mc|4c {~;ny|4


c|4w

SPI_finish
Nombre
SPI_finish

)o | wz_ ,{},{S o|4,{S|>1{S wz|3jv cy|4{~

Synopsis
SPI_finish(void)

Inputs

M |



Outputs

w
v /.E j },{S},|{~6xo|4owz|4
v  )
K
MM O |41{S M,1o| wz|4},{S o|4,{d|

Description
ox|40[|4jxwzy[o|4owzw1w1|%v,xwzy_{S|40o_|494 , 
w1SPI_finish
1, wz 1wz|4{oc},|w1y; },|4{wzw1{ ,ywz|3jv cy|4{~
nc%y_|ww1|E|4{~{S {{|w1,{;v   ) KMM O
9o|4
SPI_finish +Mwz
+Mw1 ,wyMo,{~{S| w#_Uo| wzj|4{S|m[,c|4w1},{S |4
w1xwc|#wzw_wzzh
y +M|E_%w1|3jv cy_|{

Usage

) |)o|[r),xwz|4}[Ko |4ow1|},{S |,{S|


{#_ [cy|4w
SPI_finish
,
},{S|4ow1|{S|4x,wzlMwz|wzw9oUx1|4x_}wz|ow1
9
SPI_finish
{w_w1|3wz{~ wz 1_0|4 y 

Algorithm
},|4{1{cw1|E ,+My7
SPI_finish

)o |ow1_ ,{},{So|4,{d|>1{ wz|Ejv cy|4{M1{||4jc|c{mo


1w rc|0;,{}{ o|4,{d|0_
x |
wz|
|4x|o
w1 #o w|E,x|4%c{S|_||EUpalloc
|4c {~%cy|4cSPI_connect
|4w~

SPI_exec
Nombre

_SPI_exec
,|4{

{S| wz|4#;|4j|owz }M},{~x|4{ },4|{ },w1|4{_|4l|4o,w1|

Synopsis
SPI_exec(query, tcount)



Inputs

o{7
query
wz{~y6owzy;,|4{m},
w

tcount

Zc ,c|4{7w1,}|4#wz%{S|4wz,{

Outputs

w
v
v
v
v
v
v
v
v

/.E8n },{S },|4{%xo |4ow1|4


 ) KMM Oo|1{ M,1o|4owz|4},{S |,{S|
 )Z;_,|{~%#M) {
)
 ) KMM O},{S o|4,{S|>,tcount
o| wz|49
 Kv, Kv,, 6xw1
 j ) 9 Kj j 
  M K   9jM
 Kv,K
.EMK w1},|3 ,|4{m, +M1wz#x , w o,{

l|4l|4o,w1 )j_ ,{,|4{+M,oo|4xx,wz|4K| jw1| ,+My0 1|4yw1_|4


|
+M |3{S|4wz,{~|9
v /
.E) xc|0,wzw1%| y7 >  G R+#|j|4o,wz|4
v /
.Ej , 1,w wj U Mn |+M#|4l|4o,w1|
v /
.Ej M  U M,
+M|4j| ,wz|4
v /
.E Mj Mj 1{ ; Uj |
+M|4l|4owz|4
v /
.E),M),L
+M|4l|4owz|4
v /
.E)v, )v L
+M|4l|4o,w1|

Description
o{S|4wz|4; |j| ,wz}, 1},{x|4{ },|4{ },wz|4{3|4j| ,wz|4Mwz|
_SPI_exec
,|4{m1 {
w1,},|l
tcount

Usage
%x , U|o|4J{S o| wz|4},{S |,{S|

%|{wz|4w
)
|4l|4o,w1|4#w1|_,|4{M1{w1,}|4>{S|4w1,{|4nMw1|_,|4{Mxo tcount
)xy
cK{S|4xw1{ow_wz|E,c|4{ w1,},|41
{ +oMwz|>_,|4{/
+M|r|4l|4o,w1|tcount
9{|4lc},|4
SPI_exec ("insert into table select * from table", 5);

wcxw76w1,},|3wz|Kx|4{wz|4Gw1w1_| |j|4o,wz[ 7 ,{>_,|4{u+


xoo|4xx1,w1|40 1|4yw1_|3_,| +M |3{S|4wz{|4#
+M,P+

Nota: You may pass many queries in one string or query string may be re-written by
RULEs. SPI_exec returns the result for the last query executed.



|c wz,9,c|{; 3wz,},|4M1{h+Mow1|c1xw13,|4{~+MM|j|4o,wz|4{S|w1,{|4


Gwz|;y _{|%v },{Sjo|4x|Z1 wv (.3)  jv (.3
{S|4w1,{|4 jv },{S o|xx|4 )w1|4O c,x|y>}, wz|4{mv j,},|4l|
jv wz,},w1|6wzcoo|4x
wz|%||4ow1|4wz,},|4 xcMKwzw
1{S|4|43
c|4 v ,},|4l|#,,x|_ 1j|4|EU|4c {%cy_|c|4SPI_finish
w1
cm{S|4wz,{~; |3 wz|31, +My;1|4ywz|_,|4
SPI_exec

v
v
v
v
v
v















)
)Z,M|{~%#;K {
 ) KMM O},{So|4,{S|r#,tcount
o|ow1|49
6v, 6v,,j 6xw1
) 9 ,6j 
 M K    9;
Kv,K
.3MK wz_},|3 _,|4{m,_, +M1wz#x , w o ,{

Algorithm
},|4{ {cw1|31 P+M,y7
SPI_exec

)o |ow1_ ,{},{So|4,{d|>1{ wz|Ejv cy|4{M1{||4jc|c{mo


x |
wz|
|4x|o
1w rc|0;,{}{ o|4,{d|0_
w1 #o w|E,x|4%c{S|_||EUpalloc
|4c {~%cy|4cSPI_connect
|4w~

SPI_prepare
Nombre
SPI_prepare

|4ow1,{},{S o|4{S|>w1%wz|3jv cy|4{~

Synopsis
SPI_prepare(query, nargs, argtypes)

Inputs
query

6,|4{6xw1{y

nargs

M,c|4{},,w},{~c|w1|4{9;~{Sy_MK11, wz 



argtypes

v wz|4{xw w1},|3 )w1%},w{Syc|w1

Outputs

_
v wz|4{wz%M|j|4o,wzM},;1},{~x|4{ }|4{ },wzc|4{

Description
o{S|4w1|4#n{|w1,{9|4l|4o,w1 },},{~x|4{ },|4{  },wzc|4{_,w
SPI_prepare

|4x w|4l|4o,wz|Ew1|3,|4{j, ;|Eo|4{S 
o| wz|4},{S |,{S|_

Usage
{Sy_,c|{ _},{c|4wz|4{796{Sy_;K11, wz 14M{SycK|
)0 ;w1|4{S|># w/0M_,|4{
l|4owz ,},{S|},4{S|4|j|4o,wz},#rxc|4wzc|4rc,o1xw1|4{7x;w1r1|4w1,{S|Ec
|E,x|41, wz|3xc|3_,|4{X
+M |3|4l|4o,wz|4c%w1c|l
|M},{S|4w1,{|4U
c|;,|J GUo,{{S|4w owzZ #w1|
SPI_prepare
},{So|4,{S|Exo|
1{S|4|4c|4c {~% w1|4 {3},j|4|

SPI_finish
SPI_saveplan
_x,o |x1,E1, },wz|4
{ +M |E{S|4wz{|4Kw1|~{ +Mx|4 y|4w_3M)}
[ w1 |0jv {S| x,
w +M|6x|4w7|%w1|K,|6{S|w1,{|4cjv |j| o_|4jo|4}w7w1w
wrx|4w,wz;v  KU;c_,|4{MrMK,{{Sy ) {{Sy_ )%(
{Syw1},|4MK9

SPI_saveplan
Nombre
SPI_saveplan

j_|40},xx|4},

Synopsis
SPI_saveplan(plan)

Inputs

_
query
vx|4},

"

Outputs

_
j| ,wz;}MowzxM),,oo|4xx1`
v {S|x,w

v 
)Z;},m9M)
) KMM O},{S o|4,{S|>,1 |4owz|4
v 

Description

xw1 {S|4M[},},{S|},{S|
|nc|4c {J},{Swz|4ow1|4
1SPI_saveplan
{ 1{S|4| y;
{7w1|Ewz{x wzSPI_prepare
cy_|{~
SPI_finish
wz|m ,{{S|4w_|4{ U v,xwzy_{S|4)wz|4{S|m)wz[w1[xwz{S|M}{|},4{S|Z},)Gw1|
x_xw1| w1 y%1|4w1o;wz|4 1{S wz|4{S|E1 {|4l|4o,w1 + |3c},|c|4wz|4
1,w1,{S|
|{~x l Ecwz|4{w1_|4jw1|{|0wz|Kwzw1{|,|},{S|4}{S|4},>wz|
ox|4_,|w_ wz 0 _ ,{r}{ o|4,{S|
cw1|Ko,{{S|4w|x 4Kx|
wz
SPI_execp
|4l|4o,w1|rw1#_|4},

Usage

x_|4>},x|M},%1},{|},4{S|M
;c|4c {~K},{S w1|4owz|4
1SPI_saveplan
{ 1{S||y[_
nwz|%w1{xow1SPI_prepare
cy_|{>G{S|4wz,{0;}, w1|4{
w1Gw1|x_|4},SPI_finish
 cUx_|wz|n}wz|4{6{S|4wz,{~|c #_{4|_ '+M_
o|4o)_w1}, w1|{MK; { w|4wz|4{+M|4m},{S|4},{~y)>},m {,xy6m{S|4
},{S|}{S|4},Mjv |j|4o};x|4|E_|P +M
Nota: If one of the objects (a relation, function, etc.) referenced by the prepared plan is
dropped during your session (by your backend or another process) then the results of
SPI_execp for this plan will be unpredictable.

SPI_execp
Nombre
SPI_execp

,j|4o,wz|4
},;1{S

SPI_saveplan

Synopsis
SPI_execp(plan,
values,
nulls,



tcount)

Inputs

_
plan
j| ,wz;}
)w1,
values
ow1,j},{~c4| wz|4{7|
o{7
nulls
{{~m,|4x {yX+Mw},{c|4wz|{y_|4wM)
owz|4MK,P+M|
j owz|4#;K wP+M|4
w

tcount

M,c|4{w1,},|#1 {+Mo},M#wz%|E|j| ,wz|4

Outputs

w
|4wz,{~#w1|3xc|>,|E
q+M|4 
MK{
)
v  )Z;SPI_exec

plan
v  v
#M) tcount
+M#,
} {S|4},{S|4L+MwzM c|0},{4c|w1|{~
values

v w1,}w1|
w1|4

SPI_exec

x, o|4xx1,

v },{d o|4x|
w1|4

SPI_exec

x, o|4xx1,

plan

Description
wz {|0m},},{S|4},{S|4G
x1|6c|4c {c},{Swz|4ow1|1{
1SPI_execp
{| |4y%
{wz|3wz{~xowzSPI_prepare
Mcy_|4{~
SPI_finish
wz|m ,{{S|4w_|4{ U v,xwzy_{S|4)wz|4{S|m)wz[w1[xwz{S|M}{|},4{S|Z},)Gw1|
x_xw1| w1 y%1|4w1o;wz|4 1{S wz|4{S|E1 {|4l|4o,w1 
+ |3c},|c|4wz|4
1,w1,{S|9|{~x l 
 +M {~6{{ ,4wz|4{S|9#wz|>_w16w1K{S|4,x|>},{S|4},{S|4};w1|
ox|4_,|w_ wz 0 _ ,{r}{ o|4,{S|
cw1|Ko,{{S|4w|x 4Kx|
wz
SPI_execp
|4l|4o,w1|rw1#_|4},

Usage

MK,w1|
nulls

SPI_execp

x,c|4w1w_,|41_{S|E;6M)9

Nota: If one of the objects (a relation, function, etc.) referenced by the prepared plan is
dropped during your session (by your backend or another process) then the results of



SPI_execp for this plan will be unpredictable.

Interface Support Functions

1,ow1 |4x {|4M|4P+ c%|E,x|46o| wz|4, |4owz|4},{S |,


{S|4

SPI_copytuple
Nombre
SPI_copytuple

U|4o},%wz,},|3M,},},|4{l|4owz {owz|4lw

Synopsis
SPI_copytuple(tuple)

Inputs

M|4}},|
tuple
},,wwz,},|Ewz%|3o },|4

Outputs

M|4}},|
},|4wz,},|
1M)
# wM)wz|3o},h+Mxoo|4xx1,
tuple
MK;
M)
tuple

Description

c_|9
o},M ,wz,},|0,},},|{l|4o,w1 {o w1|4lw~ j|4|3wz|0| wz
SPI_copytuple
U
|4c{6Zy_|c|4w~

Usage




SPI_modifytuple
Nombre
SPI_modifytuple

U,|4wz}|3{S|4wz

Synopsis
SPI_modifytuple(rel, tuple , nattrs
, attnum , Values , Nulls)

Inputs

|w1

rel

M|4}},|
tuple
},,wwz,},|Ewz%|3c ,|4
w

nattrs

M,c|4{wzw1{,w1|E,c|{~Mw1wz,

w

attnum

{{~m ,c_|{~ wz|3wzw1{,w1|4f+Mo{|rw16|3oy_|


)w1,
Values
M|+ _,|4 {w1|3w1wz{~,wz|4}|4o|
o{7
Nulls
oMw1wz{~,wz|4{S|EM)4

Outputs

M|4}},|
M| + wz}|+Mw1c,owz
1M)
# wM)wz|3c 1X+Mx, o|4xx1,
MK; tuple M)
tuple

v {S|x,w

v 
)Z;{S|4M){7w1,},|>#;K {w1wzo)
{7w1wz, MK,{ ,|4
M  ,Kw1|{|>#;_w1wz{~,wz|E,c|4{Mwzwz 1wzw1,)
{0,c
v 

Description
SPI_modifytuple



U,|4;cwz,},|n ,},},|4{K,j|4o,wz{) w1|jw~j|4|nwz|cx|4owz

U|4c{6Zy_|c|4w~

Usage
#x,o |x1,,},wz|4{
w1w1|M|+w1,},|M6{S|w1,{|4||+wz,},|Kowz|4U
,},},|4{l|4o,w1 {7o w1|jw1x|4|>Z|c{mcy_|c|4w1v,xx|4wz,},|3w y_|4#

SPI_fnumber
Nombre
SPI_fnumber

_,#wz|3w1wz{,w1|E,c|4{71{7x},|4o|wzw1{,w1|

Synopsis
SPI_fnumber(tupdesc, fname)

Inputs

,},|4)|
tupdesc
},,wwz,},|E|o{},wz
o{7
fname
_|4c|

Outputs

w
zw w1{,w1|E,c|{
|x|4|4),c|{ w1wz{~,wz|
v  M  ,Kw1|Ec|4wzw1{,w1|># w1,

Description
{S|w1,{#wz|3wzw1{,w1|E,c|{1{wz|3w1wz{_,wz| +Mwzc|>1c|
SPI_fnumber

Usage
zw w1{,w1|>,c|4{~{S|r0x|49



SPI_fname
Nombre
SPI_fname

#w1|3wzw1{,w1|>c|E1 {wz|3}|4o|w1wz{wz|

Synopsis
SPI_fname(tupdesc, fname)

Inputs

,},|4)|
tupdesc
},,wwz,},|E|o{},wz
o{7
fnumber
wzw1{,w1|E,c
|{

Outputs

o{7
wzw1{,w1|Ec|
MKM1,c|4{9 ,w
{y|
v {S|x,wx|4ww16v  M  ,K |{~{S {

Description
{S|4w1,{w1|3w1wz{~,wz|Ec|31 {7wz|3x},|4o,|4wzw1{,w1|_
SPI_fname

Usage
zw w1{,w1|>,c|4{~{S|r0x|49

Algorithm
| w1,{#0|+M_1 ow1| },%w1|3w1wz{~,wz|Ec|



SPI_getvalue
Nombre
SPI_getvalue

|4w1,{#wz|3xw1{y;_,|E w1|3x},| ,|4wzwz{~,wz|

Synopsis
SPI_getvalue(tuple, tupdesc, fnumber)

Inputs

M|4}},|
tuple
},,wwz,},|Ewz%|3|4lc|
,},|4)|
tupdesc
},,wwz,},|E|o{},wz
w

fnumber

wzw1{,w1|E,c|{

Outputs

o{7
wzw1{,w1|E_,|>{7MK
w1wz{~,wz|EMK,
,c|{7,w{y_|>jv {| x,wx|4wwzmjv   M   )
% ,w1},,w1,owz_4|31jv {S| x,wx|4wwz%jv   MK6)_)

Description
{S|4wz,{~%|jwz|4{1xw1{y{S|4}{|x|4w1w1 % w1|9_,|# w1|9x},|4o,|4
SPI_getvalue
wzw1{,w1|_

Usage
zw w1{,w1|>,c|4{~{S|r0x|49

Algorithm
ow1|c|c{m#{S|4{S|mwz|3_,|_



SPI_getbinval
Nombre
SPI_getbinval

|4wz{w1|3{m_,|>wz|3}|4o|w1wz{~,wz|

Synopsis
SPI_getbinval(tuple, tupdesc, fnumber, isnull)

Inputs

M|4}},|
tuple
},,wwz,},|Ewz%|3|4lc|
,},|4)|
tupdesc
},,wwz,},|E|o{},wz
w

fnumber

wzw1{,w1|E,c|{

Outputs

)w1,
wzw1{,w1|E{~6_,|

isnull
y61{7,_,|3Mwzw1{,w1|
v {S|x,w
v  M  ,K

Description
SPI_getbinval

{S|4w1,{w1|3{~%|>w1|E},|o|w1wz{_,wz|_

Usage
zw w1{,w1|>,c|4{~{S|r0x|49

Algorithm
)|# w ow1|>|+ } |>1{7w1|3{m_,|




SPI_gettype
Nombre
SPI_gettype

|w1,{#wz|3w1},|3c|Ew1|E},| ,|4w1wz{~,wz|

Synopsis
SPI_gettype(tupdesc, fnumber)

Inputs

,},|4)|
tupdesc
},,wwz,},|E|o{},wz
w

fnumber

wzw1{,w1|E,c|{

Outputs

o{7
|Ew1},|3c|31 {w1|3x},|4o,|4wzw1{,w1|E,c_|{
v {S|x,w
v  M  ,K

Description
{S|w1,{#0o },m w1|3wz_},|>c|31{wz|3}|4o|w1wz{~,wz|_
SPI_gettype

Usage
zw w1{,w1|>,c|4{~{S|r0x|49

Algorithm
)|# w ow1|>|+ } |>1{7w1|3{m_,|




SPI_gettypeid
Nombre
SPI_gettypeid

|4wz{w1|3wz_}|3 w1|>},| ,|4w1wz{~,wz|

Synopsis
SPI_gettypeid(tupdesc, fnumber)

Inputs

,},|4)|
tupdesc
},,wwz,},|E|o{},wz
w

fnumber

wzw1{,w1|E,c|{

Outputs


|Ew1},|3 1{7w1|3x},| ,|4w1wz{~,wz|E,c|4{
v {S|x,w
v  M  ,K

Description
SPI_gettypeid

{S|4w1,{w1|3wz},|3 {wz|3x},|4o,|4wzw1{,w1|

Usage
zw w1{,w1|>,c|4{~{S|r0x|49

Algorithm



"

SPI_getrelname
Nombre
SPI_getrelname

|4wz,{9w1|Ec|E wz|3x},|4o,|4{S|4wz

Synopsis
SPI_getrelname(rel)

Inputs

|w1
rel
},,w{S|4wz

Outputs

o{7
|Ec|3 wz|3x},|4o,|4{S|4wz

Description
SPI_getrelname

{S|4wz,{~wz|3c|3 wz|3x},|4o,|4{S|4w1 

Usage


Algorithm
},|4w1|E{|w1 Mc|Ewzm|+ xw1 {y_|

SPI_palloc
Nombre
SPI_palloc

w1|4c|4c {mM,},},|4{l|4o,w1 {o w1|4lw




Synopsis
SPI_palloc(size)

Inputs

|

size

6owz|4wx|3 xw1 {~y_|3wz% ow1|

Outputs

_
M|+ xw1 {y_|3x},o|>x},|4o|x|

Description
 w1|4%c|4c {~,},},|4{)j| ,wz{owz|4lwj|4|x|4ow1 c|c{
SPI_palloc
c
y|4c|4w~

Usage


SPI_repalloc
Nombre
SPI_repalloc

|41owz|4c|4c {m}},|4{j| ,wz{o w1|4lw

Synopsis
SPI_repalloc(pointer, size)

Inputs

_
pointer
v wz|4{wz%|jxw1y%xw1 {~y_|
|

size

6owz|4wx|3 xw1 {~y_|3wz% ow1|




Outputs

_
M|+ xw1 {y_|3x},o|>x},|4o|x| +Mw1ow1|4wz9o },|41{S |jxwzy;{S| 

Description

{|14 ow1|6c|c{Z,},},|{l|4o,w1 {
wz|4jw~j|4|;| wzZ Zc|4
SPI_repalloc
c
{mny|4c|4w~

Usage


SPI_pfree
Nombre
SPI_pfree

{S|4|4c|4n{;1{S ,},},|{7,j|4o,wz{owz|4lw

Synopsis
SPI_pfree(pointer)

Inputs

_
pointer
v wz|4{wz%|jxw1y%xw1 {~y_|

Outputs

M |

Description
1{S|4|4>c|c{nc,},},|{rl|4o,wz{#owz|4lwj|4|x|4ow1 [[c|4c {nc
y_SPI_pfree
|c|4w~




Usage


Memory Management

|{~_| {E ow1|


c|4c {[c|c{[owz|4lw1x, +Mcwzw w1 c|6
|owz|4lwc|{S||4[owz|4lw,|4xw1{S,ow1 G+Mw1 ,w7z |4ow1y wz 3c|
w1|{mo w1|jwz 9 ow1 M1
|4wz >{S|c| wz|[o w1|4lw +Mo
{S|ox|4;o,{~{S| w3|__ 9y|4w>,palloc
},{S| wz|{S|4x,w1%3_ #w1{Zw1U1{S|4|1 {
{S|4owz|4c|4c {~mowz|4 wMo,{~{S|4w_owz|4lw
{S| w1 UZ +Mwzoy|40w +M|4|4c|c{ w1|jwzK{S|;x,.|4ow9 #jv cy|4{0c|4
c{mny|4c|4w~
v },{So|4,{S| 7|4 +Mwz%0w +Mc|4c {~)o w1|4lwzlS,},},|4{j| ,wz{c|4c {~)o w1|jw
},{So|4,{S|Ec|4c {;owz|4lw1 |4owz|4
|41 {|>},{S o|4,{S|7o|4ow1|4;w1wz|9v cy|4{z o,{~{S|4wc|c{)owz|4lw ,},},|4{

l|4owz { wz|4jw_x)j ow1 ;c|9%wz|>}{ o|4,{S|#w1x|4__


{mjv ,wzw1%,owz#_|1{S|r |4ow1y;w1mjv {|rc|>wzpalloc
#o w1|4lw~repalloc

1wz|4{
6o|Zo,{~{S|w#o w1|jw#6wz|M}{ o|4,{S| K| 7owz

{rnjv ,w1wzc1,ow1 
1|4lo|4},w {

c|KSPI_connect
_
palloc repalloc
SPI_copytuple

{S|Ec|EMwz#
o w1|jw~
SPI_modifytuple SPI_palloc
SPI_repalloc
|4[m},{S o|4,{S|)xo |4ow10{S w1|%jv cy|4{r_
wz|% ,{{S|4w
owz|4lw{S|4xw1 {S|4wz%wz|3,},},|4{l|4owz {7o w1|4lw SPI_finish
w1 #c|EMw1|3}{
o|4,{S|>c|c{mo w1|4lw{|>{S| |4  w|3,x|4mc {S|_
r_
+w>w1U{S|4wz,{Jx c|4wzyZw1Uwz|,},},|4{),j|4o,wz{w1|_|w1U owz|
c|4c {~%1{w1#Mw1|3,},},|{7o w1|jw~
v %wzmwz%,wzcwzom1{S|4|r wz #w1|3,},}|4{j| ,wz{owz|4lw
v ,wzcw1oJ1{S||Mc|4c{ wz|4,{~y|j|4o,wz3_,|4{
+M|4 wz
_,|4{m |_

Visibility of Data Changes

v,xwzy_{S|43wz%oy_|0_xw1c{S,|_4,{y%_,|4{c|4l|4o,w1 _wz6oy|4
c|
w1|9_,|{~Kwz| 1_>jK11owzjv 1,owzw1{yy_|4{x {|#_x|rwz)w1|9_,|4{
x _ {>|jc},|4 [_,|{~ Mj M, 6j r 6 %wz,},|4Ex|4{w1|{S|
_|61 {>j x  [|4z1|4ow1 w1
,} w1|4Ewz|%w1x|6w1(
| +Mw1w1x|4
1,.|4owwz%,|0,|4){S,|4x o ,{~x|4|
+Mw1 ,w{S|4x,{xy7
y|4c|3%_,|4{; {S|E_x|0m_,|4{|4q
+M {S|Exwz{w1|41wz|4{_,|4{;K
cwzw1|4
{ +M|w1|4{
wz|4G{S|mxwz{w1|4Z,|M 1,{~ywz||4l|4o,w1  #69 {01w1|{3
 |_

Examples

>|4lc},|
jv ,xy|
|4c wz{w1|Ewz|xw1{S,|_|{|
{S|0c {S|)oc}|4
|4lc},|4MM{Sjjw1|w~{S|y_{S|4x{S| y{| #Mowz{7jx},`




K6|{~xc},||jc}|M #v ,y_|j|},{S |,{S|m|j| o |},w1UK


_,|4{
Kw1,{~xw{Sy,c|4wjmwz ,wKw1| o|4l|4o,w1|wz|#_,|4{,xyjv |4l|4
{S|4wz,{~wz|3,c|4{ w1,},|41
{ +Mowz|3_,|4{m|j| ,wz|49
#include "executor/spi.h" /* this is what you need to work with SPI */
int execq(text *sql, int cnt);
int
execq(text *sql, int cnt)
{
int ret;
int proc = 0;
SPI_connect();
ret = SPI_exec(textout(sql), cnt);
proc = SPI_processed;
/*
* If this is SELECT and some tuple(s) fetched * returns tuples to the caller via elog (NOTICE).
*/
if ( ret == SPI_OK_SELECT && SPI_processed > 0 )
{
TupleDesc tupdesc = SPI_tuptable->tupdesc;
SPITupleTable *tuptable = SPI_tuptable;
char buf[8192];
int i;
for (ret = 0; ret < proc; ret++)
{
HeapTuple tuple = tuptable->vals[ret];
for (i = 1, buf[0] = 0; i <= tupdesc->natts; i++)
sprintf(buf + strlen (buf), " %s%s",
SPI_getvalue(tuple, tupdesc, i),
(i == tupdesc->natts) ? " " : " |");
elog (NOTICE, "EXECQ: %s", buf);
}
}
SPI_finish();
return (proc);
}

M,+0oc}|3o{S|4wz|Ew1|>,owz
create function execq (text, int4) returns int4 as ...path_to_so language c;
vac=> select execq(create table a (x int4), 0);
execq
--0
(1 row)
vac=> insert into a values (execq(insert into a values (0),0));
INSERT 167631 1
vac=> select execq(select * from a,0);




NOTICE:EXECQ:

0 < inserted by execq

NOTICE:EXECQ:

1 < value returned by execq and inserted by upper INSERT

execq
--2
(1 row)
vac=> select execq(insert into a select x + 2 from a,1);
execq
--1
(1 row)
vac=> select execq(select * from a, 10);
NOTICE:EXECQ: 0
NOTICE:EXECQ:

NOTICE:EXECQ:

2 < 0 + 2, only one tuple inserted - as specified

execq
--3
(1 row)

< 10 is max value only, 3 is real # of tuples

vac=> delete from a;


DELETE 3
vac=> insert into a values (execq(select * from a, 0) + 1);
INSERT 167712 1
vac=> select * from a;
x
1
< no tuples in a (0) + 1
(1 row)
vac=> insert into a values (execq(select * from a, 0) + 1);
NOTICE:EXECQ: 0
INSERT 167713 1
vac=> select * from a;
x
1
2
< there was single tuple in a + 1
(2 rows)
-

This demonstrates data changes visibility rule:

vac=> insert into a


NOTICE:EXECQ: 1
NOTICE:EXECQ: 2
NOTICE:EXECQ: 1
NOTICE:EXECQ: 2
NOTICE:EXECQ: 2
INSERT 0 2
vac=> select * from
x
1
2
2
<
6
<




select execq(select * from a, 0) * x from a;

a;

2 tuples * 1 (x in first tuple)


3 tuples (2 + 1 just inserted) * 2 (x in second tuple)

(4 rows)

^^^^^^^^
tuples visible to execq() in different invocations






Captulo 43. Lenguajes Procedurales


E9'8E'|G'|0%8e' 2UP/| OEP!9P!,EP0'-8E|'O',X8e'|PE!>
EP |E'38/ !IEE|-9E| 'P(E, 8'G'|088|'8I(8('|PE!>qEP
8E','oP!o880,-|0'|%E P|, 'G0|9'GE'' '0L!,P ,GL'|0E9
E P8'P9E|0/8/'IcE| ',|88G|~>8, !8E|X9E| 'P8/E'|PE
08IE,2G ',u ,GE''8ou9,~Go8I,09 PGE~0'8P 28X E|8
| !'

Instalacin de lenguajes procedurales


8 9> 9PL8I98P89q82 88>
'|2E!>E,O8E~,!'|0''IP-8 80P0!P

EP>0u PG~0'82E/ P|0'|G|~>8,8'|P80o|h8(!e PGE'


'8h'|!9'8E, 89 0PR8G|~>8, EXEeE2(!9'|928h'|
0'8hu28' 0P'X8IP'P'',9 e8I'oP!I880P#P2!PE,98I 8
!9I'|!0'8(h ,|8PE8,#G|~>8,EEe# #!0I'|928( '|!9U8
#G'!GX!'9'
8! '9E8E|E2h'|PE!> E,OE#9E, 8E#'R2EPE8R!0G
''I8#GP'9hE!9-G|E
8#G|~>8,8P-8O'~8hG8'|0'IP8

CREATE FUNCTION handler_function_name () RETURNS OPAQUE AS


path-to-shared-object LANGUAGE C;
8 ''E 8, !E '80'E82E'0G/( 'X8' 'PX8h80PoPE
!9I9E| 'P|/82E'2 E|hE 'P0'EP8E|'8,q'28 89,q|,E0'E
O,GEE!0Ph2E|h8' 0G|0 E9'''P' E|I!|0| '#(e
|8#Eu82-!E '~/O,'IP8

CREATE [ TRUSTED ] PROCEDURAL LANGUAGE language-name


HANDLER handler_function_name
LANCOMPILER description;
8E'P~ '2,E 'P|8 #88'|E'OEEE'|PG8'LP!X8
89,!!'E'2''P'Po8h!EEE!E'PEE8hE!!9X'|PE!>E~  cE|
O',|u, 8'G'|9,I 0'R8POo8uP8o'I9E| ',|IE(',IE!(~> E
9L8|08I'(E''  ',u8P!8%89,!#!P'8P~UuE~!Eo'|2E!>
2Eh|GEE8 P|!2E' !u'E''  'P|'|0|8h'XP!h8/80,
|!'0Gh8E |PEP '|PE!>-Ee#2(L8e |!PGG|'E!0G|0
82'!9!|0'8

89G89
8e!'P8U|9q,8('8' qe'-P!8E9,8,|8q| ,|9|,>9% ,GE9'8
E,G|0EP89E| 'P|2E''G,'|P80EeEP#(

CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS


/usr/local/pgsql/lib/plpgsql.so LANGUAGE C;
8 P8

CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql


HANDLER plpgsql_call_handler
LANCOMPILER PL/pgSQL;

8E|2EL'9E|O',G|~>8,L8''G8oER'G|98 '88P
'|R, 8IE,'q9E| 'P|eE,O'G'|9R8'!E|P 8|8h,0'PE9hE
'|P80E'EPP'
8I9E| ',|GR~08P8/E9'|E|X'|09(8/''G8!E 'E8'!
9'|0/828'-9E|O',|-8'|PE!> |,~G' |8',PEG|0Pe88,
#G|~>8,P'E|9'E 8,8,P>0X'|0~8f8 'I0P'
E
pg_proc
~('/9E| 'P2E(|(8o!e~> E0828|G|~>8,e G'|/2'P 0'PP,-8
'!0GIE|''',q2EG|0,8''G8 8 'I9E| ',h',q0'E,q880
2E82E'228,0 9h9E|98P EEhE '9E|O', | 8|9,0~'PE0
EP!I8
oP'80PR P|0!9/ P'cE| ',|%8/'|2E0 -
pg_proc
'fcE| ',|8EE8!!PP P8O,Gh'9E| 'P|q8#'|PE!0(e
8E8|P E'9'EUo98RO',|oE ,G'G|,GPX898| ',|E!'GE
2E'PPEG|9,8 ''GEI8'!9'|0R







8P%'|2E0o, 8E'o8E|'8Po '2h8X80,


!88|
template1
E9,G0'OG|9IL0P8'eP!q8I80P 8qEP! E|0G|02(!22E
28G'|'!98,f8'%P!8I80PqEE88O'E'f2EI'|PE!>!08E|'8P
EP89OO0

PL/pgSQL
Ee#2(XE('|P80qE, 8EOP2'qE~e!'!9G-EeP8q89,EP!0
2


' 

8!9 2E0 9E! ~'0h,~'P'|'G|9E, 9

Panormica

8,P>0'R,-88'! |8IEe#EP/G9EPL Eu'|2E0E,O8E~| PP'


2E

EE88!! EI 9E| 'P|qhEP 8'G'|9,q8UE~EPfE,2|0P!

EE8'' ' E',q PE'~>P

|8!9E 9Ef8 ,|9,PP'|2E!>(8


|8-9,8,q',e0'EP8E|'8,qP,EE','cE| ',|X',e,E8,O!

EE88E|'8/E!8P'-E,!RU8P0

!9 '#8 E!0



8P!9,8o''G8 EeEP#(|''/9 9L8oU9E| ',|IuEPE8 %EG


PP8o'|!9E O',E P'|~''|0|u'h~'G~h2/2E/'h9E|O', '|2P 8/EP
E|%E'' !',fO8PP20 ,8IEP8E '8he'8|9'E 8XE,fPG|~>8,f8I''G8
G8'|0( 9 E('X9E|O',f8!9L!P8hP8(EOGP'u8(E|X9E| 'PE,-~0
8oE|/OE|O'/(f(e -eE-89|8/9 9!'0|e2Eo!9P' qE|h|ER
P| ', ,'P! 8 89,








E~o0P8-'- E',|-!|0| '-#(E!8-'(cE| ',|,|'|0E0%E


P20 PE8IEe#EP/ EuE'L8I0OE ',uEE8XE!|8X',P!9,eE
# 99E| 'P|/ EE>q# ,E'|9E0!| 'E~'G~2L2E'
!|9|O'I'|8'2'8E'!/EP !'9E| 'PEe#2(e(!'2E|X9E| 'P P
P8'P PR8'O',|2EhO,|0|22'|9| 'I2EhEE8!~0 808!2!P'





E~~('G R~(' PE ',|2E/'G|9(!(E!G8E|0(EGP'0L8


'I P| ',L ,'IP! 889,





OE9E !8/9E|O',|I8/ P|2!'P8/|08|!''8hG8/ ' E'LE~


9'E,88|'EP! E'2E'8O,! PEEE8-EE|'~!eh9E| ',|8e'|PE!>
EE8
!R |X PEe#EP/qEqE,!'P'O9E| ',|e ,GE'~>qEO'OE'/X8E 
E~'E~ 8E|',E8,hE!''|8' 9E| 'P|'



Descripcion
Estructura de PL/pgSQL



8'|PE!>EeEP#(|o!|!'P''oG E E'P8/'oE'P( '2


'8|0'8 EPOqEE8E~!  E'P8'G '8  E! E'qhG' E!OE'



Ee#2(LqE'|2E!>,~'|98/IP',2E







P'PPEEE|O,G



[
label
]
[DECLARE
declarations]
BEGIN
statements
END;
EE8o|PqOE'2E'e|EGL8%!EP2',2EG'/O ',G8o!|0| 'h8o82',
2E2O8P-!EP'PPEIEE8L8!!oE~oP E'0qR~'P'/,9,-P'P2EEo!|0|
' 8e2~'P'e8O'~8eu'o! O',u88O' 'P|e'|' '''L%R'P
E,89 9hO8o2o2E!o'|' '(RP',2E,| 8%2%2Eo!''('o''GEo
'I9E| 'Pf

 !#" "

8e'GE,9|0|O,|9E|8'P!'2|'O8X8 8
# u'%PEEO',uE!|
9|O'8-(eE2(#h',8|E-'P8-89,fE P|0P#E-0~|! ',|
89E| 'P|/, 8'G'|9,8'!E8,|(EE8/'|' '8o''9|! 'P
|hE,0Pq|X!,E,~09|! 'P|f|'E8

Comments

&%

8,0'EP-8 PG|9',-uEeEP#( uEf82E',|- 2 ,G'|oE P


G|0~'GPE! 0'|8X|!9E8X'''||8Po  9O%  PG'|E
P'PP8(8/ PG|0'PI2Eh!/ 0'|8o|!9X2Eh!/| E|0(E 38PP',2E
8eO,G|0'Pf|(EE8h|'8!E%E88-PE',|fEE8h| ~~!E
P'PP8 8 PG|9',h,OE'0',''G'98,8 !0PP'PPE





('
&'

Declaraciones

,8'R~'2'E'- P'EG|-2Eo!EuEuP'P2E%EP',2Eo|o8!
8 'EX'o! ',u8I8 'O',|E2P',2E E9h'e2'#'8I P|0P
8PE '(E/PE ' 2(G2Eq!'9/E(~|2E|9P8PEG9,88,8
E|cE| ',hEeE2(Xe8 'hE0PG0' G|0qO,h','8|9'E 8,E!E'!
f8f8O'~ 'P|q9'|'I!'2E'|9I!'|9 '



*)

 ,

- -."##."0/ >typ12- "(3" 80/ - o) ,54, 6 value /7


E0I8O'~qE|e2'P'f8E/0'EP!fEO'E 83#'e2'P'f8O'~|
O,G-.",.",!2',8|(P8- GP'8#!-!EO'E "/8" 88

name

9"

'!'P| 'P88
8,8E 'EP0'GE/8-0OE ',f!(8/PE
2', E,89O08h0P8I'2'P'I2',
E8h(8R9,8'
R'P'qE ' PG (
8L|E 9|E2',E,E9 9

:"

"

;"

82'PE,89OO0/f2'E8( 8-R2E-'|R, 'I9E| 'Pf(!2E !'P


|8
-8|-2'P'E0'E
| e2E-'-2~'P'0PGGPG|
now
datetime
98I'%''G8%'o9E|O',||2G,G|0uPE%'%9E| 'PLcEI ,GE''8%
P20 P8P

. ]=f87

name class<

8!0%8 '-E|E' ,h'-!9E 9E8q' '!q'|8' 8|38 '!e|-E!E|


9P' '!9|9'%2'0%8E|(PEE9,  8%', GE,e8I'%8'
G8'|0/'|P0 'P8hEE|9EPIEG0,8h8|9E| 'PEE8!-8
9'E,e ,GEE!9,9E'q8IE|0P' PGE'9!8L O!,,O,!EP|8'|9
'8|0'8 8,
!E9'E 8L8'E |8L!o>'8E!|8'P8
( 9%PE ! 8! ~'PeGf8'|02P'(',9'PE9,8-E!E'/8E|E'E
9P'!Ph O'P'h'-E'|%!EE8q 8-('%-',P0P9'PE9,8
'!0G98|(2E-' 8' EE8e!8-E|-2'0('E'8E|2'!9 |/0'|
9'PE9,f8!'0G E0''!





>

8P GE,e8E9'Eh8E'o|',e0'EPq880P!9G |PqE '!'P|


8 'f9P'

name

7

/f

8,P'0PX, !'G''h',9'E,8E'|9'|E|!9E 9E


E8|'E|!#-GE'!' O',|qXPE ' P(EIG|0|E|E'8
'/ 9E2%8(89, GE|h,E 'PG88 q8G'!GL2'!0LEEEo!
EE(X8'9O|9f!'O ',|8 !oEX GEo8P'0( E|E(|(|
E|I8'!' O',|8IE'0EP8 0OE ',f

*)


" 

8hE'
(8
E8'!EEP(!uE!G',XEP 8'G'|0PX ,G
2'!0,!8!9Xe| !'XE,2EI8,!9PEG'!GEP 8'G'|98|
O8|8hEEE 9|!E !P8'!E|P8'9O|9q0P'

name

 .)P/ +  7

( 9

8~qE|eG0,'2'P'''8h8 P8'P, E,!'P'8E|'Eo''8E~8oE~G93


EP!' 'P|PE E|9E|O',f
80,q''!,| !~',f E|8hE0'Eh ,GEE!9X! !I PG/2EG|0(
E| 9E| 'Pf8-|P0 'PX8|0
'~o ,Goh9E| ',|#(|oeEG'0
Ee#2(

" .?

oldname

newname

@

" 

8!0%OGP'|,GPeEeE|2'P' P'!9%E'|8!9% E9'


%(8
|u8!%>| 'EE,E98P0 |,GP8|08EE,O8'G'|0
8!| ||8

Tipos de datos



8,9'E,8E|%R~'P'IEE8u!OE'2E'(8I',-9'E,P!' Pe '!0|0L'
P! 8 89,
'O ',8 8 'O',|q-8E| PG

@,

type

EP!02!9P!02E

variable<

A=

fE

=

class.field<

fE

|PGP8E|e2'P'E#'G|0eE '8q/'eG'!Ge9E| 'P|


variable
2Ef2'!'2' !9G,G|0



P|PGP8E|0P' '!9|0X2'!98,|8
class
0~'PE0

field

< =

qP|,GPI8E

8#E!h8
Eu| PEEe#EP/,PE!2E'f8E|' ',|e8-9'
class.field
PE9,eL'%E~'G~''G8%'o9E| ',|#8E|09,8%'o2'88I'%E''  ',LE|
#EP|PG,h2E9|GPhE|u9P'LO,E9'PE9 |~ eU2E|(9E| 'P|
Ee#2(8 2EE, !/O,|0|'8%E,EG8'I8qR''',O'3(|,~'PE'
8 '8q2EO|~ 2|o!E8 '|0O'~-' 0P'/'- - Ph0~'PE0oh E!
9',8E|'8( PG/O|~
90~'/2E !0EI'Pf89,~8o! | P'2'8E/8'
9E|O',|8, ' 8',f'|9~|,qE !09E| X',q2',
 9O~E(
|EP'/!'8%88|'EPE!|8%'8 '!',|
fE80,G9' 
class.field
G|0II8E9uP GP'X8I0G |,%!2R|E2XP8G(8I'%0P'8E|
#0~'PE0h ,Gh80'Eh0 9

#C B

D

B
< @=



Expressions



,8'e EO!'P|'q!|0| 'q8q#EP/u!,uE,OqE|EhP 2|8


8o0OE ',f8- EO',|2E(EE8 ,|9| ,|0|0 EE8GEo| |
2E'E2'E ',h(0'GEo8q~> E 'P/cPE0GE'PU| E~9'%U809'GU9
8|2E%'GE,'P'E2|''|,8I8q#EP/'8R9'E 'PeR',qO,|!
9|9q8'!9'|0PE'%E'P~ '2
8e!,8e'e E!',|e!2 E'|9~|
G|0 ~> E9|8hE| P|!E'0



FE

"



G

SELECT expression





E|8h,P!9,f !!8' EO',|'e' 'P|e8',e'8|0'EO8Pq8-R'


P'f!PE!0'9E'8,eE,~G0P!X',q2',f'qE'fR~'P'!,!8
P~> E9,u'%G0'(8IE~G9,!PE' E!',|eE!8E|(9E| 'P
Ee#2(L,EE~EE E|I!P'2XPE88E| E|' 2|



>

8q PE,P ',/80'E,| |E,E|'',EE'| 'E8EP!0289'|q'2E|,


9 9,! E|8',h'-'|0~9'PXE',2'PO,|!9|08X80''O|oE|
8'9O|O'|9 UX2E| !0qEP9E|O',|

CREATE FUNCTION logfunc1 (text) RETURNS datetime AS


DECLARE
logtxt ALIAS FOR $1;
BEGIN
INSERT INTO logtable VALUES (logtxt, now);
RETURN now;
END;
LANGUAGE plpgsql;



CREATE FUNCTION logfunc2 (text) RETURNS datetime AS


DECLARE
logtxt ALIAS FOR $1;
curtime datetime;
BEGIN
curtime := now;
INSERT INTO logtable VALUES (logtxt, curtime);
RETURN curtime;
END;
LANGUAGE plpgsql;
8uR !8%',PcE| 99R|''8,fE'| 'E|8EP!02e2 E|8E('
~> E 'Po8 #EXPE'eO8|qU| 8Pf!|'|9~E98fO,GE|9 |88
2EoR GE,008%'PP9P'R0'|%!%0'E(!U#|o8|( P|!0|9%8!o0'EP
E2',E/!XO,|!9|9/!/GE'h9,8'''G8 X',29E| 99P8E~|9
9,8%'%R'8 E0'R8IIE, ! X|2EI8 'f2E!X|'2EIE0|8'
EPPGEP~

H#"

FE

>

I"

8XOo8'PP9E| 9c|''8,8E'|O'88,!9P|(2 E9'Eo8


U| UPE,'2E(E28'REG0'EL8o9 0P#2E( P|0'|(U/ 8|(U| oE~|9
'!'P| 'P '2'P'-', U E9'GU#'|0E9eEeE2(L!'P|0 8
|/0'E9 |,''G|8L(' cE| ',|9 PE09u890'G '|9~(''q'
P|2!'Pf

FE



FE

 J



!9O,GE,2O',8 0'EPq''8IE,2|''8,~'| 'E,8E,!9Pq9E'G


E'G|98I|98q2EqEeE2(!0ER'~e0P0'G|0e9G'|E8E|-8'9O|
'h|0%| (| #9 0/h0PE '9E| ',|IPE/E'/E'|'EOO',U'8
E,e|2!9,e !O8|E!L8%2'#' ',O'-'(G|/8 '9o|0'PG|0o
 9E'G|9' E|' I9PG 8 2E EeEP#('|0E0-!,fR', P 0G|02


K



#P', GE,e8PP'0X!PLE!8PeL E',|q|9RO'!',9'E,8I80,


8OGEP-|82 GP'|0%''G88E|/G'!G( E!'Pf|P/0
o E|9 E|8!O'PeE,O8'G'|0P8'~8PO2EqP!9',|/2|0P/G
8 E|I0P'|



Sentencias

-E'2E'f P!o|O,GE|8U8oP2|'',Ee#2(02 ,G|o!E '


EOEh!|2'8X,P!9,f8IP!880,EI!0OE ',f EO,|!E'9o!E'
9|9 |/82P'2I|'| E89



(!'P| 'P
R!'P| 'P8uE
!O'P

,

2'PoE|R~'P'u GE8E'EGP'!9!

identifier := expression;



#e0'E 8G80E'0|08' EO',| ,'| '8 ,]-9'E8G80


8'2'P'!f'R'P'G9'RE0G | E'',O,|,O'8 9O,G
O|~ 9c,E!8'08L~/GP'E8u'GE'U '9G|9hE,-8'|0E0/8(PP9
O,8%8oEeE2(8PE!|8'P 0'EP8%'2'P' E/'-9E| 'P|I8%|
98h',%0'EPI!8'0|0'I9E|O',|%EX!''E| P0!X2Eh!9GEE8
EP0| ''G|0-,8E '8P80OE ',2|8PP',0'E,E'9E|
O',|8 |98|

L

"

|!'2|O',hEeE|-!' 'P/ PGE'9-/8/P'0%E'-88q| q8


'PE'|0GPE

N,

SELECT expressions INTO target FROM ...;


EE8o!82'!0,E|/2'P'%8E'/E|/''!0/!E8%E,q P
target
Gf8R~'P'X GE/8 8 2'!9,q/E'
#E| E'-%E| ''!0-E2'P'!qE! ,GoP>0'R,',2'P!' 'P|8P
|h8e P'| '8'  0G|0- ,X'-!9E 9E8',,00'2Pf%!-E,8E '~E
,8~> E 'Pf,8'P~ 'R 2f
EE8E ou E'2E'o ''E
O8PI2''8,8P8 'P|E,8|O',|80#2EEEELE!!uE|u!|0| '
#8E -8





9) .?

H) "
 O#"

'!0fE|e2~'2'!E '''G8 P 80'EIP,P'|P 2E88fE!


'|G8'0G|08!E 8888
E Eq PGE,P!E|-'P| ',/|
9|'E
'9





SELECT * INTO myrec FROM EMP WHERE empname = myname;


IF NOT FOUND THEN
RAISE EXCEPTION employee % not found, myname;
END IF;



#'X!'O ',82E'2( E'9''E'!2!P''XE'Gh!/GE2/h', GE,


P>0'R!9,8'f8Gf!8! 9f

8'G|IP0cE| ',
,8u'u9E| 'P|8E|'8E|P!889,uE,!9Pu8RE'R8
RUP~~E,'/9|0P'I9,GI|PG,8 ''GIE|I9E|O',~> E9E| P|
E'0h88 -LU'e8|X'P| ',92E/E('E2XE88 '|9|uE
8q#EP/8EL| !,I2Eh|u'|9!h!P',!E'08P8('I9E|
O',|

PERFORM query



80~> E0-#E8 -
/P!9,E cOo8! 9e!E'9838,'8|0'
query
8 8,Of ,G(R'P''P '!,8e9,8PfG,8,!E!9'0E'8,X'PE~9
,
P'2'|8/8 'I9E| ',

RETURN expression
8I9E|O',9~G'|h#2',8
! 82,'R~IP0OE0,!EE',
expression
8q2',(8RE'0E,(E|G9E|O',|88u2E8o!P 8E|'~2e ,|9,
' |eE(8P',2Eq8GPP||'RE'ecE| ',/!'(| P|0E|e!|0| '
8 , E~'IE~,8 ~> E 'Pf



H"

8 E!',|!E'0|9I!GG,'88 E0P9' GR9/',I0'E,8


RE'9,qE,'cE| ',|9, ,Gh!|8! ~'0(,O(8'f!'P| 'P|

(P,~0|8('I~> E 'P/G|!!>

.9#2E
RQ Q QQ Q Q QQ Q Q QQ Q QSQQ Q QSQQ QSQ

-,G%|/'|8' 8'P ~>G'P |0'P!|E|/!|0| '/f


EE8f|R'|GR!>8!'!9Ge82'!088,!9P

ST

"
U :"V oH"
"9. $ "92QSQ Q QQ Q Q QQ Q Q QQ Q Q QQ Q QSQQW o2E88f|P
XY-,GEL P,,'2'|

-8
9
E|I~0

RAISE level
for [,
identifier [...]];

Q Q QQ Q Q QQ Q Q QQ Q Q QQ Q QSQQ QSQ QQ QSQ QQSQ Q QQ Q Q QQ Q Q QQ Q Q QSQQ QSQ QQSQ Q QQ Q Q QQ Q Q QQ Q Q QQ Q QSQQeo|
9IEc,G9,[Z
<8\ !E!O,G!'0EO',/E~'PEP!9 !EEE|0'G''8E|9'E' 8P,!!
E8,-E,O,G8,-E,'P'-|'R'!PGo
8 80P8 ,8E 'P|9S
" (u9!O'P ,2'!0(8'IP-880PfX'
|2'I'%E''  ',E,O''|9EX]H-E89 :" 9! '2-,2'!0h8'%P!
8 80PfhPP9'9|! 'P|
-,|8' 'P|

IF expression THEN
statements
[ELSE
statements]
END IF;

expression

8Po82P'2ER',2EhEG|PIEE8h!8R98uE

9'E/PP,'|

8E '
$

X2'Pf0'EPq8 PE '





[
label
]
LOOP
statements
END LOOP;



#09%8IEuPE 'I| P|8' ',|RPE%|%8I!f0G'|88I9,~G% E'' '9


G8'|0 E|!|0| '
9!8I0'2E0PO',|PEE8 !E!8hE,'q!|
9| '
c8P0PqPEO'e|'8EP!EI!E 'E P|'2P8PPE '2EI|
8 0~G'R~!2

]H

]^





[
label
]
WHILE expression LOOP
statements
END LOOP;
#99ELE ' P|8UO',|2Euu0OE0G'|0~/'2'E ',8
I '9|

pression



ex-



[
label
]
FOR name IN [ REVERSE ]
express .. expression LOOP
statements
END LOOP;
#90/8%EPE 'o2E(!%'9~(,PoEG|PEo2'P-|9P8o2~'P'
!I E9,G0' G|0 ,u20'EX|0, '!0I,'8|0h8,PEOU2
name
8e8,- E!'P|8L|''G'0o'|9',L!EE~',82~R2!PGR'E,
,'h E|8/!|9I#PEO'PE#E!h8 ''0 'PXq!'G







label



FOR record | row IN select_clause LOOP


statements
END LOOP;
82'!9%%E'-!'2|-9,8'8'!8U9|08q'- 'EE'-8e!' 'P|
'!|9|O'X!h~> E0XE~X EhE|E/''8PE 'h(9G'| PE|
|9| 'I
9,'IE'9'GE'!'P|8If E !'P' 8!E f8PPE '2

]H



EXIT [ label ] [ WHEN expression ];


#2|'| 'E2
0~'|(R'XG-'|0|P!%~> E0('o!|9|OU
label
2Eq'PEe- 8((P!q'| 'E2
|8q8'-9'2E98PE ' 0E
label
8I,9X8IG2,f|'282E 'I'|8' 8hI0G'|PO,|0,R!IE!%'
|9| 'IE8!E f8# 8#PEO'/P'PPE ,~E,|8'|02

"



"

Procedimientos desencadenados

Ee#2(GEE8IfE!8E8E|'E,O8'G'|0Pq8!| 8|8PqEPR|
9,E0Ph  P'P8 88
- 9 |'PE82EE|9E| 'P||E

!'PEG|0P!h82E'2E9'E//( q

a) "9  :"

U2E|,-80''!EOUEO,8EP!02 E|8!E!u9E| 'P|-O,GEP 


8'G'|0P8!| E|8,
8E'G'EP0,8'!E,|G8'PE|-2~'2'!E ''-2Eo!o LE0PG0' 
G|0 ',eP',2EqEGPP|'RPE 'I! 'P8 8O'~ 'Pf!P

^,

"

7

7

P'ELEo80 /f P-E|h2'#'(PEoG|0'|G'(E'h8o'(|E2/P!
8 80Pf'q,E 'P| #Ee E(8|'P8!| 8|,ef
/E

*#"

P'EE80X /f #E|%R~'P'PEIG|9'|'%E'%8'P!I880P
R'0IPE~ ',| Eoq#o88|88',e8|O8|8P

! "?
",GP8X9'8807|oE|R~'P'X2EO,|0'||PGP8, 8

'G'|9/8!| 8|8(2E!|I 9'28

! $  "

 F7

& )

)288fU

P'Eu8(80u0 9 28R E|h8(  038E0'Eu E 2(EEuU


8E|E'|8(8 'I88|' ',L8,EP |'G'|0X8!| 8|

!8 P

 F7

?  "8U8E|8'|88'

P'E8800 9 #E|o 8|o8U ]2U,8


8E|' 'P8,E, 'G'|9XE!| 8|E

!(

 7

b"

P'E8X809 0 8| 8|8h 88U| 8o888GUo88888|PE|,


8' 'I,E 'PE'P8 |8'!E~8/P, |'G'|9h8!| 8|

!8c

7 (

P'E/E 80oP'  c8P>0/E-'I0P'2E|IE,R, 8o''|2,O ',8


EP |'G'|0X8!| 8|

Sc

!8".?

7

P'E8I80X|,GP #2|,GP%8I'%0P'oPE%|oEP2, 8X'% 9'2 ',L8


EP |'G'|0X8!| 8|

! "oH%

7

P'Eh8I80h|0 P|EGX8PEG|9,88h2E, 'G'|98|O


8|8('I!|0| ' -f8
%8I

>

!(^ P - /

^!

 7
"

U


H!%E

P'EI880G0~'qE9 0 O',P8G|9,8'e!|9| ' -f88h8

ed

8U|8'O PG'|E, P(EE8e88%hc,G8e E!'Pf c|8' |


RU'8Pf8'EPIE2',
8e

"



8u!PE|8'EP0|u882P'2
EGE|%E'(P'0X2E P|0|P( 
9G|9o'h!9E 9EX8('/9P'hPE/|XEP2,OEL'hO0'2 'P8, 8'G'R9
8!| ||8P8PhEP 8UG'|9,X8| 8|8PX 9'2|PE,( 288 8P
82,'R'GEE2',
88!'E,8EO'R'| E9 08,/E, 8'G'|0,
8!| ||8,  9'2|P E, 8 2('|8' |P!0Pe8o, 8'G'|9,E!|
8O|8Pf2E-|h'' 'I,E 'P!,P'E'I 0E E|8(-82E'2
8e
8 E'2E'I,9 !P'LE'LP'!982E'0!E!9'0E2'LE''|~08
9E''8R8qE,!'P'GE'2','|E'R'8E'q8'O0|98|!R9| '

X82,'R~',!X P|!0E'E||E2IE'hP'!9(X82,'R~'|

K"

)



 )

"

" 

Excepciones



EP!02|h8'!E,|I8 EGP8'X8 G|~>X8 E ',|qGEX'P,~| E|


8%|''|P0,E9'G'8P8o~> E9,8 '8/2E-E| |9| ' |(88e
EP !8'/9|! 'PuO,GE'0/-PP98(R'!0G/2E'2%|'E'| 'E
EE,O!''PE'|0 P|!E'98 'IE''  'P ''|02
8E,!'2''|0,8E '~!eXG |'!Go8ePE 89 0 E|8%!E 8e!9
E' 2EL|/EP!'P'/!P%2 |O8!| ''8 fP,~09E,
8XO,|2',8|98P''8EE~,8EE|0 8,9|0EE~,8X|''!'!!
%P!'P'PE'P!h8h80PI|22E88 E 08'| ,|!'O9|9|E, '
2E 2,'RIE|'2,8 ~> E 'P!EE',/O,|0'|E~> E0|8h ,G|8,qEE8
PPGEf9,8%'%P!%8I89, G'| '8!E|PE%!EE8'%|2'f'%'|9PG 'P
L'E''  'P ''|0E'L9|! O',Pu!2'P,~08,E,'2EL O '8
!|9'Eh,'|0|9|8E'IP~O',f



hg

8

EPe9,8!9,P' E|'OL2E(| %8q#EP/ E|8!(E,8E oEGP,~08o~> E


'P8E|0 'I~> E 'P8E|I9E| 'PhE, 8'G'|0(8'~8PfRR'G|
!!0q8EEE 'P,|'22o
%'|8' |8XP 9E| ',u8,|89|EG/8
''|IX0'Eh8-|9| '||I!E 8'8/#P~





Ejemplos
#e'| 'EPE|EP 9E| 'P|qE~-8G,!9'(cO'2E f! 'P'9E| ',|f
Ee#2(e8~h0GE'PIG ,GE'~>P!R8EPPG|P EP'h ,|E'0-0!
8 P!',LE Ee#2(e
89''8,'P,u'u|,u8!O'P'cE| ',|/Ee#2( (G|08
'O,G''''G'289 0G8h'%9E| 'P|% 88
- 9
|8h!E|

8O|8h0 98I ,G'''%!'GE''|0'P-8hE| E|''0~8P8


8EE'' |0E,|L88RPu'|29'8|# E!9G,X0~P!0|8 E|



 j



i) "9  :"



Y?

'0~|9'2IG'P|02 '|0~f0|9,8EE''2EI'O,G'''q|O'''e PGh'P


~>GE',!'P8'|9 -E'2E'E!,'8 ',he0qEPP'q(cE0E~2!'P|8qEP!0
2G|9|8' ,GE0'2'''EL P!0

Algunas funciones sencillas en PL/pgSQL



8f8,e9E|OUP|q!'2E'|0!,L' |9' !8q P|0~E9'8f2EI!2OER8


!9E8'GP,'|PE!> /

CREATE FUNCTION add_one (int4) RETURNS int4 AS


BEGIN
RETURN $1 + 1;
END;
LANGUAGE plpgsql;

CREATE FUNCTION concat_text (text, text) RETURNS text AS


BEGIN
RETURN $1 || $2;
END;
LANGUAGE plpgsql;

Funciones PL/pgSQL para tipos compuestos

o |E2,098| ',|Ee#EP/u0|8!L2E'2'|0'|PE!> /

CREATE FUNCTION c_overpaid (EMP, int4) RETURNS bool AS


DECLARE
emprec ALIAS FOR $1;
sallim ALIAS FOR $2;
BEGIN
IF emprec.salary ISNULL THEN
RETURN f;
END IF;
RETURN emprec.salary > sallim;
END;
LANGUAGE plpgsql;

Procedimientos desencadenados en PL/pgSQL

8!9,E,O8'G'|0P8|O8|8P!PE/PE 82-2Eee'|!9% 9E


'' %EE'o'o92'#!'|O'EP/R|,GP%82EE''ocO|o|P| 2E
2E! E,EP ',|IE|PGP8 GE'8/X2E#!''h9U|ER'PE,'0'2

f=

CREATE TABLE emp (


empname text,
salary int4,
last_date datetime,
last_user name);
CREATE FUNCTION emp_stamp () RETURNS OPAQUE AS
BEGIN

- Check that empname and salary are given


IF NEW.empname ISNULL THEN
RAISE EXCEPTION empname cannot be NULL value;
END IF;
IF NEW.salary ISNULL THEN
RAISE EXCEPTION % cannot have NULL salary, NEW.empname;
END IF;
- Who works for us when she must pay for?
IF NEW.salary < 0 THEN
RAISE EXCEPTION % cannot have a negative salary, NEW.empname;
END IF;
- Remember who changed the payroll when
NEW.last_date := now;
NEW.last_user := getpgusername();
RETURN NEW;
END;
LANGUAGE plpgsql;
CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
FOR EACH ROW EXECUTE PROCEDURE emp_stamp();

PL/Tcl
Ee# 2Eu'|2E!>EP 8EPERP!0P8P!q8I89,E,022EE
G'9X8E!EX E~X' O ', 8X9E|O',|EP 8'G'|9,%8!| 8|,
E,2|0,


' 

8!9 2E0 9E! ~'0h,~'P'|'G|9E, 9

Introduccin

-2 E0

Ee# EP9 /'XGP,~U8(' E '888h2Eh8'!EP|h'|2E!>


'PE|0'O ',|

8-!9' 'P|-2E| ,G2E(0,8L!(0OE0/GEGPEG'|9E0o o8G


8|8EO'E%>EPu8oP8|-8( 'P,'Lo8'P|8%E|EP  ,E|-E
 f%Pe8I80,e%9 eE# EE~|2'G|!!>G8'|9I',Pc
|X9,~8 O''|9~',~'E88,E,O/8P!9',L8 '2E 80P!
|8PP0| !X2|'2R8R!'!9Go,E9'2,P0',EG'!P-82'8|9'E 
8,8E!E'h8-8,!9P! PG/qP!'P' /!oU E'2E'EE~'/8 P!f8
80Pf!'L~'2''P'PEE8-E!0'|PE!>2





I"

8e,9e!9' O',|O'|9| 2Eq'PEP 8'G'|9, |E8(E!~!E~e 


9E|O',|8 R98o''8IE|E2,e0'EP8 89,
8,,09,q ,GE9'8,fE20P8-U'G8Ee #-O,|!9EPE9,G0'O
G|0 /-'|0'8' 0P'/E-P'P'',9 f88,!9P!!##!PE,98O8
|I!'8hE '8 8(8E|9-'O,|E2E 'PR,EP 8'G'|9(8'|!9'O',f

 

Descripcin
Funciones de Postgres y nombres de procedimientos Tcl

8GEP!02!2EG'!G|PGP/8o98| ',EE8(E!!/E/8'9O|99E| 'P|


!'GE2EIP|EGh8IPEG|0PqX!Ee9'PqLE'0'|9,O8!0XEE8, !'P
| P E'O0Rf P',qRPGPf8 E, 8'G'|0, E,cOO'IG'!G 8 'P'''
8X/8e '',|PGP8E, 8'G'|0, '|9|,O,|0'|X'8R9'E 8P
8-,>9/8 'IE'I8-EP 8UG'|9,fE EP ,GXE98 !Ef|PGPoU8'9
|9-R~!',| 9EPq|EGL8%2EG|9,!8oE|hG'!Gh9E| 'P8%EP!02
EE88'9|9f0GP E

g

>g 



G

Definiendo funciones en PL/Tcl

E~ E|98| ',,'|PE!>8q# '!E''|0 '

CREATE FUNCTION funcname


argumen) RETURNS
returntype AS
# PL/Tcl function body
LANGUAGE pltcl;
-E|8!('|2,O(!9/cE| ',GGE|/ ,|E'0P', 2EG|0,!(8 PG2~'
P'
 8~G8E, 8'G'|0 o!'|8|9E|O',8XG 'G2E
82E'2PG2,8-8P2'P'| !' E8#!'PE'|9IG,8

JC

@,

CREATE FUNCTION tcl_max (int4, int4) RETURNS int4 AS


if {$1 > $2} {return $1}
return $2
LANGUAGE pltcl;
(PEG|0P8 0'E( PGEE!0h!-E,O8'G'|0/ ,GhG0~' fE- 8P
|PGP8h'G|9,o 'G0'!,'Po|,GP%8h',o0~'PE0P%80'E PG
EE!9 Eh0'P80%8q'-8'- 9E0'|e2',
88O|(E3 /' G0'
e2E80GE'o2E 8E|e'9E| 'P,2E' 92E| E|0~-X' |9'PE
8,OEG|9 ',E EP!02!9! ~'0EeO

lW

"


X

CREATE FUNCTION overpaid_2 (EMP) RETURNS bool AS


if {200000.0 < $1(salary)} {
return "t"
}
if {$1(age) < 30 && 100000.0 < $1(salary)} {
return "t"
}
return "f"
LANGUAGE pltcl;

Datos Globales en PL/Tcl



RO9!E ''G|0eOE|8(!eE!X'9E| 'P|# 22E-!8!O'P'G8


'|0f E9'9| 'PE|PoE9,P'PP'%2EX!XG|9|P|9h8,%''G8I

>

EP |'G'|0,8,'PEP 8'GU|9,Ee ~> E9EPEPEE/P 2|hO,GE


9GG'!G'|9~9(Eo 8~/2E8e/EP0Pqh',IE,O8'G'|0PEe#
8(9O0P ! E|8',PE|XG9'h2E8/8'!EP|'P'hE/ E/E|8(',EP 8'
G'|0P-o9 8'oP8uUEE23OER|,GPP'PPR8%o2'P'I-2|PGP
'|9~|/!'2|EhE,P, 8'G'|9,X#|,GP'P , %L



Procedimientos desencadenados en PL/Tcl

8,EP 'G'|0,%8!| 8R8P!h8E|EP!9PIO,GG9E| 'P|I!'


2EG|9/X2E8RE'R80'Eh,E
'XG'!GX,'|2E0EeO

m=

8-'|c,G 'P820P8EP 8'G'|9,f8!| 8O|8,f-E!X EEo8


EP |'G'|0X'!'2E'|02~'2'

$TG_name

H#%

E|,GP8EP E'G'|9I8'!E,E!9,G8'e!|0| ' -88h8


%8

$TG_relid



E 9
O8

8/,>9u8/'9P'hPEX,2P XE8|O8|G'|9L|X8/ '|2P

$TG_relatts
|I''!0 #8 UP|PGP8 GE,f8 '9P'!E 8'8 8 E'G|0
8 ''!92 '!8!9/ |O EI2E,PE!OE|PGP8'G|0X'''!9
O,',88L qU'!O|u8REURG'!G|EGE,!'9'2P PG|
|8E, | 2EX',oOGEPo0 |EG~EP%  9',PG8!'!9G
UE 09'PE9



$TG_when

.8)P/f.)P88P8E|8'|8L8|!EOL8o'/''G8(8!| 

8/ 8|
8||02

$TG_level

8% 8|f
O8||92

$TG_op

"

? "

,q8 ,8E|8'|8X82E !8I'%''GEo8!|

8 8| #8#
8!| |||02

Eo8ho8E8888|8'|8o8#E !/8-'I''G8

$NEW
|XG9'X2Eh P|0'|X',%R'P8/'E'E/'R8RX0P'XEX 'P|
Eo|h2 ' EIo8888e

"8e
$OLD

|uG9'u2EL P|0'|L',X2',/8'E'u8'u2'~>9P'uE~ O',|


Eo-8ho88888h2 '~ 8

K"

$GD
8IG0~'IE80Pf8 08/2',P' PG/E!O'PIGf8'|9P

$args
|oU'0( R8I',PEG|9,82E, 8'G'|0 PG!I8uu'%!|0| '
-E-8u8
%8 8,ePEG|9,e!,u0GP  OU2'q ,G

OE~E(8#E, 8'G'|0

H#!

G

8L2',8RE'9hPE, 8'G'|0hE!| 8O|8hqE|8-'q 8O| .


. 9,8|/''0h8RE'0oEPe'/,8 ULP9#R2'Pq8RE'9- . P'
P~O',%|,~GP8q|8!| 8|EP 8'G'|9 8e Eo-8f#oE8888
9|8~'EP~#/P2'G|0 . c'8' P!9,8E, !P(8!ROE||P/2E
!8~'G!''| ',G|0G',E 'PfP8''!08uU~P0'u8' LEeO2E
82E'2%E|(E'/G,8'E 8(RP!9,q8%, 8'G'|9,-8!| ||8,-2Eo!
'|!98(G'EPE('h88(

9!P'LE #8e 8o88 |u2E


8 'q2E(0P8!0L!,'L0'|(!|0'8OE|8L8!| |||0( 8 P( 2(
8

#"

+ " 

. $

:"

l"
D )

0)

(2E|EuE2E |~>G'L8E,O8'G'|0E!| 8O|82Eo9E%/EuR


'P|98XE|9P'!PE'I'LE'!08|EGG8X 9E''O',|2E!|
''8 !u8'R,8~u Eu|E28''|!088f2',%h'|' '''8
8
'| G|08 8 P~O',8  0E''O',

^,

CREATE FUNCTION trigfunc_modcount() RETURNS OPAQUE AS


switch $TG_op {
INSERT {
set NEW($1) 0
}
UPDATE {
set NEW($1) $OLD($1)
incr NEW($1)
}
default {
return OK
}
}
return [array get NEW]
LANGUAGE pltcl;
CREATE TABLE mytab (num int4, modcnt int4, desc text);
CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab
FOR EACH ROW EXECUTE PROCEDURE trigfunc_modcount(modcnt);

Acceso a bases de datos desde PL/Tcl

8'PE'|0,8|qEG'9L 8Of%E|%P!8I80Pq8!8P'|9~',8IE
EP |'G'|0XEe

k,

',

level msg

`"

 
D

H"

8|XE G|!!>X8h2'!08,%EP!'P'|'R'%!P ( -E o |8
( ,(8o
o PG/'I9E|O',U',299#8 /

2E,9



O" :#"

string

EE'' L0P8%'%E~' ',|o8XE| ,G'''L8X'P'|20'8|o2~U


o
E!L E|8 'X2~'P'h!LE!'GOE|u' 8|8'O,|!E'9

G 

G

G 

|2'8uU!E  OU!E EE9|  '''!08L2'P/8   EU


-,|'8G,qE|I 8|I8 ,|E'0 PGX0

,

"SELECT $val AS ret"

nEP!|UJnO8!08o'EPo'/ 8O|/E% ,|

(,|8'/2'#'%O2U2'PO,|0'|
E'0

"SELECT doesnt AS ret"

G 

G

2EEPE8 E/~,RE|''8,8E|9'q~> E 'P(8fE   IE EE3


(P' ,|9|

"SELECT doesnt AS ret"


h|8-!O'P'E 'I!'2E'|9IG|~

"SELECT [ quote $val ] AS ret"

G  Ho

!E   9O,E|

oUo 9~

nam que loop-body

8'Ge|''|PE'|'EO8PPE0'G'8,#0 E0PEe' ,|E'0|82',


PE ',|9 ,8|f'8' hU!E   EG 'GG|EGGEE'%2EX|8h
EP !8qP' P|!E'9R

G 

S

#2'( ,|E'0/E|(!|0| '/88 -!'| '8P%R EE82',E 'P|


cEL 8~X8|9| 'e R!'G''%E|o!|9|O'o|0' 'E89!%R 8%E~
O8(E'h!'O ',|8PL!( PGE,9h ,Gu!/!EP9 P|0'|E|P8P
RUP-8%'P GE, ' 'P|8, !( P', GG|,GP 8(2~UP'!P ,G
|PGPf8 ,'EG|o!'

&

spi_exec "SELECT count(*) AS cnt FROM pg_proc"



EP|8'2'P' |P|EGh8E'qPO0'PP8!'!9G%U E, 3


#!u'|O'EP',E 'P 9~O'P2',/8uO,'EG|,'G |8,X'
G9'!,O'0'2''G8|GU'|8 8LEPoq|,GPu8L'G P'EG|
'E28 2'P'f'|8'2'8E'



spi_exec -array C "SELECT * FROM pg_class" {


elog DEBUG "have table $C(relname)"
}


#



'GE~'G'EhG|!!>-8eP'0o(
E 8E|8'E'8E O'

8|2'Pe8RE'0EPe!E  ||EG8oE' 9 9EPe'h ,|E'0P


-| E|9'2'P'2',P,# EP !!f

G 

G

!E EOE

query typelist

=h

E
8
ooE|O,|!E'9E 8|~> EO',E,0'P~8fEE,O(8'!
9'|08R !XE P%2EoL! !P'oO,|!E'9oE2'0%e80,G9' G|9
O,E'8 # ,|9 0h8-GGP'I8-GPP|'2EP'/0|0P|/ 9E'G|0
|'|2E|9,~G8-E'|'E E| ,|E'0!'PE8'R



#'GO,|!E'9| u9RO'G2EG|9,',|,G28u'PX9'E,|8
'|O'E'!9PG%8''!9%O3E22',82E'0XE, EE#q2'E|9'E
O8P8-'I P|!E'92E-E~ 'fU2E'|0''G8U!E   E3 !
U!E   EE~E0GE'

G

G 

 M

G 

P 

G  Ho

oUo 9|E'' esquvalueoHo loop-body o


#> E9-E| P|!E'0EE~8-XU!EG
 E3 PhE!0'9E 'RX8e2'P'8
RUP ,E 'P|U9 PE|0'X8' XG
   E8G  'GG|EG8hE'%2E

!E   9O,E|

oUo 9~

nam

EP !~'O,|!E'9|

n n


822',,E 'P|REU9|E''!PeE|% 8|8IEO',e8I',|P'9E P8I'


'|8' IU!E   EP 2',f!P
8e#I'|8' EP 0| O0G|0
'I'P|P'088#|EGh8-R',

G 



8"

G

8'8|0'8 EP|8f'q ,|E'0E'8|0'8 8,R82E'0IE,'q''G8qqE EE3

G
G 



#-E! E| ''!9E-0'EP U!E EEU|8E!!E| ''0 8 O0


G|9'IG'!GI',|2'0EL   E8 8-' P|!E'9R#'I''0E-0'EP
8 U!E E!9R U!02EG|9(EE8 ,G'0'~!2

G



G 

#'GO,|!E'9GX8|G!|0| 'G#E8 -,'PEG!u|E!O'0EU!E  


P E~'IEP EE(8,PE ' X'q2'#'8',q GE,' O',|8,

,

2E#80GE'h8E|I9E| ',LEe #2EE!E| P|!E'0E'|'E 8

CREATE FUNCTION t1_count(int4, int4) RETURNS int4 AS


if {![ info exists GD(plan) ]} {
# prepare the saved plan on the first call
set GD(plan) [ spi_prepare \\
"SELECT count(*) AS cnt FROM t1 WHERE num
int4 ]
}
spi_execp -count 1 $GD(plan) [ list $1 $2 ]
return $cnt
LANGUAGE pltcl;

= \\$1 AND num

"P0! 2E EE|I8 'P~'|29'8f2E #8PR|8 !8PP'8


h'- P|!E'9-2EO-'-9E| 'P|88%2Ee|''8,EE'| 'EEP !!9
P~8-E-8;) "9c .
" (|9X8I'% 8|%8I'% P|!E'0(2EI!E!
(U!EG
 EE3R82|PeEu'P| + E(G q'/E,' ',G8|~G9,#
2'92E + !-E!0'9E'8(EP2'P888%X'-E'G ''G8 -'-cE| ',f
?P8E',qh'I,EU8 ,|P '8,
Ee |0'|%E|/ O0O~U0' /!EO'REoO,!-2Eo!E 8~~G|02f
O,|,OLEPh9P' GP'  8UE'0 GP8E'f UE'0 GP89E| !3, '!0|
GP8E'U8! ,|P '8, #EIE,|'|0E0'|G8'9G|99Eh  ',f
-8q22Eq!e'|R, EhE,O'G'|0o 8! P|, '8,E,O8'G'|0%U8
,|P '8,P PG,P8,EP!2PEP 8'G'|9Xu E!9',u0%8E|'8
E|(8e!,GPE8',~,OEq!9,GPEE'/OP|( E|E% | !'
8~X|P'''0 0h PGE,9G'|9,P!9, 8h''G88hEe 8|8h
O,GE''8/ P'I,E 'P9oE, -
 EE/u|P'''08
.

.n



Yn

G

  "

G



" . p"


'!0u! ~'9 8,E,~0o~oG|0|-9P'eREP8' 0P'8%GP


8E'PE ,8'2%9E|0e8EeOU'| 'EP|8o ,8'P(9E|0e8G,8E'oU8
O,|,O'8,UP8 |8 !'|0'8/'|' ''G|02

ST

= \\

 _

Captulo 44. Funciones

c|9,~GO',9R9 9E| 'P|q''G8fE,E!E~'

Nota: Esta seccin necesita ser escrita. Voluntarios?

Sc

Captulo 45. Objetos Grandes


8XE,02',f2'PE-',E9,! 'G |/0EE'f('0EE''|8'2'8E'
|hEE8P!2'fEP'|E 80P PGX#9G |h8 E|2'|8 80P
%8
 PP9|'UG'9G 'G89G |8X8 R'PI8XE80Go'0'R
G|0IE2E |OE%!PE,92'O|G'|08I2'Pq0PG' ,GP~|8!
EP!02,E,O',|E|'|0c-E~,09,2|88!9-'|0~9E,E, ',| E
 !/,~'|9Eh!|'2PqEI2E''Pq89,8#E!E~'/2EI|!'8h8O'~|,
PG80'E P~|82#8!9LO ',8! ~'P''G'G|0 'PUh'|09OO/8
'|PE!> 8 P|!E'0XE,2G ',EI'P80P8 ,>9,eP|8fEP!02

t L

Nota Histrica

8C


/'P'|'G|0qEP!02 | ,E,~0P 0'GE'G|0 'PRu0|8X8,>9,


2|8 O,G( |'R,f 0|, EP!9P! PG/!|'2P 9~|,fO,|0,'8,fEP
EP!02!/ PG/80Pf'G |8P8|9(8-'IP8-E9,f8,!9P8!9( E!
PIP~ ,|cE!',L|9 ',eE!E'P -,Gh!E'08,,'X!!PP9L,09,eP~|
88 PG89,'GO|,8|9I8f'e2E80PE,!9P/E,!9P/e3 E
8|8ofGf'|9(#O !,E,EP ',|E|I'|0P~'88-E9,fGf!9' 9|8,
~,||'!0P' !%0!2EG%8'G |G'|0h!I'X8|PG'|%(09,2|
8f'|29'8, 9'''3G,e!0! O','P ~G'|,,>0,eP~|Eq'|20'8P
h,>9,eP|8f9,~G'0||8 |8,|,qI'G'G% ,R

u,





G

#

Caractersticas de la Implementacin

8n

8I'GE'G|9O',8P>0Pe2|8f'|29'EPe!E~'PqP>0PP|8f 9,
, u'GO|(',I0PP-G0EE'-8%'/P!%8(80P U|8'O 899OoP|9'
EPE8E'8f8 EGo89,oO, 9o E|8o'' !P8e' 0E
~h '9EI'9,~',



In





Interfaces

8f|~G'|0PE8,!9PEPE, 'P|I~  O8',q,09,eP~|8!9|9


PP 2| ,GE9EcE| ',|88|'EqE,f2E!E'X PG,9P|0|
PGE98E|E''  ',2ELE9'''L'u'|9~9E!L8! ~'PG/P!0#E
'PfE!E'P9G''''EP PEP!02 | EP!02(L9'| E|E2/ ,0EE9(8
9E|O',|2EE,EP ',|E|'|9~9 Gq ,||02

^C

Nota: Toda manipulacin de objetos grandes debe ocurrir dentro de una transaccin
SQL. Este requerimiento es obligatorio a partir de Postgres v6.5, a pesar que en versiones anteriores era un requerimiento implcito, e ignorarlo resultar en un comportamiento
impredecible.

8-'|99-8,>9,f2|8XE,02f!9E' |8-X9PG E '8-' '|9


9e8'!0G-8qO|'2,8 | ,X9E| 'P||',2O,G

open(2) read(2)

0 8e9E|O',|e8I8!E'''G%!9eE9'|eEPP0
write(2) lseek(2)
|8!,'/',E9,8'|9 EEX,>9(P~|E2E,~>GE',! '!98h9'E(8ePP
09P|8q''GE9P0 !,~ePEe'G |e9P0PP9'88q  |9,| EE8
8E|'/E|X9E| ',''G8hPPh,P(',80,I8/9,9 !PE!| 8~Ph88
G'~0O''|9',eEoE|/9,9,P~9U#89G'|qRO,',8%'/PP(PEoE

G



m



F



!!,2E|EP'|!8# P|0|'8X0,9,8,,09XP|8 |/| !'9!EE!0h


Eh E90 |!'2E' G'|8E,8' 9E| ',hPP|38,f,>9,P~|8EE8(
 '8,f8!8cE| ',| Pf8'|G'OG|9(E,P~GO''|98P!
889,-|'8,- PG'o''P'|EP!02-E,E, ',|(EuO,>E808%E0'| 2E
!PE,9'I9E' 0E~!O'9EO'~ hE,' ',|G'|0X,00,eP~|E





Creando un Objeto Grande


8IE9'|

Oid lo_creat(PGconn *conexion, int modo)


OE|E2P>0P~|E2
hE|G! 8P'0X2Eu8! '28'0'|0P
modo
0~'PE0Pf8#|ER/P>0!8f ,|0|0q!'GP,'0 f''!98f2E#!| E|08
E|'8f
8,0'Eh8- O(9' 9E!
$PGROOT/src/backend/libpq/libpq-fs.h
~'0E~hGP,!R-O,|9,'9 0E|8/E|IP~O',( |0-'PP'9
E(
9' 9E
c8 9! '9EEP>0P~|E(8P(|'R~! h8 '0P!
2~!',||'!0P' 8G'!Go8P(G,2qE~',8' G|0E|9P'e8q!|'2
!E ' %|9,| RP'
(
8PIE9'''~!28,8' ' 'eP'08I,E
P!>L8/'/G!O~h ,|0'08P EGL8/G|~>8,e8('GO|G'|0u8,|8
8PI!'8'fR,>0P~|E28~%,9,-'0'P-PE%|! 8P'O!0P-P'08P
~h!0'GEX 8,O,G|8,f'|8' 8PGP!>( XE,09(2|8
9'|R~0'8,

^" P 
:%

.#" P  H

%

A" P  ^ $  P


Y

8

Y,

inv_oid = lo_creat(INV_READ|INV_WRITE|INV_ARCHIVE);

Importando un Objeto Grande


E~'GE,98EhO|'2%8

"
]G PGoEX,>9oP~|8EE8q''G8-' 9E| ',

Oid lo_import(PGconn *conexion, const char *nombre_de_archivo)


 '8 ('h80/L|,GPo8O|'2
nombre_de_archivo
E,~08(O,GX,09/2|82

Exportando un Objeto Grande



E~ EP0IEP>0
9E|O',

P~|E8|0EE |'R8

G

| X2E(!('G

"9#]8EE8''%'

int lo_export(PGconn *conexion, Oid lobjId, const char *nombre_de_archivo)


8,2EG|9


"9]

!E 'EO2('8PP>02|8% E,~0P2EG|9


I

lobjId '|8' 'IE0h|,GP8,!|'2


nombre_de_archivo

Abriendo un Objeto Grande Existente



E~ P'E,>0XP~|8 '!9|9''GI'9E|O',

int lo_open(PGconn *conexion, Oid lobjId, int modo)

8|PEG|0
!EO'E /('8P>0LP|8(2EooP~'P8P P'0E
lobjId
,|9,'u!2R,>9!PE' 9E%
f8o9#! '9EohGPP
modo
P>0XP~|E |XEEE P'~!|08 O!2
8RE'R-EL8 'E9,8
lo_open
P>0P|8E~!E!EP!0'P%


lo_read lo_write lo_lseek lo_tell

#" P 

lo_close

Escribiendo Datos en un Objeto Grande


8IE9'|

int lo_write(PGconn *conexion, int fd, const char *buf, size_t largo)
! ~'P
PP9q8!8
2,>9h2|8
8P2EG|9
8P'X!E
largo
buf
fd
fd
2'G|08RE'9E,E| ''G8
o28'Re EGo8qP20! ~'0,
lo_open
9 9'2G|02!8 (8~,9,2'P8 9,~|/|P9'2



Leyendo Datos desde un Objeto Grande


8IE9'|

int lo_read(PGconn *conexion, int fd, char *buf, size_t largo)


' 
P20%88h,09P~|E

8PEG|0
8P'G E
largo
fd buf
fd
2'G|0E28'9E,E|o''G8%
o2E'2IR EG8PP9e''8,
lo_open
9 9'2G|02!8 (8~,9,2'P8 9,~|/|P9'2



Posicionndose en un Objeto Grande


E~OGP''EP'  ',O0E,8 ' 0E~/! ~'0E~EP>0XP~|8E0'''O'
9E|O',

int lo_lseek(PGconn *conexion, int fd, int desplazamiento, int desde_donde)


8!9%E9'|(GE2%REE|08EP!' 'Pu 9E2EoR,092|88 'E9P
h'h|E2hEP'  'PG '8 8(EPe
8, R', 2''8,
fd
desplazamiento
E
!P8 . 88 .
h#8 .  L

desde_donde

S

 "

Cerrando un Descriptor de Objeto Grande


,>9h2|8 88 ~ ''G|8/

int lo_close(PGconn *conexion, int fd)


8,|8

E

8! ~'9,XEG,092|88RE'0E,

z'0,

Rq|

fd 82E'2 ~##|hE,0,2',8RE'9/q|
lo_open
29'2

lo_close

Funciones registradas Incorporadas





F 

'08,-9E| 'P| P'!98-'| PE,~8#' 'GEP8u'  E,~E2Eo,G P|


2|'|0q~ ,E!h P|!E'0q(eo2E,|XE0E'h8!LE

CREATE TABLE imagen (


nombre
text,
contenido
oid
);
INSERT INTO imagen (nombre, contenido)
VALUES (imagen hermosa, lo_import(/etc/motd));
SELECT lo_export(imagen.contenido, "/tmp/motd") from imagen
WHERE nombre = imagen hermosa;

Accediendo a Objetos Grandes desde LIBPQ


oP!>!%| E|0oEuEPP~GoE0GE'2EoGE!0~o PG8880'''!I'
'|9~9-8eP>0P2|88- 8Eu~E9EE,2G-!9O,G|08o
8~>'I9E|0EI,P|8 'hE'Pq' 9,8!9E,2GEE8 |O,|9!

8qE''  'P|e2EE9''' L'o'|098I,>0,-2|
../src/test/examples
8  8E 8P'|O'E' |'2u8( POOh''PE0'PEPc9 Gu|'!o ,
'I''P''U2



#

Programa de Ejemplo
/*----------------------------------------*
* testlo.c*
prueba utilizando objetos grandes con libpq
*
* Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
*
/usr/local/devel/pglite/cvs/src/doc/manual.me,v 1.16 1995/09/01 23:55:00
*
*----------------------------------------*/
#include stdio.h
#include "libpq-fe.h"
#include "libpq/libpq-fs.h"

#define BUFSIZE

1024

/*
* importFile *
importar el archivo "filename" en la base de datos como el objeto grande "lobjOid"
*
*/
Oid importFile(PGconn *conn, char *filename)
{
Oid lobjId;
int lobj_fd;

char buf[BUFSIZE];
int nbytes, tmp;
int fd;
/*
* abrir el archivo a leer
*/
fd = open(filename, O_RDONLY, 0666);
0) {
/* error */
if (fd
fprintf(stderr, "no se pudo abrir el archivo unix %s\n", filename);
}

/*
* crear el objeto grande
*/
lobjId = lo_creat(conn, INV_READ|INV_WRITE);
if (lobjId == 0) {
fprintf(stderr, "no se pudo crear el objeto grande\n");
}
lobj_fd = lo_open(conn, lobjId, INV_WRITE);
/*
* Leer desde el archivo Unix y escribir al archivo invertido
*/
while ((nbytes = read(fd, buf, BUFSIZE))
0) {
tmp = lo_write(conn, lobj_fd, buf, nbytes);
if (tmp
nbytes) {
fprintf(stderr, "error al escribir el objeto grande\n");
}
}

(void) close(fd);
(void) lo_close(conn, lobj_fd);
return lobjId;
}
void pickout(PGconn *conn, Oid lobjId, int start, int len)
{
int lobj_fd;
char* buf;
int nbytes;
int nread;
lobj_fd = lo_open(conn, lobjId, INV_READ);
0) {
if (lobj_fd
fprintf(stderr,"no se pudo abrir el objeto grande %d\n",
lobjId);
}

lo_lseek(conn, lobj_fd, start, SEEK_SET);


buf = malloc(len+1);
nread = 0;
0) {
while (len - nread
nbytes = lo_read(conn, lobj_fd, buf, len - nread);
buf[nbytes] = ;
%s", buf);
fprintf(stderr,"
nread += nbytes;
}
fprintf(stderr,"\n");
lo_close(conn, lobj_fd);



void overwrite(PGconn *conn, Oid lobjId, int start, int len)


{
int lobj_fd;
char* buf;
int nbytes;
int nwritten;
int i;
lobj_fd = lo_open(conn, lobjId, INV_READ);
0) {
if (lobj_fd
fprintf(stderr,"no se pudo abrir el objeto grande %d\n",
lobjId);
}

lo_lseek(conn, lobj_fd, start, SEEK_SET);


buf = malloc(len+1);

for (i=0;i len;i++)


buf[i] = X;
buf[i] = ;
nwritten = 0;
0) {
while (len - nwritten
nbytes = lo_write(conn, lobj_fd, buf + nwritten, len - nwritten);
nwritten += nbytes;
}
fprintf(stderr,"\n");
lo_close(conn, lobj_fd);

}
/*
* exportFile *
exportar el objeto grande "lobjOid" al archivo "filename"
*
*/
void exportFile(PGconn *conn, Oid lobjId, char *filename)
{
int lobj_fd;
char buf[BUFSIZE];
int nbytes, tmp;
int fd;
/*
* create an inversion "object"
*/
lobj_fd = lo_open(conn, lobjId, INV_READ);
0) {
if (lobj_fd
fprintf(stderr,"no se pudo abrir el objeto grande %d\n",
lobjId);
}

/*
* open the file to be written to
*/
fd = open(filename, O_CREAT|O_WRONLY, 0666);
if (fd
0) {
/* error */
fprintf(stderr, "no se pudo abrir el archivo unix %s\n",
filename);
}

/*
* leer desde el archivo invertido y escribir al archivo Unix

*/
while ((nbytes = lo_read(conn, lobj_fd, buf, BUFSIZE))
tmp = write(fd, buf, nbytes);
nbytes) {
if (tmp
fprintf(stderr,"error al escribir %s\n",
filename);
}
}

0) {

(void) lo_close(conn, lobj_fd);


(void) close(fd);
return;
}
void
exit_nicely(PGconn* conn)
{
PQfinish(conn);
exit(1);
}
int
main(int argc, char **argv)
{
char *in_filename, *out_filename;
char *database;
Oid lobjOid;
PGconn *conn;
PGresult *res;

if (argc != 4) {
fprintf(stderr, "Utilizacin: %s database_name in_filename out_filename\n"
argv[0]);
exit(1);
}
database = argv[1];
in_filename = argv[2];
out_filename = argv[3];
/*
* set up the connection
*/
conn = PQsetdb(NULL, NULL, NULL, NULL, database);
/* check to see that the backend connection was successfully made */

if (PQstatus(conn) == CONNECTION_BAD) {
fprintf(stderr,"Fall la conexin con la base de datos %s.\n", database)
fprintf(stderr,"%s",PQerrorMessage(conn));
exit_nicely(conn);
}
res = PQexec(conn, "begin");
PQclear(res);

/*

printf("importando archivo %s\n", in_filename);


lobjOid = importFile(conn, in_filename); */
lobjOid = lo_import(conn, in_filename);

/*
printf("como objeto grande %d.\n", lobjOid);

printf("extrayendo los bytes 1000-2000 del objeto grande\n");


pickout(conn, lobjOid, 1000, 1000);
printf("sobreescribiendo los bytes 1000-2000 del objeto grande con Xs\n");
overwrite(conn, lobjOid, 1000, 1000);
*/

/*

printf("exportando el objeto grande al archivo %s\n", out_filename);


exportFile(conn, lobjOid, out_filename); */
lo_export(conn, lobjOid,out_filename);
res = PQexec(conn, "end");
PQclear(res);
PQfinish(conn);
exit(0);

I. CCVS API Functions


D P 
 P
9n
n
$ I P
$ {
|
m
K' G
 P
m

$
 P
$
E~X|P'''9!PP9OD P L $ EE'GG|0hR~'P8X8' 9,'8X'|
9'O',8
D P 8EE2| !'9~O,|E2E $ O,'u,EO',
#
-with-ccvs
E!9,E 'P!'u!E 'E 'E0%cE9|RP!u'|!0' 'PL8KD P  $ PE!O~
'(EP'O ',GE,8cO 98!D P XE!'P  R!!o| E|0~(GE|(8P'
 'PU|G PE
 ||EPh~> E9' P',EO',^,
|8,|8
+ RY E9/'uE0uu! '|0' ',88D P 8-with-ccvs=$ccvs_path
 E82E0D P G2E'PE
'''P' + RY
 E9f''( + RY E0f#'| 'E8 '!0| ,|9|'|8(O E Xh'

8!99E|O',|E|/
o #oEG'9(8' 0GR9e9P!> ,
-/!E
!O'E0q8-
P
%'I!P'E 'R '|0G8'' E8 
 P,EP !(8 0
09f8 8'0E~G'0''E, !h8' 0/' G~f8-O,GE|! ',
8 0>098 8'9/EPG8'/8!EPE9 | (XEGPE !|8/,GP8E'
8
E/
2E!9 EE8o, !q90>0 8 8'9L8'!0G|0/h0~ 
8
%RUI!Eq! ~'98
P!8>|O'!'PE'|9qE~E',E,O!

~0'| '8E X''P R I,8' 9,~'(''

(8' ',|'G|0(EEEo| !'0% PqEGEP !O 2!E/''e'(O,|E2E


~O',8|0/8I!Ee!O'E0e
POI|O~'X0GP 2EEE82'EO2E
'PE,O, G
!  ,~'|8!PP(8G'!GLEE'L2E/9'|('|!9'8u!
9~>,q|'|!0'8
O,GEEE'O 2!UEP 
8P
P8|0/8O 2!0GP f

D P

#

G

i P
G

^D P

H, 8E9E3EX 8|~ ,#,8E 9!P9#EP#O


8!9h! ',8o'X8P EG|0 'P!0X9P!>|8,!h '|9G|0|9P $ !9X|P
 $ |9'|8P EG|0 'PE0'''2G|9|0' E8qE '|G,R'q|09*, EE9E9
E | ,#E
#EE8| P|0~|'|9,~GO',(8' 'P|!,P

Notas

-(|09

*, 8E9E3EX 8|~ ,
]|09*, 8E9E3EX 8|~ ,#E,8E 9,9#EP# ,GG 2O 2
|]|09*, 8E9E3X
E 8|~ ,#EE#!EEE,~~
]|09

Nombre

( );

Captulo 46. libpq

E/E,!9P/e

 '/'|09/E~('PEPPGEP 8%E''  'P|

libpq  EG ,0E|8%E0'| 8oP'P'',9O/2E(EG'0h', EPPG- ''|9


libpq
9!'|IO,|!E'9o!R'8,88,!9Po 'P'!E'08X!% P|!E'0

G

 0GP GGO|'G!EP2 |0(E~(GEO| ,9 '|0~9  EoE'' 


libpq
'P|8(E,!9P/8PU|O'EP|8

Ec
9 'cPE~'P
('
libpq++
libpgtcl
ecpg
2E|, 9,I8EO,GE,~0G'|08('U2'o!8'0G8('GP9|O'X!E2E'
E9'''E|/8 !0PqE2E0

#D

#'| 'E2/9EE,2G8 P0P8|80e! O',oEeGP!0~' ,G! ~'P'


EPPGoPEE0'''O

G2'P%0GE'Po ,GE'0Po8XE''  ',| ,


libpq
',e!'2E'|98' 0P'P

libpq

../src/test/regress
../src/test/examples
../src/bin/psql

8,LE,2GL ''|02EE0''' 
8P~'|O'E' EO|8 POO
libpq
h8P|'! P'P'P'',9

libpq-fe.h

libpq

Funciones de Conexin a la Base de Datos



8e!'PE'|0 E0'|-'EG'9'L'E|/ ,| ',2!R'8,q88,!9PO8


EPPGe8E''  ',/EE8q9|EP'02'8O,| 'P|e~2'8,G'!G
9'GE |~PE| !9o 8OILGo8XE|LP!889,!! -E
P| ',EO|9uE,E,>9 % P|2E!,P9'|8E( P|| 089
E/!08P8,2'9 P0!PE!0o9E|O',|o!'GEX82,'R~EEE|9GLE
P>0X||E',#G|,2EI!I9|2%8G'8IE,O%GGP'%'|O'E!E 
P>0 % P|f8P'''Ge'e9E| ',/E(00EEq PG,P|'e P| ',
! |''8h ,
'9h|9f8|R' ,|E'092f8#,09X8- P| ',f



PQconnectdb

"



9







f''E||ERO,| ',L#!2'8,8 P! E 80P

PGconn *PQconnectdb(const char *conninfo)



8!0-E0'|PE|-O,| ',X E|-P!q8E9,E9'''|8%',EG0PP8e!


8G'/ E|
P|0~/'L2EoP E%G P!>L ,GE/!08P8,2'|99
conninfo
',EG9,I>8PI!XE8 9|8-!' GP'-'E~8('9E| 'P|R8
G,8(2E #E!h8P'!0IE9'|I(P''f|'PP!'2',2E/E/ ,||0#0
IE( P|E 9E,'!E'9E9O~U2'E' E,2G ',h8e'E'' O',|8 
8|E!8 EE8!92'~ E9''''PEG0PE 89 0PhEE8
,|9|E|h/GEG03P!E8,fEP!E ',



80 ',8EuE~G9X0'|'%c,G
9E~% 'P'E
keyword = value
2',-|E'GER'P2E ,|9'|h!E 'P|R!hGE'~ ,G'''%!'GE'!REP
~>G'
8e ,G'''-!'GE' 8|0X8E2'P!%! ~'
keyword
= a value
P'G PG
8,I!EO',I'8|P-8E!'2|'PEE!PPO',|'!8,E
\
G9Pf ,|P '8,qO0E'G|0 !,

^,

"

host

,GP8P8|8PI2E P|O0P!88|LO8|LE',|2'0E
8'!9'|0G8O,!GE0'''G PGE|'  ', -q 9PREeE!8u!9uEG9
!EEP| 8| E!2EEI8#|,GP8,P8|8,~ |P!088~

 (



a

hostaddr

('O ', 988,8|8, 82EXh8PhO,| 9~oP~UX!9- 9,


G0!0|8-EX EGPIEE|9,! PGG!hE! 'I9E|O',|%E 8#
'| 0PGL,9#!o!E '8 hE|/OE|/8%',|2>9E8'!0'|9hE( P#
GE'IE|I PGE|'  ',L e 9P



J

:

 



8#E!X8
'EP8
EG'9I'E''  'P2'0' E!2E
hostaddr
host
8-8|,GP 8eP8|8,9'(2E EE8e!'GE,~0|0 ''O!'P|q2E
0'|E|%''G'9 ',LE9'G!'LGP2/'E9|9'  'P P,q| 
!'9oP|PGP82P8|8P~!8L!9 !8E'' o'%!'P8'|9%! E| '|
!q!E 'EO
'
!qcE~e' E!2E88|,GPe8,8|
host
hostaddr
8,~~#-!E 'EO
'
#R'P8
E~ '8' ',
hostaddr
host
hostaddr
G,9 !|!GE' ~PP!PE!O~o8IGPE'|2!R|,GPo8R,
8|8P~8/E0|0
,G
P8R'P8
8~h'
host
hostaddr
hostaddr
8'! ',uG,0 ,R'PfE
!I'P|PG|,2EI!GE' P
host
P! E2 !X!2',f!IE9'''~E~'%E0|9'  ', P, ,0!
2EI''PEc''I2!IE!oE|,G2I8I,8|8,PE%|ho2|,GPE
'IGPE'|




Y"

hostaddr

-E|E/|/-GE'|PE|/|,P0,''PEX ,| 9E0'''|8/E, 2R8


8,G'|'X',O

port

"






EG%8EE~0%E' ,| 'PXXP8R8P~2'8,0% 0|!'PXE


|,GP-8EO|/8#, 2E P| ',8 8,G'|' | 



G

",GP8 'IP!8-89,

dbname

",GP8#E!E'h2E!8P-O,| 0~

user

YE
YE

password
E! ,2E(!(EP/E0'''e8!2'8,e!,'' '9XE|hE0|0'OO',G P
E! Pe

options
EE8|2''q,E 'P|q# 28OPEX,!R'EP~

tty

E |h/90XE~ 'U'8I8 'IEEEO',,E 'P|P8!8-#!R'8,~



E|Gh '8 X|'| E EG9P,h ,GEPP' ,P|8'|9/2'


P'8e|9,|#|oe| E|0/>8!qG'/'P2',8q89O0 PE'
E 8ePE,2GRE22',8RE'0hqEEE|9hIE|%!9E 9EP!9O0
2EE3!|0I' P| ',,~2'8,~



8!0I9E|O',|X!'2I|P|

PQsetdbLogin



''IE||E2I P| ',L#~2'8,8 2-8 80,

PGconn *PQsetdbLogin(const
const
const
const
const
const
const

char
char
char
char
char
char
char

*pghost,
*pgport,
*pgoptions,
*pgtty,
*dbName,
*login,
*pwd)



8!0cE| ',Le'E8OO!P%8
,LE EGX>8X8IE~G
PQconnectdb
0P!E( P'G'!G9E|O',|''8e
8!0I9E|O',|X!'2I|P|

PQsetdb



f''E|I|E2O,| ',P!2'8P8-2E 80P

PGconn *PQsetdb(char
char
char
char
char

*pghost,
*pgport,
*pgoptions,
*pgtty,
*dbName)

8!0oeE|ocE| ',u2E''Go
,EE|0Pq|E'P-E',-E
PQsetdbLogin()
G0Pf',2'L e!EPE, 'P|'|' ''G|9IEIG|0| PGE9'P'''8
,,P~G|9' EP

E

PQconnectStart PQconnectPoll



''E| P| ',!RU8P8P!E

89,E 9PG|hP',2E|02

PGconn *PQconnectStart(const char *conninfo)



PostgresPollingStatusType *PQconnectPoll(PQconn *conn)


8!0-8P-E0'| %E9'''EoP~'qE|/ ,| 'PG|!~2'8,q8oP!8%89,
0P8'-|P~8e~> E 'Ph8' E''  'P/|o2E8-P'P2E8-h !GP0
G'|9f'X| 2





8G PR ', G'2u880,''E9'''|8'EG0E8,X '


2EE!GGE/ ,|8O09~~R8!0 8O|!9 eG'!G
8O|
conninfo
9,~G0(2E!8! ~'P'/|9E~IE( P||O08

"8E(O,|| 0#0|E( P||O0EP'P'P2E~||8|PEX!h'PE '9E


G(8 !0~' ',| ,

8PfE~G0,

!-E0'''/EPE'8G|9E !PE82E
hostaddr host
|/! '' ,|!8'0f8 |,GP |#8|PGP '|2! 'EP EG|0 'P
8 !0PEG0PfP!>/E( P|E 9Eh|9fE~I,P9|GE9'U

R''G%%E/0O2E!I8I2EPP>0EI'o! E| 'o'( EP''


E0LE!9(|hP',2E|
(!PE!/E!9G'!G8/2EX8, 2fh|OE|908EPE'E
|98-''GIE/ ,||08,>'O,GX!8 'P-GP!>

E GE9''G
#
conn=PQconnectStart(" connection_info_string ")
,|h
8E''PEo|Pe'E%'|OEe8q E||E2!9E 9E %O,|qo
,9%G,8,e82,'2~-EXEE|0o %O,|2''8%9E|2E9,82'|/E!|0
E| ,| ',2''8'GP!L8LE9,!!,oq2OEL8( ,|| 99~0''GL
!99E 8E(!90E!9O,|||!90E--'2E|
- 9
8(o8( PR| 99~
|P9''8

@"

Y6



: :"9"   :"9S

8

#E/ ,|8O09|cE| ',|O,


'9,,'PE'|0IE!h PG,P''2X89P
G2EXEE8E,O8OO, '! E| '8hO,| 'Pf'' EP8 'h P!'
PE P|!'8o2E(E,E9 9E|h PR ',!(| E|0~h'| 9'2#| E'9'G
E(O,|| 0EP'8R,'2'% %8 E(8
 q
8O ,|'8e|P2Ee'- ,|
'Po0qU 0'R3 E'9'GI8( P|| 9EP>'9 P||82,'R' %8 E(8
8o
%
'' E|e' E~q'RoE/!,OP09O,||3#8R,'2'I %E E(8
] c
%
'' qE|e' #Eq! ~'P'Eo8(!P P0c ,|839,82'e0'|q2Eq''G|eE/
,|| 9E,''8 '00''GE8( ,|| 99~0 ,GE,~0! ,G%!|EP'8
2E'0/ %f8 8(8
] c
'I!' 2GE!9I2E #!P PR0IEE
8%9O829 P|!'8'o 9'2PP | 8 '8%2E!0 ,| ',!0  9'2U
''G8f|E2qE( P||O0EP'>9 P||!9q''G8q8RE'2f %f8 E/8

'I ,| 'P! |PI!9P' '8/ ,
'0

,l



(



"9! .  P



A
 
"9!
"9
 (
#"9! ^ #"9

#"9! ^ #"9






0



#"9! .

",0!2EI,Eh8 !' 0c|EI!PE2EP, 2|!| E|0~''!0Xe'


G|9IEL0GE'
7 2E''Pq2E%E'E,|PLE,0~q9 '''8e8'!E,|'P'!# ,G
E|I''G8IE,''9cEPE8!9h88E9'''~' !u'EP~



8 E'2E'G,G|08E~|0h'O,| ',|!XEE8h PGE,P '!'9E ', 8


!0GO,| 'P|''G|8 E(!90ERqe!E'08  -
c
8o
E, 'G'|98XO,| ',|P~9''8 R -
c
 ' ,| 'P
!0X98RO',||8 ,~O0G|02 -E'2E'X8/!9!'9E ',|!hEE8(89
0e8EG'!GGGP8uhE9'8E2'P8/0P|uE(E/ ,|8O0EP''2 ,G|0
(9%!'0E 'P|(!XEE8 GP!0~I8E|09!,'8E|0EE, 8'G'|0
8% P| ',U| ,|| 8!9,I'|E'OG'(!'9E ',O0E|8|EP 8'G'|0L8%O,
| ',|#!IEE8LE0'''fE~%E,EP ',|f'|9PG ',u8I0P|PE!8~',
E,~>GE'E0'0E 'P|qEE8'| 'E'





."9"   ."9 
! ."9"   ."9 .


F7





,

:"
"-9:"
##(880,~8!E~R8/2E!''OE| P|',f
:"
"-9:"
 ?(oU,mP|',L.7!E|8(EI|2'~
" -9 :"
 D
c #"9!f8E:
" U,, 8!E|8 E|!EE!0L8fE,!9
G:!9"
~

."9"  @ ."9

-
9
~2'8,~

$ :,# '2'ELE0|9'  ',|E!E~2E|2E8

" -9 :"


 #E8" P ,Y
" 2, '|8h,|9,|
:"

 |P! E|0u2E8|PEL!9( ,|0|0h!L ,|~29ELGR9|


'G PG9'P'''8EcE|E''  ', |E| EP P!!'GE~' ', 8u'
G'!GEP8~0' E'h0,8P!hPE'q!'0E 'P|e!'GE 0|P
E2'P8-!9,e8, 8G|9EP |E''  'PE,8'I|O'Ph

R,

switch(PQstatus(conn))
{
case CONNECTION_STARTED:
feedback = "Connecting...";
break;
case CONNECTION_MADE:
feedback = "Connected to server...";
break;
.
.
.
default:
feedback = "Connecting...";
}

",0! 2E !,E/ ,|| 90~282E'2-EEE|0(|h|E',8PE!0L''G


E(8|'! E|8|2%0G'|8 P;
 '~%8'!E,|8I'o!9E 9E%8OE'
2E'P',2EL8GG,~'!P '88P|O0'|O'E!|9''8E|
''G8IE( P|E 90|/IE/ ,|8O0EP'
E(O,|| 0EP'8 9E'G|9%P'P2E~/E''PE!( ,GE''h P
8!0I!9' O',!''G'|P9E0E



# #8E|'8

!
FE
9 p#"  " ."9  .D#"9! ."9"   ."

3
E

E(O,|| 0EP'O0E'G|0P',2E~P!> '|8 u!O |PPE''PE(e PG'


'O,

88
-
- c 8E|'8R~8!9-O,8'Ph|(-|
E,P8L EGP!> U|8 P8(9PGhP8(O0E'G|0(!(|OE|9h8! 0'RE
E,89 98!9/E,8~UI GP'#9E9E
8!0 cE| ',|80~GE, 2E!98L8(|,9P'P2E PG!8!/|E2'!
''G8/

PQsetnonblocking

8!0fcE| ',||X!PE~'|P~R

PQconndefaults



o2E'2 'I,E 'P|e8 ,| 'P8 89 9

PQconninfoOption *PQconndefaults(void)
struct PQconninfoOption
{
char
*keyword;
/* Palabra clave de la opcin */
char
*envvar;
/* Nombre de la variable de entorno que recoge su valor
si no se da expresamente */
char
*compiled; /* Valor de defecto en el cdigo fuente si tampoco se asigna
variable de entorno */
char
*val;
/* Valor de la opcin */
char
*label;
/* Etiqueta para el campo en el dilogo de conexin */
char
*dispchar; /* Carcter a mostrar para este campo en un dilogo de conexin.
Los valores son:
""
Muestra el valor entrado tal cual es
"*"
Campo de Password - ocultar el valor
"D"
Opciones de depuracin - No crea un campo por defecto */
int
dispsize; /* Tamao del campo en carcteres para dialogo */
}



o2E'2 '8'O ',8'!9E 9EI8,E 'P|e8 ,| 'Pf8!9I!IEEE E9'


''8E 89G'|0P8',E ',|fEP!'P'f8E/ ,|| 98//!E2',8
8cO 9o 0E'82'P8E0P|oEE|0 -E| G9' E0EO0E~8( P||U|
9,/E0',|2Eh0G'| , E||0~8XPE0'|hE EE|0
8e ,9X2E
',q2',8 89 0/9',e GE, 2 R8E|8L8-'R'P'f8|9,~|h
8!9o8 P|0 9 -E|8%'-''G!e8PX098'P80,8'PE ',|
8-O,| 'P ,GX8 !,'X' 9E|

 s



"

*n Gn

"

8!0I9E|O',|X!'2I|P|



G

'~' ,| 'P PP~2'8,~GP ''P'GG,'oE0'''8


PQfinish
E,,P>0X %O,|f



void PQfinish(PGconn *conn)



|P!-X E|9 2E '| 'E!h!#9''o#'|0|9(8O,| 'P ,!2'8P9 PG


!u'|8' P 8(!99E!9'GE''  ', 8P''GoGE(8|'! ~''P~%'

Y"

GGP'IE9'''8E,#P>0X % P|f /! 8P' E9'''#EE|9/ %O,|


E|I22E |''G8(IE/E|' f

PQreset

9|' '''I,EE~0/8 O,GE|'  'P P#!2'8P~




void PQreset(PGconn *conn)


8!0h9E|O',O~/'X PR ',O,E~2'8,-/'|0|0h!9P'OE|X|ER
,| ',hG'!GoEP!0G!99OE9U''|8%0P8,'PG'G,EG0P|0~',
-88-E0'''E EEE~,#E|O,| 'P2E-!9P 9P!>|8o!
E'|2





PQresetStart PQresetPoll

8'E'GEE0E( PGE|'  ', ,G!R'EP

8-c,GI|XP',2E|02

int PQresetStart(PGconn *conn);



PostgresPollingStatusType PQresetPoll(PGconn *conn);


8!0fcE| ',|O~'I ,| 'P,!R'EP '|0|9~!9P'OOE||E
2X P| ', , 8G'!GGEP!0G!90RE9'''|8',%G'!GR~G9%ER'
G|9uE9'''8,P8!9EE8L!/E9'''P'LEG!EE 'P|8LPh!e!
E'|uE| P| ', 2Eu0Pu0~P0|E,o'E8L8|9',oE(!
2E%'L|O8%8|(9PG/|P'PPE|028!0-98RO',| !Ec'-G'!G !
0~' ',|qPE8( P|R 99|/E(O,|E 9E,'





#> E0/8(!0#0~~#E8RE'2
2'X''G'X|X9''8E82E'2 PEEP
'(''GE'hE0'''|8E(!9E,'E  9G|9oG'hG'!Gh9,~G/G2E(|P'
8h'I ,| 'PE9'''|8hE( P||O0EP'





8, ,P~G8PO 8oE''OO',| PG''Pu8P'!qOE'88P!, 8oG|0|


' 2!0~O ',X8 % ,|f 0''' -'9E| 'P|f'PE'|0fE 0PG P|0|'8(8
%O,|f#EP|'P'o9| 'o8' 9oL',o GE,/8X'L!9E 9E % P|E|2
2Eh!9!>9OGP'P%9E9Ec E9'8h8,!9P/| R'EE|'O',
8X'L!0E 0E~ % ,|'|O'E!2|!EPE,O',|L
0'|E
libpq-fe.h
9uR'0eE''  'P|e2E OL%OGEPq8I %O,|8' 0G|9EE8E!0
9GP |Eh'I ,G|8G,
P|!2~'qE0'''|8/E'|O'E''
libpq-int.h
| OO'8G|0 2E0IE,|9/# PE'2,

PQdb

G



o2E'2 ,|,G2-8'IP! 8-89,8 ' P| ',f



char *PQdb(const PGconn *conn)

E(8(/''PE'|0f9E|O',|82E'2/'P2'P!9P'O'8,fX' O,| ',f


8!0PR'Pf! >L~ 9,8'I2'8I8- % ,|e~P> 

PQuser

char *PQuser(const PGconn *conn)

PQpass



o2E'2#RPGP8 E!E'h8-'O,| ',f



o2E'2'I'P~ 8 E/8 ' PR ',f

char *PQpass(const PGconn *conn)

PQhost



o2E'2#RPGP8#,8|EP8 !2'8P8 'I ,| 'Pf

char *PQhost(const PGconn *conn)

PQport



o2E'2#E~0hE ' P| ',f

char *PQport(const PGconn *conn)

PQtty



o2E'2#0G'|,90X8EEE ',L8-'I P| ',f

char *PQtty(const PGconn *conn)

PQoptions



o2E'2 'PE ',|8!R'8,E9'''8f'I P| ',f

char *PQoptions(const PGconn *conn)

PQstatus



o2E'2 '!'9E ',9!99E!R8'I PR ',f

ConnStatusType PQstatus(const PGconn *conn)


8'0E 'PEE8-9,Gf2'P2'P8'9|9'GPPP!,'X8,e8 ''P
0'|o!'2R'8 898~8fEoEP E'G'|98f ,| ',(!'| P|
CONNECTION_OK

|XPE| P| ', X'P!/8h80P9'|h!09E -


CONNECTION_BAD
- c
 h |/ P| ',c'''8/!(! |'( PG'h!'0E 'P

CONNECTION_BAD
,G'G|0OE| !'08O',hEe !qG|9|8~|!0
EE/c''8
PQfinish
' PGE|'  ',|%EEE/EPP,O-EOGP'EG0E38/'!'9EO',
CON~8X- ,' E''  'PhEPE~U'|0|9 EE~' PGE|'  ',
NECTION_BAD
''G|8/

"

"   ."9 .







,

 ."

PQreset

E%2~'PEf,0~eEP!'P'-!'08O',|-2E%E,8~Uu ,GEPP!2''|
0~88 E( P|E 90|h8( P||O0EP>

(RE'Rh8G|!!>h8hPG '|9/2Eh|P2|8
PQerrorMessage
'PE|I,E 'P'I ,| 'Pf



char *PQerrorMessage(const PGconn* conn);


!9,8'f9E| 'P|8''PEX0~h#2'P8
!#9''f|
PQerrorMessage
PhG E|0h2E(PO,|2| 'P8o''PE22E
|u2 ''| 'E'~
PQerrorMessage
E  9 |E2I'U| 8E|

n

#

o2E'2'8|9'E 8P coq8EP !8!RU8P2E0


PQbackendPID
,|9,'|L!9 ,| 'Pf



int PQbackendPID(const PGconn *conn);



8 c 8~2'8,IoE9'''P'!!PE'|OEEE 'P8POoE
,GE',eG|0e8 (
92E'| 'EPuP 9 8,!2'8P2EI!9
''|8h'|,9'E  'P||2L E|02EI, c O,P|8EE,O!X2E
!q!9~> E0|8(,E|8,!2'8P8q'-P!8q89,! |%/,8|EP
', 

K"

)=





kX

PQsetenvStart PQsetenvPoll PQsetenvAbort

FW

f''8|%|2, O',uE,G

P'|02

PGsetenvHandle *PQsetenvStart(PGconn *conn)


PostgresPollingStatusType *PQsetenvPoll(PGsetenvHandle handle)
void PQsetenvAbort(PGsetenvHandle handle)
8!0h8,XE0'|!uEE8E0'''(~Lc0 80('G|2, ' 'P8|0P|
2EP E8E|0'-E~0E~-8eE| P| ',~2'8,8' P!8e80,
0|P%'8e8eEe2 eqEE8qEP2 |8!9% 'e9'|'2E' 9OE2E'-
!E'9'|9!|9eE-'PE!E'PfE,88 ,|8PE8!O,8'E  'P8e  9
 ''|9EP~>GE'





o

|"

8!0e9E| 'P|-|P',2ER#!09o'!9' 'P|eE'' 8(E( P||O09


/E/ ,|8O0EP'

6



E(GE P''G%/||8' 8E(!9|R0~09O,||9,8,|8%O,|G E|/ ,| 'P


P'~0X P!2'8,8h'P!h8h80,||8'
88R''PE|2!'8
'| EE'0EfE|%|E2%!9E 9E% %9|
|E'28L,92!,!I82E'
2/E|!9E 9EX||8'/2''8R EE o~>'E'P~h||8'/ PGG'8|9'E
8,q8(E|X!0E 0E~hE(80P'hE''  ',|PE|2E/2'8|9G|9oEEE'
E,8oE0'''R|,GPI2E%E!2 -,|P '|E',E,2Gq2E2E,2G,
|,~G'G|0/EUhE|,GP/ PG , !R'8,0PE,-~>G'P8!9/||8'/!
E'|XPE!X,E !,'G8P/E0''''EX''G,0~9E| 'P|8/''PE
9E(9|2E,''P~>GE',!

#"

N,

>"



@,



8' >X8EP O'G'|9L80'''|EE/!0|2EP''R  9G|9/EEG'GGP8


2E|EP' O8h'O,| 'PE0'''|8hE( P||O0EP'



8#E, ''|9h-EE8PP9OE'2E'GPG|9X''G|8(E/!02|o
P,~29||8'
8!0fcE| ',||X!PE~'|P~R

PQsetenv

''IE|I|PP ' ',LE#|0P|

int PQsetenv(PGconn *conn)


8!0-9E| ',h'''G'!G02Ee8(!0|2#0#oE/!0|2EP''EP',
2EIEI| '~(RE'R  !h8
'0P
 !h8-c 



Funciones de Ejecucin de Consultas



|q22E!|e!9P'O'EI P 9G|0E|e P| ',/ ,/Eo!R'EP|8fP!f8


80P!!E9'''o'9E| 'PR2E!GE!0~(O,|9'EE ',(~''| ,|E'0
h ,G|8,e8-#(e

PQexec

8G'0E| P|!E'0IEP!9PX!E~I#!E'98

PGresult *PQexec(PGconn *conn,


const char *query);

3"
n

o2E'2/EEE|9L %E'PRE,'P'G|0R8EE|0
8e %R~'G|
0h82P'2XE EE|0|G|E', E0 P|8' ',|%8 9EX8hGG,~'
9,E99,c9GG,2GPO!',9' ,GG''|  '88/|2'-'XO,|!E'9
E!2'8P~!h82E'2hEEE|0|E',!h8PUX99-8h'G'!G9,G
2EXE !E'8G %f8 -, 8f/IEO,|!P8' Go'|9PG 'P!PP
#~,0E9''' E(,
!!2P

|?



 )

Sn



8o!9E 9E
| E!E'o|!E'0882E'0E,q|!2'8,eo'/ ,|!8'
PGresult
9REPe,P~G8POe8IE''OO',| P
EP'LG,!9I E'8EP!Pq8
libpq
G|0|q'/2!0~O ',8% %!E'~EP|'Pu'/9O| '/8' 0(/', GE,-8
'(0EO0E( %!E'9#EP2E!0!09, ( GP',-2980E c| 'E!(E9'
8I'/2!'PL| (E%E,0P!#|o8~>88EPP 'P|~!'(88|' ',8 %!8'
''PE2992 f#0'| E!0L P8'Ph|9U2E/2E  88' 9G|9I'P GE,E
%E'0REE8hG|0|'GE9'''|8''PE29'|~ 0GP |RE'h ,G|8G,
2E!>E!9 E,|9/, P8'P,

#

G

PQresultStatus

o2E'2 '!'9EO',900ER!E'9|9 E E| P|!E'9R

ExecStatusType PQresultStatus(const PGresult *res)


E(!E'990EfEE8 E2P'2E|h8','PE|0q2',

%8O8||R'8I#!2'8P!9P ROU|
%I8, PG|8h! |0OE08(O,8 '9('82,'RE9,
PGRES_COMMAND_OK
% 8I ,|E'0!|~> E98( P9 '0
I
PGRES_TUPLES_OK
%u|u~| 8'u0~|G'!',889,/E!8~2'8,
PGRES_COPY_OUT
Ph(E9
% || 8 '9|!G'!'P 880PL| '  !2'8P
PGRES_COPY_IN
P9 |
%8#~2'8,|IE8(8|EE08!O,|P '8R
PGRES_BAD_RESPONSE

PGRES_EMPTY_QUERY

PGRES_NONFATAL_ERROR
PGRES_FATAL_ERROR

E!'9E ',EE!E'98

P'IE9'|I8 '9 GP!>


PGRES_TUPLES_OK
!EE8E9'''E%!EEf'9EE'e82E'9E,'o ,|!8'0||P!
E|0L2E8|L#8E - PE'|9|9OEE
9 Pf9EE'(0GP G,!9

E PG|8PPE|E| 8RE'R


PGRES_TUPLES_OK PGRES_COMMAND_OK
'|8' P8|
0EE' #8# E(88O0O | !EE!0
PGRES_EMPTY_QUERY
EPPE,P~G ''|9P

G

#"

P|2'9f'P89'E,|EG8P882E'0P8E,E(!E'990EEoE|
PQresStatus
8O| P|!0|9PE8! ~'P ,O,8'Ph8 '!'0E 'Pf

char *PQresStatus(ExecStatusType status);


o2E'2RG|0%8~,f!,OU8 PL'( ,|E'0,
PQresultErrorMessage
E|I 8|I2 '!,|X|/P~

char *PQresultErrorMessage(const PGresult *res);


'P8'|8h'|G8'9G|9 8Ro''8I

PQexec PQgetResult PQerrorMesc!,P'( ,| ',|88R,'2'(G'!GoO8|2E


PQresultErrorMessage
sage
9!PPfE'0|P3'(GP2,Eo %E'G|9|8~e!/G|!!>8f~,||0
2E-8!08U8PG'|9f2E #G|!!>-8-~,88'I P| ',OGP'~ 8|
8!('' G!EP!'2E'|9,E 'P| 9'''
E|8
PQresultErrorMessage
2E'~I ,|P '!'9E ',, '8I8 %!E'|E~0' 8' E0'''
PQerrorMes E|8(2E'O,|,O'I!'0E 'P8 ' E'0'GPO','I ,| ',f





sage

PQntuples




m7



o2E'2 , EG,L80EE'fc'R0| '!R8,!E'98(8 'O,|!E'

0|

int PQntuples(const PGresult *res);



o2E'2 , EG(8 GE,90'P80,|8 8 9EE'8,!E'9E


PQnfields
8-'I P|!E'9R

int PQnfields(const PGresult *res);


o2E'2
PQbinaryTuples
!, P|0'|80,qo
!

(

!R %!E'E P|0'|80PP'|~',L'e0EE'!#

int PQbinaryTuples(const PGresult *res);


oO0E'G|0 ',80,P'|'P8q'0EE'8,'%',EE8 EEEE|e P|!E'9
2E 0~'2 89,8 E 8!P
( I



y#"

N=



o2E'2q|,G2q8 GE99'PE9,#!, '8 P('|8' q8q GE


PQfname
888P'|8' 8 GhGE' P

char *PQfname(const PGresult *res,


int field_index);

o2E'2f'R8'O8f GEc9'PE9,e!P '8O,f|,G28


PQfnumber
GE(88

int PQfnumber(const PGresult *res,


const char *field_name);



8REUR ,P|,GP8 GE/88(|h! P!E,|8 ,|'| EOG

(RE'RP0'E/8 GEh, '8(O,,'|8' E,OGEh8|EP|


PQftype
0/E28'9/8| ,8'EOO','|9|8#9'E8P'|8' 8 GE/GE'
,

Oid PQftype(const PGresult *res,


int field_num);
EE8E!9 P|!E'9e'(9P'(8!'0G
~o,P9|e||,GP%EP
pg_type
E'8E-',E'c|0f9'E,f8-E9,~8, 9o E-',0'E,E-80,fU|O'E'8,
E,e89 9!08E|'8P
PEPPE
src/include/catalog/pg_type.h
9E|0f8,E,8EO0

:

o2E'2,0G |X2P0e8P Gh!P 'EX P,'|8' 8 G


PQfsize
888P'|8' 8 GhGE' P

int PQfsize(const PGresult *res,


int field_index);
(9'L82E'2L!E '!28 E~!9L GE E|G0EE'ELP8
89,PP0~IE'P!R80G |8/'hE!|0 'PP'|'h80'E8o89,
,~2'8,~#-82E'2 !,,OGE/q8-9G |h2~'P'2

o2E'2h'PI80PI8/'XGPE'8  ', !E U8 X880'E8 GEL!P


PQfmod
'8( P,U|8'O-8, GE(888,qU|8'Oq8-OGEhGE'

int PQfmod(const PGresult *res,


int field_index);

p

(RE'RGE]R'Ph8GE E|'O GE99'PE9,I8GE|08'8


PQgetvalue
%!E'EP'|8' 8 0EE'X8 GPGE' P

char* PQgetvalue(const PGresult *res,


int tup_num,
int field_num);
EI'%GPP'8I'e P|!E'9P2',f82E'0hE,
E|o 8|
PQgetvalue
o
0G'|8E 2',
82EXE3!|92'P-89'PE9EG!
R'P8
 o2'PPE82E'2
o'
PQbinaryTuples()
PQgetvalue
E!O|9O', P'|~'880'EG9,~G9'|0|G88!~2'8, 9EL|G'|O'EP
'E'P89G |P GEG%8X'P|P'9E 2'P'!8%|9,|Oo!EP|
!P'''88EE,2G|P'|9~E0eu ,|2~0'-',E9, E9'E  P 9
8EE|982E'0EP
E|9LLE|L,|u8'G |!>PE9P
PQgetvalue
GI~0 8-'!9E 9EI %!E' /'8P' GP8'E 0!'|X2E!8P~
,E' E'' '9G|9%|2',q(,9/0EO0E(8%'G |G'|9!|!oE9|8
E0'''E|I2IE!8(,0'GEhE 2'8I8'I0EO0E~ oE'RG'GR

(

K"



Y"

o2E'2h''P|P'9E8hE
PQgetlength
8-9EE'Ih8 GE/GE'

GE90'PE9,fP208P'|8' 

int PQgetlength(const PGresult *res,

int tup_num,
int field_num);
8!0o'%'P|P'E8%',89, 9E'eE2R'P8I89,E9' E'0E '9
#0G |/8#,09XEE|9E/E,E(292'E2 P0!2EE2',fEO|
08,ho
90e9G |(0'|eE,Oo2E28 PX0G |oP'|'('|E'O8%EP
E(9'P

D

s"

N"

EEPIEOGE/E,!#9'| ER'P
PQgetisnull
8-OGE/GE' ,

int PQgetisnull(const PGresult *res,


int tup_num,
int field_num);

"

8e8,f'|8' f89EE'

8!09E| 'P82E'2 !## GE(O,|0'| E


!# P|0'| E2',|
88
|E' 9|PX E|02E8(P92'E82P'2-E| 8|-2 '|(8hEE|9
|E',EEOE
88

:"

o2E'2'O8|8''0E 'P
PQcmdStatus
(L2EP|h, %!E'

8 ,G|8E~O,G|8

char * PQcmdStatus(const PGresult *res);

PQcmdTuples



(RE'R# EGh8E'f9 08qE,#O,G|8h#(e

:#"

char * PQcmdTuples(const PGresult *res);


E PG|8u(2E/2|uE %!E' 8, E(8L(E8888P8
2,'R~hE|X 8|h2Eh P|0'|/E EGu8(E'9O 9E#EE ,G|8
E'2E',9,82P'2E| 8|2 '|



(RE'RXU8|9'E 8,I8XP>09,'88'0EE'L'|!98!
PQoidValue
,G|8h(LIE| #E8 / P|0~~',82E'2

#"

InvalidOid

Oid PQoidValue(const PGresult *res);


|9R0'E(' PG'o P|!0|9

!%88R'~ E|8'| 'E2oE!9G


Invalid
E |/E P 
(GP,~E9'E/|9/9'|02~

libpq

2E'2E| OE|-O,X'8|0'8 8,8eP>0/8e'0EE''|!


o
PQoidStatus
08!,, PG|8h(LIE| 8~8,0( !h8RE'2 E|O8|I2 '|

>"

char * PQoidStatus(const PGresult *res);

8!0I9E|O',!|8!E 'Eh92,8

PQoidValue

X|h2EI'I|2|

cGE'G(0PE-' 9EE' ,PO',|'G|0P', |PGP 8%'P0~'PE0P


PQprint
U%!''EI!E 'EO82

void PQprint(FILE* fout,


/* output stream */
const PGresult *res,
const PQprintOpt *po);
struct {
pqbool

header;

pqbool align;
pqbool standard;
pqbool html3;
pqbool expanded;
pqbool pager;
cesita. */
char
*fieldSep;
char
*tableOpt;
char
*caption;
char
**fieldName;
po alternativos. */

/* Imprime las cabeceras de los campos de salida


y el contador de filas. */
/* Fija la alineacin de los campos. */
/* old brain dead format */
/* tabula la salida en html */
/* expande las tablas */
/* Usa el paginador para la salida si se ne/*
/*
/*
/*

separador de campos */
lo inserta en tabla ... de HTML */
HTML caption */
cadena terminada en null de nombres de cam-

} PQprintOpt;
E9'''P|0'PG|0!0I98RO',EI'GE'G'',q!E'08,8-'O,|
psql
!E'9/0PI|Xf, !PX!99E| ',P|h!!,EP0O0'2G|02

8'P' ,|-8q'G |G'|9o!,O'8- ,h %!E',8',!E'


PQclear
08,8-'O,|!E'9f82'h''2~~!eO,E(O'8 E|8o2 |o,| !'P

void PQclear(PQresult *res);

7

EE8E!9L ,|!8,>9/ %E'29|9(9'GE/ ,Gh'hR !'9 |h! ,|


!2~!U'-E| |E2 ,|E'0'|OU8!(!#E'|-' ,| 'PfE-2'9
!0P8PE!0u''G
X| ',E!E0IL 8'8e8IGG,~'
PQclear
U%E''  'P ''|02

Y"

PQmakeEmptyPGresult



A

-,|0E2 E,>9( %!E'22 'o ,'!'9E ',2E !

E,E,|2

PGresult* PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);


8!0E|E0'|'|0|8h''PE~!2-'|' ''' E,>9 %!E'
2 '!8!9% E,~08E,2E%'2E|qE''  'P|e P|!'8~L'|9!|9IP|
,09,fE'08o9E9' E'G|0-,09,q ,!'9E ',|qE-PPE,#G'!G
8O,| |G
E 008'|8' E,028G|!!>8h~, 9 !!P
8'u P| ',  E! PE' %!8'~,OEE2EL8P~UL''G%
E(O'E 0 ,09/9GP |8#G'!GhP8(2EE-E %!E'282E'0
E,'''2XG'GR





!"

G

m?

Procesamiento Asncrono de Consultas


8%98| ',
8 E8E%G'0'e ,|!8'0-LE''  'P|!'| P||
PQexec
'''#'GPP,9'|E|IEP ',8 8E| '| ''GEP0|9

u,

!EX|!92EX!hO,GE'9'O,|!E'9|8XE''  ',EE8h9| ,9


PQexec
0~2>E(| c ,GEPq~>G'G|9|E|('|09%8%E!E'P9 EP
!(|X-2E~P'P2EE~|8/'!EE!0|
|2G2Euq P|0P!GE
'GE''  ', ''|0u9'|GGE8'E '
PQexec
'|0|0( | '%' ,|!E'9 EP9#uEEE|Oo ,EG|'EE'8,(8
! |'E/|/8,9I9PG

!P'GE8(8R,'2-E|!08 0E~X %!E'8'XO8|h8/'X ,|!8U9


PQexec
'9'8I ,|9'| E'9'E'e PG|8q(8!E~0,8P OE9( E'0'G





F

8eE''  'P|-PE%|!o2E'u|O,|9 ,!9''G'9O',|!PEEEuE0'''

!L'E2'f98| ',|q2EEPP P!>

PQexec PQsendQuery

PQgetResult

E~e',E,2G|9'PEP2E-E0'''P(!99E| 'P|''8E0'''|8
PQputline

L!EPGP'PP88,||2'880P-8|!~2'8,0,!o |8''
PQputnbytes
9E|O',

PQsetnonblocking

oE''  ',|(|0'P8/88 |E! 8


8
G|0
PQsetnonblocking
|f2 ,GEP0G'|0|9',fE,9| ''G|9P'PPE|9PO8,E,2GqGe|E
2PfEE8E9'''
E ,|2E'E|I P| ',O,#!R'EP
PQsetnonblocking
PGE'9G|9 |hP'P2E|9P



PQsetnonblocking



#>,!08(8'I P| ',L|hP',2E|02

int PQsetnonblocking(PGconn *conn)


8!09E| 'P!PE 2E-'''G8

PQputline PQputnbytes PQsendQuery


!~> E0~'P'PPEP82,'R'|8X!L'8PE~,!P| !'9
PQendcopy
!''G8E |E2



8|8LE|X ,| 'PhE|XP!/8(89,I!/|h>8u ,G|P',2E|02u


''GX
P!hOG2'~hE!98L9GEP'G|9/XP',2E|02|!9XPEX!
PQexec
,GE'0I'~> EO',8



PQexec

u!EG2EGqE 'GcE0EP'G2,'G8''P]!|2G!PE~E'
9E| 'P|''8I8

PQsetnonblocking

PQisnonblocking



o2E'2'L!'0E 'P8P'PP8|9|8X'L ,| 'P'

P! 8-80P

int PQisnonblocking(const PGconn *conn)



3)o8!!9

o2E'2o8 !'h ,| 'P!0h0E/hG,8u|LP'PP8|9P


>8IIP',2E|02

8|2UX8RXO,|!E'9XEP!02I'!E~e',!E'9EPo2E'2
PQsendQuery
8 !' P|!E'08!E | ,~O0|9 (E# !|cE!9 E2
!,E9''' E/~, !P-E~I,P9|Gq'Rc,G 'P!PP ,9'',

`)

m?

int PQsendQuery(PGconn *conn,


const char *query);
~ ''Gq P 9G|0(
,''G%
E|/G-2 
PQsendQuery
PQgetResult
E~e,P9|8E'088q'- P|!E'0| o!e8Pq2P'2E-''G
PQsendQuery
GU'GX ,| 'P|!9XPE
8RE'2
88#'|8' |8uPE/'
PQgetResult
,|E'0!|I''8

|"



."

8!E~uU2E'|0u!E'988LE|~> E 'PER'uE
PQsend 8 8|8/' P|!E'9!9 O,GE'0/2 |

D"

PQgetResult
h'(82E'22#82E'2
Query
|PGq!E'98P

"

PGresult *PQgetResult(PGconn *conn);

82 ''G

E0'8G|9I|02EI82E'2
88'|8' |
PQgetResult
8/2E' P|!E'0|''E!9#'''GI E|8h|h|X|'|PE| P|!E'9
 0'R!'GE'G|9 E2P'2
88E-E~'| 'E', -E E|hE-',E'0
8,qR|8',eE
8PUIEP !!IE9'''|8X'G'!Ge9E| 'P|
PQgetResult
8I !% %E'8E,'G|0o8! '9 ,'R'8''P 8,09!E'9
8( P
8|8/'/|P| | P0! 2E
!P'hP'P2E~
PQclear
PQgetResult
8G|h''8L',IE9, 8o!EE0
|LE|/ ,|E'0X 9'2(
PQconsumeInput
| ',

K"

Y"

I"
S

0'''|8

!!E'2fE|8fUP,P'G88
PQsendQuery PQgetResult
PQexec
#PE|oO8|%8O,|!E'9(O,|0'|% 8'0'E'- ,G|8,-#(8'P-E'08,8I!,
PG|EP !(EE8PP0|e'|8'2'8E'G|92O980EG'9(E|(9PGh!| '''/8
EP !G'|0(~'' 'E''  'P/ ''|9eEEE0EG|UEE'|8o'P!E'0,
8 E| ,|E'0G'|0~#!2'8P!'2E0~20|8/!,P-O,|!E'9qE,0'P8
'(G'!Gh 8|%8o ,|E'0'GPPP'/''G8%
!P8'(E,
PQgetResult
PP |8PEo2O''|9%2E8P',2E8|!0(2E%R!2'8,O,GE'0oR!'P8'|9
PG|EX#(8I'%O8||!8!0XIEE8I'GE8'O,u2E!8 E88I9q9E|
'P|G

;

N,

PQconsumeInput

#|XE||98 8'P|'P'I8!8-#!R'8,0' PP2



On

int PQconsumeInput(PGconn *conn);

|n

|,~'G|0E28'R '|8'O|8 |X|X, E/82E'


PQconsumeInput
2
q|X' EL0'E/8EPP'Gc EPX !h!0
|P!
PQerrorMessage
 E|92EX!E'98u|E'Oh!!X| ,2'EG' E808X|98P~
''G
'IE''  'P8P~2'
#
PQconsumeInput
PQisBusy
PQnotifies
E~ R!,!8q!98Pf| GP'8





!EEE''G'|O'E!!'LE''  ', E |!0EE8


PQconsumeInput
E~(O'P'qE!E'9ELLE|h|P0'EOO',f8hE9'RUh',I80,8'!E,|'P'
h'Pq'0EIEL'G |G'|0h'|0G8',EPP, |8h#8|'|E'OO',8
ER8%E-'-'9E| 'P
2E2E P|0' E28-E''  ',XEE8
select
E,E''oE0'''
Ee''GE'8'- P|8' ',
'|GE'9G|
PQconsumeInput
select
0h G'|E!E f'Pq!8'0|h0~R2E''G|02







o2E'2 !fE|u P|!E'9!9u, EE8E/E '08


!
PQisBusy
PQgetResult
2E8'LP',2EEu!E|8E|u|0~8|
'|8' u2EL!LEE8''G
P'I!PE~'8L8 |XP',2E~

PQgetResult

|7

int PQisBusy(PGconn *conn);

|'|0|0~XPG'GG'-',89,E!~2'8, RP'',|!/8P
PQisBusy
h#!98h,OE8/|/9~G'|~I|E| |
''GE'G(

c|0|9'| E'2E'80o| P'8/#~2'8,9hE28'R B !#'h ,|


PQflush
!'PEc(!,'O,'8 |RUh!0I2 '2h8:h
) !P|9''8/EP'8 G,9'2
PQconsumeInput



int PQflush(PGconn *conn);

8I| !'G''G
E|O,| 'P |GP'P2E|9X|0%8h''G
PQflush
E/80G'|eE|h''28LE|X!EE!0| |h!EE!9(8
2E
select
2EI||E9,e|O,'8,P!~2'8,f2E|!%|2|2'8h9,82'|!,''
''O'P|e2E|E!8
| '0!0





PQsetnonblocking

P9'|%R EG8 'E9,8IE |EoR!,OPE8 P| ',u ,


(
PQsocket
f!2'8P~ 8 'E0P(2''8 ~
E !E'98 8u'|8' 2Eu||
 0E'G|0 |'|PE|O,| 'P P,!2'8PP'0|

zU6 B 7



int PQsocket(const PGconn *conn);


82~UIE9'''
EI,P9|PE!O'E0P8,!P P|8P!~2'8,E
PQsocket
LEI'u~> E 'P8
#8!0E~G'0E|uE''  'PPEE9'''
select
,| ',GP',2E|0(!Eq' !EE!0 P0 O,|8' 'PRI8|!R'EP~
!E'0/8
'|8' IPE'P80P! EE8'8!8 P!, 2|8#!
select
2'8,0EP'I''G~!I
EI''Pq80P 9q''P!IEE8
PQconsumeInput
E0'''

#
EIE,O!'I!EE!9|



Y7



PQisBusy PQgetResult

PQnotifies

88 ,| 'P||IP',2E|0cP8|oE9'''8
|I8P~U
PQsetnonblocking
E0'''
|0e2E
|P-E28'9
'|8' |E2Ee|%2E
8(80P
select
PQflush
'GO|8,!E|8h!|2'8,#!~2'8,~

|E''  ',h ''|00''O-2EeE9''' e!9cE| ',|9|8-EXPE 'eE~U|O'E2E


E9'''
EX!Ee9,8' PR8'O',|%X'I2Eh8P/!EP|8~ |
select
8 !0O,|8' 'PE!I'%|988'P|'P'I8!8-,~2'8,0UX2EI9~G'|,
8
,80P'P'P' 8! 'E9,e8(EO|u'8|0'EO8LE,

select
PQsocket
-E|8|PEO'%E'|O'|80 9o2E(|LE8oE|/|988P'o''G
E~ ''I|08P8E8-8 f''G
!PE'8/E
PQconsumeInput
PQisBusy

82E'29'! EEE''G 9GP 


PQgetResult
PQisBusy
PQnotifies
E89 0G|!!> (
92 ,9'E  'PoU| P| GqP>P

U"

#)=

Nnk"



G

G

|''OO',O''|9I2EIE0'''O

0GP EE8I'|0|
PQsendQuery PQgetResult
9 | 'E| ,|E'02E E!! -EP !|8(,!R'EP~

PQrequestCancel

#

2E' 8 E,0Pq2E-P|8,| #E, !8(8-'I ,|E'0

 0E

int PQrequestCancel(PGconn *conn);

o2E'2 E2'P !,'ORO' 'P!|8!E |E/ ,~ 0GR9


,|X9
8'E,P /EI!8EO|-O, 9G|9 |h2|0'
!,|P
PQerrorMessage
2EhEPE~''|9uRPX9|-|'| E c 9,2'GPP'G'~-E2'P
8I0P|8
#'%E''  ',u8PI PR9'|Eq PL'(! E| '%8
PQrequestCancel
' 0E~8!E'98Po|,G'E9'''|8
#'u | ' ',|'8
PQgetResult
9O0'2' ,|!E'9 9E9~G'|~GE'8G|9u82,'R~E E'0|8
,9''o'-O|O' 'PX98'PG,2E-P2Ee!2'8P8PRP'-EP !8('
,|E'09|X! 2I|'| EL!E'08







",9!%2E(!'/ ,|E'0h9PG(E~0oEoE|/0|!O ',|,'(O|O' 'P2,9o'


9|! 'P ,GE'0|

!/EE8/'|2, -8/G,8G!PEu8!8/EG|'EE'8,8/

E'|,!#'-8 '!'P
PQrequestCancel
|
'(-!9-9PG!EE8E9'''E P>E| 'P P
8- | '!EE8-0PGEG|'EE'8P8 !|
'PQexec
EP~>GE',
'|R,
psql

8!8EuG|'EE'8,8I'o!|

2!#",EG'9'|88I!9
PQrequestCancel
GPEh'I | ' ','|9 0'R 8 P|!E'0e2EK
 #20'P|%I0 f8 PQexec ~(P
!~2!2E
|0|8(9O0R'/ P|
 ',|!9(P'9%!
PQrequestCancel
GPG|9,X!,#!R'8,|/!9EP !|8(E| P|!E'9R

Ruta Rpida
EP!02(E,EP 'PRhEG'|99(~E'ELE~(|2'q''G8 8%98| ',!
2'8P~ 80o-E|/EE0(9'!o'('|9',~'888|!'0G#L88EE,|eE
P0(8 !PE'8e8IG2,'I8-'PeE!E'(|X| !'9~0I  9'!9' |



2E' ' ~> EO',8-E|I9E| ',E !R'8,I0~ 8#'|9~9 8-E9


PQfn
E'8P

PGresult* PQfn(PGconn* conn,


int fnid,
int *result_buf,
int *result_len,
int result_is_int,
const PQArgBlock *args,
int nargs);
8,PEG|0h9|'e,'8|9'E 8,8P,09X8 'cE| ',u2EI!8P0OE0~
!E' PE#' ,|-8q'G |G'|9%/' Ee82q!'0E82',E8RE'9
8EE,2GX2Eh| /'X''G8/8Ph|P-!28uEE '|0X 'uE
'GO|22',8RE'9X |X! ,GEEP !8',|2'0EE,!8'08/,!
8R,'2-X|9oE|98%P8!E' 'f!EE!8'0|o|9%E
hPP92>/!E' ' '| 28oP0~/c,G29 >'
 2 >|8L!8' ' '| !
'|8' ''PEX2E 8G'|'!9-#R'PP'| |8o'PP20f!#| !'PE-9P
G%2E%I|RU%ELR'P'|EE 8%'(G2E'|( ''|02 -E|8hE' ' '|

'( 8|8%PP0|2'8E,2!~2'8,f!82E'2!'P8'E !Pe
|Pf!E 'EO'Pq2EG|0,E'cE| ',f

J

sW

# Y

J

X

B #)

J Y

J Y

typedef struct {

ST

int len;
int isint;
union {
int *ptr;
int integer;
} u;
} PQArgBlock;

#'

!'G8RE'2E %!E' RU'8 #%8P~ / ,GEPPR2',q8%


PQfn
!E'909EI|98hE9''' 8!E'988EPPGX2EX|O('''G8!
E,|!P' 8''P, %!E'| ,
E|8/P|h'/| !'02

PQclear

Notificacin Asncrona



 " 8"
"  "
9" @#)=

EP!02(!,EP9o|,9'E  'PG!U|O,|(o0~ e8%',- PGR8P- 9#8


(

 !R'8,fP'!9!G'|0 eLE|%O,|8' 'PL8I|,9'E  'PLE~0' E' ,


, PG|EX c8
9X888~>8! EO| PP PG|E c8 !P8,
'Pe~2'8,2E!9u! EO||8E|( ,|8'O',8|,9'E  'PuE~0' E'f 'P'
~'|P0'EO ',LU| ,|G|9 E|8/ E'2E'!~2'8,0OE0E (
8
!/|,G2/E/O,|8' ',f8E!R'8, P8(''h'X|,9'E  'P|E!h|'|PE|
P0-'|9,~GO',XE~0' 8'',f!2'8,2Ee!9h! E ||8E,8'', E'2E'
80L2E/EPh!- ,GE|' 8u!/0~|!E(|2U9E'G|0/h0~ 8(8RX' ',
8P880P GP |P'9E'G|9%||,GPo8'oO,|8' ',G-2G'G8
'(' 'Pu!P '8ER!,'R-| !~','|2E%9GEP '-2E '!9
|'|2E|'O',!,O'8|

)=

|

 "

G



 "

"  " PG P|!E'0


U" )
= !EE8-89

G'9G'PO,G|8, c8
9#8
8''OO',|
libpq
#(L,8'|'8P!'PE'|9G|0'I''P8I8G|0 (
9''G|8/E(|P0'E!9!

o2E'2 '!'P8U|9I|,EOO',8 E|''!98G|0q8|,9'E 


PQnotifies
', E|G|'8'8PI 'P'8P8!8/8!RU8P~o2E'2
8||
|,9'E  'P|XE|E'|9 |2u!8RE'RE||P0'8  ', , E(|P0'E!
!0I! P|!'8IG|'8'8IX!P,~8-'''0I8|,0'8  ',|

"

PGnotify* PQnotifies(PGconn *conn);


typedef struct PGnotify {
char relname[NAMEDATALEN];
int be_pid;
vidor */
} PGnotify;

/* nombre de la relacin */
/* que contiene los datos */
/* identificador del proceso ser-

~qE, !E,>9h oRP0'ch82E'0hE,


!PE8 ''P~'
PQnotifies
,
E'GEE' |'88 GG,'|

free()



Nota: En PostgreSQL 6.4 y posteriores, el be_pid corresponde al servidor que realiza


la notificacin, mientras que en versiones anteriores era siempre el PID del propio
servidor.

8-2E|8 GE!9 8E,2G-8 EX0GE'/EE!/E' |P0'8  ',!'| P|R

|7F

 9E'G|9(|'o89,8!R'8, E|' G|0/82E'2oG|


PQnotifies()
0E,'|9eP!P2'8,EPEP0~9E| 'P
8/2',|ER'8
'
libpq
libpq
E|' I9PG8 !PE' E 'P0'GE/8G|!!> (
G'0'f PR
9|9G|9 ,|!E'9!'|O'E!/R U!X PE,P|0P| 
0fO8
PQnotifies()
~oE|2E-!0ocE| ',|P!-|P!E 'P PG(E|9,G 8G'P!9
PQexec()
E,88 E,O

H"

U"

)=

)=

|I9,GG~>PfE PGE,P',G|!!0 (
E|8/|X!8'!EP|8 O,|
!8'0/E9'''P'(X| E|''GE
8 PGE,P|9,| 
PQconsumeInput()
,#LEE8LE!
E~u~o'''P88LE9,X8!
PQnotifies()
select
2'8P0E|E9'''|8!9 !E,0| 'u8 uG|P(2E9|Pu'P2E
| ~ ,9u2Eu09PG9E|O',| P 9G|9G'|9hE9''' uE0
PQ
u!'G'G|0
Eh'O,|!E'9oP'/8!08
PQgetResult
PQexec
sendQuery
!'GP2,8 ,| PGE,P
9(O8

PQnotifies()
PQgetResult PQexec
EI PGE,Pf!P|o''28X'PE|o|,0'8  ',u8E|9I2E, !8I' ,|E'
9R

("

Funciones Asociadas con el Comando COPY

 =



8 PG|8 -( oE,0P#(/0'|,E 'P|E'!O'P'Ro'eO,| ',(E


E0'''8E~
E,''P!I| !'99E| ',|q~ O8L P| ',
libpq
88'!9G|9,8c,G/2E%'-E''  ',|EE8PP0|fR|9!>-8!9
E '8e



8!9E9E| 'P|!,'f8P'oE9'''|9E,P9|EoP>0I!E'08
PGRES_COPY_OUT

I~0'8

PGRES_COPY_IN

PQexec

PQgetResult

n E n
:n
n

8E| ''| 8eO~9f0G'|8- PXEhO~ 0 | ''R 899|!


PQgetline
G'0'8IE,P!2'8PRE|I 8|I8 'GO|G'|0h8 0G | ' |P9 O

int PQgetline(PGconn *conn,


char *string,
int length)
oGP8o!'G''
9 !9 E9'| O,E'',|P'9E8 O0E| 8||
fgets
8- ,G
9>P!'G2P,#GPE(|  9 | ''| Eo0~G'|O',GGE
gets
 0e|E'
82E'2
8 O
E!(|/''8u'/''|h|9~
PQgetline
EOF
!E/|/''|8'X,|h8('GO|G'|0PPL EG|L!/|h''8LE8
'U||

Hn E
:) B

n

(P!~2!LP8u'GE''  ', EPu PGE,Po!q'|8RG'U| P|!'!9',


8,X  9O
8 '2E'|8' '2Eue!R'8,(|G0G'|88u|2'%'P
!E'0,o88 PG|E ,E##8'E''  'P8P'XO'P' 'U|2E!,G
'PE-',|2'0E8 82~0| E'88%8 P|, 8''U|
8 | P 9G|9
9| P|9E|8|E,~>GE',EE|8XE|'P''|8X80P% ,''U|8
0G'| 'P|8 ,8'2%8
P|0'|E0'|8e~>GE'o2E
src/bin/psql/copy.c
G|'8UO,!9G|9,EP0P ,'h P#

n[ n

n[ n

n E

n

8qE|''|8q  9O0G'|8e P | ''| R99|!G'9'E


PQgetlineAsync
E,,~2'8,~RE|,|I8-'G |G'|9/'P',2E~

int PQgetlineAsync(PGconn *conn,


char *buffer,
int bufsize)
8!0XE0'|'G''
PEu'XEE8E9'''-E''  ',|2Eh'
PQgetline
89,8 -( ]!'| P|G|9|PPE%' P'P2E |2''8GO,
G|E -( PP0|'8E|E!9
'GE''  'P 8P

O =
i =

PGRES_COPY_OUT

Sc

''G%

|!0u2EL!L80 9'! ||8


PQconsumeInput PQgetlineAsync
,9cE0| -,|9
0%E0'|(0,G('%!E,|P'''8u8I80 028 ,
PQgetline
8 8 ''G8
8R,'280P!!'G-2E 0|28'!EP|'P'
PQgetlineAsync
E|%''|(8I89, PGE'9%9~G'|8% | ''| u2'G |G'|98I|
0~88I''PE2,!R'o''|oE%89,e8|0~88G!'8X'Po~ ,'P '
 'G |G'|0P9 '8GE,I'LE''  ',8X''G8R8,0 !,|
8RE'R|'| E80h|!0I2E''P#!0h8 ''U||

3n E

.)

n



8-E9'|IE28'R !#!,|P G ,|89P99 P2989


!#|/0'|-89,
8'!E,|'P'!P8G EGLE,!'9'2uP8('/ EG8%2P0 8o80,E28'9,
P82E'2 '(E''  ',u2E'''(''G8oEP%''Gf

PQendcopy
2,'Rf8!E RE,O|,~G 8,80PE28'9,|!% 0|8~G
''(8oEG  9 | ''| O E,!'P'P!(82,'R~oE|h'U|h PG'9(O8
2|E/!PP'G |G'|0X,9!'8XE,'E'' O',2EI'''''G8
8G!'EP8 |LE~o 'P'E|/'U|/|2'E(E,|!R'EP0,!oE2P'2
89,/O'',LEE8E9O0%!9 PGE,P|8 !f E'0'GP20L82E'0

|#8 8|82E'0|!0G'|L PE O0I|E'c2E'
\n
E!9 |8'IE
880G'| ',|8!P88EIE|u',|P00E 8'
G |G'|0hGE2E |2EI,9G |h8,'GO|G'|0h8-2EI'G|0
8'!E,|





Z



Hn E


"



n

^

8|2U E| OE| 0G'|8-X O0|E'(!2'8P~~oRE'2


PQputline
0P8/9E|O',|P'|
!,f'| EI8-|2'' E|2

EOF

int PQputline(PGconn *conn,


const char *string);



|Pu E|0u2EL'u''OO',8P|2'I E'' '0G|0',h8,(O~ 03


E|''|8/E|8EX'|8'  E!2'8P-2Eh|0G'|8EX|R'~'
\.
89,

8|2'E|% 8|0G'|8%Eu O0f||E'P!R'EP~!o

.)

PQputnbytes
!,9,8/RP'|X8 X!,'|OE8|R''OE||

2E'2

int PQputnbytes(PGconn *conn,


const char *buffer,
int nbytes);





8!0cE| ', h  0G|0'2Eq2E


E0 2Euf'O|
PQputline
G'|9G8/89,|G| !'0X!9-9~G'|EE  9-|E',|E|22Eh
EG(8PP9f2EI! |RU-!E 'EO8' 9G|92



'| ,|'- P#~2'8,~~8!9 cE| ',!E |0I2E#!R'EP|


PQendcopy
0G'|8h'O,E'|!oP~UIE9'''~! P'L E|8(!||2'8h' E'0'G 8|
2!~2'8,qE9'''|8
OE|E!%|/ 'P'8' E'0'G/ 8|o8!8
PQputlineoPE0'''!X,!R'EPEE8 'P' PE
,!2'8PE9'''|8
PGgetline
,E!P|-99E~E!'| P|U PLPO''|92 |o22E'2I8!0o9E| ',|#P!
2'8,f!9E8hEO'P''!'2E'|0O,|!E'9|8P2'P82E'9h
!2!
,GE'0IO,
'9,h8'9|98 /,0( !

:

9

>

NZ

int PQendcopy(PGconn *conn);

N,

PG/E0GE'

PQexec(conn, "create table foo (a int4, b char(16), d float8)");


PQexec(conn, "copy foo from stdin");
PQputline(conn, "3\thello world\t4.5\n");
PQputline(conn,"4\tgoodbye world\t7.11\n");
...
PQputline(conn,"\\.\n");
PQendcopy(conn);

M j

-E|8h!0oE0'''|8
'oE''OO',8P'%!E,|8(EuE'
PQgetResult
98
~> E9|8XE0'8G|9
!PE'88
PGRES_COPY_OUT
PQgetline
PQendcopy
E|RXX80 9X''U|8h9~G'| ',f(P'X|0P| R,'28PEO'
PQge'P,LE|9'#|!0I2E
82E'2
8q~'G''~G|9EE'
tResult
PQgetResult
98
!-E,O-E,E|!'8''GE
2E'8EP
PGRES_COPY_IN
PQputline
OoR,'2'|8o|0P| PE '
8!9,2|U 'P/!P8
PQendcopy
PQgetResult
2EeEh PG|8%8qO,E'-8q|0~E-%Ee!''8G2P'8%hE|-!'q8qO,G|8,
#(L!~> E0~ P 9G|9P

D"

8 E''  ',|I|9'PEI|P'9E'G|0(G'9E|X PE'/8/|0~8/8o''8h


9 q8
!EGL2Eo'o9|! 'PL|(0G'|80~
O8!0
PQexec
PQendcopy
G |'!GG9P!>8!E8G|0!,'' ,E'E|08P#!''8% E|'
PG|Eh/LE ' 8| 8 P|!E'0|



N

Funciones de Trazado de libpq

o 9'2X'9h8h'X ,GE|'OO',
PQtrace
~U|9-8 E |P

''R92!R'8, E~X8EE~' P

void PQtrace(PGconn *conn


FILE *debug_port)

PQuntrace

o! 9'2I'I0~| |EPE/0 2

void PQuntrace(PGconn *conn)

Funciones de control de libpq

PQsetNoticeProcessor

P|0P'o'I'|9PGI8IG|!!>8R'!'~GP|

8,fEP''PE

typedef void (*PQnoticeProcessor) (void *arg, const char *message);


PQnoticeProcessor
PQsetNoticeProcessor(PGconn *conn,
PQnoticeProcessor proc,
void *arg);
EPfE9 9,
'GE'G'P|!!082'h8R!2'8,f!PO,GE|PeEP ,
libpq
G|!!>8P2E2|EP!PG'Gh
8!9 ,GEP0G'|0X!IEE
stderr
8o!,P! ~'P'q!EG'|'!9|8uE|/cE| ',G8(''G8/8%'G/2Eo|2('P8|
P0o ,o PL'P-G|!!0 8%9E|O',8I''G8%8I'GoE0'''% PGPEG|
9,o9 9GEG|08X~,92EX'|O'EPE O~ 9E|8 | ''| 9E
EE|9ROU2EX%G'!GE!8
98!0X8|0G!
PQsetNoticeProcessor
EE8/E0'''E~X 8-!98P% 'E PI8'E''  ', !!h| !'08
EP !8P8 R'!,q8E9 0h!'GE'G|0



n E

n

,

static void
defaultNoticeProcessor(void * arg, const char * message)
{
fprintf(stderr, "%s", message);
}
E~XE0'''-8 EP !|PEXR'!,o!E ''2''GX
'|
PQsetNoticeProcessor
G8'G|9-9f'O ',L8-8|ER/P>0X %O,|f

8PR',8RE'0XeREE|0PEP !8,f8IR'!,E2'RE,EP ',|oE!0


EEE|0G8h9E| 'P8h''G8X
8|RGh0PG|'|P8| 'P||!'|G2EX
82E'2-P8|0/O0'2

"

Variables de Entorno
#EE8XE9''''f'PE'|0fR~'P'8-|9,~|/E !'O ',|R'P8E
~G9, 8/ P| ',E(89 0P22E/!E9'''8 E,

PQconnectdb PQsetd!R|X!I!E 'E |'| ELP0X2'P8'!0G|0IL2 ,8'2h2EI''I'


bLogin
''G8P,/E0'''P'E-UGE8'E ,8'EOE|PGP8qP!8q89,(!'GE'
EPPG8''O'Pf



 $



(#u0%P|,GP 8,8PP8|,f!2'8P~!,I!EO'E E| 8|IE


',|2'0EE'0'|9%8
!IE9'''% ,G8|UO ',u e cP 'uE|PGP8,8|
8,0''PEX P|O0IE9'''|8hE!P P|E#8,G'|' | %'P 

 

G

 %E/>hEE0Eo89O0L'(0|!',EoE |8|!,OP8(8,G'|'
 ', ,E' PGE|'  ',L ,,~2'8,E,!9P/e
|G%
%o-,8 L#>,|,GP8 'IP!8-80PfEP!02(e
 8 >E|PGP/8oEE'L80'''8LEh P|O0!/h'XP!(8/89,I
E~ E9|0'  'Pf

 %o# ](f]#>' E'P8!(E0'''8-!!2'8,!,'' '9E9|0'  'P


E,E'P '22

 %8o? !9 0|. PP-' 9E!.E'9E,02#(8,'''IE'0>|89P


0|I'P P'Yc%8o?
'e9EP!02(uEE'' 0'P|E''P09GE9||
0'O9',
E '9~2c,-0|'' | E!/E0/9' PE'9R,' PgE'O0
E '0', ,9' P|E'!8|'|2',|G|2'P''e,|'EL'P,fE9||0'

0'P'' 9LPX0| P 2|e

%/E9:"o0,E 'PRq8 ~> 8 ',8' 'P|'fEI,!R',8,E,0P#(e


%8=>/R8 |90R2E(!oG,!9u', G|!!>-8%8EE 'PL8
!2'8P~

88'PE'|02'P'O8|0P|%!qEE8oE!EE~eEOU8 |O,GE,~0G'|
9/8 8cO0(8 ',eE!E~'(EI 8 ',8 EP!02(

U,

%o-88=f88)P 0P0''X8-'IEO|9 ',L8-9 |fX|,~


%a)P 0P2',8 89 0/E~I'P||,'|
8!'PE'|92'P'e8o|0,~|!oEEEE9''UqE(EO'E RO,GE,~0
G'|0h'|0|X8 8cO0(8 8I!!',E EP!02(

U,

M 

 !%8(



0,GP8/8899XE~ ,PE0'G'EP2 9'

; 

8~!P PG|8X/

8 !0fR~'P'E |0P|

EPP0|f'|9,G 'P!PPI'PqR'P P 9,

Programas de Ejemplo
Programa de Ejemplo 1
/*
* testlibpq.c Test the C version of Libpq, the Postgres frontend
* library.
* testlibpq.c Probar la versin C de libpq, la librera para aplicaciones
* cliente de PostgreSQL
*
*
*/
#include stdio.h
#include "libpq-fe.h"

void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
main()
{
char

char
int
int

*pghost,
*pgport,
*pgoptions,
*pgtty;
*dbName;
nFields;
i,
j;

/* FILE *debug; */
PGconn
PGresult

*conn;
*res;

/*
* begin, by setting the parameters for a backend connection if the
* parameters are null, then the system will try to use reasonable
* defaults by looking up environment variables or, failing that,
* using hardwired constants
*
* Se empieza fijando los parmetros de una conexin al servidor. Si los
* parmetros son nulos, el sistema probar a utilizar valores de defecto
* razonables para buscar en las variables de entorno, y, si esto falla,
* utilizar constantes includas directamente en el cdigo.
*/
pghost = NULL;
/* host name of the backend server */
/* nombre del ordenador servidor.
*/
pgport = NULL;
/* port of the backend server */

pgoptions = NULL;

vidor */
pgtty = NULL;
ver */

/*
/*
*
/*

puerto asignado al servidor */


special options to start up the backend
server */
opciones especiales para arrancar el ser-

/* debugging tty for the backend ser/* tty (terminal) para depuracin del ser-

vidor */
dbName = "template1";
/* make a connection to the database */
/* conectar con el servidor */
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
/*
* check to see that the backend connection was successfully made
* se comprueba si la conexin se ha realizado con xito.
*/
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database %s failed.\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
/* debug = fopen("/tmp/trace.out","w"); */
/* PQtrace(conn, debug); */
/* start a transaction block */
/* comienza un bloque de transaccin */
res = PQexec(conn, "BEGIN");
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "BEGIN command failed\n");
PQclear(res);
exit_nicely(conn);
}
/*
* should PQclear PGresult whenever it is no longer needed to avoid
* memory leaks
* se debera PQclear PGresult una vez que ya no es necesario, para impedir
* prdidas de memoria.
*/
PQclear(res);
/*
* fetch instances from the pg_database, the system catalog of
* databases
* se recogen las instancias a partir de pg_database, el catlogo de sistema de
* bases de datos
*/
res = PQexec(conn, "DECLARE mycursor CURSOR FOR select * from pg_database");
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "DECLARE CURSOR command failed\n");
PQclear(res);
exit_nicely(conn);
}
PQclear(res);

res = PQexec(conn, "FETCH ALL in mycursor");


if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "FETCH ALL command didnt return tuples properly\n");
/* no se han recogido tuplas de bases de datos */
PQclear(res);
exit_nicely(conn);
}
/* first, print out the attribute names */
/* primero, se imprimen los nombres de los atributos */
nFields = PQnfields(res);
nFields; i++)
for (i = 0; i
printf("%-15s", PQfname(res, i));
printf("\n\n");

/* next, print out the instances */


/* a continuacin, se imprimen las instancias */
PQntuples(res); i++)
for (i = 0; i
{
nFields; j++)
for (j = 0; j
printf("%-15s", PQgetvalue(res, i, j));
printf("\n");
}
PQclear(res);

/* close the cursor */


/* se cierra el cursor */
res = PQexec(conn, "CLOSE mycursor");
PQclear(res);
/* commit the transaction */
/* se asegura la transaccin */
res = PQexec(conn, "COMMIT");
PQclear(res);
/* close the connection to the database and cleanup */
/* se cierra la conexin a la base de datos y se limpia */
PQfinish(conn);
/* fclose(debug); */
}

Programa de Ejemplo 2
/*
*
*
*
*
*
*
*
*
*
*
*
*

testlibpq2.c
Test of the asynchronous notification interface
Se comprueba el interfaz de notificaciones asncronas.
Start this program, then from psql in another window do
NOTIFY TBL2;
Arranque este programa, y luego, desde psql en otra ventana ejecute
NOTIFY TBL2;
Or, if you want to get fancy, try this:
Populate a database with the following:
O, si quiere hacer algo ms elegante, intente esto:

*
alimente una base de datos con lo siguiente:
*
*
CREATE TABLE TBL1 (i int4);
*
*
CREATE TABLE TBL2 (i int4);
*
*
CREATE RULE r1 AS ON INSERT TO TBL1 DO
*
(INSERT INTO TBL2 values (new.i); NOTIFY TBL2);
*
* and do
*
y haga
*
*
INSERT INTO TBL1 values (10);
*
*/
#include stdio.h
#include "libpq-fe.h"

void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
main()
{
char

char
int
int

PGconn
PGresult
PGnotify

*pghost,
*pgport,
*pgoptions,
*pgtty;
*dbName;
nFields;
i,
j;
*conn;
*res;
*notify;

/*
* begin, by setting the parameters for a backend connection if the
* parameters are null, then the system will try to use reasonable
* defaults by looking up environment variables or, failing that,
* using hardwired constants
*
* Se empieza fijando los parmetros de una conexin al servidor. Si los
* parmetros son nulos, el sistema probar a utilizar valores de defecto
* razonables para buscar en las variables de entorno, y, si esto falla,
* utilizar constantes includas directamente en el cdigo.
*/
pghost = NULL;
/* host name of the backend server */
/* nombre del ordenador del servidor */
pgport = NULL;
/* port of the backend server */
/* puerto asignado al servidor */
pgoptions = NULL;
/* special options to start up the backend
* server */
/* opciones especiales para arrancar el servidor */
pgtty = NULL;
/* debugging tty for the backend server */
/* tty (terminal) de depuracin del servidor */

M M

dbName = getenv("USER");

/* change this to the name of your test


* database */
/* cambie esto para asignarlo al nom-

bre de su
* base de datos de prueba */
/* make a connection to the database */
/*
Se hace a conexin a la base de datos */
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
/*
* check to see that the backend connection was successfully made
*
Se comprueba si la conexin ha funcionado correctamente.
*/
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database %s failed.\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
/* Se declara el inters en TBL2 */
res = PQexec(conn, "LISTEN TBL2");
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "LISTEN command failed\n");
PQclear(res);
exit_nicely(conn);
}
/*
* should PQclear PGresult whenever it is no longer needed to avoid
* memory leaks
*
Se debera PQclear PGresult una vez que ya no es necesario, para
*
impedir prdidas de memoria.
*/
PQclear(res);
while (1)
{
/*
* wait a little bit between checks; waiting with select()
* would be more efficient.
*
esperamos un poquito entre comprobacines; esperar con select()
*
sera ms eficiente.
*/
sleep(1);
/* collect any asynchronous backend messages */
/*
Se recoge asncronamente cualquier mensaje del servidor */
PQconsumeInput(conn);
/* check for asynchronous notify messages */
/*
Se comprueban los mensajes de notificacin asncrona */
while ((notify = PQnotifies(conn)) != NULL)
{
fprintf(stderr,
"ASYNC NOTIFY of %s from backend pid %d received\n",
notify- relname, notify- be_pid);
free(notify);
}

MST

/* close the connection to the database and cleanup */


/*
Se cierra la conexin con la base de datos y se lmpia */
PQfinish(conn);
}

Programa de Ejemplo 3
/*
* testlibpq3.c Test the C version of Libpq, the Postgres frontend
* library. tests the binary cursor interface
*
Se comprueba el interfaz de cursores binarios.
*
*
*
*
* populate a database by doing the following:
*
Alimente una base de datos con lo siguiente:
*
* CREATE TABLE test1 (i int4, d float4, p polygon);
*
* INSERT INTO test1 values (1, 3.567, (3.0, 4.0, 1.0,
* 2.0)::polygon);
*
* INSERT INTO test1 values (2, 89.05, (4.0, 3.0, 2.0,
* 1.0)::polygon);
*
* the expected output is:
*
La salida esperada es:
*
* tuple 0: got i = (4 bytes) 1, d = (4 bytes) 3.567000, p = (4
* bytes) 2 points
boundbox = (hi=3.000000/4.000000, lo =
* 1.000000,2.000000) tuple 1: got i = (4 bytes) 2, d = (4 bytes)
* 89.050003, p = (4 bytes) 2 points
boundbox =
* (hi=4.000000/3.000000, lo = 2.000000,1.000000)
*
*
*/
#include stdio.h
#include "libpq-fe.h"
#include "utils/geo-decls.h"
/* for the POLYGON type */
/* para el tipo POLYGON */

void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
main()
{
char

char
int

M _

*pghost,
*pgport,
*pgoptions,
*pgtty;
*dbName;
nFields;

int
int

PGconn
PGresult

i,
j;
i_fnum,
d_fnum,
p_fnum;
*conn;
*res;

/*
* begin, by setting the parameters for a backend connection if the
* parameters are null, then the system will try to use reasonable
* defaults by looking up environment variables or, failing that,
* using hardwired constants
*
* Se empieza fijando los parmetros de una conexin al servidor. Si los
* parmetros son nulos, el sistema probar a utilizar valores de defecto
* razonables para buscar en las variables de entorno, y, si esto falla,
* utilizar constantes includas directamente en el cdigo.
*/
pghost = NULL;
/* host name of the backend server */
/* nombre de ordenador del servidor */
pgport = NULL;
/* port of the backend server */
/* puerto asignado al servidor. */
pgoptions = NULL;
/* special options to start up the backend
* server */
/* opciones especiales para arrancar el servidor */
pgtty = NULL;
/* debugging tty for the backend server */
/* tty (terminal)) para depurar el servidor */
dbName = getenv("USER");

/* change this to the name of your test


* database */
/* cambie esto al nombre de su base de da-

tos de
* prueba */
/* make a connection to the database */
/*
Se hace la conexin a la base de datos */
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
/*
* check to see that the backend connection was successfully made
*
Se comprueba que la conexin se ha realizado correctamente
*/
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database %s failed.\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
/* start a transaction block */
res = PQexec(conn, "BEGIN");
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "BEGIN command failed\n");
PQclear(res);
exit_nicely(conn);
}
/*

MSc

* should PQclear PGresult whenever it is no longer needed to avoid


* memory leaks
*
Se debera PQclear PGresult una vez que ya no es necesario, para
*
evitar prdidas de memoria.
*/
PQclear(res);
/*
* fetch instances from the pg_database, the system catalog of
* databases
*
se recogen las instancias de pg_database, el catlogo de sistema de
*
bases de datos.
*/
res = PQexec(conn, "DECLARE mycursor BINARY CURSOR FOR select * from test1");
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "DECLARE CURSOR command failed\n");
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
res = PQexec(conn, "FETCH ALL in mycursor");
if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "FETCH ALL command didnt return tuples properly\n");
/* no se ha recogido ninguna base de datos */
PQclear(res);
exit_nicely(conn);
}
i_fnum = PQfnumber(res, "i");
d_fnum = PQfnumber(res, "d");
p_fnum = PQfnumber(res, "p");

3; i++)
for (i = 0; i
{
printf("type[%d] = %d, size[%d] = %d\n",
i, PQftype(res, i),
i, PQfsize(res, i));
}
PQntuples(res); i++)
for (i = 0; i
{
int
*ival;
float
*dval;
int
plen;
POLYGON
*pval;

/* we hard-wire this to the 3 fields we know about */


/*
codificamos lo que sigue para los tres campos de los que
*
algo
*/
ival = (int *) PQgetvalue(res, i, i_fnum);
dval = (float *) PQgetvalue(res, i, d_fnum);
plen = PQgetlength(res, i, p_fnum);
/*
* plen doesnt include the length field so need to
* increment by VARHDSZ
*
plen no incluye el campo de longitud, por lo que necesitamos
*
incrementar con VARHDSZ
*/

T j

pval = (POLYGON *) malloc(plen + VARHDRSZ);


pval- size = plen;
memmove((char *) &pval- npts, PQgetvalue(res, i, p_fnum), plen);
printf("tuple %d: got\n", i);
printf(" i = (%d bytes) %d,\n",
PQgetlength(res, i, i_fnum), *ival);
printf(" d = (%d bytes) %f,\n",
PQgetlength(res, i, d_fnum), *dval);
printf(" p = (%d bytes) %d points \tboundbox = (hi=%f/%f, lo = %f,%f)\n",
PQgetlength(res, i, d_fnum),
pval- npts,
pval- boundbox.xh,
pval- boundbox.yh,
pval- boundbox.xl,
pval- boundbox.yl);






}
PQclear(res);

/* close the cursor */


/*
Se cierra el cursor
*/
res = PQexec(conn, "CLOSE mycursor");
PQclear(res);
/* commit the transaction */
/*
Se asegura la transaccin
res = PQexec(conn, "COMMIT");
PQclear(res);

*/

/* close the connection to the database and cleanup */


/*
Se cierra la conexin a la base de datos y se limpia.
PQfinish(conn);

*/

T 

Captulo 47. libpq C++ Binding

 
, >

h'(
o EuEP!02
hE ,0EE08L '!XP8
libpq++
libpq++
EG'9/-',EPP~G ''|0eO,| 9~!q~2'8,E8eEP!9PE0 ,| 'P|
2'|8 8,c,G E| -'! 8 8! 8 o9,hE|O'-8 (09, %|8

D



8 -'!X8 8X8X80Po0|!8E~G|UEE'IE|LP!E89,EE8
E0X|2'80PE-!E9e8q PRE'0/X~2'8,8EP!9P!Oo '2''EE0
8#!2'8P~

8 -'8(09, %|8(!0E|!8EuG|'EE'',XP>0Ph2|8/
'/P!%8o80,O(E|2E(E|/'|0| '/8%(>0, %|8-EE8o|R'q ,|E'0
|PG'~2'8,q8(EP!02!P!,'u!0/E|!8E/ ,|!8'0| ''' 2E(|
82E'2|'| E 89 ,>9 2|8!L8P2 PGE|O8|LELE
EO|88cE0EP282~Uh PGE,9!h8/9PGXGEE 'GX' 8|I8
EO|(8







cin cout

cerr

!9 '9E'!0 P!8' 8, 8G|9O',E' ''P'


8
o-8|
libpq
8/!0! ', !''!0 0E,2G% P0P% ,GG~>GE'8/E,2G ', ,
9E|PE|| !'G|0f8E|ePE|E,P~G 'P|
IGEORP0'E,
libpq++
8-E'' O',|

'| '8P|Eh# ,8'2/98|98
libpq++
src/libpq++/examples
'P90GE'Pq EE!9,q!9 EU9E'



Control e Inicializacin
Variables de Entorno.

8'PE'|02'P'O8|0P|!IEE8E0'''fE~I>f2'P'8I89 0
E E|9,~|,h~-2'0O,8'E |,GPf8-'P!-889,fEE,2G
8 ''O ',

^,

Nota: Dirjase a libpq para conseguir una lista completa de opciones de conexin.

8(!'2E'|0/2~'2'(8|0P|!EE8E9'''%E~' 'P|%2'PoE
EG9,8- ,| ',8e89 0P2E !hE0'''8,E,8( PR| 98/oE/!08
P8PP'u!2|I|o!E 'E 8h8'O0G|0|'| P0R'PEPE~08P P8'P
2EX'''''G8|#, E0'''P'(~'GE8''L ,8'8  ',8X|PGP%8
P! 8 89,fEPP~Gf8 E''  ',|O''',





Nota: libpq++ utiliza slo variables de entorno o cadenas del tipo conninfo de PQconnectdb.

 $

(##>u|PGP8,8|8,!R'EPI889 9! '8 E|


8O|h8%'P|P'088'0'|0h8
,!oE0'''/ P8|'  ', -q 9P'EG|PGP
8u|,!9''PE ,| 9GE9'''|8E| ,| 'P cE !P P9 88PG'|' |
', 



 (

G

 %E/L0#E~0hE 89 0//'I9R',LE#EO|h8 ,|'P8,8,G'


|' |G%
 'P ,E'I ,GE|'  'P P#!R'EP8,!9P
%o-,8 o##>,|,GP8-'P! 8 89,qE,0Pq8-89 9
T

80h||,GP%8oE!E'E9'''8~o P|O0!o/'(P!o8%80P-
E~ 'IE9|9'  ',f

 %( ](

>'-'P~eEe!E9'''8e!~2'8,E!,''O'0 E9|0'  'P


8-'IE'P8!

 %8o?

0
?

>XE'| P, hE9'''- PE,022!E8'9|0/8E'|


', e0 %8o 'E''  'P|EP!9P'|0|0h'-E9|9'  ',h P
',q!2'8,8 !0 '|,XE0'''XEORP8 0' 22!E|P!E'GE8'
, 8' 9, PL'Pe8 |,e8I0' 2|'P '8!92'P'8I|0P|!P'!IE0'''
!,#!R'EP' OUP|I'E0|0' OUP 2P

g

 %/Ec."h>%PE ',|80'GE8 ~> 8 ',uE'O',|'EP!R'8,E


E,0P

 %=#>%,E |hh09h, E,,~2'8,|R'I',q|!!0e8!PE'G'|0


8-'I~> E 'Pf

8!'PE'|92'P'e8o|0,~|!oEEEE9''UqE(EO'E RO,GE,~0
G'|0h8 E9 9(EI',qE!E'PEI 8!!',LE EP!02

%o-88=f8L0,0''h8-89 9(8'IE!|0 'P89O|||,~R


%0'IP||,~~'IE 89 0
8!'PE'|92'P'e8o|0,~|!oEEEE9''UqE(EO'E RO,GE,~0
G'|0h'|0|X8 8cO0(E 8I!!',E8,!9P

 !%8(



0,G,8hE 89 0/E~I#PE0'G'EP2 ~'

8| P|0~o'|9PG ',!,Po',I2', P 9, 8o0-2'P'-8%|9,|u


# PG|8
8 (e

O 

Clases de libpq++
Clase de Conexin: PgConnection





8%O'I8I ,| 'P''%'oO,| ',uLR'P,,P%'%P!I880P!|


E,0P8q' '!f8  !

Clase Base de Datos: PgDatabase

>

DD



8 -'! 8!I8%o9,EPP 'P|o',-P>0P


2E9'|E|oO,| 'PuO,
!~2'8,~!E~ 9P,>9,#~'GhI|O'0%P|9,|8 E|E O
R!2'8,8,- P|!9E 9,-!'P8'|9-' ',|u ,'(''O',8 P| ',
|IE~2'8,8!8 E,2G
q

^D



Funciones de Conexin a la Base de Datos

PgConnection



''E||ER ,| 'PE!R'8,8 P!8 E9,

PgConnection::PgConnection(const char *conninfo)

G

oE|2Eh|P'9E'G|9h!/'h''G8!8/E|8/'I 'I8hO !,29GP 


E,!'P'O,| 0~!-IE!2'8, |8hEP>0XE P||O0',e

ConnectionBad



o2E'2/!8'XO,| 'P P8~2'8,-8(89,!/ ,|'PE0u

int PgConnection::ConnectionBad()

o2E'2

Status

8fo(o8f



!,' P| ',L9''



8RE'2 ,008f8'O,| 'P PP!2'8,

ConnStatusType PgConnection::Status()

H ."9"-c."9:-."9"c."9 8o

o2E'2 -
'I ,| 'Pf



PgDatabase

EE|8'|8I8!08IE



''E||E2I P| ',IE!~2'8,8 P-8 80P

PgDatabase(const char *conninfo)


~%'O 'P 8h8Po0P!Rh8P'O,GE,P EX!PE~~!h8h2EX'
,| ',!|''8 P
'0|9o8|2' ,|!8'0(,>988
| |9 ''G|0eO,P'|8!90E 0E8,>9oEP(9P! ,h', 0P8,



2

Status

DBName



ConnectionBad

o2E'2 ,|,GP8 'IP!8-80Pf 9E3

const char *PgConnection::DBName()

o2E'2I'o!'PE'|0%|,9'OO',8IE|o''!0(8IG|08I|P0'EO
Notifies
',!'G|'EE' 'P'8Pf8E ,!R'8,~

PGnotify* PgConnection::Notifies()

 E/|,9>E!9|~ P|!PE'fGf80''

Funciones de Ejecucin de las Consultas

8|2'IE| ,|!E'9!~2'8,E,PP'G|9Gf8!P'-E0'''E|
Exec
8-'f8P!'2E'|0qcE| ',|

ExecStatusType PgConnection::Exec(const char* query)


o2E'2 P!E'0/8'I ,|E'0|! EE8'P!'2E'|0qE'08,




( ? =^
N=
( .?? "  .!,'I P|!E'0IE ,G|8

%E  E
 8

%E


 ( E88. ,' P|!E'0|82E'0/0EE'


%E( (=^
%E( (=^ #"
%E( E
 ( f8#E."8!,!|!'P'8XE|IEE0I'|!E~8
%E(
" :"
) ,oE(
%E( 
) ,o 8f(
%E 

ExecCommandOk

8|2'IE| P|!E'08 P|8h!,P-,~2'8,~

int PgConnection::ExecCommandOk(const char *query)

o2E'2

8fo(o8f

ExecTuplesOk



!,' P|!E'9E PG|EX! ''( P '0

8|RUIE| P|!E'0%E 9EE'q#!2'8,

int PgConnection::ExecTuplesOk(const char *query)


o2E'2

8fo(o8f

ErrorMessage



!,' P|!E'9!''/O, '0



(

(RE'R-,9 0h8 E'0'GXG|!!>8-,~

const char *PgConnection::ErrorMessage()

o2E'2R 8GX89EE'ec'|!0| '!EE!|0eu2!E'9EX8I'


Tuples
,|E'0|

int PgDatabase::Tuples()



(RE'RIP EGXE GPe90'P80,8I 89EE'E'e2E PG


Fields
E,|,!E'9/8'I P|!E'0|

int PgDatabase::Fields()

o2E'2 #|,GP 8# GE/99'PE9,2!,O'8/#'|8' 8-OE


FieldName
888P'|8' 8 GhGE'

const char *PgDatabase::FieldName(int field_num)

E(c|EGPoo2E'2uf'|8' u8f GE


FieldNum
|,GP 8, GE(88

c9'PE9,e, '8 ,

int PgDatabase::FieldNum(const char* field_name)


f|,GP8 G|O,!EP|8O,|'|PE88',hE'u ,|E'0!
8RE'RE2',E

o2E'2%|0'EL8% GE!P '8 P|'|E'O%8o GL8E 8


FieldType
|0X8RE'9XeE|% P8'E  'PL'|9~|o8P9'8,'|8' q8IOGEXGE'


Oid PgDatabase::FieldType(int field_num)

o2E'2 #0'E/8- GE(!P 'E/ P#|PGP 8-OGE/E88


FieldType
|0X8RE'9XeE|% P8'E  'PL'|9~|o8P9'8,'|8' q8IOGEXGE'


Oid PgDatabase::FieldType(const char* field_name)

T M

o2E'29G |%XPP98OGEo, '8% ,hU|8' E G


FieldSize
E/8|!8,qU|8' 8 GEhGE'

short PgDatabase::FieldSize(int field_num)


o2E'2I2'E2, EE8E,!9 GEu'(0EE'%8%P8I80P!8|8
EG8I GE 8u,9EUP!#29 |8I'(O!|0 'PP'|~'%L
!2'8P|80'E880,o2P'2e !!0~0e8E(OGE80G |R'P'P



o2E'29G |%XPP98OGEo, '8% ,hU|8' E G


FieldSize
E/8|!8,qU|8' 8 GEhGE'

short PgDatabase::FieldSize(const char *field_name)


o2E'2oE!E 'L, EE8EPe!0( GE'h9EE'/8(P!o8o80P 8|8
|PGP8 GE~8,9E'P~!0G |(8e'IE3|9 ',P'|' 8
0'Eh8-80P,!R'EP~ 8R,'2~ ,P GE(8 0G |/R~'P'P

N

o2E'2 ER'P E|' /8-OGE/90'2E0PPE|I9EE'8- %!E'


GetValue
8,qU|8' f8 0EE'X8-OGEhG'

const char *PgDatabase::GetValue(int tup_num, int field_num)

E'GPPU 8e' ,|E'0!R'P88RE'0oE, % 'EeE| E!|0


',Lo
0G'|8I ,uE|E'2822',820'2E0E/! 8'|P#EE'!9

8ooo8(,RR'P2E%82E'2 o 'E-'oE!|0 ',P'|'(8
0'EG9,~G9G'|0|8!2'8P-c!''| 'E'0G |,|8OGE
GE,8q',|P'9ER'P'O8!EP|!P'''8h8EPP~G8,0~E8 '|'PE
0P#0'E ,~ 0E#EE|9/8 8RE'2 % 'EEE|0I#'GO|G'|0
2EfE9e8'I!9E 9E %!E'~ (8PU G,8'EO9h! 8P PE'
E'UO'0G|0 P2',I,0h'G |G'|9/,!8PE0'''E!8(,9'GE
8/2'8X8h'X0EO0E~ %!E'G'!G| 8'|2EE'!9|G!h|'GE'G|98
Ef

(

>




m"



S

;

(RE'R2R'P8E E|' OGE99'PE9,8LE|/0EE'(E% %


GetValue
!E'!8,'|8' f8 0EE'X GE(GEU

const char *PgDatabase::GetValue(int tup_num, const char *field_name)

E'GPPU 8e' ,|E'0!R'P88RE'0oE, % 'EeE| E!|0


',Lo
0G'|8I ,uE|E'2822',820'2E0E/! 8'|P#EE'!9

8ooo8(,RR'P2E%82E'2 o 'E-'oE!|0 ',P'|'(8
0'EG9,~G9G'|0|8!2'8P-c!''| 'E'0G |,|8OGE
GE,8q',|P'9ER'P'O8!EP|!P'''8h8EPP~G8,0~E8 '|'PE
0P#0'E ,~ 0E#EE|9/8 8RE'2 % 'EEE|0I#'GO|G'|0
2EfE9e8'I!9E 9E %!E'~ (8PU G,8'EO9h! 8P PE'
E'UO'0G|0 P2',I,0h'G |G'|9/,!8PE0'''E!8(,9'GE
8/2'8X8h'X0EO0E~ %!E'G'!G| 8'|2EE'!9|G!h|'GE'G|98
Ef

(

>




m"



S

o2E'2%'o',|2'0E8IE GE90~'PE0PL2P0O8,'|E'O8
GetLength
0EE'IX GE/GE'

int PgDatabase::GetLength(int tup_num, int field_num)

8!0I''P|P'9E 08PE#2'PE9' E'8,80,2EIq,9G |/8,,09


8|08P % 'E2|Ph E|0 2EeE2'P|!|08,/(
c
!0 0G |h0'|E, h2E2 PP0G |/P'|~'/'|8' 8(EPE/9!'2

D#

o2E'2%'o',|2'0E8IE GE90~'PE0PL2P0O8,'|E'O8
GetLength
0EE'IX GE/GE'

TST

int PgDatabase::GetLength(int tup_num, const char* field_name)

8!0I''P|P'9E 08PE#2'PE9' E'8,80,2EIq,9G |/8,,09


8|08P % 'E2|Ph E|0 2EeE2'P|!|08,/(
c
!0 0G |h0'|E, h2E2 PP0G |/P'|~'/'|8' 8(EPE/9!'2

D#

cGE'G/0P8'08'I PPO',|'GR92',|,GPIE(0~'
DisplayTuples
PE0h8 'O,~'|98-'U8I!E 'E 8|

void PgDatabase::DisplayTuples(FILE *out = 0, int fillAlign = 1,


const char* fieldSep = "|",int printHeader = 1, int quiet = 0)

cGE'G9,8e'e08'O,E 'P|'G|9',|,GP8I'Pe9'
PrintTuples
PE0P'I P'|08 !''8IEO'E 8P

void PgDatabase::PrintTuples(FILE *out = 0, int printAttName = 1,


int terseOutput = 0, int width = 0)

GetLine
int PgDatabase::GetLine(char* string, int length)

PutLine
void PgDatabase::PutLine(const char* string)

OidStatus
const char *PgDatabase::OidStatus()

EndCopy
int PgDatabase::EndCopy()

Notificacin Asncrona

y 

99 |
; 
99

EP!028!PE,9|P0'EOO',(!'| P|ee0~ 8'P ,G|8,

G!2'8PeP'!9h! '|0 GE!G9,LE~0' E' , PG|E


f
,8,I',I!2'8,PE/!9G E ||8LE!Gc,E~0' E'q'8|0'8 EuE,
!LRPGP 'P'~E|I|P0'EOO',!'| P|I E|8(,9h!2'8,~> E0E
E/!/|,GPP u!(!h|'|2E|X,9h'|9,~GO',8!8(~2'8,-2E

|P0'EOE!2'8P2Eh! EO|RE,-''PR9UE' G|02 E'2E'80u 9E8P8h!


| !'9-O,GE|' !0~|E-I9 f8 '' 'Pf

e

"



Nota: En el pasado, la documentacin tena asociados los nombres utilizados para las
notificaciones asncronas con relaciones o clases. Sin embargo, no hay de hecho unin
directa de los dos conceptos en la implementacin, y los semforos identificados con un
nombre de hecho no necesitan tener una relacin correspondiente previamente definida.

T _

8oE''  ',|( P
,|P0'EO8(O8L2uP8E!~2'8,%PE!
libpq++
9O,| 98f 'P E|I|,9'E  'P!'| P|R#'GP2/'I PGE|'  ',L|0
~2'8,('GE''  ', ''|0G|!'| PR|,8E''  'P P
8
libpq++
P(''GqE!2'8PeE/2e!|'|9,GO',8('2E|h|,9'E  'PE|8'|02
#'h~> E 'P8oE|h P|!E'9PE|XE''  'PG ''|0(EEE(''Ge
PgDatabaE2!#!GPG|9X!| E|9IE|8'|0-' E80(E |P
se::Notifies
9'E  'P8E,~2'8,~
82E'2'|,9'E  'P8E|
PgDatabase::Notifies
''!9E|,9'E  ',|fE|8'|08G|'EE'88E-~2'8,~8-9E|O',82E'
2
8!,|h|/|,9'E  'P|E|E'|9#!R'EP~
PgDatabase::Notifies
!X ,GE,~0 ,GE98hE|E''| |22E
|
PgDatabase::Notifies
82E'0/'I|,0'  'P|0I! P|!'8~G|'8'8h''G'|8'I''!9E



D"

PgDatabase::Notifies

 EEOI|P0'EOO',EfE|8'|98#!2'8P~

PGnotify* PgDatabase::Notifies()

82E|8oE,2G8eGE!98 E/~>GE'o8E!(E|,9'E  'P|!'| P|

Funciones Asociadas con el Comando COPY.



88O,G|8 2
8h8,!9Po0'|XPE ',|oEX' 'P'' ,| 'PE
LE0'''8IE,
EP!9,|!| !'99E| 'PReEI 8!9
libpq++
P| ',u8I8'!0G|08I9PG%2E%'eE''  ',|EEEL0Pf2|90
PGE'9f80I E '|e



'E|u''|8 O0O(9G'|8LO, |E2u''|


PgDatabase::GetLine
90~|!G'0'8%EPR!2'8PuE|%,|(8I'G |G'|09ELPE09
string
8-9G |

length

int PgDatabase::GetLine(char* string, int length)

G

PG'/E9U|/8%'!0Gh8 |
#0/E0'|h PE'
O~
fgets
(3)
length-1
0O
8 PG
!'GP2,X2EO,|2'9-' 0G'| 'P
string
gets (3)
|E2I'U| 8E  0|E'

.)

o2E'2q8 /E|8eEXE |P


!e|-''8%'-''|
PgDatabase::GetLine
|0 !'oP|o8%'G |G'|98%|(''|8E|!o|/''8 Eu
 0 |E2''| E8 9~G'|O',f

Nn

",0!ePE'-E''  ',/82q ,GEPP'|E2 'U|O,|!'!9e!'GE'G|0-


E|' EE|0On 3n c'2E'|8' '2EP!R'8,|%9~G'|8X8I|2'fR!E'
08o8 P ~EP'',!#'IE''  ',X!'GE-E~  'P'8''|P8-9'|G
8
 98'P|P'9E8' EU'O ',X8P~!PE~~!e8- ,GEPP
length-1
#2',E 0P|h8
GE E'88,!G|02

PgDatabase::GetLine

PgDatabase::PutLine

8|2'E

9~G'|8h|E',,!R'8,~

string

void PgDatabase::PutLine(char* string)



E|' /EE|0h#nO nPE~-'|8' !2'

8-E''  ',8Pe|2' E'' '9G|9E


8,2E|9~G'|Eh8 |R'!E89,

TSc

PgDatabase::EndCopy

!'| P|'O,#!R'8,~

int PgDatabase::EndCopy()
8!09E| 'P~|!02E!R'EP|9G'|88EP ! PG|8
oP'E9'''~!XP' E|8!||2'8' 8'0'GL E|!R'EP
P
E0'''|8
P' E|8!G| 'P'8' E'9'G 8|
PgDatabase::PutLine
88 2!2'8,fE9'''|8
!oPIE0'''2!2'8,
PgDatabase::GetLine
EE889O0 9E8-!'| P|U
9,E2,2!2| 2 ,'E''  ',X ''|9P |2
2E'2f80e9E|O',| !R'EP|!9eE8I~ '2'R'e!'2E'|9q P|!E'0|

9

Z

8R'P88RE'9%



O'9,o8'!0'|9(8eOX,9% !

E|8o! ,GE'0 ,

,

(f GE'

PgDatabase data;
data.Exec("create table foo (a int4, b char(16), d float8)");
data.Exec("copy foo from stdin");
data.putline("3\etHello World\et4.5\en");
data.putline("4\etGoodbye World\et7.11\en");
&...
data.putline(".\en");
data.endcopy();

_ j

Captulo 48. pgtcl

#

EEP89/0 8~/EPP~GIP8h'|0 E ,P P|88/EP!02


! 8'!E,|'P'EI!O'E0E9

 -P8I'G2,'I8-'q9E| ',|qE
$pgtcl

#

 O|f

libpq

8!9 2E0 9EP'P'|'G|0! ~'0hE, 9,''

Comandos

2 89 P8P

pgtcl

Comando

Descripcin


E8'! ,||
E
 ,||89E'0



E  ,||

P E|I P| ',#~2'8,P P|



O'~IE| P| ',



,P9'|'PE ',|e8-O,| ',LhE


2'PfE,E9 9

 
E!E'
E
 !'O
E  

|RUIE| P|!E'9PP P|


G|UEE''P!E'98,8 E|I P|!E'0
| EPE ' !,2-,!E'98(8 E|
8 ' 'P88



E ''!0

!9P' -8|''GEIG|!!>
(

"

 F
E'F,E
E
 'F 'P!
E
 'F 
E
 'F
E '9
E
 'F '!
E '  

)=

OE,>9/2|8
P E,>0hP|8
'~IE,09XP|8
'EP>0XP~|8
 'PE,>9/2|8
PE! X! P', !PP E|E,!'O',
EL,>9/2|8

 F

E ' 0'

8RE'2 'P!' 'P8 E,09XP|8


!PP'I2E!0

 F
E'F'GE,
E ' E|''|

PPIEL,>9/2|8
'GEP0EE |
2|8

 F 



E '  E,~

G

| oIE,09

EP9E,>9h2|8 EE |
|

G

8!9,q ,G|8,q!8 'P,9E2'|Gq8'|02

 '

8E0'|E ' /,]'|0cO'XO 0!0'O8,09,2|8X8E,0


28fcE| ',||'E/8'! |8fE'G'0'q9E| 'P|q8#!'0GI|'P
2G!'0GX8%EO|P8 | E8 E0'| E ' EP'E!!(8|08
EP'PPE9|! 'P| 8
# E,PE8!O'E,I8X8 |82E'0EP
E ' PEh!P'(2''8%E~-' 0|O ',XhOE!E ' 'GE,2(E '  E,~
o 8
!E!8,qEP'PPE89|! 'P E
L

 
 "

N !#" "

G

 '

 F

 !" "

 F 

Ejemplos

PE,E2E |/~>GE'X8-O,GXE!'fE9'|

# getDBs :
#
get the names of all the databases at a given host and port number
#
with the defaults being the localhost and port 5432
#
return them in alphabetical order
proc getDBs { {host "localhost"} {port "5432"} } {
# datnames is the list to be result
set conn [pg_connect template1 -host $host -port $port]
set res [pg_exec $conn "SELECT datname FROM pg_database ORDER BY datname"]
set ntups [pg_result $res -numTuples]
for {set i 0} {$i < $ntups} {incr i} {
lappend datnames [pg_result $res -getTuple $i]
}
pg_result $res -clear
pg_disconnect $conn
return $datnames
}

Informacin de referencia de comandos pgtcl


pg_connect
Nombre

pg_connect }



P-E| P| ',L#~2'8,P P|

Synopsis
pg_connect -conninfo opcionesConexion
pg_connect nombreDb [-host nombreHost]
[-port numeroPuerto] [-tty pqtty]
[-options argumentosOpcionalesBackend]

Inputs (estilo nuevo)


opcionesConexion



K6

!9'|X8,E ',|e8 ,| 'P| 8 8| '9E '9PGE'P -'2


RUP~

Inputs (estilo viejo)


nombreBD
8 '8 IE|,GP-R''8h8-P-880P

_ 

- c|,!

nombreHost

8 '8 I#|PGP8-8PG'|'h8,!~2'8,2OP|L~

- cP

numeroPuerto



9uE#!R'8,2OP|L~

8 '8 I# EGh8-EE9

- c09

pqtty

nombreBD

nombreBD

8 '8 8 |%%90o99~G'|'PEGP!98',!E'9|,88EE~ 'P


EP2|'|0f8,P P|e

- c,E0'P|

argumentosOpcionalesBackend

8 '8 I,E 'P|qE~I#!~2'8,8-P 2RLE

nombreBD

Outputs
dbHandle



#P9,8%|%'8P'|!E28'RIEL||8'IEE|%O,| 'Pu8IP!8I89,
8P||8' ,G'| ,P#> E2!2 O

:n

Descripcin
pg_connect





Gn

P-E|O,| 'P,P P|L8 E,!9P

S

IE

'0L8P2!'P|-8%'o!'|9 'OE'(2'~> 8%E,'P'%PE ',0'|8u '0


X'IE ' 'P8E  P||O~8'|ERc,G! E0'''E!9'|/O,Gh,E 'P
2E ,|9'| E'9'E'h2', 
EL|O,|0~I'|9,~GO',
pg_conndefaults
!PP 'f,E 'P|e8'!E,|'2'e'|ER'|0 '





Uso

]H]^]

L L

0|PG

pg_disconnect
Nombre

pg_disconnect }



'E| P| ',L#~2'8,POP|

Synopsis
pg_disconnect dbHandle

Inputs
dbHandle
8 '8 IE||8'-8 P!8 E9,fR''8

Outputs

"'|PE|

Descripcin
pg_disconnect



'~IE|I ,| 'P#P P|L8E,0P

pg_conndefaults
Nombre

pg_conndefaults }



,20'|'|9,~GO',!PP ',q~G9,8 'I ,| 'PE,

89OO0

Synopsis
pg_conndefaults

Inputs

"'|PE|
Outputs
option list



8!E'9EGoE|u''!92E8 'P'o,E ',|(EP!'P'(8O,| 'P!E


RUP E, 89 0 8X|08h'X''!9XE|X!E29''!08Ec,G9u'PE
'|9

,

,E0|G 'P#8'O|8'!E!' 2'E

8P|8-PE0|G!E0'''I PGhPE ',

pg_connect -conninfo

Descripcin



E28'R-'|9PG 'P!,P-'fPE ',|8 P| ',8'!EP|'P'

pg_conndefaults
h#2',E,8cO 9/ 9E#8 O8,E 'Pf
pg_connect -conninfo

Uso



E O,||8c8'0

pg_exec
Nombre
pg_exec }

|2'IE!9'|X ,LE|O,|!E'9%#P P|

Synopsis
pg_exec dbHandle stringConsulta

Inputs
dbHandle
8 '82IE||8'-R''8hEE|P!-8 80P

stringConsulta
8 '8 IE|I ,|!E'9/u2''8R

Outputs
handleResultado
#X82,'R~EP !EP9 |EE8PP0|I!EE!08P 2|eo
P0G,8,2% /EG,09LO,|!E'9h ,Gu!EE!0(L!(82E'2oEG|R8'
E 8!9%||8'%EE8!qE!8
E(,P9|q'P !E'9,
pg_result
8 'I ,|E'0|



Description
E!O|9E|X ,|E'0XEP 2RE(EP!02I82E'2(E!E'9E8
pg_exec
!E'9|h8'O,|!E'9!| P8-G|~>,O,G'|/ P,||8'-8'I PR
',X |8-EEE|9/E 8Gh PGh!8'0|



|2 E|02Eu'9'9L8E~, f|/E|GEEPu8L2EL' ,|E'0


|G9|'E
'9
G|!!>E~,o8RE'9E,(qP P| ~E, !8 ,
G!8'088E|/ ,|!E'9/ ,GE2'!E%9'',#|P||8,!%EG,f |
E 

i @X

 

pg_result
Nombre

pg_result }

,P9'|'|9PG ',L!PP-,E'08(8 E| ,|E'0

Synopsis
pg_result handleResult opcionResult

Inputs
handleResult
8qP||8' EI#E'08(8E|I P|!E'0|

opcionResult
8 '8 IE|IE 'R~'fE,!'P'q,E 'PR

Opciones
900E
#!98h8#E'08
9

|7

#G|!!>8,9,P08('|8' , 8 ,0/GPEPE!9'|2 '


9O,|



'I P| ',L2E,8>h#E'08
9P'

#"#E,0EE'o8:9]'|!98F7O8,0IGP8oE/0~'|

 ,G|8%9EqE
R U
9|EG#EE'



# EGhE 9EE',e8RE'9,qE,'O,|!E'9R
9|EG(09



# EGhE 0~'PE0P 80EE'


9!'P|,GP(~
!'2|IPE'08(IE~ E!|8h'9,GI9|8#EE', |PGPo9'PE9,

_ M



o E|8!9|o

9!'P|P2' %|,GP(

!'2|u',/E'08uE~E!|8E'G0~'PE08RUP0
8%|,GP-8%9'PE9,- PG '2|EE|80-E8P|0P|  - |
8'8LO8L '22 ERG|9E0P8,h E0fE~'% G8O8L08'
,G'G |, GEG~O#8!|ELE|/RPG| '0Eh8|0'E9R',E~'G
-GE, |,GP -GE,(||E#0~





929#EE'|EG,#EE'



82E'2 ',OGEP8P08'X'|8' 8hLE|%''!9REPq 8GPq89EE'hG


E'8!8 
99EE'oX|EG,#EE'(|,GP(~



'G |e', GE,89EE'%/%|,GP(~OO'|8 8,P8|,GP


8 GE8,q EG/8 08'XGE'8!8 



990'2E0
82E'2-E|''!9 ,'PeRPGP 8',9'PE9,qE#9EE'
9'(09'PE9
82E'2I8|o''!9(8EP9''!9
E'

|,GP9'E9G |@#EPq 8%0'2E0829E

9O'
''G'|#,09X ,|!E'9!E'9|92

Outputs

#!E'98/8E|8-8 'I,E 'P'P'8O,Gh!8 'P'hG~'PP

Descripcin
8RE'Rq'|9,~G ', !-8E'08%8eE| ,|E'0 8 PE

pg_result
|9',~
pg_exec

EE8G|0|%E'088E| P|!E'00|9 8|9' | '0E


8|8%|P-0G'|8% ,  E!q8e''P'%~> 80|8

pg_result -clear
'~o,9uGP8,0|8E P> e'GGP'8P0OGP!0~G|!!>
'|8' |8(2E| 8/8G'EPf,>0,e P|!E'0|

O

an



n

pg_select
Nombre

pg_select }

|OEPE ' !PP ,E'08(8 E|8O'~ 'P#E8

_ST

Synopsis
pg_select handleBD stringConsulta
varArray procConsulta

Inputs
handleBD
8 '8 IE||8'-R''8hE 8|P-8 80P

stringConsulta
8 '8 IE|I ,|!E'9/u!'O22''8|

varArray
hE 2~'2'~ 'Pq9EE',82E'9,

procConsulta
8, 8'G'|0hP8 -|~> E98(!PP 89EE'/| P|0~8

Outputs
handleResult
2!8U988RE'9eEG|!!>%E%~,E||8'E%E!E'98h8
O,|!E'9|

Description



E !' 8|2'(E|/ P|!E'0h88 -G|P P|8%EP!9P ,~> E0


pg_select
E|%EP 'Pu8IO,8'P2E%!'|(E!EEP 80EE'uR!E'08X8'( ,|
!8'0|8
8Ph! E|8 ' ',#E8 - E'2E',9 P!
stringConsulta
82E'2IEP~!8oR~'P'
E|PGP8~EEuRPE '2
varArray
EPE Eq9EE',
~
|!q''|e ,/',2',8 G9EE'I8!|
varArray
8'P|PGP 8oOGEL ,Gu'|E'OE~# E9'q8o2E
procConsulta
! ~> E9|

 u

Uso

Kn

n

^n

Gn .n|GnE9(9R P0P

8!9o9E| 'P|' !'0P' 0P' |9'|'Pf GE, P|0P E


GE,

s,

pg_select $pgconn "SELECT * from table" array {


puts [format "%5d %s" array(control) array(name)]
}

_ _

pg_listen
Nombre

*"

pg_listen }

#)=!'| P|,

>h GP'IE|''GE~ 'PqG|!!> /

Synopsis
pg_listen dbHandle notifyName comandoRellamada

Inputs
dbHandle
8 '8 IE||8'-8 P!8 E9,fR''8

notifyName
8 '8 I#|PGP8-'|P0'8  ',EIGEhE8  E |~

comandoRellamada
#2!9%EG0%E!( ,EG2',|L2 ',#E,E,O',|(| PG|8Lo~>
OE0OE|8/E||,9'E  'P2''8''2EP

Outputs

"'|PE|

Description

E
 ''0(OO GP'e | 'qE|E0' 'P(Ee! EO|G|!!>@
" /
pg_listen
)=!U|O,|,q8!8,P 2|8 E,!9PY-,8E~G9o PGR8Pf''G
82'E0' 'PX!0P' G8!9'|8/ PG|8G8hE|E9' ', 
 '!9|9h!
OGE'8L'G|'|E
 ~G9L ,G|8,''G8,!%O|O'~oE|/9' ',

|0~',~



o!E 8e2E-!!9P' -E| E0'O',


O!9'|/8eO,G|8o!EO'E
pg_listen
8!-0OE0- E|8%EhG|!!> (
2E-''Re|PGP8o''PE-E!8
|P P|eE0P E% E|8 8'2E'eE''  'PuO''|9o8oE,02-G8!9hE
PG|E (
| '|E/9O| 'I! |,GP2 ,9!2EE8 !0E|P8
|PP''P9,'G|0E8XE|L'!', '!9|9'P8X80P!80'|E
PG|E(!~> E9-8!8e',PEE~-8 80-!08%8!E |,G
8E|%E''  'P! '9 ,u8 8!|''PE|!,u8h 'EE80OE0
update

E~ EP2P 2E! '|0P8EOI,'P,L8 !E~|

D"

"

)=

)=


#"

vwait

"X8P~ %'|2P 'e8 '~ 'P|#(u9#8" "98A" 8' 9G|9 OE|


8!#%
 E|8 pg_listen E20O!%| 2o8%EP|G |/!-8O'~ 'P|
E, E0eE!E!9PE'|R' E G|!!>O
" ()2= |'|R,2E'8O'~ 'P
#(0
" /#)
= 8!|E pg_exec

_Sc

pg_lo_creat
Nombre

pg_lo_creat }

EP>0XP~|8

Synopsis
pg_lo_creat conn modo

Inputs
conn



8 '8 IE|I ,| 'P2''8IIE|2E 80P

modo
8 '8 I#GP8h8  !/E~#P>0XP~|E2

Outputs
idObjeto
8,P'u9'L8,,09,|8#,>0XP~|8 E

Descripcin
pg_lo_creat



8,09/2|8-8'|R~!', 9|2~!',82-/> 0!

Uso

" P f8o(Y" P  H 98/H" P (^ $  P

GPEIEE8 E'2E'RPEE 'Po ,((8


8# O08''G'98,E ( 
O

Hn4kn

[pg_lo_creat $conn "INV_READ|INV_WRITE"]

c j

pg_lo_open
Nombre

pg_lo_open }

P-EP>0hP~|E

Synopsis
pg_lo_open conn idObjeto modo

Inputs
conn



8 '8 IE|I ,| 'P2''8IIE|2E 80P

idObjeto
8 '8 IE,'uR''8/E~IE,09/2|82

modo
8 '8 I#GP8h8  !/E~#P>0XP~|E2

Outputs
fd

 '

8 'E9,E EO|(EIE!EP!0'PG|0E9'|qE '

Descripcin
pg_lo_open

Uso

#

P-E,09XP|8 8-'|R~!',L 9|R~!',E#/> 0!

yn |n SnkE9nn|E9nO

GPEhEE8-

pg_lo_close
Nombre

pg_lo_close }

'~IE,09/2|8

Synopsis
pg_lo_close conn fd

Inputs
conn



8 '8 IE|I ,| 'P2''88|P-880P

fd

 F'

8 'E9,E EO|(EI!E!8hE,!9~',~|9E0'|E ' 

Outputs

"'|PE|

Descripcin
pg_lo_close

#

'IEP>0XP~|8-8 '|2!'P c|2UP8P-(0 9

Uso

pg_lo_read
Nombre

pg_lo_read }

'EP>0hP~|8

Synopsis
pg_lo_read conn fd bufVar len

Inputs
conn



8 '8 IE|I ,| 'P2''8IIE|2E 80P

fd

 F

(!O'E0P8E |/E~I#P>0XP~|E 9,G8/8 E ' Pf

c 

bufVar
8 '8 uE|u2'P'EPE09IR''8uEL ,|9|of!PG|08,>9
2|82

len

8 '8 I#9G |hG 'GhE~G'0'8h~#!2G|9h8#,>0XP~|82

Outputs

"'|PE|

Descripcin
pg_lo_read

'-'IGPPE9 E 'PqP208

len

X'/O,E'I'I2'P'

bufVar

Uso
bufVar

8P !E|PGP 82''RU'8

pg_lo_write
Nombre

pg_lo_write }

! ~'P E,09XP|8

Synopsis
pg_lo_write conn fd buf len

Inputs
conn



8 '8 IE|I ,| 'P2''8IIE|2E 80P

fd

 F

(!O'E0P8E |/E~I#P>0XP~|E 9,G8/8 E ' Pf

buf
8 '8 IE|I2'P' !0~'|hR''8IE 'P'#P>9XP|82

len

8 '8 I#9G |hG 'Gh8P!0~'|hI! ~'P'~

Outputs

"'|PE|

Descripcin
pg_lo_write

 'P'uGP,oE08

len

PP9(uE,098!8E|u2'P'

buf

Usage
buf

EP!#!9'|!O'P'0|hP|,GP8 'I2'P'2

pg_lo_lseek
Nombre

pg_lo_lseek }

PE IE|E,!' 'PEP>0X2|8

Synopsis
pg_lo_lseek conn fd offset whence

Inputs
conn



8 '8 IE|I ,| 'P2''8IIE|2E 80P

fd

 F

(!O'E0P8E |/E~I#P>0X9,G8/8 E ' ,Ef

offset
8 '8 IE,09RPP9qP!-O

whence

E|| EE8 !yn8 Hn n8"nn88n

Outputs

"'|PE|

Descripcin
!oE,!'O',|/
pg_lo_lseek
8 E,>0hP|82

Uso
whence

offset

P20-8!8I|O,G'|P E 08RE,!'O',

yn  HnSn8"nn8nO

EE8 ! #8

pg_lo_tell
Nombre

pg_lo_tell }



82E'2 'IE,!'O', 9E#8 E!2EEI8 E,>0XP~|8

Synopsis
pg_lo_tell conn fd

Inputs
conn



8 '8 IE|I ,| 'P2''8IIE|2E 80P

fd

 F

(!O'E0P8E |/8,P>0h9,G8/8E ' PEf

Outputs
offset

,09RPP9qP! (8 E8(E

Description



pg_lo_lseek

E28'R'LE,!' 'P8 EPE8u 0E


pg_lo_tell
PG'Rh8#P>0X2|8P

offset

2P0o8!8

Uso

pg_lo_unlink
Nombre

pg_lo_unlink }

P,~IEP>0XP~|E

Synopsis
pg_lo_unlink conn idObjeto

Inputs
conn



8 '8 IE|I ,| 'P2''8IIE|2E 80P

idObjeto

]H]^]8%!9'PE2EX'8(09,/

8%'E|9'E 8,E8 P>0P|82


P0~''G8 eR0|PG
 

Yofo

L L t B

Outputs

"'|PE|

Descripcin
pg_lo_unlink

PP~,P>0XP~|8-!E 'EO8

Uso

pg_lo_import
Nombre

pg_lo_import }

'GE,~0EP>0hP~|8 8!8-EE |

Synopsis
pg_lo_import conn nombreFichero

c M

G

Inputs
conn



8 '8 IE|I ,| 'P2''8IIE|2E 80P

nombreFichero
8#|PGP8#8 |

G

| 

Outputs

"'|PE|O]H]^]o2E'2!9hEL'8(>9Foe8q'hG'GP8 '8/>0X,9q''G
8Yq
o 9|,G SL L t B !

Descripcin
pg_lo_import

'E |o!E 'EO8%(EP| ,|9|'E/8G'!G/XEX,>0

2|8P

Uso
pg_lo_import

8!"#"L

8P !''G8(8|0/8EP',2E80~| ',

pg_lo_export
Nombre

pg_lo_export }



E,~0IEP>0hP~|8IE8 |

G

Synopsis
pg_lo_export conn idObjeto nombreFichero

Inputs
conn



8 '8 IE|I ,| 'P2''8IIE|2E 80P

idObjeto

c8|0'EO8P%8P>02|8P]^]^]
9|,G SL L 
t B !

8h'2EG'8(09

Yo[o

P0X''G8

cST

nombreFichero

"PGP E#EO|

G

| 

Outputs

"'|PE|(]^]H]o2E'2E'8(>0o/8o0'PE'8(09,9o''G8Yo
9|,G L L 
t B !

Descripcin
pg_lo_export

!O'P P,>9h2|8  '8 8(EEO|

G

| E

Uso
pg_lo_export

c _

8!"#"L

8P !''G8(8|0/8EP',2E80~| ',

Captulo 49. Interfaz ODBC


Nota: Informacin de fondo realizada originalmente por Tim Goeke 1



D




/
9(EXo0P! P||O0'2'9 P|O0'2'8(P'9 E 88-o0P!2
E/o ,P!9 92EqEG'9q! '2'E''  'P|2EqEEE/'|0,ERO,h2',
!~2'8,
E~(
9 '''9 E'|99-8 E,8EO0(|E9#|0-''OO',|
8/E!E~'u8|G!2'8,I8hP!8h80P!2EG'0'|8GPXEE!8~'
8!3,''8,!O'P'IE''  ',|%9|!E,~0P'|9X!R'8,%8X8'9O|9oc
P~' |0



Trasfondo

 .
.?

8P( E(

?

!I P|O0%u'% E%'|9'P8I'%E''  'PLO,uE|%9E|0I8I89,

 Y



PGE9'P' P(
/ 8!99'9E|0880,|E,8~U!8EELE |h80 9
IE|If
o(~ ' /EP!02




8PO XL'% E'|9',f8IE''  ',L!EP8E P~O'%8'R~q/


E~'
2~!E U8 ,%889P~' |9h2EXEG'0 !u',%80PE!2'(
%E
8'R90E|0X P,9,qPE!98'!E,|'P'!O,GX',qE~'2f/
/E|''|





ew

-E|8I! ~'PqE|-E''  'P//


E!98 U!8 e8eO,| 98O,h~PO
P!880P! '|8E|8'|0G|089P'O|9!'GE E|8PEG
8 'IP!-880Pf!I,G'!G

r

Y?

EPq~>GE' !9GE,8~U(0|~2'8, (#(2qEP!02 PEo P|0E2'


~  9G|0',hG'!G,h80, !|8/
E!E''  'P '|8 hE,8'
| q  9G|0/' G'!GI''8L'h9E|9o8o89,/|'R'|9|L~U/'
G'!Gc~ 'IE''  ', ''|9 '|8 !







FE

E

c|!'P|o'!9'PE9,|88L,E,~0( ,|9'|EuO0ERo'/8'!0~'PE ',GE!2'/(E


G'|'!9Ei
) (>> E!PP8!3,'' 0E8O,8'PP!E9' 'E 9'2
G|0 '''!98-O,/E '|9~9 I

Aplicaciones Windows

8EOh

8X'- 9E''88'E'c| 'h'Pf8'2~(|'R8EPPo(


E,9| '#8 /

.,

F
P

.
D


F


P


P

!?2)pC

FE

E *"


D

( !!o'E|'
'E 8'q!PP98'O0G|0 (
/
8!>
EX
'E
EEE8-8!#o |/
8
q
8
'!E
EEEEEE!I'L '!  ,89|'L E|OEE'o e(
8|98%E|/ '!
| O8-| G'|LG-cO'2!!9o8!P''|E
E~ '|8 eP!> '|8

 

 
;D

Escritura de Aplicaciones

Z |! '2E|%E''  ',uE~%EP!02eEE8| '''|8''G8e(


~2'8,8EP!9P!%!P'o E|8%,9%E,2Ge8eP!E89, PG!
? (
#~2O/( !R !'9 |'P80PYo
\

cSc

 

EE8o'|9PGoG G
P D

8 G'| ( /
(E~( P8'Pu
'E
!'9' XE 'O,!P99q/!Ee8, EG|9,
e

:E

(

?

'!E 8!'('fP0~fR~G'|9f(0'|,09,f ,82PE E!8' 9


G|0-(
~- 8',89, !|8o', P|0P'f8 !%80P!E8
|'~E'EG|9 P'I E/
8'IP! 8E9,f o I~E'8P





 

9E22 ,:?( !8'f2E8eo!9O,G0'8R9|#|9'IE|8


Datos Externos

Fichero->Obtener

Sugerencia: Primero tendr que establecer una DNS.

Instalacin Unix

G



(E' 9'|IE'|0cO-8P!880P(
!PE,98/,G|,e2'
E'0>,~G!oEE' - | | |!'8hE,P8(20(8'| o ,8,!9PRR E!|8
#8'2EP'/
,|9|U8h'8'!0~'PE 'PE,0P



Gu

C C

Construyendo el Driver



.
G
SBB(

8E'GPE8PP~!X !88'RE!2'(
9 E'2E'IP08'2
/
-q(2E8P '!0'%EP!9,88'2I'!0Gu8,|82LE~!
8'Re(
/ '!9oEE~'2q(
-9 E | ''G8L',8P2E/EE8
PP0|! 2'PfEE|0Pq8 cR9|08GE o
8f'|!9E 'PEfE
'|!9'',8P-2LGe''%8,,098I0I8P EG|0,Eh|EL8 |
READ2EXEE8h| ,|9h8|98EPE9h',8Pu !| ,GE'G'8PE8P
ME
E'' O,GX''''|!9'O',XEE0IG ||





 





E



|2G8' |!0P E'2E'/P!9,(8u8'2(2E| E|0LEGE'09PG


8PUE,8G|~>,8'RE!2'(
X E'2E'8'2/
(



G





8,8 |,8eO,|E2E ', | IEE!2'/


|h!'8(G,EP89PG '|
9|'2 '|0G|0EIE~G'0'fE|9 ',O,|!9E 'RL'eE'0>,Ge!PP
98 LE(E~G'0'|!PE,9(Eo,9 E'0>,~G | 9E9E8,-|E2P
EO|,8 P|EPE~ ',Lh P|!0E 'PLEP8'28P O,|29',EP !
8( ,|0EO ','2!'GE'hE/' E'09PG !PP98( 08'G|9o!9
'| 'E2GE'| X P 8 PE o!E~G,-2E(,0,-E!E~', P|0~'PEPG Pu'
'|9PG 'P| !'hE~XE~E'8u  'G'|0u8 EGL8hE'0>,~GIE
'f2EEE8- ,|0E'8X#8'2~

G

 8) 


E





8('  0E''8 '!9/8, 0P8,8'!9'|0P~e'- P|!0E ',X88'REh9E|


'PL8IO,G!%|P% 'P'8!8e8'9| 'e8E %8P|8 ,G0OE0

8#E~'2EE8- ,|0E'8XG,8h8-2E'E/'!'8,'|0
configure make
' 'Ph8-!,'/ ''|0( PG(E9e8'8'!0~'PE 'PE,!9P~8-'|0' ','!'8
o P|2|'|98!00'|E''  'P|oO''|9oE(
E'09PGo E'0'
E'|0, |!8I'|!9'O',u'|0P~8IqO,|2|'|0IOE|8X'E'09PG
''|9~2'8,~e!,/'G'!G!IOE|8I ''|0q%!~2'8,0'|( P|EPE~O',|
8 ~> E ',!'G''









8!E 'E G|9q!| 'P'8E~'2E!2'(


PG%E~08'e8'!9'PE 'P/EP!9
29/E9'q8%|,~(%93|O'~o PG '|!9' ',G'|928 c|0P|  E,8~
P|EP8#8'2/
8!8-PE'!9,'XE'|O'E#8 9E|0f8 'I8'!0~'PE ',
EP!02-0E|0 P!98L'X''P P#f' 'P' ,GEE2E0u'!'8,
|0P| qEPE~I0OE0 ,|E2E G2 8E,8' 9,'h,2EI8!G
2E0h',q9E|0


n

M j j

0n

n
n

n

8 9> 9PL98cP8
8!9 , 8'G'|9/fEPE'8/E~ ''|0' ','|9P8|
XEE '8 RPEG|0

-with-odbc

(Uq''|eEf PG|EP8E

src/configure

% ./configure -with-odbc
% make

Xf ,|0E'f'I8'!0~'PE 'PEP!02

% make install



| R P|EPE~8P#E~'2(
!I P|!08'Eh '|!0'8(8|0/8-'
8E|'8Eh,9,I PEP||98EU0GXE,028EEO|u8/ ,|8PE~O',
8L'|!9'O',/
! P', 8 q8'O0P'E~'| 'Ef8qP,EL8!9'|
EP!02cE( %8 cf!8!0%EE8!E GP'E('-'U|8q PG|8PE
make
PG





% make ODBCINST=filename install

 #

8 9> 9PL89P8 8

#8E!90'|XE|'|!0' 'PEP!02%G|0'2E2EX'2| 29'|X8'!E,|'P'


PP28%9E|0-,~'P'|'#L8!(E!'(R~!',G- 0E''|/828'R/

|0P| 8! !9IG,8''8L8 '|!9' 'Pf

OP'GeEO|0(8!''8!



'!0G8GE2 0'

R U



E8' 0P'

,

XoE ,8' 9,'/8,|8! |OE|9'P9E|0!0 '

% ./configure
% make
% make POSTGRESDIR=PostgresTopDir install
|X8!'|0'',(O,GE,||0(8'9O|0oPP'!||9,| (EE8X!E '
8 2~',8!9'|, '' '9G|9



,

% make BINDIR=bindir
stall

LIBDIR=libdir

HEADERDIR=headerdir ODBCINST=instfile in-

0(9 98

8 9> 9P

|qU|0' ',/'!'8f|!0eO,|E2E8qo'e8'0'2E ',/E,!9P|P'9EoP


''IE!>E0%~0,E'% P|!0E 'Pu8P8~'2(
~ ''|0 E'0'
E'X|9,P|,q2EI|h9'|'|!0'8XEP,P8 cE|9EP!02q8 9,~G
'P 





8-8P'  ',XE,89 9%E-'''P~U/EO|,8OP (E-''|!9'O',


'!'8%

,E 9'2G|92O '0


/usr/local/lib /usr/local/include/iodbc
P0hE |X8 ,|8PEO',L8I'!0G%2EII'|!0' PG
/share/odbcinst.ini
9
'!0!/O,G
9!
|h '!9!



/share



/etc/odbcinst.ini

/share



M j

Nota: La instalacin de ficheros en /share o /etc requiere privilegios de root. Muchas


etapas de la instalacin de Postgres no necesitan de este requerimiento, y usted puede
elegir otra ubicacin en que su cuenta de superusuario Postgres tenga permisos de escritura.
XE'|0' ', 8L'E'0'2E ', ''8uEE8L''!L8!8L'8'!0~'PE ',
8,!9PhEE8-!,P9|'8I0~ f8 9|!'2|o'!0~'PE0P 0'PqG|9|8,
 9E'fE~ 8'0'P8 ',|q| | 


G

K

-,E'/E |u'LEEO|u9 ,GE~UG'8GE8'!0P'2 'EX


E2E0 'E8!O,GE'G'h P, ,G|8

O-)Eo(

% unzip -a packagename
PE ',
8
X| !'E8!| !L8L'PXE
-a
8 |,q9E|0

',

##0'|,E2E0 9 ,GE~'G'EP!'GE'G|0~> E9

tar -xzf packagename


|XEOE8 |9~E|L'|!9' 'P'!'8 PGE'9u8!8
~P,,E'|O'E#89E|9E EP!02

OP|EPE'I8'!9'PE 'PE'| 'E,8,!9P


|O-,8 |(9,

% cd interfaces/odbc
% make standalone

C|OP'eE |I0E8f''8-!'!9G8q8!9'|(!E!8q9|!9'~'O,G
EE |(2'R~'/E|8

ftp

XoGE2E0 PE |h0E8' 9,~'(2 '

OP|EPE'I'|!9'O','!'8,

% ./configure

8I P|EPE~ ',EE8 ''! P'PO',|

% ./configure -prefix=rootdir -with-odbc=inidir


8P|8

'|!9''P'P'',9OEO|,8 P!',8' 9,'P


'|!9'

-prefix

8
rootdir/lib rootdir/include/iodbc
#8' 0P'h!EO'E |

-with-odbc

odbcinst.ini

"P0!2EIGP,EO',|!IEEEE8!8' ,|!9E O',u'|0P~8E


9|P E|9>
PP 2eP ~OP9Pmr& Or 29>|O -prefix 9GPG L!

E'' h80u8h!
8 P|EPE~ ',

'|0' ',E,0P
!hE'' X,'GEE |
-with-odbc

PG''|L''|0|!PE PE,
O

odbcinst.ini

% make ODBCINST=instdir

G

GP EE8,PR'o'uEP'  'PE,o8c!9 ''|0' ','''|uE


O,G|8,%8hUG2380G!P'!hE'' ''|!0' 'P8h'%''P'%',%8
O|P/8L P 2,o!8u2Euf8'2o| !'9!P%'E2'  ', Ef8 |
P8P '|! '|f'|0|0 8E!9'0E'o'LR'P'82E '8 u8' 9,~'8

M j 

'|0' ', EPP2'OG|0' E!PEP~8Ph8O2RR8G!2E


'G'LEG'9'%8'R%P8'|0'LE | ,8P '|! '|ff8'O0P'EP
89 98'O0P'!E 'E 8EPE!9'u''|L8O,G|8,(8'
P8 O,|E2E# ,
'9|9,8P#

9% E
t|O9|!9',O,8'Ph9E|0,

% make POSTGRESDIR=targettree install


8~o!E0'9E'e'h''P /L'P 8' 0P'P-E'| 'E'8%'|!9'O',GE,qE8
| !'9q|'2'P'E8'|!9'O',(O, 9/'q'U|e8#EG|9,
make
!8!9R~'P'!, 8 9
8o(E c|(
#8 E!9'0E2|
install
8XE/ %f8# 9'''|%8PEG|0Pq8GPI,'2'|~%2EI 8 c
8(o8f cEE8uEP'O8P-u||E28' 9,'2EoE!9!E 'E2E2
/
L'|8E|8'|0 8E(# %f8# 9

"





  $





D"



# 

,

(2EqEP|8E!0LE,8'!E 'E R~',qE!9'|,e E'UO'0G|0

% make BINDIR=bindir LIBDIR=libdir HEADERDIR=headerdir install


8,0GE'P0 '|E



% make POSTGRESDIR=/opt/psqlodbc install


cE!E 8-RP8E!8

29|8~- PG/ P|! E| 'P8-'


./configure make
P'2'',0 EO|P88 P!~q!('|!0'8,o'P88' 9,~',
/opt/psqlodbc/lib

!EO0'2G|02

/opt/psqlodbc/include/iodbc

8# PG|8

% make POSTGRESDIR=/opt/psqlodbc HEADERDIR=/usr/local install


P !',|~-2E '2'P'',0 h'|!0'8#,E~#E!2>,8P#''((',E |,
8- P  E'P 'EO'E8P#',8P~!9(|h9E| ',| PG/!-!E~ EP
cR,O,|9O0 ,',eG|9|8P

Ficheros de Configuracin
P|0'|G'|c,G 'P 8GO !!EOUEOG8E!E~'E~Gq8'R
~/.odbc.ini
E!2'(
/8E8 |LEX ,|R|O',|9''OI8/',|'R,%8/fP'0u8 '|
8 !E(IE8-!9I!0~' 'PEE8 | ! 9E| 'P|~

FE

.

8EO|
0'|98! 'PRPE'88qE'Gq
.odbc.ini
[ODBC Data Sour' 88|''!98X|PGP%~P'0~~',%8! 'EO',|oE~ 8P!h8
ces]
80PfI'2EE!  |~8I!PE|8! O','I8|,G'|8(9I,E E
'8 0'P/ '!9'IE|I8-!9f! 'P|E, E P! 8-80P 8! 'P8P
!o9'2E98LO,f|PGPL8E 
8PL ,|9|o'
[ODBC Data Sources]
!'2E'|0|0~E



u,

Driver = POSTGRESDIR/lib/libpsqlodbc.so
Database=DatabaseName
Servername=localhost
Port=5432

M j

Sugerencia: Recuerde que el nombre de bases de datos Postgres es por lo general una
palabra sencilla, sin nombres de trayectoria ni otras cosas. El servidor Postgres gestiona
el acceso actual a la base de datos, y slo necesita especificar el nombre desde el cliente.

88'|!9,9/|98(E~u ,|9,'o9,G982'!E'' 'Pf,E


9 OeO ',/|O~'q
'e E8PO,|9||'eE'Pq 'R
[ODBC]
InstallDir
8G8P0,E ',|

2EE(EO|
8f~0GE',2EqGE!0~''|9PG ',/8qO !I~
.odbc.ini
9fP!f8-89,

[ODBC Data Sources]


DataEntry = Read/Write Database
QueryOnly = Read-only Database
Test = Debugging Database
Default = Postgres Stripped
[DataEntry]
ReadOnly = 0
Servername = localhost
Database = Sales
[QueryOnly]
ReadOnly = 1
Servername = localhost
Database = Sales
[Test]
Debug = 1
CommLog = 1
ReadOnly = 0
Servername = localhost
Username = tgl
Password = "no$way"
Port = 5432
Database = test
[Default]
Servername = localhost
Database = tgl
Driver = /opt/postgres/current/lib/libpsqlodbc.so
[ODBC]
InstallDir = /opt/applix/axdata/axshlib

ApplixWare
Configuration

G

02

(E' 8P!O,|E2E8 ,~ 0G|0IE2E%88%''~!I P


 !/I',e8'2f/
8EP!9P

M j



89>998|XR  hK8 8I89PqOP0o889# 


8!9e'|0EO ',| !P~o'oR~!',;|
C |C 8(E'G IL8'| P !2''2
P|9''|h
S.Ur Ur cOmr& /yr 9|(
Ur P EI'|9PG 'PG80''8P
EX2E
EE8X| ,|9 'XP'P
XoPXG,8'E  8E |
axnet.cnf
elfodbc
''P0 ,GE9'8
9e8G'|'08,/8GE'E,!'9'2,L(
-P8!9
libodbc.so
P'2'',0 q2'|'| 'E'8e Po'q8'!0~'PE 'P(8foEE' !EE |
axnet.cnf
| !'9IG,8'E E~ 2EEE|0I'IEP'  'P ,~ 0|



GuE

-,GhP,08'9-,EO|
|Xo,E|,8#EO|

applixroot/applix/axdata/axnet.cnf

XPE!2E'IU'|2E ,G'|I ,

axnet.cnf

#libFor elfodbc /ax/...

!-G2' 'I''|EI2E!'

libFor elfodbc applixroot/applix/axdata/axshlib/lib


'GOE8'h8''c,8PoPEXPE!2EX!9h8' 0P'EX'''P~Uh8
,E,~0L(
/#|u'|!9'8 oEE'  E'2E'P0!'0'P GP''
9P 9,~'O,|! E| '|



G

OfE | .odbc.ini O,G!8! 'P'I|0'PG|023GPGoEE82E


|8'#'|8' 8,

TextAsLongVarchar=0
'P 'P!E U8 X8hP!8h80PI8
X
9 0h|h!G,!98,q ,G



.odbc.ini

~/2E', GE,E

**BLOB**

888|X9q 28S>P8U99H
#> E0

8 o889



|

Applix Data

X' O',| 'P! 8-80PfEP!028!L'|9 

e#82P e2
#' O',|h(.-RG|PXO'' G f EP!/8/E9,2Eh ,|8P
8P'XG,!9PoE!h8h2E
E~E |
.odbc.ini  |'|9|0XO,|0 9e P |Host:
!9X2 '9E|LIUP
P0
field

|X' O',|

8

G2E'|%EPE!O'P! E 80P!

' 'P|o'hP!o8%80P G'/O0(8(8'',PL2Eo|h!'8u'|hP

 |0P| q|PIO'' h



e 9|9,8E e|,GPEGE!E'O,|0~! |G'O0G8u8'',P8


'8|0'8  ',|X|PI '' X

Z

(P'/2 90'|G'c,8PI!~2
'/!2E'|'|c~',-'2E'8/8('hR|
9|X8(89,#8E /E|XR|9|XEX~,0PRX'X! O',8/8EE 'P8
P!>
|

C|

8|G|!!>o822EO ('/!2E'|/'|c~',q'|2E'8o8'/2|0|(E
89,8!9/'|8' 2EIE0'8-|PI!EEE'' ,|!8'0

#' O',|E|/0P'(8E%(E2 -|,P!o9P'!u|9,| -!' 'P|%/E~P


(EEX O8O'P!h8h80P8~'G~
8'8h'92'G
G|,q8P~UEO ~

M j

Problemas Comunes





8,!'PE'|9G|!!0E83  'I|P8'|0|9E|I ,| 'P(


9 f8 oEE' o9



G

,

"h88/'|E!UI,!R'8,
elfodbc

|X88 | ,|9

libodbc.so

|2E!LEO|

axnet.cnf

.,s? B B ,, - '(D/ - o~'2?|P|/P8#8'2!E 'E 8o|


|88X| ,|9P8'2f!EO'E 8X
P '82E
libodbc.so
.odbc.ini

8,88 !' /
EE8(OP!
'P!>E0

,

#~2'|P !#EP' P0



8EP !88'2E|-9~G'|88P'8%' Eh,P'EE8q2Ee|%9|2


E|IR~!', 9E''88#2E0 (
8E,02%



S  ,!9''(,'|'E3'

!9E'L

G

C C

8R~!',u8I!E0'GPI8I(E'  | | 9'%E'G2~!',u ,!PE,9


PE '8q/
P!>8'| PE!|0eEPP'G P/|PGP8qE!8~'%P8e
O8',e,O|/ RO~ 0q8-'P|P'9Eeo! ~'O',8,EPP'GI P|0~'PE'8
EP92 GEP' 





#t



Author: Contribuido por Steve Campbell 8 on 1998-10-20.

U0G8L!PE'88,P~G
8
EOO8E, !,EO|,!
axnet
axnet
| o ,G|PGP(8|E!E~'LuGEG'!0Gh8o E'9'E' E!E'P8o28
8PU/0 E0 PG!PE'8E%,P98%0oP8EEEo'! ~'P' 8
8' 0P' EE!E~',oP~UL8E8!,G|8!9,8!'GPPP22E|
9|2/'8I8-2 9'h8|,2,e8-2E'8L,2P I0





Depurando las conexiones ODBC ApplixWare



|PE|%|~G'|0E'8EE 'P8E,P'Gq8 P| ',uE!%2'%''

 'P8P!'!9G |

G

strace

8888h 2L 9
E #
X0REEUG
#E, !h |~EP~>GE',
O9 |' 'EO,G|8
strace
FE

ps -aucx | grep ax
|

cary
cary

10432
27883

0.0 2.6 1740


0.9 31.0 12692

8|9,| q0 80

strace -f -s 1024 -p 10432

M j M

392
4596

?
?

S
S

Oct 9
10:24

0:00 axnet
0:04 axmain

OPGEP'I!''8I8-0~OP

Nota de Cary: Muchos de los mensajes de error de ApplixWare van hacia stderr,
pero no estoy seguro de a dnde est dirigido stderr, as que strace es la manera
de encontrarlo.

:|JGyYF#:*YYSD FDG f #9 2FY|m


mf#:IJ| f
uOFJ
[pid 27947] open("/usr/lib/libodbc.so", O_RDONLY) = -1 ENOENT
(No existe el fichero o directorio)
[pid 27947] open("/lib/libodbc.so", O_RDONLY) = -1 ENOENT
(No existe el fichero o directorio)
[pid 27947] write(2, "/usr2/applix/axdata/elfodbc:
no puedo cargar la biblioteca libodbc.so\n", 61) = -1 EIO (I/O error)

Y 0Ga0Ffme8:0G#0SGGIJ3Y[SaGGF IF|h
fJ| mG@YyY*FG:K us [fIGJf G |Y
Ejecutando la demo ApplixWare

 mFGDJm @ &b8fe[# #f|&f&lfYG#DfeGS# G @UmG


G yUYeeHu(J|G ke f|2 f|KY  |Dfe G yJ G yGJJ
f|[ @D[FGfGF
9.
U GSGS[FG ^UGK YU #F.FY#e
mGJYJ>fGF9yG| k
 me @Y#KeFG S fNGYGGJ

 
    
OAG /opt/applix/axdata/eng/Demos/sqldemo.am 9Gef#FmG.GF[Sk
!OG#DY#fFG>Gf F sqldemo.am

"I$ #&G& % fG Y ')(k9 (
N!DSGGG& %S[G Y '*(+(
, -#GfG Applix Macro Editor
. |KF[eYG@ ID Macro Editor
/ 0Gf[GF 1  2432576$89 2  *: ;
< 0 GK Macro Editor
= -#GfG Applix Data
>  0Gf[GF ? 35@$A7 0 

B  -##eF7 C fK GFN IGF JfH fGGE DG FH0
I.|GDNeeYOGG&DYJ OG# KD #FK J#OGYG
GmGFN& C Ge Ls
M Fm|GKYyf  C ff@>G ^J G ^@

NO4P

*] GG#F| [&OYF|*uY mGfF#| Y ]D |DGD YU* #F:u7^


feK feKGG[GY# S GGA YJH@fe ~/axhome/macros/login.am
mAGN

Useful Macros

macro login
set_set_system_var@("sql_username@","tgl")
set_system_var@("sql_passwd@","no$way")
endmacro

Atencin
Deber tener cuidado con las protecciones de fichero en cualquier fichero que contenga informacin de nombres de usuario y contraseas.

_ Yhkah `&bcl" 0mIcI "G0mdO`G IGG d3lEdfd9e nh_ &


`G dF7od;d
h _7g dFhI G[d)f&hdF`oh G Ac i9dF YG`G d # g h d _ d e;g # dF7KhndGjdFd
jdh
g
g
g g
_ g g _
g
_ g
7d YJ g h

Plataformas soportadas

Notas

NOz

e p`Gd@ #dhkDahkq> _7g hYY8S(


dfe
!pJ _ srr93O GYGJGYs
dfetr
,pJ _ s rr93O GYGJGYs
dfetr _ Ya`&dFur
. e p `G d@ G h g #
hn q _ dYJ g hYa `k d g
/pJ _ s rr93O n !!M d g v r g h hkbwI"cr(&dF
^2! ! I g x
<pJ _ s rr93O GYGJGYs
dfetr _ Ya `&dF
= e p `G d@ If e _  h `&`&qy`&h g
de
>  e p `G d@ If e _  h `&`&qy`&h g
de

Captulo 50. JDBC Interface


Author: Written by Peter T. Mount 1, the author of the JDBC driver.

{I" G9
d g h 7-Td|{S
}`G h g ~-# _7g dFGh!9IJ  g inhd*Gjh g #
h!jd
0u. ^#
dfe _ `GG  # nh
_7g dGh TS{I"I g Gah g  _ h.GGf jhJ @#oh: g Gah g G> g G#jh
GPostgres
0 g h{#  u 3
dfeeG[Sh*G3JohK J  nh #&d98ohJd g D _7g djdFEdf`kn"hf nhdF
#Gn JoO
h g Gah g G _ G` S#d g e Gh _ h h m :b 
h
de _ &`&h  #oh g Gah g [Shh:nhdF
 _ G` #d g z
e
Building the JDBC Interface

o h: g G h g #&dF g
h:Gy`&dF[ShaGhJoh
 h[jd )d#oh:ndF g
h
g h h(Y~d
de _ &`&hI&e _ `&
[SahK g h[jsrc/interfaces/jdbc
d g :d:#  g hYjd g E 8#g _ h g

Compiling the Driver

% make

_ dF
dfe _ `&hJ& do adF99&`&`8Joh g fGah
G*GH#oh${2I"2 g Gah g

postgresql.jar

GO#ohf gg h ( g h[jd g 

Nota: You must use make, not javac, as the driver uses some dynamic loading techniques
for performance reasons, and javac cannot cope. The Makefile will generate the jar
archive.

md3nh:Joh g G ah g Joh$ g g f Gah _ dFIJ g hI`k J g o h h>jd;h:GE`&7haG`JohD


 i`

Installing the Driver

0u04^

Example
D-  ah8 _l_ `GG[S#&dF J nh:#oh){I" g Gah g d` fEhI:`G g h8 J nh0
dF# &^
G8 Y g Fd od
e Gf`odFkhf# E-@ ah>#oh! _7_ `GGf J&d0 Joh g Gah g GY#4`&`&hhG;Joh
(r  g ru`&Fd f`+rmG` G
 g h[fd g
0#ohJ |DGIJ`&`&h3Gr g rm`&df`+rED  <
md g 8JoKh _7_ G` Gf J&d 4A- d 7G` 3nh
export CLASSPATH = /usr/local/lib/finder.jar:/usr/local/lib/postgresql.jar:.
java uk.org.retep.finder.Main

NO U

dF GJohK g G ah g G *
dah g h*`G h g dF9G9#G*[ _  h g

Preparing the Database for JDBC

"h fnh{ S9f Fd oG` inh9DTrm-z


dFohf#&dFnNJoh Postgres _ Fd Ye SIjh g e YUh
g G
9G#9Joh^# N
G` ndf #oh pg_hba.conf 7`&heYh
d g hU-j#&K`&dFf h9G
JohD7I  g hfd g 
-
h #7G` GY#`&G` S#&Fd o #G^7`&h _ h g eGJHS[
hYKdFo`GO:.G>deSG
dF
Dah# sd g #oh
{I" g Gah g jd
Fd oh fjd JoKh I4eh`&d fG` oFd Y d 0oh h 3d S0ndeh #GG` &Dh
host

all

127.0.0.1

255.255.255.255

password

ih g h [
hI^jd`&`F Jnh* g h _ dYY&`&hK g dfe #oh$`&df`fe fGohK9G#{I".
oh${I" I g Gh g n _7_ d g J* g  Y Ghj _ YYd g 0 0 g _ Joh#Gf J&deh#odF
Using the Driver

GDh
#&dFGKodf@Goh7hh D.Edfe _ `&hkh!aGhdG{Ic" _7g dF g eeGf7Yod7`G
oh ` _ jd` h *a dfzn # g jhU d g ed g h
Gd g eJ&d g hh g jdJoh8n#S g {I" 7-U7d^

eho #4 #& dF^ `Gn daJ Dh:


`&dfdD4 #o hwh4e _ `&hG
`&7ha9&##oh:ndf g Ehohw YG
hu e _ `&hG n h0o h g h

Importing JDBC

:nd g
h#4nh{2I"zoh h|jd&e

_ d g o#oh  Ya` _
D h 4YGy

import java.sql.*;

Importante: Do not import the postgresql package. If you do, your source will not compile,
as javac will get confused.

Loading the Driver

"hd g h
d[Sz
dFoh
jdi;J  nh @doh htjd`&dF Joh3 g Gah g (oh g h9 g hG#d
eh J odH  &`G`&h  0&7h _ hdF8df g
dhdJohhndFohjdnh
-w# oUh g nfeh Jodld g
dFh&e _ `GG[&j`Gc`&d #ohU g Gh g YG#oh Class.forName()
eh J od UYd g Postgres adf0 d7G` ) nh
Class.forName("postgresql.Driver");

NO

G.8&`&`|`&dF Joh8 g Gah g   9&`&h`&d GaJoh8 g Gah g 9&`&`^7dfe#Gf`&`G g hGnh g


&#n h `G9& J*
{I":
dfhuo h forName() eh Jodz[ # g d ClassNotFoundExceptionAndadf 9&`&`
oh hG
df Jf
& Go #o hK g Gah g G*odf  &`G`&h
GGw
Jo hedn U
dfeed}
ehk#o dF
jdn h o g hn g G
#!df g
dFhjdhjn Post
n



a
f
d


d

h

e
S

E

h
I

o
f
d
#o h  J n hG* #o h 7 g h SS d3 dFo #p7nhd g
g
hgres
~ hY& dFn #o h Jo hKn h
d) eh Jo dF3G*g GY `&h
o hDn h
dF*
eh Jo d SIn hK Jo h g Ga h g  _ g 4 eh h g dc#o h{ & n J g Jn YG
Jo h
^I g a 7eho msu e _ _ `&h
% java -Djdbc.drivers=postgresql.Driver example.ImageViewer

-JGh4e _ `&h fJoh{ 9&`&`Ajhke _ vjd*`&dF 8#oh. g Gah g _ g dN&j#&G&#G4`GGI4#&dF^


b:EDh d ohk~Joh-e ahk^&hh g G*n# g jhU
Fd J Geh JodGw#oh*hkjh g dFoh*jdnh*hfnh8&`&`&dF9Odf g
dhdhh
9&# *dJ oh g J  nh n 9&# odf7 g hEdfe _ &`GGG#oh>
dFh[ohydFo`GG#GG#4Gdf7`Gh`&d
f aDh GTJ oKh c^  9Gf8GH
d ah g h8ohmm
b:hG` SKJ GN~ oh ad g
Fd h# oh  g &h dd _ h h
Fd oh
# &Fd oA S2df2 h  No
0m: u
h J &d *h GJ Fd 9ouJ GDG d 4aG` O[4 h  J oh &^
adriver
h g odfoavailable
hGOGG#oh
`G Y _ Jo_ d g #ohD`&7hKGg Joh _ g ehk_7h g g odfohGEd gg hEm g
Connecting to the Database

2&J{I"84#h
G g h _7g h[hohh8HJGd g ehndf g
hOdF[4d g Ls2&J
# G# 4Dah Fd ohdo#ohDd`&`&dF9Gd g e
Postgres
( _ dn# g hYa`k database
 ( _ dn# g hYa`kr7r >hos r database
 ( _ dn# g hYa`kr7r >hos ">poh r database
9oh g h
ohKodnJehdJohKh g a h g Ih#7`&J|dw(+`&df`GodFn([

host

oh _ d g ^ o7eh g #oh


nh g ah g G`GGjhGd^~Ih#7`&#yd8#oh
7dnJ g hnJ  g
_ d g eh g J/.,k!Ls

port

ohK#4nhKeh

database

md.
dohEj adf0oh h*jdh dFoh
J&d9Gn# 
hK g dfe{2I".m~ddw#Gn adf8d7`G
 h#o hI g Ga h g S a h g  h # do hE J& dFo J2Loeh Jo d*
Connection db = DriverManager.getConnection(url,user,pwd);

N

Issuing a Query and Processing the Result

 w#&ehDadf09 ojdGYn7h$0m:8JhkehoJjdJohJhkSadf g ha g hD$0uJjh eho


Gn# 
hb.
hHadf h^0uJhkehoj[dfOf nh#ohTh~h
7jh ch g JL~eh #odFdGIn7h
a 7h g (m@&U9&`&` g hk g
hn`&j0mh GnJ 
h 9G[8
doJ G#ohho# g h g hn7`&m
ohd`&`&dF9Genoh
dFIG7h g h09ohGYGJoh0uJjh ehoGoh g #
h

Using the Statement Interface

dF odfh9 f ndfd nOh >0uaJdfhkd ehho}^#Goh


n#
d
hOoh
J&ed7  #}&ehnh8 &H>ad df#o9h

odm o hdfEJ&dF
d7`G`GGh Jg &he jhh
_
g
df0  ahd g hkeh eh g #4dFo`GdFohhn7`&j0uhkf huGn _ h g 0m#jh ehom
- FGdf
nKhoh h dJjod h _ h 0ug Jd g hke eDh om 7 h g !9&`&h _7g Fd
h YI&|h n7`&0mh jl df
f Y&e _ G` . g h kjh
g
#


f
d


Y

jh0m# jgh eh o d  h gSh [ # S Sh  8*nh ah h2h g (` d g J ho h YnGh 
J &Jd oh *EFd J a h  SGhk adf Gh eS n  *nDh 0mh nh `&_ hk# ^
g`Gjh G)#G7d
7gehoGg d h$#Gg oDGdFYGG#ohke(g &
dg ah ndfeh!&e g d ^
g
g
g
_ g
J o _ d GoJ u
ohd`&`&dF9Genoh
dFIG7h g h 09ohGYGJohhn7`&j0uhkGoh g #
h

Using the ResultSet Interface

uG g h j g  g 7h9GTJoh g h9G


"h nh72d `&jg 4h ghaeGd `h& e hd #S`&7ohn`G
 &deh  nUh|f#o`&` h next()
g
g _ g
_7g _ g
g dF d gv_7g d
hYYGy
7`&h (h g `&#Joodfh{I"a J_ ohh.

 d9h[oYvoJdf&7e`G0h  Jfo
h hYy7h `Gdo `GwGadFh E9h&-`&`A#&`&Y`& dF hndfdn#d8G
DcfjEdchIJDG
g7h `G0STe #&eh* ^gdg 39 os Postgres g g
dfe nA
`&d nKh |h n7`&0mh  Of`&`GG close() dFEhKdf; ahGYoh39&J0&m

.b 
[h Dh ojG` d d g h h 9hGJ odf
J Kh oGh Hg E`&Fd7nh h g U: 9&J # oh0uJ jh eh of nh *jd g h 4Uh |h n7`&0mh j # oh
gg
_
he

_ `&hG*S*df`&`&d9

Statement st = db.createStatement();
ResultSet rs = st.executeQuery("select * from mytable");
while(rs.next()) {
System.out.print("Column 1 returned ");
System.out.println(rs.getString(1));
}
rs.close();
st.close();

N

Performing Updates

md _ h g d g e  _ jhJd g Swdf#oh g 0m.8n#4h ehoaJdhod


Y& e _ `Gnh#oh executeUpdate() eh Jod*

g h  g O g hn`&jLdf

st.executeUpdate("create table basic (a int2, b int2)");

Closing the Connection

md:E`pdnh#oh#4nhK
dohEJ&dFoY&e _ `G[4`&`JohK
`&dnh JLeh Jod)jdJohKdFoh
J&d*
db.close();

Using Large Objects

-

G` hdkh
#|J#`GndcDodF99 Kl&
LA hnhGjd.od`G04#K&#oh4# nh
#4Postgres
Nf odfh.ng d g h`G:od g e`70u.J`&hohg 3 g h!jd g h` 4`&haru-#h _ g
0 g h g h h g+g h *j
d g de df g d9J`&h: bc-2IV`&7h
Importante: For Postgres, you must access large objects within an SQL transaction.
Although this has always been true in principle, it was not strictly enforced until the release
of v6.5. You would open a transaction by using the setAutoCommit() method with an
input parameter of false:
Connection mycon;
...
mycon.setAutoCommit(false);
... now use Large Objects

dF#oh g h g hcJdeh JoddYG g hcbc h


JuSoh: g GJohOnJ  g {I"
9 E  iGd
7ehojhioh g hohdf#oh g nhydf g dF9h~hI&dFjdJoh
_ &8Gf
hln h #$ #o h`G& *`G hdkh
7-d{#  dGGGhah*ahkjh f
hYjdG`G hyd^
j_7hg
# J ) Jo h> J_  gg U -o jh g `&`G
uJoh! g Gah _7g g nhJohhmjhY&dF)g d _7g dFGh`G gg ahdf^
jh
n _7_ d g m
-* {2I" ~#o h! J  g 39  jd9 fE hI Jo h e G IGG Jo h! h j"G g a 0m g hleJLehk#odFG
h 7`&j0uhk 3n h j"G g a 0m g h[ eJLoeh Jo d;G8 g h _ g h7 0uJ jh eho mIo hn heh Jo dT e ^
DahyJo h`G g  hydkh
 _7_ h g  {# n g h eu `&`&dF8G0 d8jdn hJo hT  & d _ SE D  h
*
df#o h g n dwe  _ 7`G jh$Jo hdkh
s
a d g hu e _ `&h Fn _7_ dFn h. d` a hw # `&h.
dFo #SGG Jo h.7 `&h. ehcdFN & e  h  
`G g a hdf h

dFo #SGG #4 & e  h
create table images (imgname name,imgoid oid);

N4

md:Gnh g
&e h d0d7`G)nh
File file = new File("myimage.gif");
FileInputStream fis = new FileInputStream(file);
PreparedStatement ps = conn.prepareStatement("insert into images values (?,?)");
ps.setString(1,file.getName());
ps.setBinaryStream(2,fis,file.length());
ps.executeUpdate();
ps.close();
fis.close();

dF GG#&hue _ `&h Snh j"G g 0u g hl4e g Y2h g Hnh Ao7eh g dohH g de >n g h4e
Go d:`G g h$dkh
j 0nd g hTJohbc-2IVGod#ohK7h `G0odf`GG
g hh g hl
hjd&m
hk g & hG.
&e hDG|hahh Y&h g J2-#peYG: g h _ g h[0uJjh ehooh g h 7a0mJhkeho
f
ha  `&`G
h$n h Ls
PreparedStatement ps = con.prepareStatement("select oid from images where name=?");
ps.setString(1,"myimage.gif");
ResultSet rs = ps.executeQuery();
if(rs!=null) {
while(rs.next()) {
InputStream is = rs.getBinaryInputStream(1);
// use the stream in some way here
is.close();
}
rs.close();
}
ps.close();

dF oh g hdf 0hkh8h g hJoh> g ahbckh


@G g hk g &hah[ S)- _ 70m g hkez d#p`&`
`Gn d:odfJGEhJhDE`&dFnh#ohKn g hehd g h _7g dFEhIYGw#ohKohm g dF5G#oh g h7`&mmG
G _ g ~du#ohT{I"0 _ hfG[4#&dFof9G[.n#jh#u -# _ 70m g h4e g hk g ohOG@E`&dFnh
9o h
h 7`&j0uhks o hm jJLod g |hn 7`&0mh m
`&dn h JLGH[4 `&`&hU
Postgres Extensions to the JDBC API

G h mjh Y&`&:


h J  n.h Ynh ez dfa[ S`d g d9EJ&dFyd*#oh
Postgres

Dah9Gf0f JohGhf`&`&h0 g dfe a7h g &hnd g hah
0df g dF88JJ _ h
Fd  yJ oh n

h .h S[&G` &J &h  G7hjdhO d |#oh e de{# 9&#a


nh |dF
h~h Y&Fd 7-&# gm0mde
h h j g h !9&# GJoh8
d g h_7d_ Jg oh9nJ g g g Gah g
j4`&`Gnh
#ohhh~hY&dFjd&e _ `&h ehoA g uhbckjh
#nh #
Accessing the extensions
To access some of the extensions, you need to use some extra methods
in the postgresql.Connection class. In this case, you would need to
case the return value of Driver.getConnection().
For example:

N S

Connection db = Driver.getConnection(url,user,pass);
// later on
Fastpath fp = ((postgresql.Connection)db).getFastpathAPI();
Class postgresql.Connection
java.lang.Object
|
+---postgresql.Connection
public class Connection extends Object implements Connection
These are the extra methods used to gain access to our extensions. I
have not listed the methods defined by java.sql.Connection.
public Fastpath getFastpathAPI() throws SQLException
This returns the Fastpath API for the current connection.
NOTE: This is not part of JDBC, but allows access to
functions on the postgresql backend itself.
It is primarily used by the LargeObject API
The best way to use this is as follows:
import postgresql.fastpath.*;
...
Fastpath fp = ((postgresql.Connection)myconn).getFastpathAPI();
where myconn is an open Connection to postgresql.
Returns:
Fastpath object allowing access to functions on the
postgresql backend.
Throws: SQLException
by Fastpath when initialising for first time
public LargeObjectManager getLargeObjectAPI() throws SQLException
This returns the LargeObject API for the current connection.
NOTE: This is not part of JDBC, but allows access to
functions on the postgresql backend itself.
The best way to use this is as follows:
import postgresql.largeobject.*;
...
LargeObjectManager lo =
((postgresql.Connection)myconn).getLargeObjectAPI();
where myconn is an open Connection to postgresql.
Returns:
LargeObject object that implements the API
Throws: SQLException
by LargeObject when initialising for first time
public void addDataType(String type,

N

String name)
This allows client code to add a handler for one of
postgresqls more unique data types. Normally, a data type not known
by the driver is returned by ResultSet.getObject() as a PGobject
instance.
This method allows you to write a class that extends PGobject, and
tell the driver the type name, and class name to use.
The down side to this, is that you must call this method each time a
connection is made.
NOTE: This is not part of JDBC, but an extension.
The best way to use this is as follows:
...
((postgresql.Connection)myconn).addDataType("mytype","my.class.name");
...
where myconn is an open Connection to postgresql.
The handling class must extend postgresql.util.PGobject
See Also:
PGobject
Fastpath
Fastpath is an API that exists within the libpq C interface, and
allows a client machine to execute a function on the database backend.
Most client code will not need to use this method, but its provided
because the Large Object API uses it.
To use, you need to import the postgresql.fastpath package, using the
line:
import postgresql.fastpath.*;
Then, in your code, you need to get a FastPath object:
Fastpath fp = ((postgresql.Connection)conn).getFastpathAPI();
This will return an instance associated with the database connection
that you can use to issue commands. The casing of Connection to
postgresql.Connection is required, as the getFastpathAPI() is one of
our own methods, not JDBCs.
Once you have a Fastpath instance, you can use the fastpath() methods
to execute a backend function.
Class postgresql.fastpath.Fastpath
java.lang.Object
|
+---postgresql.fastpath.Fastpath
public class Fastpath
extends Object
This class implements the Fastpath api.

NN

This is a means of executing functions imbeded in the postgresql


backend from within a java application.
It is based around the file src/interfaces/libpq/fe-exec.c
See Also:
FastpathFastpathArg, LargeObject
Methods
public Object fastpath(int fnid,
boolean resulttype,
FastpathArg args[]) throws SQLException
Send a function call to the PostgreSQL backend
Parameters:
fnid - Function id
resulttype - True if the result is an integer, false
for
other results
args - FastpathArguments to pass to fastpath
Returns:
null if no data, Integer if an integer result, or
byte[]
otherwise
Throws: SQLException
if a database-access error occurs.
public Object fastpath(String name,
boolean resulttype,
FastpathArg args[]) throws SQLException
Send a function call to the PostgreSQL backend by name.
Note:
the mapping for the procedure name to function id needs to
exist, usually to an earlier call to addfunction(). This is the
prefered method to call, as function ids can/may change between
versions of the backend. For an example of how this works, refer to
postgresql.LargeObject
Parameters:
name - Function name
resulttype - True if the result is an integer, false
for
other results
args - FastpathArguments to pass to fastpath
Returns:
null if no data, Integer if an integer result, or
byte[]
otherwise
Throws: SQLException
if name is unknown or if a database-access error
occurs.
See Also:
LargeObject

N4P

public int getInteger(String name,


FastpathArg args[]) throws SQLException
This convenience method assumes that the return value is an
Integer
Parameters:
name - Function name
args - Function arguments
Returns:
integer result
Throws: SQLException
if a database-access error occurs or no result
public byte[] getData(String name,
FastpathArg args[]) throws SQLException
This convenience method assumes that the return value is
binary data
Parameters:
name - Function name
args - Function arguments
Returns:
byte[] array containing result
Throws: SQLException
if a database-access error occurs or no result
public void addFunction(String name,
int fnid)
This adds a function to our lookup table.
User code should use the addFunctions method, which is based
upon a query, rather than hard coding the oid. The oid for a function
is not guaranteed to remain static, even on different servers of the
same version.
Parameters:
name - Function name
fnid - Function id
public void addFunctions(ResultSet rs) throws SQLException
This takes a ResultSet containing two columns. Column 1
contains the function name, Column 2 the oid.
It reads the entire ResultSet, loading the values into the
function table.
REMEMBER to close() the resultset after calling this!!
Implementation note about function name lookups:
PostgreSQL stores the function ids and their corresponding
names in the pg_proc table. To speed things up locally, instead of
querying each function from that table when required, a Hashtable is
used. Also, only the functions required are entered into this table,

Nz

keeping connection times as fast as possible.


The postgresql.LargeObject class performs a query upon its
startup, and passes the returned ResultSet to the addFunctions()
method here.
Once this has been done, the LargeObject api refers to the
functions by name.
Dont think that manually converting them to the oids will
work. Ok, they will for now, but they can change during development
(there was some discussion about this for V7.0), so this is
implemented to prevent any unwarranted headaches in the future.
Parameters:
rs - ResultSet
Throws: SQLException
if a database-access error occurs.
See Also:
LargeObjectManager
public int getID(String name) throws SQLException
This returns the function id associated by its name
If addFunction() or addFunctions() have not been called for
this name, then an SQLException is thrown.
Parameters:
name - Function name to lookup
Returns:
Function ID for fastpath call
Throws: SQLException
is function is unknown.
Class postgresql.fastpath.FastpathArg
java.lang.Object
|
+---postgresql.fastpath.FastpathArg
public class FastpathArg extends Object
Each fastpath call requires an array of arguments, the number and
type dependent on the function being called.
This class implements methods needed to provide this capability.
For an example on how to use this, refer to the
postgresql.largeobject package
See Also:
Fastpath, LargeObjectManager, LargeObject
Constructors
public FastpathArg(int value)
Constructs an argument that consists of an integer value

N U

Parameters:
value - int value to set
public FastpathArg(byte bytes[])
Constructs an argument that consists of an array of bytes
Parameters:
bytes - array to store
public FastpathArg(byte buf[],
int off,
int len)
Constructs an argument that consists of part of a byte
array
Parameters:
buf - source array
off - offset within array
len - length of data to include
public FastpathArg(String s)
Constructs an argument that consists of a String.
Parameters:
s - String to store
Geometric Data Types
PostgreSQL has a set of datatypes that can store geometric features
into a table. These range from single points, lines, and polygons.
We support these types in Java with the postgresql.geometric package.
It contains classes that extend the postgresql.util.PGobject class.
Refer to that class for details on how to implement your own data type
handlers.
Class postgresql.geometric.PGbox
java.lang.Object
|
+---postgresql.util.PGobject
|
+---postgresql.geometric.PGbox
public class PGbox extends PGobject implements Serializable,
Cloneable
This represents the box datatype within postgresql.
Variables
public PGpoint point[]
These are the two corner points of the box.
Constructors
public PGbox(double x1,

NO

double y1,
double x2,
double y2)
Parameters:
x1 y1 x2 y2 -

first x coordinate
first y coordinate
second x coordinate
second y coordinate

public PGbox(PGpoint p1,


PGpoint p2)
Parameters:
p1 - first point
p2 - second point
public PGbox(String s) throws SQLException
Parameters:
s - Box definition in PostgreSQL syntax
Throws: SQLException
if definition is invalid
public PGbox()
Required constructor
Methods
public void setValue(String value) throws SQLException
This method sets the value of this object. It should be
overidden, but still called by subclasses.
Parameters:
value - a string representation of the value of the
object
Throws: SQLException
thrown if value is invalid for this type
Overrides:
setValue in class PGobject
public boolean equals(Object obj)
Parameters:
obj - Object to compare with
Returns:
true if the two boxes are identical
Overrides:
equals in class PGobject
public Object clone()
This must be overidden to allow the object to be cloned
Overrides:
clone in class PGobject

N4

public String getValue()


Returns:
the PGbox in the syntax expected by postgresql
Overrides:
getValue in class PGobject
Class postgresql.geometric.PGcircle
java.lang.Object
|
+---postgresql.util.PGobject
|
+---postgresql.geometric.PGcircle
public class PGcircle extends PGobject implements Serializable,
Cloneable
This represents postgresqls circle datatype, consisting of a point
and a radius
Variables
public PGpoint center
This is the centre point
public double radius
This is the radius
Constructors
public PGcircle(double x,
double y,
double r)
Parameters:
x - coordinate of centre
y - coordinate of centre
r - radius of circle
public PGcircle(PGpoint c,
double r)
Parameters:
c - PGpoint describing the circles centre
r - radius of circle
public PGcircle(String s) throws SQLException
Parameters:
s - definition of the circle in PostgreSQLs syntax.
Throws: SQLException
on conversion failure
public PGcircle()
This constructor is used by the driver.
Methods

N

public void setValue(String s) throws SQLException


Parameters:
s - definition of the circle in PostgreSQLs syntax.
Throws: SQLException
on conversion failure
Overrides:
setValue in class PGobject
public boolean equals(Object obj)
Parameters:
obj - Object to compare with
Returns:
true if the two boxes are identical
Overrides:
equals in class PGobject
public Object clone()
This must be overidden to allow the object to be cloned
Overrides:
clone in class PGobject
public String getValue()
Returns:
the PGcircle in the syntax expected by postgresql
Overrides:
getValue in class PGobject
Class postgresql.geometric.PGline
java.lang.Object
|
+---postgresql.util.PGobject
|
+---postgresql.geometric.PGline
public class PGline extends PGobject implements Serializable,
Cloneable
This implements a line consisting of two points. Currently line is
not yet implemented in the backend, but this class ensures that when
its done were ready for it.
Variables
public PGpoint point[]
These are the two points.
Constructors
public PGline(double x1,
double y1,

N4

double x2,
double y2)
Parameters:
x1 y1 x2 y2 -

coordinate
coordinate
coordinate
coordinate

for
for
for
for

first point
first point
second point
second point

public PGline(PGpoint p1,


PGpoint p2)
Parameters:
p1 - first point
p2 - second point
public PGline(String s) throws SQLException
Parameters:
s - definition of the circle in PostgreSQLs syntax.
Throws: SQLException
on conversion failure
public PGline()
reuired by the driver
Methods
public void setValue(String s) throws SQLException
Parameters:
s - Definition of the line segment in PostgreSQLs
syntax
Throws: SQLException
on conversion failure
Overrides:
setValue in class PGobject
public boolean equals(Object obj)
Parameters:
obj - Object to compare with
Returns:
true if the two boxes are identical
Overrides:
equals in class PGobject
public Object clone()
This must be overidden to allow the object to be cloned
Overrides:
clone in class PGobject
public String getValue()
Returns:

N S

the PGline in the syntax expected by postgresql


Overrides:
getValue in class PGobject
Class postgresql.geometric.PGlseg
java.lang.Object
|
+---postgresql.util.PGobject
|
+---postgresql.geometric.PGlseg
public class PGlseg extends PGobject implements Serializable,
Cloneable
This implements a lseg (line segment) consisting of two points
Variables
public PGpoint point[]
These are the two points.
Constructors
public PGlseg(double
double
double
double

x1,
y1,
x2,
y2)

Parameters:
x1
y1
x2
y2

coordinate
coordinate
coordinate
coordinate

for
for
for
for

first point
first point
second point
second point

public PGlseg(PGpoint p1,


PGpoint p2)
Parameters:
p1 - first point
p2 - second point
public PGlseg(String s) throws SQLException
Parameters:
s - definition of the circle in PostgreSQLs syntax.
Throws: SQLException
on conversion failure
public PGlseg()
reuired by the driver
Methods
public void setValue(String s) throws SQLException
Parameters:
s - Definition of the line segment in PostgreSQLs

N

syntax
Throws: SQLException
on conversion failure
Overrides:
setValue in class PGobject
public boolean equals(Object obj)
Parameters:
obj - Object to compare with
Returns:
true if the two boxes are identical
Overrides:
equals in class PGobject
public Object clone()
This must be overidden to allow the object to be cloned
Overrides:
clone in class PGobject
public String getValue()
Returns:
the PGlseg in the syntax expected by postgresql
Overrides:
getValue in class PGobject
Class postgresql.geometric.PGpath
java.lang.Object
|
+---postgresql.util.PGobject
|
+---postgresql.geometric.PGpath
public class PGpath extends PGobject implements Serializable,
Cloneable
This implements a path (a multiple segmented line, which may be
closed)
Variables
public boolean open
True if the path is open, false if closed
public PGpoint points[]
The points defining this path
Constructors
public PGpath(PGpoint points[],
boolean open)

NN

Parameters:
points - the PGpoints that define the path
open - True if the path is open, false if closed
public PGpath()
Required by the driver
public PGpath(String s) throws SQLException
Parameters:
s - definition of the circle in PostgreSQLs syntax.
Throws: SQLException
on conversion failure
Methods
public void setValue(String s) throws SQLException
Parameters:
s - Definition of the path in PostgreSQLs syntax
Throws: SQLException
on conversion failure
Overrides:
setValue in class PGobject
public boolean equals(Object obj)
Parameters:
obj - Object to compare with
Returns:
true if the two boxes are identical
Overrides:
equals in class PGobject
public Object clone()
This must be overidden to allow the object to be cloned
Overrides:
clone in class PGobject
public String getValue()
This returns the polygon in the syntax expected by
postgresql
Overrides:
getValue in class PGobject
public boolean isOpen()
This returns true if the path is open
public boolean isClosed()
This returns true if the path is closed

N4P

public void closePath()


Marks the path as closed
public void openPath()
Marks the path as open
Class postgresql.geometric.PGpoint
java.lang.Object
|
+---postgresql.util.PGobject
|
+---postgresql.geometric.PGpoint
public class PGpoint extends PGobject implements Serializable,
Cloneable
This implements a version of java.awt.Point, except it uses double
to represent the coordinates.
It maps to the point datatype in postgresql.
Variables
public double x
The X coordinate of the point
public double y
The Y coordinate of the point
Constructors
public PGpoint(double x,
double y)
Parameters:
x - coordinate
y - coordinate
public PGpoint(String value) throws SQLException
This is called mainly from the other geometric types, when a
point is imbeded within their definition.
Parameters:
value - Definition of this point in PostgreSQLs
syntax
public PGpoint()
Required by the driver
Methods
public void setValue(String s) throws SQLException
Parameters:
s - Definition of this point in PostgreSQLs syntax

Nz

Throws: SQLException
on conversion failure
Overrides:
setValue in class PGobject
public boolean equals(Object obj)
Parameters:
obj - Object to compare with
Returns:
true if the two boxes are identical
Overrides:
equals in class PGobject
public Object clone()
This must be overidden to allow the object to be cloned
Overrides:
clone in class PGobject
public String getValue()
Returns:
the PGpoint in the syntax expected by postgresql
Overrides:
getValue in class PGobject
public void translate(int x,
int y)
Translate the point with the supplied amount.
Parameters:
x - integer amount to add on the x axis
y - integer amount to add on the y axis
public void translate(double x,
double y)
Translate the point with the supplied amount.
Parameters:
x - double amount to add on the x axis
y - double amount to add on the y axis
public void move(int x,
int y)
Moves the point to the supplied coordinates.
Parameters:
x - integer coordinate
y - integer coordinate
public void move(double x,
double y)
Moves the point to the supplied coordinates.

N U

Parameters:
x - double coordinate
y - double coordinate
public void setLocation(int x,
int y)
Moves the point to the supplied coordinates. refer to
java.awt.Point for description of this
Parameters:
x - integer coordinate
y - integer coordinate
See Also:
Point
public void setLocation(Point p)
Moves the point to the supplied java.awt.Point refer to
java.awt.Point for description of this
Parameters:
p - Point to move to
See Also:
Point
Class postgresql.geometric.PGpolygon
java.lang.Object
|
+---postgresql.util.PGobject
|
+---postgresql.geometric.PGpolygon
public class PGpolygon extends PGobject implements Serializable,
Cloneable
This implements the polygon datatype within PostgreSQL.
Variables
public PGpoint points[]
The points defining the polygon
Constructors
public PGpolygon(PGpoint points[])
Creates a polygon using an array of PGpoints
Parameters:
points - the points defining the polygon
public PGpolygon(String s) throws SQLException
Parameters:
s - definition of the circle in PostgreSQLs syntax.
Throws: SQLException

NO

on conversion failure
public PGpolygon()
Required by the driver
Methods
public void setValue(String s) throws SQLException
Parameters:
s - Definition of the polygon in PostgreSQLs syntax
Throws: SQLException
on conversion failure
Overrides:
setValue in class PGobject
public boolean equals(Object obj)
Parameters:
obj - Object to compare with
Returns:
true if the two boxes are identical
Overrides:
equals in class PGobject
public Object clone()
This must be overidden to allow the object to be cloned
Overrides:
clone in class PGobject
public String getValue()
Returns:
the PGpolygon in the syntax expected by postgresql
Overrides:
getValue in class PGobject
Large Objects
Large objects are supported in the standard JDBC specification.
However, that interface is limited, and the api provided by PostgreSQL
allows for random access to the objects contents, as if it was a local
file.
The postgresql.largeobject package profides to Java the libpq C
interfaces large object API. It consists of two classes,
LargeObjectManager, which deals with creating, opening and deleting
large obejects, and LargeObject which deals with an individual object.
Class postgresql.largeobject.LargeObject
java.lang.Object
|
+---postgresql.largeobject.LargeObject

N4

public class LargeObject extends Object


This class implements the large object interface to postgresql.
It provides the basic methods required to run the interface, plus a
pair of methods that provide InputStream and OutputStream classes for
this object.
Normally, client code would use the getAsciiStream,
getBinaryStream, or getUnicodeStream methods in ResultSet, or
setAsciiStream, setBinaryStream, or setUnicodeStream methods in
PreparedStatement to access Large Objects.
However, sometimes lower level access to Large Objects are
required, that are not supported by the JDBC specification.
Refer to postgresql.largeobject.LargeObjectManager on how to gain
access to a Large Object, or how to create one.
See Also:
LargeObjectManager
Variables
public static final int SEEK_SET
Indicates a seek from the begining of a file
public static final int SEEK_CUR
Indicates a seek from the current position
public static final int SEEK_END
Indicates a seek from the end of a file
Methods
public int getOID()
Returns:
the OID of this LargeObject
public void close() throws SQLException
This method closes the object. You must not call methods in
this object after this is called.
Throws: SQLException
if a database-access error occurs.
public byte[] read(int len) throws SQLException
Reads some data from the object, and return as a byte[]
array
Parameters:
len - number of bytes to read
Returns:
byte[] array containing data read
Throws: SQLException

N

if a database-access error occurs.


public void read(byte buf[],
int off,
int len) throws SQLException
Reads some data from the object into an existing array
Parameters:
buf - destination array
off - offset within array
len - number of bytes to read
Throws: SQLException
if a database-access error occurs.
public void write(byte buf[]) throws SQLException
Writes an array to the object

Parameters:
buf - array to write
Throws: SQLException
if a database-access error occurs.
public void write(byte buf[],
int off,
int len) throws SQLException
Writes some data from an array to the object
Parameters:
buf - destination array
off - offset within array
len - number of bytes to write
Throws: SQLException
if a database-access error occurs.
public void seek(int pos,
int ref) throws SQLException
Sets the current position within the object.
This is similar to the fseek() call in the standard C
library.It allows you to have random access to the large object.
Parameters:
pos - position within object
ref - Either SEEK_SET, SEEK_CUR or SEEK_END
Throws: SQLException
if a database-access error occurs.
public void seek(int pos) throws SQLException
Sets the current position within the object.
This is similar to the fseek() call in the standard C
library.It allows you to have random access to the large object.
Parameters:

N4

pos - position within object from begining


Throws: SQLException
if a database-access error occurs.
public int tell() throws SQLException
Returns:
the current position within the object
Throws: SQLException
if a database-access error occurs.
public int size() throws SQLException
This method is inefficient, as the only way to find out the
size of the object is to seek to the end, record the current position,
then return to the original position.
A better method will be found in the future.
Returns:
the size of the large object
Throws: SQLException
if a database-access error occurs.
public InputStream getInputStream() throws SQLException
Returns an InputStream from this object.
This InputStream can then be used in any method that
requires an InputStream.
Throws: SQLException
if a database-access error occurs.
public OutputStream getOutputStream() throws SQLException
Returns an OutputStream to this object
This OutputStream can then be used in any method that
requires an OutputStream.
Throws: SQLException
if a database-access error occurs.
Class postgresql.largeobject.LargeObjectManager
java.lang.Object
|
+---postgresql.largeobject.LargeObjectManager
public class LargeObjectManager extends Object
This class implements the large object interface to postgresql.
It provides methods that allow client code to create, open and
delete large objects from the database. When opening an object, an
instance of postgresql.largeobject.LargeObject is returned, and its
methods then allow access to the object.
This class can only be created by postgresql.Connection

N S

To get access to this class, use the following segment of code:


import postgresql.largeobject.*;
Connection conn;
LargeObjectManager lobj;
... code that opens a connection ...
lobj = ((postgresql.Connection)myconn).getLargeObjectAPI();
Normally, client code would use the getAsciiStream, getBinaryStream,
or getUnicodeStream methods in ResultSet, or setAsciiStream,
setBinaryStream, or setUnicodeStream methods in PreparedStatement to
access Large Objects.
However, sometimes lower level access to Large Objects are
required, that are not supported by the JDBC specification.
Refer to postgresql.largeobject.LargeObject on how to manipulate
the contents of a Large Object.
See Also:
LargeObject
Variables
public static final int WRITE
This mode indicates we want to write to an object
public static final int READ
This mode indicates we want to read an object
public static final int READWRITE
This mode is the default. It indicates we want read and
write access to a large object
Methods
public LargeObject open(int oid) throws SQLException
This opens an existing large object, based on its OID. This
method assumes that READ and WRITE access is required (the
default).
Parameters:
oid - of large object
Returns:
LargeObject instance providing access to the object
Throws: SQLException
on error
public LargeObject open(int oid,
int mode) throws SQLException
This opens an existing large object, based on its OID
Parameters:
oid - of large object
mode - mode of open

N

Returns:
LargeObject instance providing access to the object
Throws: SQLException
on error
public int create() throws SQLException
This creates a large object, returning its OID.
It defaults to READWRITE for the new objects attributes.
Returns:
oid of new object
Throws: SQLException
on error
public int create(int mode) throws SQLException
This creates a large object, returning its OID
Parameters:
mode - a bitmask describing different attributes of
the
new object
Returns:
oid of new object
Throws: SQLException
on error
public void delete(int oid) throws SQLException
This deletes a large object.
Parameters:
oid - describing object to delete
Throws: SQLException
on error
public void unlink(int oid) throws SQLException
This deletes a large object.
It is identical to the delete method, and is supplied as the
C API uses unlink.
Parameters:
oid - describing object to delete
Throws: SQLException
on error
Object Serialisation
PostgreSQL is not a normal SQL Database. It is far more extensible
than most other databases, and does support Object Oriented features
that are unique to it.
One of the consequences of this, is that you can have one table refer

NN

to a row in another table. For example:


test=> create table users (username name,fullname text);
CREATE
test=> create table server (servername name,adminuser users);
CREATE
test=> insert into users values (peter,Peter Mount);
INSERT 2610132 1
test=> insert into server values (maidast,2610132::users);
INSERT 2610133 1
test=> select * from users;
username|fullname
-----+--------peter
|Peter Mount
(1 row)
test=> select * from server;
servername|adminuser
-------+-----maidast
| 2610132
(1 row)
Ok, the above example shows that we can use a table name as a field,
and the rows oid value is stored in that field.
What does this have to do with Java?
In Java, you can store an object to a Stream as long as its class
implements the java.io.Serializable interface. This process, known as
Object Serialization, can be used to store complex objects into the
database.
Now, under JDBC, you would have to use a LargeObject to store them.
However, you cannot perform queries on those objects.
What the postgresql.util.Serialize class does, is provide a means of
storing an object as a table, and to retrieve that object from a
table. In most cases, you would not need to access this class direct,
but you would use the PreparedStatement.setObject() and
ResultSet.getObject() methods. Those methods will check the objects
class name against the tables in the database. If a match is found,
it assumes that the object is a Serialized object, and retrieves it
from that table. As it does so, if the object contains other
serialized objects, then it recurses down the tree.
Sounds complicated? In fact, its simpler than what I wrote - its
just difficult to explain.
The only time you would access this class, is to use the create()
methods. These are not used by the driver, but issue one or more
"create table" statements to the database, based on a Java Object or
Class that you want to serialize.
Oh, one last thing. If your object contains a line like:
public int oid;
then, when the object is retrieved from the table, it is set to the
oid within the table. Then, if the object is modified, and reserialized, the existing entry is updated.
If the oid variable is not present, then when the object is
serialized, it is always inserted into the table, and any existing

N4P

entry in the table is preserved.


Setting oid to 0 before serialization, will also cause the object to
be inserted. This enables an object to be duplicated in the database.
Class postgresql.util.Serialize
java.lang.Object
|
+---postgresql.util.Serialize
public class Serialize extends Object
This class uses PostgreSQLs object oriented features to store Java
Objects. It does this by mapping a Java Class name to a table in the
database. Each entry in this new table then represents a Serialized
instance of this class. As each entry has an OID (Object IDentifier),
this OID can be included in another table. This is too complex to show
here, and will be documented in the main documents in more detail.
Constructors
public Serialize(Connection c,
String type) throws SQLException
This creates an instance that can be used to serialize
ordeserialize a Java object from a PostgreSQL table.
Methods
public Object fetch(int oid) throws SQLException
This fetches an object from a table, given its OID
Parameters:
oid - The oid of the object
Returns:
Object relating to oid
Throws: SQLException
on error
public int store(Object o) throws SQLException
This stores an object into a table, returning its OID.
If the object has an int called OID, and it is > 0, then
that value is used for the OID, and the table will be updated. If the
value of OID is 0, then a new row will be created, and the value of
OID will be set in the object. This enables an objects value in the
database to be updateable. If the object has no int called OID, then
the object is stored. However if the object is later retrieved,
amended and stored again, its new state will be appended to the
table, and will not overwrite the old entries.
Parameters:
o - Object to store (must implement Serializable)
Returns:
oid of stored object
Throws: SQLException

Nz

on error
public static void create(Connection con,
Object o) throws SQLException
This method is not used by the driver, but it creates a
table, given a Serializable Java Object. It should be used before
serializing any objects.
Parameters:
c - Connection to database
o - Object to base table on
Throws: SQLException
on error
Returns:
Object relating to oid
Throws: SQLException
on error
public int store(Object o) throws SQLException
This stores an object into a table, returning its OID.
If the object has an int called OID, and it is > 0, then
that value is used for the OID, and the table will be updated. If the
value of OID is 0, then a new row will be created, and the value of
OID will be set in the object. This enables an objects value in the
database to be updateable. If the object has no int called OID, then
the object is stored. However if the object is later retrieved,
amended and stored again, its new state will be appended to the
table, and will not overwrite the old entries.
Parameters:
o - Object to store (must implement Serializable)
Returns:
oid of stored object
Throws: SQLException
on error
public static void create(Connection con,
Object o) throws SQLException
This method is not used by the driver, but it creates a
table, given a Serializable Java Object. It should be used before
serializing any objects.
Parameters:
c - Connection to database
o - Object to base table on
Throws: SQLException
on error
public static void create(Connection con,
Class c) throws SQLException
This method is not used by the driver, but it creates a
table, given a Serializable Java Object. It should be used before

N U

serializing any objects.


Parameters:
c - Connection to database
o - Class to base table on
Throws: SQLException
on error
public static String toPostgreSQL(String name) throws SQLException
This converts a Java Class name to a postgresql table, by
replacing . with _
Because of this, a Class name may not have _ in the name.
Another limitation, is that the entire class name (including
packages) cannot be longer than 31 characters (a limit
forced by PostgreSQL).
Parameters:
name - Class name
Returns:
PostgreSQL table name
Throws: SQLException
on error
public static String toClassName(String name) throws SQLException
This converts a postgresql table to a Java Class name, by
replacing _ with .
Parameters:
name - PostgreSQL table name
Returns:
Class name
Throws: SQLException
on error
Utility Classes
The postgresql.util package contains classes used by the internals of
the main driver, and the other extensions.
Class postgresql.util.PGmoney
java.lang.Object
|
+---postgresql.util.PGobject
|
+---postgresql.util.PGmoney
public class PGmoney extends PGobject implements Serializable,
Cloneable
This implements a class that handles the PostgreSQL money type
Variables

NSO

public double val


The value of the field
Constructors
public PGmoney(double value)
Parameters:
value - of field
public PGmoney(String value) throws SQLException
This is called mainly from the other geometric types, when a
point is imbeded within their definition.
Parameters:
value - Definition of this point in PostgreSQLs
syntax
public PGmoney()
Required by the driver
Methods
public void setValue(String s) throws SQLException
Parameters:
s - Definition of this point in PostgreSQLs syntax
Throws: SQLException
on conversion failure
Overrides:
setValue in class PGobject
public boolean equals(Object obj)
Parameters:
obj - Object to compare with
Returns:
true if the two boxes are identical
Overrides:
equals in class PGobject
public Object clone()
This must be overidden to allow the object to be cloned
Overrides:
clone in class PGobject
public String getValue()
Returns:
the PGpoint in the syntax expected by postgresql
Overrides:
getValue in class PGobject

NS

Class postgresql.util.PGobject
java.lang.Object
|
+---postgresql.util.PGobject
public class PGobject extends Object implements Serializable,
Cloneable
This class is used to describe data types that are unknown by
JDBC
Standard.
A call to postgresql.Connection permits a class that extends this
class to be associated with a named type. This is how the
postgresql.geometric package operates.
ResultSet.getObject() will return this class for any type that is
not recognised on having its own handler. Because of this, any
postgresql data type is supported.
Constructors
public PGobject()
This is called by postgresql.Connection.getObject() to
create the object.
Methods
public final void setType(String type)
This method sets the type of this object.
It should not be extended by subclasses, hence its final
Parameters:
type - a string describing the type of the object
public void setValue(String value) throws SQLException
This method sets the value of this object. It must be
overidden.
Parameters:
value - a string representation of the value of the
object
Throws: SQLException
thrown if value is invalid for this type
public final String getType()
As this cannot change during the life of the object, its
final.
Returns:
the type name of this object
public String getValue()
This must be overidden, to return the value of the object,
in the form required by postgresql.
Returns:

NS

the value of this object


public boolean equals(Object obj)
This must be overidden to allow comparisons of objects
Parameters:
obj - Object to compare with
Returns:
true if the two boxes are identical
Overrides:
equals in class Object
public Object clone()
This must be overidden to allow the object to be cloned
Overrides:
clone in class Object
public String toString()
This is defined here, so user code need not overide it.
Returns:
the value of this object, in the syntax expected by
postgresql
Overrides:
toString in class Object
Class postgresql.util.PGtokenizer
java.lang.Object
|
+---postgresql.util.PGtokenizer
public class PGtokenizer extends Object
This class is used to tokenize the text output of postgres.
We could have used StringTokenizer to do this, however, we needed
to handle nesting of ( ) [ ] < and > as these are used by
the geometric data types.
Its mainly used by the geometric classes, but is useful in parsing
any output from custom data types output from postgresql.
See Also:
PGbox, PGcircle, PGlseg, PGpath, PGpoint, PGpolygon
Constructors
public PGtokenizer(String string,
char delim)
Create a tokeniser.
Parameters:
string - containing tokens
delim - single character to split the tokens

NS

Methods
public int tokenize(String string,
char delim)
This resets this tokenizer with a new string and/or
delimiter.
Parameters:
string - containing tokens
delim - single character to split the tokens
public int getSize()
Returns:
the number of tokens available
public String getToken(int n)
Parameters:
n - Token number ( 0 ... getSize()-1 )
Returns:
The token value
public PGtokenizer tokenizeToken(int n,
char delim)
This returns a new tokenizer based on one of our tokens. The
geometric datatypes use this to process nested tokens (usually
PGpoint).
Parameters:
n - Token number ( 0 ... getSize()-1 )
delim - The delimiter to use
Returns:
A new instance of PGtokenizer based on the token
public static String remove(String s,
String l,
String t)
This removes the lead/trailing strings from a string
Parameters:
s - Source string
l - Leading string to remove
t - Trailing string to remove
Returns:
String without the lead/trailing strings
public void remove(String l,
String t)
This removes the lead/trailing strings from all tokens
Parameters:
l - Leading string to remove
t - Trailing string to remove

N SS

public static String removePara(String s)


Removes ( and ) from the beginning and end of a string
Parameters:
s - String to remove from
Returns:
String without the ( or )
public void removePara()
Removes ( and ) from the beginning and end of all tokens
Returns:
String without the ( or )
public static String removeBox(String s)
Removes [ and ] from the beginning and end of a string
Parameters:
s - String to remove from
Returns:
String without the [ or ]
public void removeBox()
Removes [ and ] from the beginning and end of all tokens
Returns:
String without the [ or ]
public static String removeAngle(String s)
Removes < and > from the beginning and end of a string
Parameters:
s - String to remove from
Returns:
String without the < or >
public void removeAngle()
Removes < and > from the beginning and end of all tokens
Returns:
String without the < or >
Class postgresql.util.Serialize
This was documented earlier under Object Serialisation.
Class postgresql.util.UnixCrypt
java.lang.Object
|
+---postgresql.util.UnixCrypt
public class UnixCrypt extends Object

N S4

This class provides us with the ability to encrypt passwords when


sent over the network stream
Contains static methods to encrypt and compare passwords with Unix
encrypted passwords.
See John Dumass Java Crypt page for the original source.
http://www.zeh.com/local/jfd/crypt.html
Methods
public static final String crypt(String salt,
String original)
Encrypt a password given the cleartext password and a
"salt".
Parameters:
salt - A two-character string representing the salt
used
to iterate the encryption engine in lots of different
ways. If you are generating a new encryption then this
value should be randomised.
original - The password to be encrypted.
Returns:
A string consisting of the 2-character salt followed
by
the encrypted password.
public static final String crypt(String original)
Encrypt a password given the cleartext password. This method
generates a random salt using the java.util.Random class.
Parameters:
original - The password to be encrypted.
Returns:
A string consisting of the 2-character salt followed
by
the encrypted password.
public static final boolean matches(String encryptedPassword,
String enteredPassword)
Check that enteredPassword encrypts to encryptedPassword.
Parameters:
encryptedPassword - The encryptedPassword. The first
two characters are assumed to be the salt. This string would be the
same as one found in a Unix /etc/passwd file.
enteredPassword - The password as entered by the user
(or otherwise aquired).
Returns:
true if the password should be considered correct.
Using the driver in a multi Threaded or Servlet environment
A problem with many JDBC drivers, is that only one thread can use a
Connection at any one time - otherwise a thread could send a query

NSN

while another one is receiving results, and this would be a bad thing
for the database engine.
PostgreSQL 6.4, brings thread safety to the entire driver. Standard
JDBC was thread safe in 6.3.x, but the Fastpath
API wasnt.
So, if your application uses multiple threads (which most decent ones
would), then you dont have to worry about complex schemes to ensure
only one uses the database at any time.
If a thread attempts to use the connection while another is using it,
it will wait until the other thread has finished its current
operation.
If its a standard SQL statement, then the operation is sending the
statement, and retrieving any ResultSet (in full).
If its a Fastpath call (ie: reading a block from a LargeObject), then
its the time to send, and retrieve that block.
This is fine for applications & applets, but can cause a performance
problem with servlets.
With servlets, you can have a heavy load on the connection. If you
have several threads performing queries, then each one will pause,
which may not be what you are after.
To solve this, you would be advised to create a pool of Connections.
When ever a thread needs to use the database, it asks a manager class
for a Connection. It hands a free connection to the thread, and marks
it as busy. If a free connection is not available, it opens one.
Once the thread has finished with it, it returns it to the manager,
who can then either close it, or add it to the pool. The manager would
also check that the connection is still alive, and remove it from the
pool if its dead.
So, with servlets, its up to you to use either a single connection,
or a pool. The plus side for a pool is that threads will not be hit by
the bottle neck caused by a single network connection. The down side,
is that it increases the load on the server, as a backend is created
for each Connection.
Its up to you, and your applications requirements.

Further Reading

-@d` ah.odfyh g h h&j-2#b` Gnh.d g h#ohc{I" 7-IdF


eho#4#&dFJ#n _ ^
_G` h &h : aY&9h&| J 0m o&# {2I$L #ohw{I"0 _ hfGf#&dF^ "df#h g h.  &`G`&hd{# 0udF#b
2Fd 93h 
Y&h
Fd o# GT jh 0Gd e J &d 8odfA G
`& h 3G*J GU7d
7eh oj 
G` n:
d G
`& h _7g h
dfe _ &`&h 0 g _ Gah g *d g a< g . )h g G` &h g

NSP

Notas

NSz

 _ hkh g q g h h _ d g y 7D
! poj _ s rr93O SdFs
dfe
,po j _ s rr93O g h h _ d g y D

Captulo 51. Interfaz de Programacin Lisp

h Goh g #C _ g h e f@a7h


7pg.el
dnJ g h

_ h g e;&hThn#4`&h
h g 
dohGF _ d g n d
Dh F
d

Autor: Escrito por Eric Marsden 1 21 Jul 1999.

_ NC: h `77hh. YGO GJh g #dF>C _ hc g 0m.hk`e `lfJ Jhd)~hg d Gg AG`&h og &h:d)hh&d G g hh.h~ejdSn[Ls   `7Eej`&7e`&dhohjh.fod ^
_nd d #h g J f_ Go 7jhoJGf fG_ FG$h h dFdfkh dF_ U h|J`G ahdkh
JLs
_ g g_
g g
g
g
` fGdyJ#ah g I&dFM !4LmhJ*G _ dF&`&hnd`G`GG
hfGT!9h oj _ r7r98O foh C
dferuhke g I7h|r(7d9
De &Fd *7h YhG` y7`&J &
e >h g YGF^
!#- M .E`&L  9h  f&d 4G` G z
Fd }H e S[J _7g df lhd
d 2;e [ B ,8. !M ! H e S[
J  ] G` n7 8h Kh
df[`&&7Fd e oh 
nYL 7 h _7g d ah h h*eh # SG2d g e fGJG` GJ ;h* nh :0h jd n@ h
`&Fd hUIGng jhoehh KoFd *7h$ _ N g h n7`&u Fd 8 od g
Dh d g 
- o d 
h$e S*fFGad h 7jd
dfe d fGF
_7g
g
7d g # ad g fhnh!a7hhnJch -@h _7g d g  ed g hn0od
d g ehDGoh g #C
dFGhk`n g &d@sujhke _ `&dN

_7g d _ d g f&dF.G

(defun demo ()
(interactive)
(let* ((conn (pg:connect "template1" "postgres" "postgres"))
(res (pg:exec conn "SELECT * from scshdemo WHERE a = 42")))
(message "status is %s"
(pg:result res :status))
(message "metadata is %s" (pg:result res :attributes))
(message "data is %s"
(pg:result res :tuples))
(pg:disconnect conn)))

Notas

e p`&d@ h e g Yhoqe &`k df#


dfez g
!poj _ srr93O foh C
dferuh e; g Yh|r(dF9o`&dSr _ N h `

N S4U

NO

Captulo 52. Codigo Fuente Postgres


Formateo

`S2d g ehkd!h `u
dFGd!27hoh7#&`G&C h _ f&d>$.
d`&7eSK#7`G S[
j`&ehojh

d
J7`G [&dFoh _7g dfhG |J#k h`G TJ7`G fGoh^odndF*h _ GHyh _ f&dFLs
 g | h e fn I ]  hK`&dYG&hohTJd`GadKY&e&`G g LTj: g [GadhHGGfG`G&C f&dF ~/.emacs
;; comprueba los archivos con un path que contenga "postgres" o "psql"
(setq auto-mode-alist (cons ("\\(postgres\\|pgsql\\).*\\.[ch]\\" . pgsqlc-mode) auto-mode-alist))
(setq auto-mode-alist (cons ("\\(postgres\\|pgsql\\).*\\.cc\\" . pgsqlc-mode) auto-mode-alist))
(defun pgsql-c-mode ()
;; configura el formateo para el codigo C de Postgres
(interactive)
(c-mode)
(setq-default tab-width 4)
(c-set-style "bsd")
; configura c-basic-offset a 4, mas otros cosas
(c-set-offset case-label +)
; vuelve la indexacion de la cajas para que se empareje con el cliente PG
(setq indent-tabs-mode t))
; nos aseguramos de que mantiene las tabulaciones cuando indexa

 g

4j

vi

~/.vimrc

d: g YGadhaG`&hojhKh hDEdFohoh g `&dYGa&hoh

set tabstop=4

dhG4`&hohkehohho g d.h& Gojho#


:set ts=4

 ^oh gg 4 e&hoJ _ g  ah g jh~dF

more

less

_ 7hh
nh g GdFf  ^
ded

more -x4
less -x4

Captulo 53. Revisin de las caractersticas internas de


PostgreSQL
Autor: Este captulo apareci originalmente como parte de la tesis doctoral de Stefan Simkovic preparada en la Universidad de Tecnologa de Viena bajo la direccin de
O.Univ.Prof.Dr. Georg Gottlob y Univ.Ass. Mag. Katrin Seyr.

nh
_ p7`&d;oGIGFhoh g `h`&hn g 7
 g
Goh g o
h `edjd g hdFn g h
g  `&y`&h
 g 7h`& UY&&hohnh
[&dFohn~jhh g yo!Ghk7hEdfed
nh _7g d
hn
o *
dF7`&jdh _ h g h avo0h g _ fGah 4`&`& J g h da7hh8hn g _ fGF
h j`&`& 9Go
`&7h djdSy`& hn g 7
 g >h4dFyof&doh7#&`G&C4  ha7dFn^
g h hm
h h g p  h$M4MM _ Go  LsYnh
_ p7`&d:Gohoy g h`&yEdfe _7g hYGF0hk`

do g d`aho h g 4` hk`7mjd hU jd@ ho g d h `~edjd g  hI7 hU 7hDn h g h f& ho
dF 7`&j
n  7hK h$h e& hG `&dF g hn `&j  dF
El camino de una consulta

IedFv a o
d g j g h &IGFw`&dF _ SdF@7hU7h hHnh  g o
dFn7`& ndfhoh g
 g h 7`&j oNd
0mh h n`&hk[ G7doEdFohuGF:hIhT _7g d g e*hT _ `G&
fGF` nh g Gd g 7dn^
g h m7` _7g df g 4eK h$ _ G` &E4[ GF g ne &jh$o
dF7`&jy g h f&hh ` g hn7`& 7dcho&^
d _ d g h F` nh g  Gd g
!5> |#f T |FS[| |K# #|
am #[l h a7hky`&
Fd n7`& g ne &J G _ d g h ` _7g d g 4e h
_ G` &
f GJ
G` &h ojh L _ g cEdfe _7g dfa g 7hc`&: YGoj G$h $
d gg h
jc* g hk g  f l fo
&Ts
Xaeb
, `| p| # KS k|m |&#||jdeh S` g d ` hT`&
Fd n`&j g h  dh wh ` _ n!d h `4 g 7
jd g
n
e&
lJ24`&e
ho hw`&dmf2f&
 eep|#
LFa7h _ 7h _ `G&
g `&h`4fl[
Kbws
X| b#c g hk G` &C`&  g S Id g e4[ &Fd oh a7O
h n9h S h hk`+ru`&Fd s |e ++S Kb++
eb|o
do g ed|o _ `G&
fGFOh `(YGnhkeh g hkhn g &j g h`& g hk`G&Ck[GF
h
`& | p| #

(0 &hke _7g h a7Dh h g h G` &C o
Fd 7`&j
Fd o g  o Gn$J2h h f g  oK #
l & b|#fpL hk`
IGnjh e h g h h n g & g g h h n g &h`&
Fd n`&jD h `  7 g &dyh w o
d n7`&jD 7h4E
h 7h
`& H
l&
l
|y Sh`&y TXpmp
Xw y& p|#*G&f&`k
. 7(` &
X eES [9e YS. pfZ
Yjdfeh (` g du` h$`&
Fd 7`&jJ g h h n g &4Low g h $ 9 bEXc @&
s
Xaeb*a7hKnh g hk`G _ 7 _ g h `F s#[l
i
hh jdc g h  d _7g h  & eh oh$jFd  K`& _ Fd I&`&h He#
@ h`&h
Fd 7Eh  e Gn^
ed g h 7`&j @d u7d g hjhke _ `&dA I 4 i&&
hh  o g h `&s G2a79h h Oh h g Edfe^
_7hkg Ed7h oo[& 4`80 `&Fd df g 7j d Y&_  &`Gg Gc
df}e h_7yg 7dJ&`G &gC`&  lh `No& _ &Fd
Yh&S &G` 7Gh ad3h $h hnJ&Ye&e _ h `&`vhw
dF gjhg Gd h
hh
7[ GF9h$
 g _ `& _ o4O nhh G` &h$hh
7yg h ` _ `& e g _ G@d
/ `Thh
7d gwg h G` &C4 7heFd d g h
g I&adhk`f l fTS |H &
X} g h n _ h g j _ `& h `&
2d g e g h _7g [h nh oS wh hk` _ `& ^l`ohjhk
jd g 4Eh 8
d h `| p| # Ufp Em X
. &X #
e &h o g h J g h  Gn d`& g h `&4[ &Fd oh n g h kG` &C8 [ X Em &
X | f|TR fpXlh a`&7

s [b m
s &
X v
o4`&eh oh hk7hk`&h`&  _ `& Hh g &a S u
`& ^Y&a &h h *hkEf &Fd oh n4
7 g g h eFd |Fd Fd T`&Fd _ S Fd G` Gj Fd TS oh |h 
e ^hk`&`&hk
_ g .  g  ehjd g
Fd odf &e h oj0d h`& h n g 7
 g .h jd $0 hc
Fd o g dfA` Goh g o0d h
7d nj g h
N

Cmo se establecen las conexiones

7dnj g hKhnJ&e _ `&h ehoj dcEdfedcI&e _ `&h$edFh `&dcE`G&hoharnh g G7d g ( _7g d


hnd _ d g
 7 g &df([hjhed7h `&d ` e
s|m&bX#$
dohkEj dh~
kehojha kEee
|| p f
dfed0odFnd g dodGEdFodfEhked eT|E7So
dFoh&dFohnh g Sof7#&`G&C4 g h^
ed 3 e
s |$ E ee*a 7h`& o C;o 7h ad _7g d
hn d9 h g G d g_ g c
7
dFohuGa7h
nhn d`G& f& jY jh df
hn dwe n jh h`&`&e
hn
7 h  7h jdTru-#
h _ h fG7
d$T`&
_7dFg o hu& do hv ho g g So h  postmaster
Tah C* h^ hH7 h hkEj g ha 7h _ g & e&g ho jd hKEdf^
ohuGo mh ` _7g d
hn d postmaster `& o C40o 7h ad _7g d
hn dOn h g G d g `&`&e  d postgres
 j g h  hDn h g G d g J`&dF _7g d
hn dF postgresL(n h
de&

o dF| EdF
df g dFK 7#& `G& CSo ^
d| pYffe
 .f|bc
s
f|#p Sc
J# g h}
ehked g L _ g G n h  g g `&9Go h g G 7 h
`&dU dF g * h`&dF 

hn dF
do
gg ho hT c`&dF jdFuf !  g * g h
do hkEJ& d|
&`&n g `&:Go jh g 
[GF h ` _7g df
hn dGe jh g postmasteruhk` _7g df
hn d9 h g G d g postgres
o y _ `G& E4[GF
`G& ho h
 ` _7g d
hn dy
`G& ho jh _ 7h hHn h g h `SGo h g  
hH hn 7 g & dyJ# g dFo jh L psql J _ g g h `&& C g EdFo ^
n `&j 0m.hGo h g 4EJ& a L7d*
7`Ga & h g _ `G&
fG; hn 7 g & d9& e _ `&hkeho j  w7J& `G& C  d
`&& `G& djh

9f hn h:a 7h`&  _ `G&


f& dFo h>& e _ `&hkeho j   7#& `G& C 7 d
J2hk`
`G& dfh

_7g h _lg df
hn  d libpg
g 7 h$0m:) h ehkG d: hD7 dn  g h _ g LjeG 7#& `G& Chn y& ecpg
.o ah C3 7h;n h hn j`&h fG do
do hGFo vh ` _7g d
hn d
`G& ho jh _ 7h h*ho & g o

dn 7`&4`n h g G d g JlE f XLsS j


dn 7`&
n hw g n e& jhw7#& `G& CS d h~ d _ `& o df
hH h f g o dOn h hk do  g  7
[GF hG h `f
`G& ho hJ Yfk
X# XLss `n h g G d g g  7
h$`&

dn 7`&4 g hkw &


X* U  s mp
Xaahh
7jh ` _ `&  g h e& h`& $  _ `&S g h
_ h g S `

`G& ho hy g ^ h$`&


dFo huGG hn 4`&h fG 

La etapa de traduccin

|#f  y#|
mp
XwEdFYGjhh
dF

_ g jh

Dh `(.#|
 G s#Y@h Gdw h gram.y scan.l nh$
dFn g 7ah7#&`G&CSdw`&S h gg e&ho
yacc lex
4`SFd eH
7sh |aShky`& eE X YId [hk.`u
s EX 7g
hkd `G&C edFG7
[pdohT7ehojdFy`& h g 7
 g *7h
_ g g
g
`4 g 7
d g h h
dfe _7g d g `&EShoUhT
g 
h g hNhT`&
dn7`&j$J#a7h`&hT`&`&h 
dfed
hm jd 0m-2- _ `& odfL _ g $Edfe _7g df g `&`GG7h Ch$`&KIGoj uG 0f`&YGoSGhEd gg hk
k
nh
dFn g 7ah[f D#|
s
Xnhh a7h `&ahehnnhhh gg d g hdf g d
nd@
7 g G`&;& e _ `&h ehofGF nh 7J&`G&C d`& &h
dFodfG h gg e&hoj h9.G

lex yacc
`y& s#f J`&h~ h g L*n h9 ho hGh
h `7 h g d
hc h ` h dFn `&h97 h h
dFo d
h `&dF
p X# Ts
fk 7`&S! f&
l|
m&
$ clscan.l
hku7 g
 g_ `&_  g *
`&ahdg G ho JG
g 7 d g
a7hho
7ho g 4Sn h$aho h g  g S `&S `u g 7 
jd g g  7
jd g o | fR
`  7
d hn J7 hG dh*
h ` h d

dFIGn jhh) )
dF jo jd9 he &
|S
|
cg f s .g
m&
X @a 7h h g S hh
7 g7 gram.y

 hkC hD hUG _ g o g h `&| `f& d


 h`&S 
[& dFo hc J#a 7hG
j7`&eho jhhc fF& adL*n hG7J& `G& C _ g GEdFn g  g h ` g d`N h
g  7
YGF^
 `u7 h g d scan.l
n h g Y 2 d Y ed g *eh$ h h `7 h7g #d!& `G&  C7Sho  jhd scan.c
J& `Ghk& CC0 n h  d hk ` _7gh d4`G& g C  e7 d

n

h

o
G

g g
g
lex gram.y
gram.c
yacc

Traductor

N S

hn7
Sd g  d3Ydnh:g e4hka[&hdFohono
E7 `Gahk`G&&h Cg Edf
e e_ &`&& d)hd g `&dF>_ 77h h hGdF7J&`G&Ca hg oh h _ S g d)n g hk7 hg hkn`|h g  ^
g
g g
g
g
_
g
nd g h h n g &Fd |`& _7g Fu&ehkC a7Kh nh `&`&eSd lex d yacc
Nota: Las transformaciones y compilaciones mencionadas normalmente se hacen automticamente utilizando los makefile vendidos con la distribucin de los fuentes de Postgres.

2 h `& hchhnhceGned;7d
7ehojd;nh. g wo7hn g _ fGFh7h `p`& :h yacc
d2 h`& g h `& O h) g e #&
  S h gram.y fie7 d`G& g dFd
7ehojd
Ih h g & n jh9 e&`G& g &Ck g hT
dF yacc ohyhh e _ hkC g
gh h`&kn [& dFo &  dF`&
d elex
 J& Eyacc
edFn g  h gram.y _ 7hU hydf g dedFd9odhojhh g jh
g
g
`&da 7hh J f& h7 dN
7 g c8
ehd g EdFo df[& e& ho d;7 hc`& $ hn g 7
 g  h.7 dF 7J& `G& C   h dFn  g h _ g
_7hn g dS
 hhn g 7Eo j
SdH7 n hK7`& jdF|J& `Gh&  C
g hk edh w j   hjh e _ `&d _ g 3& `&n g g `&d
e& dF h d
g g
_

  43   :6$


 
  
nh*hjhke _ `&d}EFd oJ &h oh)`&
I& &h ojh
dFn`&jnhof&`&`&7h;nh n ha &
hn^
g _ f&dFoh97 g T`&d`& g ad:h`& UY&&hohnh
[&dFoh fyg EdFn7`& n7ehg a7h`&S
4a`&S HS  h 9   b&|y[#
l
| a 9IG7d h G
select s.sname, se.pno
from supplier s, sells se
where s.sno > 2 and s.sno = se.sno;

 ;7a g g hn _ g hk g h hve7hn g hk`Tflf| #|


asEX
dn g Gd _ d g `&S g h `& 

f&doh*h g eJ&
! lSh
y`&
dF7`&j.Syh}Xa Q |Xsp
&&
e  &s
X#bX^&| &X#|gram.y
s
Xaeb_ |g Xsb&&l|||aeE X f|bEK se&m&
X
7eE K:&&f9 c >&
| & X# e m&
X Vw s
Xaeb
| . l!&
K#E l&
ySE SE  X
   &b|Uf
l
|
XG|p Sy S Xp
Ve|& sv VX
. f| V Xo Yfe
| &b| e|&p |
nhw e|kK 7hVn  X  h8 `&E OX7 aV X$ |h V X
fh J#YhkG%)
`&hk`fn  half a Sd Ha f 7|h:e
o d [ _ g & `&h spf[ & |d0n & ) f& ho jh a 7 h
_
_ g
edn g g g eS h g 7Eg j g Sg * hD g dF h o n _ d`&>g 7  g Ls
`o d d3 _ h g & d g 7 h ` g adf`7h `o dF d SelectStmt g 
 ho g   7hw _ g hEEh
h) `pcmp fa |& a|[  h`&
dn 7`&j: hy0u.;n h g h ;o dF d RangeVar a 7he o #& ho h
h `^o dfe g h3 hk`Hf&b
c _ o jh g do dF d RelExpr
a 7h)e o #& ho hhk`*o dfe h0 h
`&8k|&
mp
Xyum dF dw `&dF:o dF dF RangeVar hn # g hkEdfG h o *`GG j*G G`
g e _ d
 h `(o dF d SelectStmt
fromClause
7 g y
7 yho g  >a 7hy _ g hE
hh) `&!bp |# b$ a7a Q h h`&
dn 7`&j. h0m.n h g h

o d d
a 7hEdFo #& ho h$ o jh dw$
o d d
m `(o dF d

dFo #& ho h


h `lXE le ResTarget
S&!k|&
mp
X; h`&ho g  )_  _ g o h g d*Attr
o d d Value a 7Attr
hw
do J& ho hh `
ode g hU h `u[##|p l#m~ d7 d| `&dFHo dF dF ResTarget hn #S g h G dFK h
o `GGn jKa 7hhn #

do h
j  4`
e _ d targetList 7 h `Fo d d SelectStmt
  g  g h h g h %4E`&n haEe7hn g h `u g df`u hTd _ h g  d g
dn g  d _ g `&E`&4 7^
`&ti9 H07 h`&
dFn `&j h0u.8 S $h h `uhh e _ `&d)X a Q * | Xam&&bE 7|#N R . b
s
Xb Xb e & X#$ m
Xae&# | Xsb&& l$ || !a eE S XS[e&
$S m|& m&
X K|
&
&f9 
&
| & X# | m&
X V
s
X|&#

| . l&
!#E lbE SE SE  Xi S  &b|
.f#n l
|y
X8|p  Xp SE Vl|e& mT VX
. o| V4 X YIe
| &b| o||bp e ee VX
N 4

E XVsX | VX
a 7hwhn JGdG`lE4e _ d qual hk`Aodd SelectStmt `AodFd
n _ h g &d g hk` g d` hd _ h g d g h
odFd A_Expr
g h _lg h[nhoj dod _ h g fG f&
nh.ddJ&hoh:dFK7
hnd g h`&`&4e dF lexpr rexpr _ oSd)dF|afAND
 `F7 g df`aGd lexpr g h _7g hhoy`&
7`GG7E4[GF s.sno 2 h `Gd rexpr
h h ho 
|
 &7dfnh  g hkd
odFd Attr h
do^
#g & h_oo g h$h `Fo dfes.sno
g hD h$=`& se.sno
h `&sGGg  _ ojh g g dw9odFd Value
7hEdFo#phohh `Fodfe g h
g
h `7 g & 7jdNS7 g h `h g eGo d
dn j o hOa 7h _ g h
hh
`&EdFn 7`&n h g h  d
od7 d Const a 7h
dFo #& ho hhk`f`&d g
`NSe
sec #|
Xa YI[.
sEXjdeh `N g df` _7g dF7fGd _ d g hk`v g 7
jd g
dfed8ho g 
df
h h h
Y& 4eho h) 4n7ad@a0(^nh)ho
7ho zodd
nh
g _7g Y d g eg h g io d7 d Queryg a 7hOn h g h `@odFdn _ h g &d g g h`&
o7h aSelectStmt
hn g 7
 g
h
jd S
  g g h g Y d g eh le7hn g `&hn g 7
 g 9hdFy g SId g e J2`&
_ d g  hH7 hho `&d s [w |h &) f& dn |7 f & g hSo Ih  d g e$ e dn hU `&dhc ho `&h 7 dc hg  c o g hn dfg `&> Yd g e4hLY 7% h g ha
_ g
_
_ g
g g
g
g
d g 0n h g h `&& C)o )
de _lg dffGn df g h
Y `&dFw
X
clk e|bE m&
X ! hG`&)mp fa eb
a|[ n dFG
dFo dfG _ d g h `(YGn jh eY7 g
 Ko dfe g h h g h `&kfG8a 7hhn J _7g hn ho jh
h `pdK m[ f& 
l | |p |# .
n h g hko d dN
a 7h
dFo #& ho hh ` o de g h h`& g h `&YGFo
h `X
clkT ef&&
*hk`p X# Ts
f|   ^&Kk|&
s
Xy _ g J g  hy d g ( hy7J& `G& C `&dF
G ho JG
7 d g h[ h g h `&fGF _ g g h h g g n hc`& k|&
sb
X *  h
`&EdFn 7`&m dF d
`&d.o dF dF N n dF g h
dfG7 dc h} `&3bp |# > X#|

y &#E lb K|
XkO 7h*hn #G Edf^
oh
S `
e _ d;|#
l&K7 h `@o dF d Query 0@n h h jh
jh
`&
dn 7`&jGho de g h h
gh h$`&k`&[GF
dF n hn `&j
d o dffG d _ g ch `AYGn h e4Fn h. h a7h `&ah8 h gg d g 3n hcd g whk` _7g d
hn  d
`(Y& a& ho h _ n dhT
dfe _7g d g Ya `&dF X
clk K yf#|p l
7J& `G& C  dFT h J 

do jhG dF
h `& g h `&kf& do hH  SK h `&
dn 7`&js7 g 
 4 g & 7d.a 7hn h$ho E7ho g n h$ g h 
od7 d
@3a 7h
dFo #& ho h _ o h g d0o d7 d Resdom J 7hy
dFo #& ho hhk`o dfe g h h`&

d`&7eo Lf _ o jh g dy$:o d7 d VAR + i dFyo 7eh g dFy& e _ d g j o jh hw h `uo dF d VAR
`~
e _ d varno  `& _ dFY& [GF
 h`& g hk`&fG:a 7h
dFo #& ho hh `m4 g & 7d
j7`~h
`&$`GGn 
 hho g S * h`&y4`&> h g So ad g h  y o jh Y `a
e _ d varattno  y`& _ dY& fGF3 h `
 g & 7jd
 ho g d h`& g h `&k[GF^ 0 hk`o dfe g h! h 4 g & 7d
o d9n h
dFIp a7hho
do g g
nh h a7h `&ah$
h gg d g On hd g hk` _7g df
hn  d. h$`&
dFn `p

Proceso de transformacin

El sistema de reglas de Postgres

7dnj g h7J&`G&C _ dFh g dnd||#SHk&


_ g `&h _ h fG7
fG0hy p|#
|0
m

&p Zf
sbEX |#
e&7 b g &Go`&ehojh$h `(YGnhkeh g hka`& Nh7dnj g hK
dFIG
#p
h
 dF*&e _ `&h ehojf&dohu

h*` h 7_ ` g 9&Remh g #df lg `nIGnjh e7:#&7`G&h C h 7`&d hkn` h!_7g dfG EhSkdwG
Xp evah CKa#7 hbcnhhn
h
Eh&e Ap_ w`&hkeochoj 4`&
g
_ g
_
G& G7`ksj&e _ `&h eho4[GF9h g hk# g wh BB /
7 d`&7`&#&eyah g I&dFf&`
hk` _7g dh
d.7dnj g hHnh g Yd g eh9dFn g h B /
#|. S hkNa& s 
X. | &e b#_ (`&Yh e`f|h o| #j f GFh y7kh |` Ym G|n&#h e|: h |h  Gg h e`& F7h`&dOao7hJ hfGn&
hwh`&o`& eh$S`&>.ekf| Tm |ep
#|
s [h F` &
X m
f [S.
[Z
 [lYJ J f &
yEFd o# Go7> &e _ `&h eh ojg 

NN

7 g DGd g efGF
nd g h`&YGo uG|`&$ g hk fG9h
`&R& ||[e&Sv
|kay

g h `&|h
YGnhkeK7dnj g h|I g  nh

`l|pe#. Uk|s|b| U&mEX|&#he7`&dho g h`&h j _ h g 7


fG)h `
_ h `& hG7 h
o  d g rmo d _
#dF& en & 7CS`& Od  g Yhc g dn 7
h n y& dfh L`3 g Ya dfh` Gn h ah7h o `&j d _ h dag`&.`&a 7h h: _>h .hn h g  7
`G&f
G GwJ#a7`&h
g
d_og n 7`& hkhn & hhk` df`( h$o >g  d e4`&h o J& a g
g _
g g
g
g
g

El sistema de reescritura

d *hndC4 hedFch `K`&d &jed`hk`yYGjh e37h h hn & 8 h


d n7`&j u o
ehd g g &`&n g fGg o
edFn g g h eg dF
dfed>&e _ `&h eho g g Gj g 7#g &`G&CSd g h `& 7
deg dhh e^
_ `&@d
mh oaedF`&>I&&hojh g h `&
Tcnicas para implementar vistas

create rule view_rule


as on select
to test_view
do instead
select s.sname, p.pname
from supplier s, sells se, part p
where s.sno = se.sno and
p.pno = se.pno;

n  g hka`&^hSp| f|fv
ah CHa7hHh^h jh
h|oT07Dc
do g `& g hk`& fGF

G`& g hnh `&hkEf&dFo g `&  _ `& Uh test_view(nhhh


7 g `&!Gn g 7
[GFtest_view
0
 o yh`& f|#v yb
sp
X:h$`& g h `&
m ho aedF `&>I& & ho jh
dn 7`&>7 h$ 7 g & dwEdFo g test_view
select sname
from test_view
Smith;
where sname

m hoh edF ao$`GGnjhT`&dF _ nd g h `G&C4 d _ d g hk` YGnhkeh g h hn g &j g DhT`&$
dFo^
n`&jESah Ca7h hEEhyow
dFn7`&:7hn7 &dEdFo
J#`I&&hojh
`GGn d8ho8hn g _ _ fg GF}e7aGd g e`yh `v`&ag d g &edgtest_view
&
ehojh _ g GoG
de^
_7g hlYGF)  Y&
m7 g o > h g _ fG
 hk`&`&S K g  nh$y#EXl|
f||fp U z ULs
@$kE
A  test_view
 ~dey`&EFd n7`&>S _ d g `& _ g jhh$4EfGF9h$`& g h `&
!  _ `&G` Gn4^2dfkh # &ad _ g g h
dfah g h `o7eh g dccd g hOh`&dF| g &7jd 7dKh
`&
d n7`&> 7h `f 7 g &@d
, ]o 7h`&
4G` G
f GFO h`&$
`Gn`&i
H87h`&EdFn7`&7h `mn7 g &d`&
E7G` G7
f GF87h$`&
d n7`&j> h`& _ g jhh`&
fG9h$`& g hka`&
I `& 7h &[ GFhhw`& g h a`&w oh g &d g `&
d n7`&
hk`l 7 g &;d nh g g h h g &w`&O I&^
a &h oOh d g e#J 9jh nOh a7h`& g h h n g & g O h 
hh `& g h _lg [h nh ojf GiGojh g o8 7h`p
NP


dn7`&h `mn7 g &dh a7h `&j _ d g `&hk _ Dh g 7
fGo _ h g d`&Dohk$hn g 7
 g Dh
jd g h _7g [h nh o g `&K I& &h ojhEdFn7`&Ls
select s.sname
from supplier s, sells se, part p
where s.sno = se.sno and
p.pno = se.pno and
s.sname
Smith;

Planificador/optimizador

)j g h 3hk`HS&
X s
Y9ef #ppZf
fhw g hk g  _ `& h*hjhkE7fGF _ #pedN g &eh g d

deGo dF `& _ dFY&a`&h& *hf|k||J#


ohk g Llm|aZff|JdFGoL7`& g hk`&Y&dFohDa7h
_ g h
h hGo
dF7`&jImdF T`& g 7j g h 
dF7
h*4`eGned g hn7`&j dh
h ` g d9 h `ad _ J& e& C  d g hn J& e g h `aEdFn h> hhh
7 g ES yo . hyh `&`&S _ g ho
do^
g g
7`fh `&e  h
df e&


` _ `& G7
d g rmd _ #&e&CSd g h fGh _ `& ohHh h g ahoh g g nh Y dFnh$h`&dF
# _ dFhUG&
h7hGdndf g h`& g hk`&[&dFohNa7h _ g h
hho$
dFn7`&0(&hke _7g h
huGjh`& _ dY&&`GG h g h `G&C g ) gg GdOnh
7hof&`hyo g h `&fGFo(hedFd9a7h
Y& h e _7g hHn h g h  _ `& .a 7hYf `&d7#&`G&C gg Gd@hkE7ho[&4`&h 0mhT n7eh*a7h h7^
G dOG&
hh
o g h `&fGF
J _ d g hjhke _ `&dOG&
h"^ g h hkLfco$
dFn7`&
dFo#&hoh
`& g h g & EfGF relation.attribute
n 0
f& h g j
G
dFGo fG g EdF} `&*
`&ahO h `y&&
h"^OPR
g h hconstant
OPR hGn #relation.attribute
Go jd` h#+c#n h g h  _ `&
7#& `G& CS dh `F&&
h"^ g h h _ g  gg h g `& g h `&kfG^ 0 df g dFUG&
h _7g hn ho jh| `&
g h`&n o g h&
[ & dFo hy7 h`&EdFn 7`&4[& h g j EdF o 
`&ahU hG&
h  h
dYG h g g  df g dF
_
g | ho
dFo g g dF dFT `&dF _ `& o hK 7#& `G& C4`&h _ g g h Gn gg h `&f& dFo h| & ES Sn h g hk 
`&dF
_
h`& o hh _ h
g  >g 7 CdF g Jh jdF`& Go f&L dFg o h h`&k f& d o yhu`&IdF `
_ `&4 `&hG 7 h
 G n d hyg rmd o _ #
& e`G &C4n  `&d !g 
hdY7G
hyh g
>d Y h`&d dFg o7^^
g
g
_ g
g
gg _
& ho jh|Jh h f g _ g T`& 7
7`&h huG jh|o g hn g &
fG
dfed WHERE rel1.attr1=rel2.attr2L
h `&
7`GG7 EfGF:7 h|`&i9 ^U 0uh|aho h g Sc jd7 d `&d _ dY& `&h _ `& o h _ g T
 T g 7Eh

dYG h g  d _ d g h ` _ `& G


7 d g rud _ J& e& C  d g s  h _ dFY& `&h h g 4h & ^n d^

Generando planes posibles


Q |svj S`&b*e|h
os
p
dFX.o
X 
 h|J#o`&h nhh 9`&f&jGh Fg a#&&C dFa&dh Go7Ls|u ng jh G`&4hYG
47h hg &h h !#h fg&`yh
d hOgg &he _ `&gh ^
g
_
eho gv_ _ h g d _ 7hh$g
dFn7e g g e7 d#ph e _ d@g
Q |&as7jFdS*:fhk `KX
s7
EhGXG ojZ
h s.&
 8hGJe&f h &g ahh n`Kd g f7j
dFhGGoe LsGne Nd fIg hkh`& fG*hnhGd eg h hC4oE `&S} `&_ d .g `&dFd
g
g
g g
_
gh 7`&jkdf &d ohkh `oy h 
&hh fnd*jhh e8dFE7h h o`&d9 hy7 hw7Eehyh eg h `&f & d o
h #&ahd J d8dag77hyhEo 7  hk_7`&g [dGGF`&dF3y7h g &h ^
g
g
g
_ g
g
nh g  gg G Y`&d oyah C
Q e&aam 7jFdpX |
h `uJ 7 Eh d G7
sL Fdlo# Gog hk7`&4[ [ G&F7 nh$h`& hh g `&h h . `&4[ h GFG
& C h a~ &_7h g &e 4h wg 0d `&Fd nTdfa g h `&d n h
_lg g d _ &Sd_ Ug hESg j _ `&ho
d g !nhy7J&`G&Cgg *Edfg ed
`&ahKGhg ~  _ g y`&d
g `G&^
C g `&S Tj _ `& ^h`& g h `&f GF
h g h 

Nz

I g hedF d g o _ ha7h ]ohn g _ [GF


h`&dHoddF^a7h _ g h
hhh ` _ `& ^|K7^
a g g h _ `& |
e7hn g Thk` _ `p _7g dF7fGd _ g `&
dn7`&jUh `khh e _ `&d g hY&e _ `&h % nhE`&h
#
` odFd9n _ h g &d g h ` _ `& h;odFd
7hJ&hohdF
Mezclado
(MergeJoin)
n
h d g h n od Gd}`|
e _ d rbolCruce

J
&
`

h



h
E
h
$
L


h
^
`
n


h
a

d}G7d`

e _ d rbol derecho J g & j g h h sL  izquierdo


odhh`&dF.ng odFdF g h _7g hnhoj*o g hk`& ^
fG0h ` g 7
h Ede9d nhyeh of &d  ojh nm ) g 7
>h heh C
`&d g h o  g h a &h g h a7h

 g h `&4[ GF
nh d g h o  m7d g h `&`&dh o
d o g 4ed  9oFd d Sort h 
 7 _ `& ^Y7

4`GG
fGF &f&dFo`N7 h`&
dn7`&j*J s.sno 2L^hhopGj `&hjdF
ded8h
_nFd I&`&`& h^
nhy oh`a
e _ d qpqual h`& g e SeqScan h ` od 
d hk`fEd gg h _ d &h oh
_
TG` Gn G`
e _ d mergeclauses h ` oFd d Cruce Mezclado (MergeJoin)
Fd o^
#&hohGd g e4[GFOndf g h`&dF4 g &7dFyh g 7
hedKa`&d g h 65000 65001 h`&dF
e^
a7hw _ g h
h 8h 8`&G` Gnj mergeclauses J)e Gh 8`&
_ Fd varno )`&d KoLd e7Fd h nVAR

a7hw`&  `&S hk` oFd d)4Ej7` o3


d hkh h
Fd IGh 4^
g
lista
n IGoobjetivo
d a7Oh n
h 7h h 7# &G` &C g h an}`p_ g `& y _ `& >h`&d Y& &h oh !g od Fd (+e g

_7g ddFn(J2h^h f g 4`&dHod7d* _ h g &d g h^h`&dF*n7 _ `& ohnLs


9fh nh a7hFd Fd `&Fd Hod Fd Sort SeqScan a7h$ _ g h
h h `&K 7 g g h _ `& |
dfe do lista objetivo _ h g d9h Gdw`&.24`&hh _ [&d8Y`&d8nh .&u d
h `u
d gg h _ Fd &h ojh` Cruce Mezclado
bw g y g h g hk G` &CS  _ d g h ` _ `& G7ES d g rmd _ J &e &C d g h Umj g `&d Up X # m
 fe f
|
fh )`&Fd Dod Fd Expr Oper dfe9
d hyeh of &Fd * ojh &d eh oh u 7d nj h Dnd d j
o g &hOhT# _ dFyGh g h[ojhyh*jdn
h*Go
`&dnh _ 7hg hg w7J&`G&C g J _ dFgNh_ Gg dF
_ h d ng h h `fO onhk7E h g n&Nd s&7d g `&enhg
h
o _ `&C Fd hh e oojh o4h ag `&`&; y7 h g ^` IG
n jh oeJ G 0 7Dh 3 2 ofo&[ Fd GoFhdd _ hh g 7ddf^
gdfe Gh oJg G
d hwd g h d  &
Nd Ihw4E7h od)
Fd `&Fd J Fd >hc`&Fd y4_ &g7Fd g
SdKh`& K
7`GG
g f&dFoh_ n4h g jEngh7#&`G&C4 `&d^Ghog #G7
d g h_hd _ h g d g _7g g d _ & ^
Fd u

Estructura de datos del plan

Ejecutor

`N9Rm#fjdeGh ` _ `& ih a7h `&jd _ d g hk` _ `& G7


d g rud _ #&e&C4 d g gg o
_7g d
h ^
n  dh `o dF dn _ h g &d g eh `ESd!7hDo7hn g dhjhke _ `&dJ2`&
dn7`&jK hh `~hjhke _ `&d
g hn I& e _ `&h % n h `&h
L4hk`(odd _ h g &d g h8odFd Cruce Mezclado J#}h g ahk{dFGoLY
o jh! h _ dF h g 
h g Go 7 Geh C4E`&4Anh9hkh`&hkh g dj _ `& nlo8h

n7^
_oh`& ^Jk Ihw o h
n yjhwEdFe* dh 7 `dn a7h `7h`& h G
7jd g G edG e` d`&`&e g h
g Y&aeLsfho`johc7 h a_ldOg dfo
dFhn d9g `& dh 7&d _ J`&h ^`
o d7 d.n gg _ h g & d g  h `un 7 _ _ `& Op C a & h g  dfLrbol
h O izquierdo
d d SeqScanE. hUo 7h ad.n h h _ hg dfge g
o Gj _ `&GSo h! h
 7hh `@o d7 deGn ed _ 7h _7g d
hn g n hu `vhjhkE7jd g eGn ed8`&`&e
g h n g I& aeho hdf g yah C4`n 7 _ `&  G dw` rbol izquierdo  h `(o dF d SeqScan
`o hkd9o dF d9n _ h g & d g h 3o dF d Sort dfed3n d g n h!7 h h g hk`G& C g df g h`& g h ^
`&fG
dfe _ `&h jfh `lhjhk
jd g gg o
`&hkah7 d*j _ `&  hY hhk`An  _ `&S h `o dF d Sort
G`& $ d g  ho h o g h `&fG) h e _ d g `lJh ehked g & dh 7 h g dL
7  d9n hcGY& ^
 _ d g$_7g & eh g ah Ch `o dF d
J7 dFn h & d h h eho h> hk`o d d
 h adf`&h g
Y& h e _7g h$&
eho jho j _ Sort
`&> h$`& g h `&4[g GF g jh e _ d g `&eho hd g  ho Sort
7 Ls
 ah C: 7hwh ` _7g dfEhn  d9 h `Ao dF d Sort o hkEhI& j ho o 7h awj _ `&n hc`&`&e. h
d g e g hkE g Y& `ahh
7d gT_ g  7h g jhyh `o dF d SeqScan G7 dG
dfed9 7 _ `&S^l

N 4U

g h `&k[GF J`&.a7h!h g h7h g hGojh g oehojh _ d g h `a`&d g  7dh)h `a


e _ d fG9 7 L
nh g hk
d gg h _ g ho
dFo g g `&>I&&hojh _ `&n0f`&y _ `&>nJGY24Eh`&y
7`GG7
scanrelid
nhD _ d g 7ho _ g n g je&hojdkwhdf g d
nd.nh`&h h
_`&d Yg &h ` &hg odjh$` G`& dc qpqual
n$`& _lg &eh g a7hDnJGI`&$
7`GG7
fG^0nh _7g df
hn d`&
_
7`&#& eyj _ `& h$`& g hk`& fGFonhhk7hk`&h _ ojh g d NULL
.o ah CKa 7hn h g h
_ h g  do  _ `&$hhk` rbol izquierdo hk` Cruce Mezclan h d
hn 9 h `veGn eded7 dh ` rbol derecho 4 0ynhJ&hoh _lg hk^
ndoho (MergeJoin)
h 4e  j _ `& n 4h _7`ug hjhkE7jd g_7g d
h $h ` Cruce Mezclado
0& h e ha7hKnhoh
hY&
o .o 7hkc _ `&. ho d8 hy`&dn 7 _ `& o hn Fn h g hk `G& C4co w`&`pe  _7g ghk
g Y& ac`ahh
7^
d g|_ g ydfho h g `&
0 h _  d g h g o  _ `& _ g y g 7C g `& n h>7 h ahk`&hO h _ d g
h g eGo 7 dwhk` _7g df
hn  dcEdfe _ `&h jd hD g d`F h ` _ `&S^
0uh g hk`G& C d g `&d _ S dF! h g & dF _ g ES o 9 h`& j _ `& n n j8a 7hOn h9 hk^
ahk`&h _ o jh g d NULL _ g h ` _7g df
hn l d. h ` o d d Cruce MezcladoG&
 da 7h
h edFT jh g eGo  d@

NNO

Captulo 54. pg_options


Nota: Aportado por Massimo Dal Zotto 1

`  h dd f&do`
EdFoJ&hohyd _ f&dFohDhy#&hke _ d
hyhh
7[GF)7J&^
`G&C  g _ d g _ h `nh g Gdata/pg_options
d g_ g 
do g d`& g `&dF)ehjh0hhnh &e&hojdttdf g dF _ g ^
eh g Fd yjnj`&h>h:nh g Gd g Sd;7h Ehhjh h g d3Goh g hSohhh ` hk d;h
a7hh g hk^`&hGd _ d g hnh g Gd g h g h f&hco
nh ]o`0m-2i9k f&hd Y _ dFY&`&h

e& g d _ [&dFohhy#&hke _ d07hhh


7fG3df g h`&ce g YG;oh
hYG h g hk gg o^

g Fd n g h  d _ f &d oh h _ hk[ G7


 h h n!h  h g d _ 7h h h g  7h g  h.hk^
7a Go)7J &G` &C S _ d g hk` _ a7h jh 7!h nh  &e &h ojd)J backend/utils/misc/trace.cL
d _ g ehk g Fd :o7e g &
Fd Oa7h _ 7h 7h h g  n Fd _ d g hk*` nh g  Gd g_ g )
d o g d`& g n

de _ d g e&hod@ OohkSd _ [&dFohG _ g eh g dOh h h g hGdFh bac

kend/utils/misc/trace.c backend/include/utils/trace.h
7d g hh e _ `&df n _ d oeFd >a7h a7h g h eFd $]o  g eh nnh Kh nh  &
e &h ojd
d &f &df^
o` _ g eh g `
d o7e g &
dj nj`&h`Kf F&adh }hk`  h g d foo.c ~d d`&ad 7h
oh
h Y&4ed 
h g h v]o  g `&EFd nS o*h  D S% abcbt.
b  % bwbc % h bac
kend/include/utils/trace.h

/* file trace.h */
enum pg_option_enum {
...
TRACE_FOO, /* trace foo functions */
OPT_FOO_PARAM, /* foo tunable parameter */
NUM_PG_OPTIONS

/* must be the last item of enum */

};

oy`G&oh
d gg h _ dF&hojhh

backend/utils/misc/trace.c

/* file trace.c */
static char *opt_names[] = {
...
"foo",
/* trace foo functions */
"fooparam"
/* foo tunable parameter */
};

 d _ f&dohhUh hh _ h fG7


g h`&ddF7 h g dFhu
jehojhhh `meGnedcd g h^

`&dF h g dF7hohdd _ dFh edF| d g 
h gg hh g h[of&`& o7h a K h g 
dF^
/* file foo.c */
#include "trace.h"
#define foo_param pg_options[OPT_FOO_PARAM]
int
foo_function(int x, int y)
{
TPRINTF(TRACE_FOO, "entering foo_function, foo_param=%d", foo_param);
if (foo_param > 10) {
do_more_foo(x, y);
}
}

NN4

dF h g dFhuGnhojhh7#&`G&C4 ) h g SUh>hka&e&hod


& g hDI&e _ `&h ehojh]o &hdwhk`Y&&hoh$[F&dN

_7g & 7 _ 7h7h)


e^

#include "trace.h"
/* int my_own_flag = 0; - removed */
#define my_own_flag pg_options[OPT_MY_OWN_FLAG]

mdF $`& _ a%4d _ J&dF>ndG&f&`G&C 7 $


h g d*hhk` gg a7hh `nh g Gd g k0Aoh
hY&^
4ed G a`&d g hhhkEjd:G2h g hlojhKoh
hY& g hked|]oS g 4`&af&adO7hG&f&`G&C^
fGG h h ` _7g Gof _ &dOh PostgresMain d g _ dhked*u g h ` _ g eh g d.ddf% _ g e
4EJ& a g hk`F hka&e&hojdOdfdhn g &&hda`&d g hKhh `F7 h g d data/pg_options
# file pg_options
....
foo=1
fooparam=17

 8o7h a Gd _ f&dFoh3h g `&hG _ d g dFdF)`&dF0ohkdF0h g Gd g hGEdFd g eha


gg o
 d@[7 g 4Eh g hh
#&adF`&d
e&dF _ g dFd`&dFDnh g Gd g h7hhnJ )h
o [& dFo e& ho jdfoh
hY&j g h edyho& g 0m-2i9}` _ dFneSjh g u78nh ]o`@nh g Gho^
&  $47dfe #&
eho hdFdF`pdHh g Gd g h |7dFh edFT
J& g `&d
e&d|jeG
_ `k g an h g G d g h _ h fG7
d;G&G7`ho& df`&h`&
hk]o`0m-i9.a g h
kehojh
 a%4d J& d _ 7h h
jeGG
h _ h fG7 E g n h
d*
h `Go h gg _ jd g Jn 9& j L -T  h7 dn ^
g hu_ _
postgres options -T "verbose=2,query,hostlookup-"

 Dof&doh7J&`G&C  _ g &e _7g &e g `&dFh gg d g h[$)`pdehnnhh.h 7 _ 7h7h



h g n d d g 87 h`&0 f&`GGep|&o s dcehnnh&e _lg hdFh2nJd7`Jh gg
nd _7g h d g e 7 d EdFG
oye g E d g g &a7h
doJ&hohjeG`&>GhoJG7EfGF9h `
_7g d
hn d. h `(n h g G d g
#timestamp
980127.17:52:14.173
980127.17:52:14.174
980127.17:52:14.186
980127.17:52:14.186
980127.17:52:14.186
980127.19:52:14.292
980127.19:52:14.413
980127.19:52:14.466

#pid
[29271]
[29271]
[29271]
[29286]
[29286]
[29286]
[29286]
[29286]

#message
StartTransactionCommand
ProcessUtility: drop table t;
SIIncNumEntries: table is 70% full
Async_NotifyHandler
Waking up sleeping backend process
Async_NotifyFrontEnd
Async_NotifyFrontEnd done
Async_NotifyHandler done

nhd g ejd:Go g h ehojjeG`&$E _ fGl 9h$`&h h g `&d^7 h g d^hehnnjh _ h g ^


e& h`& _ h g ndoSh `m
dFodf&e&hojdwhm4Ejd>h`&da7h
7Dnh g Gd g hn# f&hdch
a edehodNem4eG 
he #f&`~hn g & g_lg df g eS
d4GDd _ h g `ua7h g h FGnh

NN

h ` g n g d _ g Khkh
j g h gg d g h[Td _7g d`&hke |h`& nhhDdFn4dw
`&
7`& g hnj Gn#&

h$J &h e _ d:h$`&  g n
f&doh
Fd eh nnh
&e _7g hndFhh `Un`&df7#&`G&CS`&f&`GG h g S g dibc% bc M
` n
d :h n n`&d 7hh.h
do d`& 
dF`& _ %d _ #&dFan`&dfN~Ihn g f& 7ehojh
e7 > of &d oh_ `&`&e hg  g h
gehohw printf()
O&e &e nehjhh
n# df77

d J h gg 9 n3 G` & od _ 7h h h g|g h  g & G7y n_  g `&dfGd_7g h oh g g G&
f &d h g d^
odG` f &ES h h `&`& 0uh g p h hk`&Dh a7hFd  K`& K`&`&eS  K _7g GoJ h g S g h h e _ `&kC S

d8`&e g d8|-
@)`&n`GG7n#h gg 7hnhc
e&  _ g w7#&`G&C4 g |-9)h
n)`&7 g S h$eFd :
d a7h _ d 7ed 
d o g d`& g jd  |`& HnG` G ^h eFd d Gd g eh
u` o7hkdehkES Ged h`& _ %d _ # &Fd Kh v
e
d oah &h oh a7Dh h  g o7hkS d _ f &df^
oh Hh n9
& h `&Fd Unh g Gd g h _ d g a7h
`& dY~jdh oh Se`&Fd ad 7Khf&7dFoh h hg nJ 9079 h&j  G Gh
g dfh eod h _  `&g 
7
`&Gah h> ah7*Kh 07h7g 4 eh d dThE~Fd oh g odfd ^
_ g
g g
`&ge4Eh o dwh _ h F`  g h
jd g &:d 7h jd
edc`&eh h ooh ehyFd `& Hd 7h f g &h d ogh g  o7
h ` g n7h d  nGj d g h n_h h g Eh 4f eG7 ES& )g h ` `uad `&nd jeg  hnh `& oS d S _ f dG^Y
d g ^
_
g g _
_
g _
nh g Gd g
7 dnh  gg oESdN d g ndF*`&hGdHh$97 h g dN
7@d Fd 7h d e7Fdh eEd 4e hc& h g j`&hw ed Fd _ f ;d&d oGoh aDh nndf# & g hy`&4`&ea og Fd ce df&h `&oh eg h `
# h &ag  Gd dGg `&h Fd n# e
h d gg&nh oh ^
Kh nh  &
e &h oj9d If`&d
7 d _ g h
hh g ` _7g d`&h e_7 g I7Fd h eFd je G3Gh oj g Ghk^
g hojh|a`&d g hHh _ g eh g dTnn`&hu
(` d g ej
d h`& pg_options h T
dfed Y&h
# comment
option=integer_value
option
option+
option-

#
#
#
#

set
set
set
set

value for option


option = 1
option = 1
option = 0

 dfhn ha7h keyword _ 7hhjeG


nh g o g hE&4 g Khk`ode g h7hd _ fG9h7^
Gh backend/utils/misc/trace.c

h h g n hG4`T
_ p7`&d`h*`&aRb epX|#|
f!nd g h*`& wd _ [&dFoh
7hG#&hke _ dih
hh
7fG _ g o y`GGn j
dfe _ `&h j hd _ f& do h*n d _ d g S Ej7`&ehojh
`&d
 h `[F& dGhGn jho h>a 7h7#& `G& Ca g & `&h _7g & a   h!Go h gg _ jd g hhd _ f&dFoh
nh 8

e&  d _ g 
h g n d3 h`& _ dFY& & `GG  hK h`& _ a%d _ J& dn   eho^
4`&eho hh postgres.c
u 0mh p
 hn h `&hedFG
jd d8h `K
dF& adhuGn ho hhhnjh
n ho #G7 d hed7 d0a 7h _ d eg dF 
h g n d0 he7 g dK hc`&dF 9& j h h `&w`GGo hk: h

de 7 d: hD dFn  g h _ dF h g ho h g e T d _ f& dFo hT jn j`&h| EdF  `&7a g &
d _ g
Y& 7 g `&dT a`&d g h[*7 h`& | d _ f& dFo h
Notas

e p`&d@ Cq[ &J^ &

NN4

NN S

Captulo 55. Optimizacin Gentica de Consulta en


Sistemas de Base de Datos
Author: Escrito por Martin Utesch 1 del Instituto de Control Automtico de la Universidad
de Minera y Tecnologa en Freiberg, Alemania.

Planificador de consulta para un Problema Complejo de


Optimizacin

o g hjddF`&dFd _ h g Sd g h[ g h `&f&dFo`&hn~od


h`&dFe UG#&f&`h _7g dfEhn g d _ #&e&^
C g h`&OaXp
XNS7`@o7eh g d0hw& 4`&h g oJ&S _ g g h _ dh g o
dn7`&j g h
h
h _ doho[&4`&ehojh
dh `(eh g d.7h A a 7 Go
`&G |hh `&`&mGhI7h g Cd &f&dFo`
hd _ J& e& CfG8
h jw
n  d d `&whGnjhof&ho &h`7hc.e
n UXp
X
_ g _7g d
hn g A a 7 G& G _ 7g `&hyJ _ h 7
`&h G dfag h _ `&d g fGFah&&Ehk7^
YGh hwGF
h7 dn j h LK; hwo 8
a & h i h:p X p m Jh  df`&^  d ^
h
7 dn j g hn LoEdfedg
eGo d: h$

hg n d _ g g `& g hk`&f& do hu _ g g g g


4Ej7`& e _ `&hkeho 4[GF9 h `md _ J& e& C  d g 7 h7 dn j g h g h k`G& Co l ln S s|+ s
X
| f |#p n d g hhk`4h _ f& d h`& hn g jh p  4`&h g o J& a u jJ f& EU h|d _ J& e& CfGF
hc
dF 7`&j
o dhy S h n7  _ g : d _ d g j g `&dF>7 deG& dF! hw`& _ `G& E4[GF hw n h. h
jd:a 7h;& e _ `G&
8`&;o hkEhIG7  h*
dn 7`&j
h~ hI& a n v`&h

dfed}`&Go jh `G& ho f&
g #G7 f& `k
`-# J& 7jd`7 hdFo g df` jdfe #&
d h`&8.& ah g YG 2 h92Go h g & hm hk[o df`&dfp h
g h& ah g  `&hke &  hho
d g
`&dF d`&h eS hn & jd
7  dn h n do `Na Gn d
7#& `G& C g `&I"} 087 dF j g h
dedn dF2 j_7g g hw n h _ g Og IGn jh e
 h d _ d g _ jhOg  h: h fGYG
 n l dGh hk`o
do dff& e`& ho d _ g e o ho h g  g h hho h g & h `Gk E g &
l cI" 0 h ^

hY& # e o hj g EdFn 7`& K


dF A  _ g h `~edjd g  hUG h g ho f&  h ` IGn jh eaS S dh
h `u
do dff& ej ho d@
 >G
7`&j  h h ` g h& e& ho d4`h _ `&d g g h `h _ f& d h`&d _ dFY& `&h _ `&So h! h`&

dn 7`& & Cd9n g  g `& h e 7 . hy3o 7hk#k [&


 hyd _ J& e& CfGF;a 7hn h . hk^
n gg df`&`&7 dN
EdFo JGo 7fGo _lg d _ dFo h edF `&.& e _ `&hkeho j[GF; hy: f|& .  X|#p m Edfedo
d _ [GF _ g h ` _7g df`&h e h`&yd _ J& e& CfGF87 hEdFn 7`& H h$`&y n hD h jd

Algoritmo Genticos (AG)

` h*ekdFdOhYa7h7 h g &n#&
a7hd _ h g yeh& ojhYa7h>h jh g e&^
o `&h kd g &S7`
dFjojdh:nd`&7f&dFoh _ dFY&`&h _ g hk` _7g df`&h ehc`&d _ J&e&^
CYGFnh
dYGh g 
dfed*o.
l&
sp
X0hXa p 
f`l g d9h  _ j fGFhc
G& G 7dh9n *hojd g odhnj>h jh g eGo d _ d g n3
f
l&bp

  Edfd g 7 ho  U h8G& G 7dhG
h `h _ f& d h`&yYa 7h Shn#S g h _7g hnhoj 
_nd g n `&h dF
$ fGsFe
0 E heE G
fdhe dFhnn dhoef& a 7 h

ddG7 o
yd3h ` h4
`& d  h o h D*  hc
&
g d
jh g h elhk  d  X*h h$ >o h
g
g
_ g g
nh g d _ J& e& C  d@Y | dFG7 E4[& dFo h # _ &
_ g 
ah _ 7h h
n h g lp Xf|b
|d: Xe|

}h& o h$`&KI& e7`&fGF9 h$d _ h g f& do h hkdf`&7#& a ^k s
cl X
s
Xa 
mp
Xak|e& sp
X
nhho
7ho g S3o 7h a ho h g f& dFo hD h _  dFK7 hYa 7h 4f`&d$
7`&h eh g 

ed g & ah `F h  _ 4& `GG 0a 7hKn T So h
h d g h

NN

0uhka`&; h)(+Edfe _ k hohk#&


(od2nh _ hh*hJ&C g e 
`& g ehojh0a7h
od*h  Ia7h _ g ehohy`&h jd g & _ g o:nd`&7fGFh ` _7g df`&h eI`
 _lg df
h nd hnjdf n#&
df _ h g d)h ` g hn7`&j d)h
`& g ehojh:od`&hkd g &d)Jehd g a7hh `
`&h kd g &dLs
Diagrama Estructurado de un AG:
-----------------P(t)
P(t)

generacin de antecesores en un tiempo t


generacin de descendientes en un tiempo t

+=========================================+
|> Algoritmo AG |
+=========================================+
| INICIALIZACIN t := 0
|
+=========================================+
| INICIALIZACIN P(t)
|
+=========================================+
| evaluacin ADAPTABILIDAD de P(t)
|
+=========================================+
| mientras no CRITERIO DE PARADA hacer
|
|
+-------------------------+
|
| P(t) := RECOMBINACIN{P(t)}
|
|
+-------------------------+
|
| P(t) := MUTACIN{P(t)}
|
|
+-------------------------+
|
| P(t+1) := SELECCIN{P(t) + P(t)} |
|
+-------------------------+
|
| evaluacin ADAPTABILIDAD de P(t)
|
|
+-------------------------+
|
| t := t + 1
|
+===+=====================================+

Optimizacin Gentica de Consultas (GEQO) en Postgres

`fe7`&dbw!hj _7g h Gnd _ g nd`&7f&d7 g h ` _7g d`&hke>hd _ J&e&CfGF07hEdFo^


n`&j !Y& e& `& g h 4` _7g df`&h e87h `v&n ojhJ#7$LsudF _ `& h _ dY&`&h7h
dF7`&j0ndF

dG7
 dF _ d g
 ho *hhojh g d 
ho g h _7g hlnhojh `d g h8h`&co g h `&k^
fG9 h A7   h`&yEdFn 7`&y`&>Y& & ho jhYn h 4h `( g df`Fh$`&y
dn7`&j
/\
/\ 2
/\ 3
4 1

hn
dFG7ESd _ d g `&
hoOhwhoh g dFy#.^ ^,^!#a7h
Y&G7E4o`& _7g &eh g g h `& fGF
h$ GF*#.#m#p#pS7h _ #p,#p4h _ |#p!4#pSdFh4!4,44.nd g h `GG|h97dnj g hu
7 g jh ^h `u
e F7`&dbc! S8YGdw  _  SH7h `f`&ad g &edwh&d g hI0n &`&hk(
 |
g k
h g &J &
|h _ h f G7ES*h`&&e _ `&h ehofGF0hbw!h97dn g hHdF^
jf`fG 8:d hh`& df `&hfG9o| u#o
dh s `
Xh | hk#eEX #v`&J C g h de jdf_ `&`FCkOd hhG`&Fd a*h&oh & [GG7FoFdL h
Fd e*&ehh
odFd og h  _ h ^
_
g _
g
_ g
g g
g h_ `&G
kd eh no7j`&h y h Gf & _ J `&& h oe h d ehjdCgFd oFd `&h hw
Fd 7`&j njd)h h nh of &` _ g hk`le ohd
_ g


NNN

a7`h nd2hh)
dm|ahkm`u`G& e&jeh$me
cholpd X
sph
X2h bpG&l#E S O 7h`&hKnnjd`&7h f_ GFh 8f&7`&h e`7ho jh)d e _ h&d:d _ h g
g
g _ g
_ g
_ g

&d ee7h 
4 [GFGnGeEFd df*edh d _ h h g fGf FG*F h $J&
ah onhh g hkEdf e&n&h h`&h >`&h^8h hF` 7 h odhk 9oh
hn^
g
g _ g
_ g
g g


`fe7`&dbw!
_ g  dw
d `&>& e _

d d [ &Fd o`&Fd UY&a&hohhoh7f&d `&yI"}07dFj h


de^
&`_lhkg e_ hog4[GF9h `fd _ #&e&CSd g h
dF7_ `&j g Hh7dnj g h g
h `e n#o&haj d h g h GEFd n7`& 0hJ _ d A7  a  g 9hoYa7h`od^

dFHo7h
`&jhOn g h&dwYhwo`&yOehYGd g hyhh ` `&y`& S_7g d eu &e
df GFjd)
Jh h `7`uejFe7]o`&dd bwhk!`u7
d nh Kh a7h`&7`&d h `7_
`& donhjh:^hh
 _ `&
h
Fd n7`&y
dedw 0_ G& G7dfsL g






Futuras Tareas de Implementacin para el OGEC de Postgres


Mejoras Bsicas
Mejora en la liberacin de memoria cuando la consulta ya se ha
procesado

7 g `& g  K
dn7`&S*h# _ d A  h `u nd.hJ&h e _ d:h
dfe _ 74[GF _ g d _ #&^
e&C g hk#&
h`&
dn7`&j _ g h
hnh g oI&e _ `&hYfeEsEX8hk`#&hke _ d9a7h>oh
hY&
7dnj h _ g `&`G&h g fG0hehked g &eh& ojh`& g 7#Go MemoryContextFree7h `
g & ag d backend/utils/mmgr/mcxt.c
Ih g d
nhyedn g 9a7h>nh4 n
yh
7E`&h h`p g 7#Go OrderedElemPop g &ad _ backend/utils/mmgr/oset.c
m7d|eGn^
ed _lg df`&h e _ g hE[& h g dF
dF
dn 7`&S `& g a E7  d
hn ch ``&ad g & ed8o d g e`
h$d _ #& ep CfG9 h7 dFn  g h
Mejora de las configuraciones de los parmetros del algoritmo
gentico

ch ` g &d backend/optimizer/geqo/geqo_params.c g 7JGo gimme_pool_size


gimme_number_generations >h$hoEdFo g g nhEdfe _7g dfeGdho g h`& |EdF7a7^
g 4[& dFo h^h _ g 4eh g dF _ g Kn#GY
h g dF*hke  ^a7h
dfe _ &h^

b&_ h e#&edO&C74[h$GF
d8e h `7_ j`& fG9hEdFn7`&
_
_

h `m &ad
7#Go

h `oa`&d ggT_ g ch backend/optimizer/geqo/geqo_eval.c


`hnd g 4e&hod9 |-
hn.hGd g _ d g hk`lgeqo_joinrel_size
4`&d g hojh g d9h7dFn^
g h rel->size Edfednw`&dfa g &edNk.oedG7
fGh|h ` h backend/nodes/relation.h
h g n h a g eh hK&e _ 
jdh`&&e _ `&h ehojfGG`&d`Fh7dFn g h
Busqueda de una mejor solucin para el desbordamiento de entero

NN4P

K`&jKheh ed g & _ 7hhdf


gg g
7 d e ^h$M g hk`&f&dohHGoadf`&7 g Sh
`&
dn 7`&jf7 ` g &ad backend/optimizer/geqo/geqo_eval.c g 7JGo gimme_tree
h `&`&e  d g hkE g Y&aehojh77hh:nh g a7hd`&GShw4`&ad _ g h g `G&h g d*
d gg h
k^
eho jh _ h g d>o dn h*a 7hh k7 d g n _ 7hn jd`&$h g 7Ej g h*4dF g h `ShT`& A 
doJGo7
g hEf& h dcc g hk[& h de7 g hk`& f& dFoh|hn# h e _ hk 7 yho g dhh `&`&| n7^
ah g ho f& Hn dG & ho ahG  ^J
Encotrar solucin para la falta de memoria

-d g e4[GF9h g h h g hof& _ g `&d g &jed!3

Referencias

Notas

NNz

7jhn qy7m 7^# g h&h g y h


pohk8 r7rmEdfe _ k hoh J&
!p _ rr _ h g e o( 0 oh r

_ 7r g h[hk g rndj
de _ rwrmh `&
dfeh je`

Captulo 56. Protocolo Frontend/Backend


Nota: Escrito por Phil Thompson 1. Actualizaciones del protocolo por Tom Lane 2.

7dnj g h7J&`G&C _7g dfdf


d`&d8 n dhehnnh _ g `&
de&
fGFho g h g dFo^
h y
Dah k7` _lg dfjd
df`&dyhn#*&e _ `&h ehoj d>ndf g hHTru-#jeGndf g hH

nd
Dh # Y7 dn j g h a< ,Go g d7fGOo7eh g dF*7hh g YGFh*hk` _lg dfjd
df`&dNYndh h d
hT4`u d g eDa 7h4 _ h g e&jh
dFohu&doh7hYhTh g Y&dFohK ojh g &d g h@h`&dF g dojhn
_ h g dchn h7 d
7eho jdOo d
7 g h$h ` _lg dfjd
d`&d7#& `G& CSd _ d g hSah g Y&dohu
n hU dfE7eho d hn g & ah`&h g YGF
! M h ` _7g djdfEdf`&df& e _ `&h eho  hdFn g ha< .
_ dn h g & d g h
 y
g kEjh g Gn J& ES! h`&d& ah `@n d g hhn h _7g dfdf
d`&dJ _ d g hh e _ `&dfl
dfed libpq _ ^
nwf& h g  $ a g & `&hD hcho d g d3 h _ 7h h!a 7hw`&
dfe& EfGF8
h$ hn `&hk[G7 Ln d
g j ST h df g dF `&7a g h
Introduccin

dFc g h _7g Gof _ `&h


dfe _ dFohoh:ndF}h `y g dFohJhh
7 dFnhhh `
`G&
hojh LTh `
_dFG h jeh[o nh h g d`&h 4EDh hd )7Jhh7h
h7
nSh &de nh$`&hh *ehkh`onjh g dFG d g d Lsshk` `f_ edFGneed nhjh h g
74`&EhD hc7h 
g g _ g _
g _
_ g
.3 g dFo hho&w _ a7h jhh!G&f&d)` _ dFne njh g lnjh.Go
`&7ahc`&dFode g hKhk`
 7 g & d* n h. h: 4dFy`&
a7hwh `n7 g &d3a&h g hw
dFoh
 g nh` _ dFje nh g hojdFo^

h 7#& `G& CGhn df7`&8G2d g efG}h}h `y7 h g d _ a%  EdFJ/ L _ g 9h jh g eGo g a7h
G d g efG)
& f& do 4` hy7ho #G7
fG3o h
hY& . h ` g dFo h8
J#YohuGjh L7 g h _ dFh
`( g do jh* hG
dFo Ed g  o f& 
` g do jh
ho & cho dFo
h
7`Ga & h G d e4[GF h7ho JG7 E4[GF h 7h G7 [o
ah CKa 7hh ` _ dn je n h g a`GG $hn G gd g e4[g GF g h _ d7 h`( g dFo h0 7g hhn #g$ 7ho #& ^
7E 7 dGho g hkao c
dFo huG)
c

DhUI `4EDh
ho jdo
h ho p c)
ehn njh
G&
 dG gg a 7hw
d gg h
dJ
n d9o d g e`&Lvd0 `&`&dGJ _ d g hjhke _ `&do dfe g h. hcS h
h 4dFHGo  `GG dfLs
 K 7Y& & ho hy
de&
f& dFo h!n dF _  7h h> hw
dF 7`&j g hn 7`&  dFKGo h g
e^
&  dF ho g hh `A g dFo jh 4EDhU[ ` _ dF je n h g o d0Go h g & ho hwh `&wEdfe&
^
fGG d g Go g & 7 hy
dFn `p  r g h 7`&j  dF n 0(GG h e g dh ` _ dFn e n jh g n hGo ad`&7 g 
7 o ^
dh `y g do jh  h hk*
o
h `& g o )
dFn 7`&;a 7h8n hhn #G
h2 hk
7 dh2n 
DhU
2 H7 h 4`&`&h^ df g h$hn jd _ g hE
h
e | ndN
7  dhk` g do jh hn h ! hn
dFo h
 g ho &  _ a 7h jh _7g d _ &  dGf& h gg `&
do h ^
GF9YGG
h _ h g g o g h _ 7h j hk`ua4EDhU
dF _ a 7hkhU dF)
ho & S d
dfed)
7mjd9 h jd I ` _7g & eh g ajh h jh g eGo  7h!n h
h h g p h _ h g g h h ` g hn d> hk` _ a 7h jhR Th m
h _ fGF:n dFw
`&dF Sa 7h jh ho & S d@ hY h
 g dFo h ` _ dF je n h g a`&dF
7`&hGo
`&7h `&`&dFo & a_ h ` _ Sa 7h jhwh ` g hn d8 h
`ksn jG h g ho f& h Gn # g & E

Protocolo

n;nh
fG hn g &h)h `mdh*ehnnh  GnjhE7 g d# _ d
G2h g h[ojh
h)7ud
h _ h& h d
hk`hnj d9h`pw
doh GF^lG&f&dfEdFn7`&u`&`&e h>2ofGF8o4`k

NN U

uGjh4e&h _7g dGY&dohTh _ hk[&4`&h _ g odJG7E4[GF37h g h _ 7hn |ESoEhk`&fG


h$
dfe  dF a 7h _ hhdf
gg g h
7`Ga&h g Gnj ohK7h _ 7h*7h$`& nhhKG&f&d@
`(G&f&dOnhK&Gh$h9 nhh7ho#G7
fGO nh7h$ gg a7hh `u
DhU
-& f& `&eho h hk` g do jh) ho p G 0m g  _  k
DahksI ` _ dnje nh g 7#&`G&Chj>Gd g e^
fG ch `
do jhG d. h `  h g d _ % 
dF J2/4L _ g  h jh g eGo g a7he dFdh7ho^
#G7
fG7 h hch e _ `&hk g l ` _ dF je n h gg h _ dF hcho dFo
h EdF8 od3hc`&dFKI&&hojh
ehn nh

Inicio

gg d g |h _ d 
h
` _ dnje nh g f&h gg $`&yEdfe&
fG8Goeh&jehh
7 h oJ &E4# &Fd obwD
` _ d nje nh g hodFo
hK
hhT`&$
dfe&
fG4`~
DahUk` _ dFne njh g oddfe
_ g hh `&yEdfe&
fG _ dFnh g &d g ehoh
7 h oJ &E4# &Fd oh g h g Fd n$.
` g d ojh 9h hjde g_ g hh  oK G4`&d:
d 7h7jh oJ G
f GF$h g h g dFK$.J#od
h n g &jd a &Lu
d hk` _ Fd ne njh g |w
n!d h &jdh ` _ d nje nh gg h _ dFh
d
7 h o# &
J &d obcDh 
dw
d o g g &d g h _ Fd h
d  9 gg d g h _ Fd nh
7 h oJ &E4# &Fd oh g h g Fd n$/
` g Fd ojh ;h hdfe g_ g jhh * 3G`&df

d h7h oJ G7E4[ GF)$h g h g Fd $/#J od


h n g &jd a &Lu
d hk` _ Fd ne njh g |w
n!d h &jdh ` _ d nje nh gg h _ Fd h
d 
7 ho#&
J&dobcDhd g d
nd g h _ dFhEdFG9 gg d g |h _ dnh
7 h oJ &E4# &Fd .oh o g _ h S Ind g
u` Fd oh 9h hh o &  O.oh o h 7 Yd 7
Dh s (0 ~h nhh Kh ` Ind
Ed gg g hkndfEh ` _ d nje nh glg g h _ d hKEFd g _   h oJ &g
# &Fd obcDaEh c
nd
d o_ g g &d g h g ^
_ dh
dG8 gg d g |h _ dFh
7 h oJ &E4# &Fd o g _ jh 7 Yd g
 ` g Fd oh 9hkahTh o & g  Oo g _ jh 7 YnGd g 7
Dh m 0 ~h njhh hk` _ Ynd g
d^
gg d hE
dfh
h d ` G_ Fd  n8e nd jh |ghg h _ Fd Fd h hEFd 8 7 h oJ &E4# &Fd obwDh 
ndG
d o g g &d g h n^
_
gg g _
0(7hk` g Fd oh io3d d _ d g jh `7e jd 7;d hw7jh o# G7
f G g h a7h g Gd _ d g h ` _ Fd ne njh g
h h g py
h gg g Goeh &4eh oh`&yEFd oh uGF^
Ih _ 7h >7hh o & g 7 h oJ &E4# &Fd obwDoh ` _ Fd ne njh g Gojh ojG`& oC4 g  _7g d
h nd
^
DahUfdfedhnd _ d g &024`&`& g dh `
Dah _ d g &hoEdFo g g h gg d g  g ojh*h `
gg  a7h hkA` g Fd oh hhkahh _ h g gT_ d g  oc
d  g e[ &.h G&f &dG
d gg h
8d h `o
^
Dah UYF` Fd oh 3od hkah ph o & eh nnh h h jhedfeh oyd Yd _ Fd I&`&h eh n^
jh _7g df
h g [h oh *hk`
Dh g 0 g ojg h$h nj  Dh nd ^
"
Dah $h aI4
nheh nnhh h o & >d h _ 7h yh OG&f &dEd gg h
>d hk`~
Dh Uk g d _ d g [ &Fd o
 o8
`&a0
h nh g h j; a7h)h U` g d h hkh7 g o g GO &h g 3h h g
_ ;C h*h o & g



NPO

_eh hJ&[n&ndFoh h
h h)d
dFo
h p`&4
[dGFoJGoe7 h g
l7h   `* g d dFod hpoed2h7h nnh hg & h gSh  _ Fd d ch 7g h (h njh
_ g _ g
g
_ g
g g
hk d g c7h g
7` gg a7:
h h `
Dh 7a;d u&jNd S` g Fd ojh  _ 7h hw d g h o & g ehnh
h _ h J &f &d oh Tdw`&`&e  |>  of G^
gg d g |h _ d 
h
7`4 gg a7Hh hk`44EDh :od7a>d u&@d R
d oh GFwh
h gg * h _ 7h @hKh o & g
h nh$eh nnjh
df# &
h |h _ d nh
0uhh o p* }eh nn9h h ah g [h of & 7y` g Fd ojh zhkah g pGeFd n g g  }eh nnh
_ hdg ;d nh h h g pEFd oJ Go7 g G`&h _ h g
h eh nhhk  d g c7h g 8d gg d g h ^
_
`meh nnh$|h  d g c7h g ch hk`m
e Gned a7h$hk`m
Dah 8h hh o & h 7h ^7h

f&E`&0d hw
d n7`&j Ih _ h &h ;d hc`&S oh
h I& 7h 7hwEFd G7
8d h g ` g Fd _ ojh ah g 4^
CFd o`&h
d YGh g g h S  d g c7h g
de
d G&f & d )f &
`&Od h
d n7`&jcJh oFd o
h
"
Dah$h aI49G&
*o)
do
`&YGF
d gg hkEj0h`&0 nh97h9G&f&dLd
dYGh g g
hk  d g c7h g 
ded oG` &CS d`&9 2S h h gg a7h8

n Y& &h ohf &
`&d h

dn7`&




.}f&
`&dihG
dFn7`&;nh0G&f& _ d g h `^ g dojhho& 7dehnnh)w7h g `|
^
DahUY `a4EDh) ho jdFo Eh ho &yoddeSehnnhh g h _ hn>h _ h&hd:h `

do jhG dO h$`&yES h  h


dF 7`&j~
o`&ehojh*ehnhhk ad g w7h g |h ^
ad g w7h g hG d g e`y g do jh2a 7h _ h hho & g o 0o 7h aEdFn 7`&)d8`&`&eS
h
o [GF9 h d g e>n h  g
dF _ dFY& a`phT eh jh* hk`
Dh0n dF^

Consulta

dfe _ `&h jh|h _ dnh


.o nh ojh of&y0m:3nh$
dfe _ `&h J
d9od g e4`GG U
d _ - oh _ d nh
7`
Dh h n# h d Ed & jd@h ` dFojho hk`&fG^R`S do^
h ;hkah g ph o _l&g g _ h og jd o
h_ $g*e_ hng nhd _ Ig jdf9uf`aa4g EDh g h _ dg 7h
EFd  eh nnjh$dfe _ `&h jh h _ d nh
d  :h(+b: ([
d _ bw7jh _ Fd nh
7`
Dh h nJ G` Gjd _ g )
d _ & g jFd h* o g h `&4[ GFH` g Fd oh U(`h o &
h oFd o
h | eh nnh$d _ I4df8
n4w eh nnh$dfe _ `&hkh |h _ Fd hEFd 
: h$(+:b [(
g d g h _ Fd nh
7)EFd n7`&
7hG &h  Gh g jJ`&LN 7h `&h jh J`&L _ jh J`&L@ h  J`&Ld o; nh ojh of &
hk`&h
J`&sL (0 4`& g n
f G  YGdyd g j h ojd o
h h `4a4EDh h o p weh nnh
dfe _ `&h jhh _ dnh
d8( "bcN0  ([S8d g d)
nd`& KY&a&hojh
g h _ 7h nK nFd *h o &S 


NP4

 g o
nhojhof&
Gh g jJ`&Lhk`
Dhho&ehnnhdfe _ `&h jh|h _ dnh
EdF.h(+-0N rows(Adh rows h|h `(o7eh g d.h7`& ^Gnh g  S
oid h h `u-I  h$dkh jdoid
 h$`&>7 `&>Gnh g  7KY rows hT hd g d
nd oid hTM
 g co n ho ho [& : h `&h jh J`&Lfh `l
Dh
ho p 8
ehn nhcdfe `&h jh |h dFh
EdF  : h(+I rows( d h rows h hk`Fo eh g d h7 `&  _ d gg  _
 g o  ho ho f&  _  jh J`&L7hk`
Dah8 h p c* ehn nhdfe _ `&h jh |h _ dF h
EdF  : h(k I  rows( dF h rows h| h `Fo 7eh g d: h7 `&  edG7

_#& dFg ^$[o * hkn aho jGho d
f7 & h h j  J2`&
LadFd.* n h `&* h
ejJ2`&hLknh n`uh 
Dan h[G& G|dh o d& $"Go eah|dn n h$J7 hdfhIh & h g  _ d ^
 h:YN  h _ h fG7 E 7 _ d)
g d g Go g & dfL _ g 
 O7 `&
a 7g hhy ho p _ ` g dFo ^
h*l7 d g 7`&#& edfh `l
Dh ho p w eh jhcde _ `&h h h _ dFn hw
d  j
 h$(+0o D ([
e

_ j ac7h g a|h _ dFh


0mhhoEdFo docESh3hy
dF7`&jwaf&J#oh
hYG h!GJGoa g hnjh
nd
EdFo g h dchg Gn# g &
Ls
gg d g |h _ d 
h
bw
gg Gw Gh gg d g
hk  d g c7h g
` _7g d
h n h
d hG`&)
7h o3 hG
Fd n`&j; nh*
de `&hk# @F.eh nn0h nh h dh
h o & d _ g 8
G&E g h nhd h  Gd8 a7h`&GES h o_ 9 h
Fd n7`& _ 7h h_
dFg ohoh g
e7`&# _ `&h Knh ojh of & 0u. UJde _ `&hkh h _ Fd nhwe g nh A` o`lhk` _7g d
h n 9d hk`
 o
h oh o[ &0m.  o;d hFd `&
h o4YL E(0 &hke .h nhwh o & g w|h  ad g w7h g

&hh ` _7g d
h 7dwjh g eGo nh$
d8 u&dwd
dh gg d g_7 g
df# &
h |h _ d nh
.eh nnDh h ah [h of &K  h o & dh h `&f GF
Fd `&$
Fd 7`&j mnj K ah ^
h of & Knhwh o & 8h 8g &[ GF8d g g h _ 7h g j nh Kh f g h `
Dah EFd oJ Go g g
_7g d
hnd`&nhojhof&
.
g Fd oh 9h hh n gv_7g h _ g d _ g $
h _ j g eh nnh gg d g h _ d nh$
df# &
h |h n^
_ Fd h
7 .d nhh _ h g h$
7G`  &h g df g dw# _ :d h$eh nh
Ih h dh _ d Y&`&h 7h dfJ &Ehkh _ Fd nDh nh g h f &U GoE`& nd
7 dyh S` g d oJ oh Oodh n#
h _ h g 7daGoJ _ dhhehjhkh.h f g 7
7 d8h `K
DhhnJ0od g e4`&ehoh
Go
# &a@d | _ g # &
7`& g
h ` g Fd oh  _ 7h 7h ndfG` &[ &j g `&D G` &Cf G:h `
Dah *ewh nh

nOd hh o p o df# &


h |h _ Fd hy ojh h$Eh gg g `&
d oh GF^E0mh g h
dfe &h > a7hyh `
g Fd ojh *
de _lg 7hkhh n | ah g [h of & T Y&o g Fd o | ojh *7h$h o & g
7K nh ojh of &
m4e Go Ymh u` g Fd oh Gh o &
7G` a &h g
de dwG` Gnjh oJ`&Lkh ojFd oEh H7h hh j g_7g h _ k^
gS d d@_ g Eh _  g eh nnjh Udf# G7
J &d o|h _ d nhh 
7G` a &h g edeh o@d  nh$e


.f&
`&d;hc`&`&4e OofGnh:G&f& _ d g h ` g dojhho& d*ehjh:o
^
#& dFo 4`&`T`
DahUF `T4EDh ho jdFo Ehho&od}deSehnnhh g h _ hjh
h _ h& h di7 h`&dF g hn 7`&S d h`&`&`&eSofGoKo`&ehojhtehjh

Llamada a funcin

NP

hk d g c7h g (4hk ad g c7h g Gd g e` g dFojh7h _ 7hhho& g o
o7h a

d n7`&ydw`&`&e   of GF9h d g e> nh  g


Fd _ Fd Y&a`ph Teh jh *h g h _ h n _7g df G&h oh *hEDh 8dF^
gg d g |h _ d 
h
bw
gg Gw Gh gg d g
a o
J &d o|h n7`&h _ Fd nh
`&`&e   o[ GF827hhh
7 $O
hkdf`& G g h n7`& @d
a o
J &d oFd Gh _ Fd h
`&`&e   o[ GF827hhh
7 $O
oOd 7h ad`& G g h n7`&j lFd
hk  d g c7h g
7` _7g df
h n 3
d 7hw`&`&`&e O  of GF`nhw
de _ `&hk# @4h S  d g c7h g nhwho& g
I&hke _7g h  h$h ` _7g d
h n dch g 
e Goh$EFd 9 u&dwdh gg d g
df# &
h |h _ d nh
.eh nnh h ah g jh of & nhah oh g ch g h `&f GF
Fd `&`&`&eS D  of G^|j
ah g h of & _ g h
h 8h 8 &[ GF8df g g h _ h j ah h f g h `l4EDh 
Fd o# &^
o7 g _7g d
hndh `u
dfe d@
(` g d ojh 0hkahh nj g_7g h _ g d _ g 
h _  g eh nnh H gg d g h _ Fd nh$
dJ &
h h ^
_`GGnFd h ohJ`&EHL 77 h 7h.d h nnh$ h _ h gh lh df 7g dcd J _ :d hEeh h  nneh h s~nneh G
dfYJ Guh
o J &&d $oE|7h G`  d &h ng h
dfh e
7`&d ^
g_7g _ g _ g _ g
_
a&h g edehodfk nh$e ndN


(0  a Fd oh }h o p


de 7dG` Gjh oJ`&Llh oFd o
h h `
Dahho& eh4^
jhdf#Gg7
#&dFoh _ dnhcJ#od0nhc
dFo

dFdf#&
h |h _ dnha L
7 dGg 8
de d
odJ GaJ`&L nh yhh
7j d _ g $h `f
e GneOd odfe g Kh 7h odJ G7E4[GF^
 g h _ 7h nS h odJ G7E4[ GF.Fd _ h g 
e &# G h 
7G` a &h odhh ` dfdf
d`&dyJ#h^
_ 7hKh `AG&f&dfL2h ~
h _ jd0ho g d37hcd g dehnnh:h `7
goD_hU Iph `_7 gg dojhahkah
h n g_7g h _ g 7d _ g g h
Fd od
h g  eh nnjh dJ G7
# &Fd oh _ Fd h
7 dh nJ wh _ h ^
g# &S Fd odh
7dG`a
 h &hGog
e`& h dnEn7h EI7h :d oh d h 9dJ h h oh ag 7 h `&jhdg h
G _ o>C y
Fdhe7 `&ojh j g eh nnh df# G7
^
_
df# G7
# &Fd oh _ d 
h
.*
de 8
d odfJ G2J`&L : YGdhjhkE7j d _ g  ;odfe g h _ g h ` 7!h nhhjhkE7J
_7eg dh eF &hoehd@o jhc 8
deS d)G` Gnh oJ`&YL 0uh _ 7h h h o & g dJ Gvf &Fd oh $h 
7G` a &h g

Respuestas de notificacin



77hheh g h
h g `& _ ho _ oj g 7h`&dFodfe g h7#&`G&C4 dFhG`&d
dfe dF`GGnh*
odJG o d:oh
hY&SGjhoh g o 7Ka7hah g
d`&dF*odfe g hHh g h `&f&dFoh|J`&SLaw nh
hU dFK 0m:*mdFHodfe g hhodJG
fGF
nd
Y&e _ `&h ehohDode g h| g & g g &eho^
hD hk`&h
[& dFo  dF

NP4

I g ojhhk` _7g d
hn d8ho
dn7`&4hk`A g dFojh _ 7hh.nd`G&f&j g `&wESoEhk`&fG;7h
`&
dn7`&eh&Sohwhk`hopdhwo _ h #&f&dF _lg d _ &` _ dnje nh g S _ h J&fG
hw
o
h `&fGF`odhyho& O g hkEjkehoh`
Dh _ d gg 4Cdohhh7f&hof&Oh
&e _ `&h eh of GF^o
d h nh eFd jh oh g 4`
Dah }
Fd j ojh ehojhGh _ h g do7h ad
jd 7h ` g d h  g ohyh ` _7g d
h n 
d h
Fd n`&j lS h J&[&dFohDhy
o
h `&fGF
h h g p nh gg hk`&# &aeh o.
h G g h
7h ojh n _ d g `&3d a7hw`& 
_ h ed  _ dfEd*e adf`&7^
eGod n 
d Gh (` #G9hh  & g  o _ h o4G` &C f GF*h Ghk`u
:d od g ek`
7 g h o & g  o _ h J &f G8h
o
h `&f Gohk` g d ojh  g h$ o! o7h aEFd oh uGF)
d Gh `
_hoFd j&e &noh d g eh o`& e&ho jhyehh nho7 hko
yh
`&|dFoh ha7Gh F^jkIh ` adh Cnjeh `neh h nndh
h0mnj g yj h_ 7j 
Dah hkJ(&faG7 h

h gg g g y`&yg
d oh uGF^f7d gKg CFd oh Hh nh  g GS S o_ Od nhh o &yg| _7og g h _ g7h nj _ g h
j`
eh nnKh h$
o
h `&f GF^
.eh nnh o
h `&h a7h n^ nh g
& od g deh oFd a7h
d ojh oG`&Fd 
e Gned jFd

`&hJ#7-2IwE`&ahhk g hkLfho& d|`( g dFoh8 g ohh `(G&f&dh`&


doh GF^n0(~`&
_
h J 7&f Gk`
Fd o# &h ohhkF` -Ih$
`&ah nh g h $h `u
Dah *d g jh ` _lg df
h n .d h`&EFd n7`&
D hk]o(` h
o
h `&4[ GF _ 7h hjh oh g .
d odwjh oh h 2hkEjFd |^ d hh e `&dfS Yu`&`&h K h 7h
h a7hh `f
Dah  aK o4G` &C .
d h _7g dfEh g g `& _ h J &[ GF_ ogh ojd o
_ h Hodjh  g h _ hkEjNd
0(`&
o
h `&f Gh $h h
# &a _lg Fd 7
h`&ch g e Gof GF _7g h ej g  h `l
dfe d)
j7`
 dcehnnhKh$h gg d g
EFd nh
7h of & hjFd dwh jdch ^a7h _ d gvg C4d oh Kj oj:
d h nh  G 
de.d hh f &h o^
f& h F` g d ojh 0odw# &h oh d g e  g h
jK Dh h f G g E7 7dw o _ g hk# &f GF87h$
o
h `&f G
7a;d u&jNd 4Ih hw
d oJ Go7 g h _ h g 7d nO 7hhk`
Dh  g h _ d 7` _ hk# &f GF^
o& g  _ h J&fG.hT
o
h `&fG.Y&e _ `&h ehoh7ehoj`& _7g df&`GG h@h*a7h
`&w
Fd 7`&j
7A` oG` &
h _lg Fd odf)7eh ojw`& _7g d4 &G` & h Dh a7.h `&`&hc
Fd 8
eh nnKh h$h gg d g h hkC hh g e Go g
Fd 8 &jNd
oOd ae7h`^`& d_ oh jJ h&f Ghrmhw
Da
h o
h 7`&h f GFdFYh&y`&h0h oa 7& h*
w7``Ga_ d &hnje nd
h hg nd ohkd`G&
hg `& h #&hkf`GFh o@`&oEd h
g g
_ h
o
h `& o gn_7d g 7h hg h oh `& _ 8h oh 7f &d
Y`&d*h ` g Fd oh E7
Fd 7`&j:
g
_
g
h)
g 87eh oj g `&8h u& &G` G U` Ghk]o g _ G` &
f &Fd oh e7`&# &^ _7g df
h nNd m4e &h
Go g Fd 7
h g &h na8
d !h hka G ua. a7h h nd oS Kod*7d &C o d &S ;Goh o

o
h `& g EdFn7`& ` g &hnad0g h:nh a g G _ hyg g dFod g hag g &hd*_ `&
g `&hhk g hk g
ah oh g K G4e &E4eh ojh

Cancelacin de peticiones en progreso











` _7g dfEh&e&hojd`h9o`&&CfGod g e4`h:7h*h ` g dojhhophGehnnh0mh g ^


eGojhGf&h gg h>Geh&jehojh`&
doh GF^ ` g h f& g h `ehnnh uhk`
Dah8f&h gg
Go eh&jehojh$`&
dFohuGGOo`G&C4
.o !o `G& CfGF)
o d e` 7h hd
7 h G d!`&`&dUhdF hJ#k h
d h7e L
h8
7`Ga & h g h~ g h ed@g 0(7 h _ ` g dFo h gd*g gh `EDh hw f& h gg hGo hg  _ h g  d8g  hw`&
_ d^
ohuGo 7 h h g & w`G& h g gTg hn g n d$ 0o `G& C4 g l `A g do jh
J& ho hc`&wd _ fGF hc`& o C g 
o7h ad
Dh g h
do j
S dwhk` _ dn je n h g Yf `&d h hk

Finalizacin

NP S

Tipos de Datos de Mensajes

nnh
fGF87hn g &d`&dFTJ _ Fd T Y&
dF*hK4dF7J&`G&C dFh`&dehnnh

-o nJ iL
.hojh g d h8d g 7hhchKh g hU0 i hJh _ h fG7
dGh$h `la`&d g `G&h g 4`k
 h -#o< -on,4!J. !Ls
&e0m g Go nJ sL
8 k;
hw
kEjh h hwh m
jehojh ajhKGoh hkd)
dfedoESho
h g e Gogg yh )#mg M# f`ag #mMF# nhdfe &>h Yodh nGnhyh _ f&gdO_7gn7f&hohE0 s hnJh _ h ^
[ G7
dch ojd o
h h h `f4`&d g G` &h g 4k` s h Y&e0m g Go,!S&e0m g Go<.J(nh g (+Ls
0u g GoaJ sL
oc
h o> h
Fd oah of &d o`h g 
e Go h )#mM# YG)G` &e &j[ GF;hy`&Fd o &j UE0
hs n# h _ h f G7E 7h |h `fa`&d g G` &h g 4k` s h 0m g Go0u g GoJ(+ nh g (YL



Nota: No existe lmite predefinido para la longitud de una cadena que puede ser
retornada por el backend. Una buena estrategia a utilizar por el frontend consiste
en usar un buffer expandible para que cualquier cosa que quepa en memoria pueda
ser aceptada. Si esto no es posible, se debe leer toda la cadena y deshechar los
caracteres que no quepan en el buffer de longitud fija.

"h nJ cL
~Ejehh ajh l0 c hn#h _ h fG7ESh8h*hk`4`&d g `G&jh g 4`k hl"7ajh |"^
h 4J2#(o#LY n


Formatos de Mensajes

n!nh
f&d0hn g &hh `d g ejd
h j`&`&7d
hE 7yehnnhE ood
&  d _ d g 8 g dFo hG J L _ d g 
Dah*J"Ld _ d g edFTJ#w"Ls
nfG&df

_ 7hhnh g ho^

J2"7L

"ajh J9#pI#pL
- h oJG7EGh `ehjhEdfedo3`&8h97dF 0m--~J#.ehjh hkF&d
|dIh g _ #&dF9hohh `(o7eh g dhE4e _ d|h`&7`&:nK# _ dF^hD_7g jdFLs
"ajh n
.we _  hT &# vEFd  w & _ g ES E4e _ dyh w`&D 7`& e` _7g &eh g
e _ d
d g ^
gh &a _ <>Fd h ` hy&`oe h &=wa#J }jh 0"h `u@L df
h `4_7dwg &Ee4he g daj
h d fhk`h nh dFh$d*`u
&e M_ dJ#
0md "gLg h  h _ ` Fd &ehyh `
hkfh A` o_7dfg ah odg
e _ dG
d gg h _ d 7h_ `l &gg = _ h A` nh  dGajh * YA_7n7g Eh Y&g ^
aeh oh  &Kh nJ 4EJ &a;d Yh `a`&d g h `
e _ d
d gg h _ Fd &h oj:h odh

.U
0 oh A` o7eh g 8
d h
e Fd Dod)h  e7`&# _ `&0d h > uh ` g h nj0d hk`o7`&# &ed
hhh `fe _ 7h$&#Hodh|_ 7J&`G&C d@
NP

7d

g `&dwSodf _ g 
$E4e _ dw
dFa`&d g o d9 jhoh edF`&dY&a&hoh

-#o,4!

 _ h fG7
h `fje]od7h `ua`&d g  h `u
e

_ df Go
`&7ah7dhnjhe4]odN

"7ajh n
 _ h fG7Eyhk`a`&d g h `
e _ deGnedhGE g h g h 0m--Y hTh `Soh ^
gjh&d g 0jehkah]od]oe h o`&dFd.$I.lad &h h$*o#md@M #a`o`hk`o
e _ d9h4ndFnfh ` g dFo^
g
g

7 hoJ&E4#&dFobwDJ"L

"ajh J9#p#L
#- h oJG7Eyhk`uehnnhEdfedo _ hk#&fG9h7ho#G7
fG^
-oj,!JM L
 _ hk[ G7
 a7h`&y4jh oJ G7Ef GF7ad &jdN
7 h oJ &E4# &Fd oh g h g Fd n$.J"L

"ajh J9#p#L
#- h oJG7Eyhk`uehnnhEdfedo _ hk#&fG9h7ho#G7
fG^
-oj,!J L
 _ hk[ G7
 a7Kh nh g h  &h g h7jh oJG
fGFG$h g h g dFT$.
7 h oJ &E4# &Fd oh g h g Fd n$/J"L

"ajh J9#p#L
#- h oJG7Eyhk`uehnnhEdfedo _ hk#&fG9h7ho#G7
fG^
-oj,!J! L
 _ hk[ G7
 a7Kh nh g h  &h g h7jh oJG
fGFG$h g h g dFT$/
7 h oJ &E4# &Fd .oh o g _ h S Ind g GJ2"7L

"ajh J9#p#L
#- h oJG7Eyhk`uehnnhEdfedo _ hk#&fG9h7ho#G7
fG^
NPN

-oj,!J, L

g hoy
do g nh ]o>odh g _ j 
7 hoJ&E4#&dFo g _ jh7 Yd g *J"L

 _ hk[G7
a7hKnh g h&h

"ajh J9#p#L
#- h oJG7Eyhk`uehnnhEdfedo _ hk#&fG9h7ho#G7
fG^
-oj,!J. L
 _ hk[ G7
 a7Kh nh g h  &h g h oy
do g nh ]oyho g _  
"ajh !
7` n`&jd7J &G` &C g `fh o g _  g `&
Fd o g nh ]o
"
Dah $h aI4J"L
"ajh J9#p$#pL
#- h oJG7Ehk`kehnnh
dfedo
`&ah^h|
o
h `p[GF^ ` g dojh:hkh| g  g
h jFd K`&d g hDnhhnh _ dh g ho& g ehnnh| o
h `&|ha7h _ dFjh g &d g ehojh
-oj,!
7`-I 7h _7g d
h n:
d h `u
Dh U
-oj,!
7E`&4Dh hk g hk hh nha4EDh U
"Go g a|d J"L
"ajh J9#p"#pL
#- h oJG7Ehk`uehnnh
dedwo`&Khjd|Go g &dFunJ#ehnnh$dfIhk^
n g _ # &dF _7g h &d:hohhk`(o7eh g dh
e _ d|h`&>7`uOn# _ dFUhDdFnL
"ajh n
.we _  hT &# vEFd  w & _ g ES E4e _ dyh w`&D 7`& e` _7g &eh g
e _ d
d g ^
g h &a _ >< Fd h ` hy&`oe h &=wa#J }jh 0"h `u@L df
h `4_7dwg &Ee4he g daj
h d fhk`h nh Fd h$d*`u
 &e M_ d#J 
0md "gL g h  h _ ` Fd &ehyh `
hkfh A` o_7dfg ah odg
e _ dG
d gg h _ d 7h_ `l &gg = _ h A` nh  dGajh * YA_7n7g Eh Y&g ^
aehoh &KhnJ4EJ&ad;Yh `a`&d g h `
e _ d
d gg h _ dF&hojh:odh

.U
0 oh A` o7eh g 8
d h
e Fd Dod)h  e7`&# _ `&0d h > uh ` g h nj0d hk`o7`&# &ed
hh h `fe _  7h$ &# Hodh |_ 7J &G` &C @d
7 g 
7E4e _ dw
Fd * a`&d g GnJ GoO
d 7h 94h oh eFd T`&Od Y& &h ojh

NP4P

-#o,4!

 _ h fG
h `je]od27h `a`&d g h `TE4e _ dh~E`&7hd}hjhe4]odN
de _7g df g hn df _ d g a 7h$ a u&
h%h m
`&7hdf%c ojh|J2`G&oh $=/<kL&^

h^Go
`&7h d                                                                        
                                                                                                     

"7ajh n
 _ h fG7Eh `4a`&d g  h `4E4e _ dyeGnedhd g e4dyGo g &d@ n hh `~je]od
_7g h &d@
o
h `&|ha7hJL

-oj,!J <4L
7`je]od:h ` _ 7h hhajh
-oj,!J > M > == 4M!L
7`u[ F&
d h$
o
h `&4[GF
h h #&fGF^Y`f4`&d h|h `&h Gd Ka7h
dho
(+4! ,.4(h `l`&Fd y<&JeSY&_ G
J&adn(+/<k= g > (h`&dF<_ &g #ehodFY&&^
7
J &Fd e7 g h  & g
d YJFoh nhTf &a!d o!d hka*h nh g h `~
e Gned a7Uh Goa
o7eh g .
d hah g YG9hk` _7g djd
df`&Nd
-oj,!
7`-I 7h _7g d
h n:
d h `u
Dh *df h J &aNd
-oj,!
7E`&4Dh hk g hk _ g $h `f
Dah *dkh
# &a@d
dfe _ `&h jh |h _ d nhJ"L
"ajh J9#p#L
#- h oJG7Eyhjh$ehnnh
dfedo _ h J&[GF
de _ `&hk 
0u g Go
`m
dfe Nd |d g e`&eh ohJ _ h g >d od.I&hke _7g h Lo _ `& g I&e _ `&hDa7hGho^
J G7EK a7h
de 7d0m:
3nh$
dfe _ `&h JN
d _ Ic4|d9 J"*O L
 )m8
d 7>h 7`& Ud hy
 oh n# h g e GoS  _ d g *"ajh J#o#pLs0mh
dfe^
_ `&h jEFd  o> nh
7h of &"h 4J2#m#pL4"hkJR# #pL"ajh J#o#pLs

NPz

d _ -oh _ dnhJ"L
"ajh J9#p#pL
#- h oJG
h `ehnnh
dedo g h _ 7hnj0m g d _ -#^` g dFohah h
h o & g ehnnhd _ I4df8
d _ bw7jh _ Fd nhJ2"L
"ajh J9#pi#pL
- h o#G7
$hk`mehnnh
dfedco g h _ 7hn0m g fd _ cbc7sejhehjhnh g
nh  Gd _ d g Gehnnjhd _ aIjdf9
g d g h _ Fd nhJ"L
"ajh J9#&7#pL
#- h oJG7Eyhk`uehnnhEdfed
g nd g
0u g Go
7` odfe g Kh h `u
g d g n0uh g $(+`& o
d( Yfh `f
g nd g hH&e _ `G&f&jdN
e _ jac7h g a|h _ Fd hJ"L
"ajh J9#p-2#L
#- h oJG7Eyhjh$ehnnh
dfedo g h _ 7hn$o>hoho[&yaf&
0u g GoJ(+(+L
0 G7# &G` &C4 g
o g _ jh 7 Ynd g 7
Dh o#J L
-oj,!

0u g Go

7`je]od:h ` _ 7h hhajh


7EdFo g nh ]yho g _ j $J2eh& ojh$ g

gg d g |h _ d


h$J"L

_ jJ2LLs

"ajh J9#&#pL
#- h oJG7Eyhk`uehnnhEdfedh gg d g
NP U

0u g Go

7`ehjhK7h$h

ao
J&do`&`fJL

gg d g eGnedN

"ajh J9#&a#L
#- h oJG7Eyhk`uehnnhEdfedoy`&`&eS>ofG^
0u g GoJ(+(+L
0 G7# &G` &C4 g
-oj,!
 _ hk[ G7
h `f-I hdkh jO
d h$`&>  of GFG`&`&e g
-oj,!
 _ hk[ G7
h F` o7eh g :
d h$ g 7eh ojd Ha7Kh nKh ne GG g S*`&K2ofGF^
7 g 
7 g a7eh odfS nh# &h oh$`&
d Y&a &h oh
#- o,4!
 _ h f G7Eh `4e]o!d h `4a`&d g h `~ g 7eh ojdEh ~
`&7ah dh nhTje]od@
"7ajh n
 _ h f G7Eh `4a`&d g h `4E4e _ dy
e Gnedh d g e4dy Go g &@d n h h `~je]od
ojh g &d g


ao
J&do|hn7`&h _ Fd nhJ"L

"ajh J9#p$#pL
#- h oJG7Eyhk`uehnnhEdfed g hn7`& 7d:h`&`&e K2ofGF^
"ajh J9#p#pL
 _ hk[ G7
 a7Kh nKh hkdf`& G g hn7`& d.odaf&d@
-oj,!
 _ hk[ G7
h `fje]o:
d h `ua`&d g h ` g hn7`&j df4h ~E`&7hdchnh$e4]odN
"ajh n
 _ hk[ G7hk`u4`&d g h ` g h n7`&S dh 92d g edc Go g &Nd n Th `uje]odw ojh g pd g
"ajh J9#pM#pL
(0 G)J &G` &C
Ji`& d d &eh ojh  a o
# &Fd oh n7`&jh Fd nhc8
a o
J &d o^
Fd Gh _ d gn>h Fd )`&d;e G_7eg d _ _ h g d
d *`&a o _ g h Td _ f _&d o`&h h *h `eh o^
nnh Ls


NzO

ao
J&dodFGh _ Fd hJ"L

"ajh J9#p$#pL
#- h oJG7Eyhk`uehnnhEdfed
"ajh J9#pM#pL
 _ hk[ G7
 a7Kh nKh hkdf`& G
df#&
h |h _ d nhJ"L

g hn7`& 7d:h`&`&e K2ofGF^


g hn7`& dcaf&d@

"ajh J9#&#pL
#- h oJG7Eyhk`uehnnhEdfedoy ah g jhof&
0u g Go
7`eh jKh 7h$ ah g h o[ &$
e Gned
df#G7
# &Fd oh _ d 
h$J"L
"ajh J9# #pL
#- hoJG7Eyhk`ue nnjh
dfedo g h _ 7hjhDodJG
fGF^
-oj,!
7`-I 7h _7g d
h n:
d h ` _7g dfEh dw
DahU
0u g Go
7` odfe g Kh h$`&
Fd &f GGh `& a7h nh$`& C `& odf# G7
f GF^
w7h g w#J aL
"ajh J9#pc#pL
#- h oJG7Eyhk`uehnnhEdfedo _ hk#&fG^
0u g Go
7 _ h J &[ GFG
e Ge
hk  d g c7h g J"L
"ajh J9#px#L
#- h oJG
h `4# _ dhehnh+|h ad g w7h g hvho& 7d
7 dhk`
Dh
h J G` Gnd _ g 9o7h adf&
`&dh _ hk#&fGF^
Nz4

dfIhn g _ J&dGJ"L
"ajh J9#&#pL
#- h oJG7Eyhk`uehnnhEdfedo>h g _ fG9h7`&
-oj<
 _ hk[ G7
h F` o7eh g :
d h$
e _ Fd Th  oK`&yJ _ 7hhnh g E h g dLs
7 g 
7E4e _ dwjh ohked T`&
d Y&a &h oh
0m g Go
 _ h f G7
h F` odfe g h h `u
e _ @d
#- o,4!
 _ h f G7
h `f-2V
I hdkh jOd h `uJ _ d h
e _ Nd
#- o4<
 _ h f G7
h `fje]o
d 7h `u# _ @d
#- o,4!
 _ h f G7
h `feFd G7E 7d g h `uJ _ Nd
0uj g j _ 7 
Dah J#aL
-oj,!J! B <L
7`je]od:h ` _ 7h hhajh
-oj,!
N` o7eh g
d hah IGFihk` dfdf
d`&d@dF<&#e >I&G7E4#&ad.ndFh `
o7eh g 3
d hwah g IGFge4ad g _7gd4<&Jyehod!Y&G7E4#&ad>dFhk`@o7eh g d
7h$ah g YGFehod g
&e0u g Goa<.
7A` ode g .
h h`& nh h Fd n _ d g h 2hk
dh A` odfe g .h h `l n7 g &3d YAo3d nh
h _ h f G

&e0u g Goa,!
7` odfe g Kh h `u n7 g &Nd
&e0u g Goa<.
7G` a &h g G` Goh > h$ g 7eh ojd _ g _ g `u4EDh  _ d g h ` _ d nje nh g
&e0u g Goa<.
0 G7# &G` &C4 g
Nz

&e0u g Goa<.
jd _ f&dFo`a7hh `~
Dh:h h g & 7#&`G&C4

mh g 
e Gojh$J#L

g_ g ehnnhhUh _ g YGF^

"ajh J9#p#L
#- h oJG7Eyhk`uehnnhEdfedoyjh g eGofG^
.oho g _ h 7 Ynd g 7
Dahko#J L
-oj,!
0u g Go
Notas

7`je]od:h ` _ 7h hhajh


7EdFo g nh ]>IGho g _

 g

e p`&d@ _ &`&q g &ah g ^ oDN h edF^


dN 7D
!e p`&d@ `&q>YY( _ _ 

Nz4

Nz S

Captulo 57. Seales de Postgres


Nota: Contribucin de Massimo Dal Zotto 1

7dnj g hcn)`& :I&&hojh:hk]o`&h



Dahu

_ g *`&)
dfe&E4[GFho g hh ` _ dnje nh g `&d

a   $ 3: l   
4








0Signal
-i9.
0-- 9
0-: -
0-! @7H
0-! #- 
0-! c0m
0-! c0m!
0-9i I
0-! @#-
0-! @l:b
0-.b 9
0-! 

Accin postmaster
D &`&`&J Y& _ L
&h
D&`&`&J  Y&ajh g eL
D&`&`&J  Y&h g eLD &`&`&J  B LS&h
& od g h
D&`&`&J I& g 4L2 &h
D&`&`&J I& g !4L
g h _ h g
& od g d
& od g 7d
7e _ n4

g hk% _ a%4d _ J &d 

o
h `&`&
dF7`&j
`&hk% g
e7h g h
e7h g h
e7h g h g _ G
odf# G7
f GG YGo g dFo
& od g dwJ _7g hk h 
Accin del servidor







`&d4# ~
h _ J &doiS`&h

Nota: kill(*,signal) significa enviar una seal a todo los backends.

dF

Gof `&h$
e&dFK7h `l&hd*hnd h.nh ]o`lhhk`ld8hc0m-2.-h`&7 h
0u-i9_7g _ _ g ahJ&do g `&dGndFo0m-2gi92Goho g h `&h h g h `N7 h g dh _ %d _ #&g dF
`&d g h A g h
f&dojd7dw`&d
Dah
J&dF:h*0u-i9.k0m-7H}0u-!c0m*
0u-! c0m|!y`&`&e dF _ d g h ` _ dnje jh g fd g hnjhE4eGodGhj Unhk]o`&hho& y4` _ dFn^
e nh g$_ 7h h anh g h o & S 7dfe J &E4eh ojh f &Fd Fd `&d 
Dh !YGiohkEh Y&^
 ihEFd odfEh g  _ Guu7 g n g_ Fd n g h `&d8 &
h
d 79h n
h ohk
h Y&h h o & 
0u-! H ` _ Fd neS jh g h njd _ g g 7jde 4# &
eh ojh$jd Fd `&Fd EDh  g

nh ]o`0m-2! 0u|!h e G n d hkh  hk@` h d e &h oj3d hk`7E4 :h 7h
`&wj`&w0m-hnd _ nc
7 dG`&a4E_ Dhg _lgod _7g dfg Eh`&
g h0m-@ g Soh`& g ad
_Y&h e g &d `&7h
deh ohj# hw&h h e o_ &Nd w
o7O nhk]odhk`7`` 
d Danh je 7nh h hkEh j`7!
a77hA` `&h jh `&j 0u-wh njjcd Fd ey `&Fd7h4 E*Dh =M 
_
_
g
_ g g
h ndfE _ S d |`&Fd 
h a7haf &hhk`fE h
`u nd# _ &
:
d h`&S Hnh ]o4`&h _ d g `&d _7g d g e d g lh _ 7h Dh h g h (` Y& &h ojh

# stop postgres
kill -TERM $postmaster_pid

Nz

# kill all the backends


kill -QUIT $postmaster_pid
# kill only the postmaster
kill -INT $postmaster_pid
# change pg_options
cat new_pg_options > $DATA_DIR/pg_options
kill -HUP $postmaster_pid
# change pg_options only for a backend
cat new_pg_options > $DATA_DIR/pg_options
kill -HUP $backend_pid
cat old_pg_options > $DATA_DIR/pg_options

Notas

NzN

e p`&d@ Cq[ &J^ &

Captulo 58. gcc Default Optimizations


Nota: Contributed by Brian Gallew 1

7 g
dF g g a
_ g  g f&h g j d _ [&dFoh _ d g hh
jdlY&e _ `&h ehojh .a7hh&^
 h `y7 h d
u`N2d ed7h
hng h7 h g dg h/usr/local/lib/gcc-lib/platform/version/specs
 nj ohY&e _ `&hs`u h g dchn#&GGdh
nh
f&dohn4
og h g h
`GGo h  h`&do&U _7g &eh g *hw( section_name ($Jh Nm( Sez (+Lsu8nh )h
o `GGo h >hd _ f&dFohn`&yjh g
h g yh|oy`GGoh yh`& Ed@
`o
e& dGe Dn ho f& `&`&d)h ]  g `& $d _ f&dFohhnh 7$w`&c`GGjh`&.nh
[GF _7g df^
_!& =  !hG[7 n djg `& h h d}e h_ `&dfnFn `&_ 7dFao aed dFD a h7 h hynjdNho h e dh D`* Go !h wdhjhkrm
 j rm`& ddF
n h`+rmh`G&o vr) 
. E> ^<`G& v
dFr) & . > E<k ^
`GGo !7rm! = !ar _ h f 4,`GGo h g e_ g  nd:n hho
7ho g `&g Y& a& hg o jhn h
[GF^
- -------SECTION------*cc1:

- -------SECTION-------

dfed _ hhah g nh lod .Gooyd _ fGF _ d g hhE


d@0Y&h e _7g h
dfe _ &`&
d&adc
S dw(+^e. > <^#de&j^# g ehk^ _ dGojh g (+4h g &Ka7h
e& g `&d:hhnhedFd@
- -------SECTION------*cc1:
- -m486 -fomit-frame-pointer
- -------SECTION-------

0(a7h&h g d _ dFh g hoh g g


dF&adG, > < _ g d g dha _ d8Go e o#&7d8a7hjho
_ d g p4h g pedF*a7h 4Eh g 4`&adw Yk
!

- -------SECTION------*cc1:
%{!m386:-m486} -fomit-frame-pointer
- -------SECTION-------

ndcde&jhKY&h e _7g h$`&dF _ oh g dF*7h$e g


dh
dFn g  g
dF&dd _ #&e&CSd _ g $. > <
eho dF* 7h>n hh _ h fG7h^e, > <hG`&y`GGohkhd g hoh
77h h g h `G& C g hy nSoh _ h g ndo`G&C4f&doh dh `7 h g dO _ h
mE0G)hkea g df
gYh G 7jh h ge7 h! Y& h e _7g ha 7hhn d
e& dFDn d `&dfa4`&hn uG  h
j g ) jddF`&d$n7 g &d7h `
Notas

e p`&d@ ahkh D"qEeU h

Nz4P

gcc

Nzz

Captulo 59. Interfaces de Backend

dFy h g dFyhUGoh g 
hvJ2"7-LFnd g _ #7hDY g ah:hho g  _ g `&dFKa4EDhOh
7dn j g hKhh
7J dFhheddch _ h f&`(+ddf#n g _ ( _ h g e&h g h `G&Ck g o[&dFohh
 n h hjdFI&;a7hh Gnjd4&h `IGnjh e:hy`& nh!h>jd [d7 h g dF"_7
h 7 h h _ d dFg y `&d"$ - o jd> n h g n
h  dFh m_
jg e ghh o jg hhkh` n YdNGn 4  hkeh D h h|`aISGn jhHh e7 hU87 7 hdFa S4 `Sh:&7 & hO[& 7d@ initdb
dF Ih

4`Ga & h g g e o h g _ `&dFg H h g g dF| "- h initdb n dFg  ag h h g 4`&eho hDGo h g o dF I7 d aho h g
 S d`&d7 h g dF global1.bki.source local1.template1.bki.sourcela 7hDn h
ho
7ho g } h h `^ g h
d g & d` hG(+`G& g h g & n (K h87 dFn  g h F jdFOn h0G j`&  |
ded
_ dg 
hhn  d9hy `&hcG
dF jn `&7fG
F[;GF hh>  h.dF7 n d n g jh lhn n
jddFD7 h G g dd  d df g
h!n hydfa ho eh g cS) `&`&
ede  d d _ g jh>7 h `
_7g dfec
dfeg dho  `&dFD g h dF 7hg o jh! h>_ 7 dFg j h_lg a 7g hY h)
dfedGgenbki
ho 
genbki
h genbki  7hEdFn g 7g hT`& 7 !7 g h g dF@ hKEhkEh g ^ h|g h h* hn g g & h hn j jg `&
0uh _ 7h hho
do g g G d g e[GF8 ` g h _ hkEjd*h `& dfE7eho fGF h initdb crea hG hk`
dfe  d: h$0m: 6$@$7T*Ta$#|c:
tedb

Formato de fichero BKI

dFc4EDhh87dnj g h.Gojh g_7g h }`&dF7 h g d"7-Edfedanh


hn g &hndNuj
hn g _ [GFin h g G
eS4[&`@hhoh7h Y
dh edFch `y7 h d

ded}hh e _ `&dN J2
dfed2hh _ `G&
 gg &g vhnjh;7 h g dV ndf g
g h3oglobal1.bki.source
dhh m
j ehojh8
7 h g dc"$-2 _ h g d.7 h$dF dFT edF dFT `&hKn h g  g _ g 
de _lg hh g h ` g hn7`&SdIf`&d7hh
dFc

dfe  dFc
hn  
Edfe _ 7hn jd _ d g iG7 ho #G7
 d g hkaG d _ d g g a7eho jdF hk^
_ g j;dF7 h>_  d d g eh _ h f& dFh f &  `kdF
0 g 7en hdFo jd`&dF> 7 h& `&edF h
dde7 Sd 
d >a
7hh
hdfn ~eh& o ho dFCo
h _ h d ` g&% ' & e( hn h
g h& o d g wh `m _ 7eho jd:% ' n h' ( d
hn Do _7d g e`&g eho jh 0(u g h ` g n h aG d d _7g h g ^
% ' ( n
f& d ho dFo
hg H h g g
dedw 4_7`&g d g 9Ug  Ihd g dwedF d `&d%  ' (
g k
h g h hka_ Gg  dF^_  h
hGo jh g_lg hk )
EdfedGh `Ao dfe g h! hco ce g dff`&d8a 7h _7g dfad
: 7hch `o g 7eho jd
% ' ( n
nh g h h e _ `&
h _ d g h `ua`&d g  h`&$e g dN 0(~ `&e g do dwh J7 hG Kn hho h g $
h gg d g
 | e g d^n hK ho h
n  d
define macro macro_name = macro_value

nhKa&jy`&>h&fGn d

undefine macro macro_name

nh g h7hoh$Sd`&eGne>YGoj G*a7hh`&>h&fGF^


0uhkaGkehojhKnh`GGn `&dF
deSdhoh g `&h|`&dF
dfe dF*he g dN


Comandos Generales

b:

classname
g h`&E`& nh`&`&4e 

classname

_ g K27j g SeS _ 7`&f&dohu

Dbc0 classname
D &h gg `&
`& nh&h g `&`&e  classname 0mhhoh g h gg d g I classname
odhn#
j7`&ehojh*&h m0(Hod} h
h
vhojdo
h`&
`& nh3a7h

7`&eh oh$h J  &h g jK ng hf &h gg  _ g classname
*)

Nz U

7-#9

2- e _7g &eh`&
`& nha7h4Ej7`&ehojh$hnJy&h g 
-0N bc-2I' oid_value J value1 value2 L
- nh g o.o7hkGn of& _ g `&
`& nh&h g jcn d value1 value2fhk
Edfeda`&d g h.h*`&d g &7dFw oid_value
dedbw-I0a0 oid_value odh
M 4h oFd o
h |h nh4`&d nh$ n 
de.d Gh oJ G7
d g h `~dkh jdGnSo[&Ih$df g d
ed df _7g dadf
 Gh gg d g g g
-0 N *J value1 value2 L
dfed gg &4 _ h g dch F` YGjh eyh oh g  9Gh oJ G7ES d g h$dfkjhkdw &E@d
^  classname J name1 ' type1 name2 ' type2 # L
g h oE`&S h`&`&eS  classname
Fd )`&Fd  g &7Fd Go g d 7f GFd h o g h _ g o^
h YG
b  J name1 ' type1 name2 ' type2 # L 0 classname
:
g h o
`& nhc`&`&4e  classname _ g wh n g &j g _ h g 9
d od) 4 h Gnjh of &
h `&Fd 
J `&dfaFd ^Dh YGnhke #J ndch _7g &ed g &`&eh ojh`&.
d a7h$g  `mdfdJ g _ ^
_ Goy L
I 0 |b classname
Ich n g 7ah$`&E`&S h`&`&e  classname
I a#- 9#- I 
b class_name 0u#-  amname J opclass attr
.
J functionJ attrindexname
LL
hw h&&
hc`&`&e 7d indexname _ g w`&
`& h`&`&e  classname  n d
h `vg ehkFd `d 7h

h nd amname
Fd E4e _ d nh`&`&4e name1 name2 hk o`&Fd
d _ h g 7d g [h !h g h
d G
a7h n9 nd collection_1
collection_2 h  g h ^
_ hk
# &aeh ojh
,)

++

++

Nota: Esta ltima sentencia no referencia a nada del ejemplo. Deberia ser cambiado para
que tenga sentido. - Thomas 1998-08-04

Macro Commands

Ia-#90.D-2b. macro_name 0 rettype function_nameJ argsL


Ich h _7g dfdfJ _ d.7hofG _ g `&DofG`&`&4e  macro_name `&$
7`~J&h ^
oh Gh `f# _ O
d 7h4`&d

`&
7`& hIh$`&yhjhk
fGF07h function_name
EdF`&d g 7ehodFg rettype
7

&
`
g dFTy`&e oh g h$.
args
Ia#- 90 b macro_name .b #-  filename
Ich h$ oye g dc`&`&4e  macro_name `&
7`uh  g  Ga`&d g a7h nh`&h h g Khk`
g &ad filename

NUO

Comandos de Depuracin
Nota: Esta seccin de los comandos de depuracin fue comentada por completo en la
documentacin original. Thomas 1998-08-05

g
e^2
eM

^G74`G&C`&h 4d g &4ehoh`&


`& nh$&h g 
e&`&Gn7`G&CfGF9h$`&Gd g e4[GF8h `uJ&h e _ @d


#&a`& g hkE _ h g fG9Goeh&4ehoh
e{ M MM M4M B>k>

#& a`& g hkE _ h g fG9h`&>2dfd _ g G#&hke _ dh _ hk[&
d@
e!{ M MM M4M B>k> S h M MkM MM$ B>>

#& a`& g hkE _ h g fG _ g  g o dh _ hk[G7
d
hy#&h e _ dN edF#&h e _ dDhk^
hOn h gg h h e _ `&4C 7 d _ d g  h _ f& dch `& o
d:Yu h ` g o d.hJ&h e _ d.hnh dch
& `G& e&  7 dN
.
classname natts name1 type1 name2 type2 ...
]o  h$ & 7dF #p & ajd#f`&`&eS d

h j(Y hJ _ d type1 type2


h  _ g $`&g yE`&S h classname name1 name2

c|
.

 oldclassname
hodfe g y`&E`&Sh newclassname
d

oldclassname _ g newclassname
c
`& YYoehdfG` J oeDh oh J oeh classname oldattname newattname
h odfe g wh `o4 g &7d oldattname hy`&w
`& nh`&`&4e  classname _ d g h ` ne.

wattname

Ejemplo

`(Y&a&hoh
d7d7hEdfe dF g h g y`&yE`&Sh %_ %d _ E`& Y (
dFoh&hdoy
d^
`&h
fG` h int_ops
ded8 dfkh d8
dFbc-2I & 7`v 421lGn7`G&C`&
`& nho
 h _ | `&f& h gg 
create pg_opclass (opcname=name)
open pg_opclass
insert oid=421 (int_ops)
print
close pg_opclass

NU

NU

Captulo 60. Ficheros de pginas.

.oDhn g _ [ GF
h `u2d

g edh _  GoKhhh
jd!h`&dF^ h g dF^h`&$aShUhjd

n!nh
fG _7g d _ d g f&doocGYGFahoh g `7h `d g e4d
h _ Go7#&`G&C 7d _ d g `&

`& n hU h>7 dnj g h fdekdFdFh4E


hnd
hG7d _ d g h `an7 g &d
od9oh
hY&S)7J&^
`G& C g hn jhK d g ed:h _ 4Go

`&KY& & ho h$h `G&E4[GFoSnh$ n7ehD7hkSEdFoJ&hoh > &J hke n h `uJ g eGod
s
U h g h h g h$y_`&dF* 4dFT 4`&eEho o d h  E`&S hD hK7 dnj g h
Estructura de la pgina.

/&a!/&hohwj`&e7hn g 
dfed)hn10 8hn g 7
 g  $`& _ 0/Go $ ojdh`&
`& nh
od g e`&h h:7 dFn  g hy
dfedh
`&
`& n h h32G!/&Ehh:7dFn g hyJhKh / g 42& /&
h

"^ g hEh L
a   3 tA
 y 7A2w a o
5

76 8



9!: 

7Campo
oh g dc jd 2jh e 7d Gh g j
 _ k &d & g h `p`&h g
ke _ d 
7k
f 7

 Fo G 7 F    Fo G 7  wj
7k
&






 $
 
 $  4 o 7  j
;

9<

>=?

/ 3C /

7=D

3E F&E

B HJ

@; /

<

Descripcin

1GH 5I5I5I5

/
G3E FHG K!J E G

L@J!G3E F

B HJ

MG

/ K

/
N OE FM<

GH>=? F L

MG

/ K

1/
G <

/
G3B HJ!F / P

L@J!G3E F7E

1GHQ (

L@J!G3E F7E

1GHR (

<

S1GHTE F7?E FUS1/


D

<

S1GHTE F

 


/
NUVE F

XF FY &E FM; 0 Z/


U [=;

j$pq no

F\VF E FY<

  o
&

j 

C GHTJ]Y^/
L@F YGH`_MX ZS1FHaE F
E FY<

L@J!GW=?S1FL@?E <

S A5f<$F USYGgE F9P

E MJ!0 Z/
U

S A

S A

&$

T

GUH/
S1FUbFUWP

XF FY hiP


GHcJ!Y/
L@FYGHdSYF H

&  o 7 k


XF FY cE FdP &J!0 /


U 7=;!J

F\VF e

L@J!GHcFUS1FYGHdE F&QX ZS1FH=jlkmnoh

rkst kuvwpxwAyYF J!YFzHFUS U{X SF H7|K!FlYF}!F^~ UFPJ!Y^/


U/
J!/
GVE F PFHJ! /
GVE FHGK!J] E Gh

FPD UPE FPFHJ! /


GbE F HfGK!J! E GhigFPJ!Y/
U/
J!/
GbE FPZkst pu^vwnMkst ku^vwpx5B PZF HfJ] /
GbF HJ!F/
 P
FH`K!U7YF Z/
NUg P D UPiE FdP
7J!0Z/
U7|ZK!FMHFdGK!J!&F UgP
M/
U/
/
P
/
 /
NUWE FcP
MJ!0 /
U&$|ZK!F
GUS1/
FUF[/
UGYL@ /
NUFHJ!F2
D!HfGXYF9K UOL@S1GE GVE F9 FHGy5C GHcE GHc!P
S/
L@GHMQlXZS1FH
E F9P
3 XFFY^lE F[J!0 /
U hnt pu^nhGE!/
D lFPS1 L@ GVE F[P
lJ!0 Z/
UlF[/
UGYL@ /
NUHfGXYF
P
WY^ZL@F US /
NU/wUSFYUgE F$P
gL@/
HL@5B P!S1 L@ GOE F$P
gJ!0 /
UWHF3 P
L@ FU3FUE 
K!UrE FWF P
P
 Hh]J!GY|ZK!FbP
HlFHSYK!SK!Y HE F PyJ!GGP`E FgXZK!1FYH[J]K!FE FU4FHS YMHfK!XE /
Z/
E /
E H
FUrK!UlGYL@$FHS1YK S1K!Y^J!GYTFHS1YK!S1K!Y^E FUS1YGgE F9K!UlP
HfF5fC!l/
UGYL@ /
NUOHfGXYF9P

Y^ ZL@F US/
NUO/wUSFYU[HF7K!S/
P
/
[J! Y& K!E  Y9E FS1FYL@/
U YK!UE G3E F XFY^2w&YFP
/
YHF
P
9YFGYZ U/
 /
NUrE FMP
[J!0 /
U5
/wZK!/
FUE G$9P
9 XF F Y9E F7P
9J]0 Z/
U&FHS0 UbP
GH>/
E FUS1/
D  E GYFHTE FM L@J]GW=kj[$ppA5
FlH/
SK! UUK!FZGH[/
E FUS1/
D!E GYFH7E FlL@J!GWJ!Y^S1/
YME FlP
GH9J!Y^/
L@F YGH7K! SYGrXZS1FH&E F
FHJ! /
GgP
/
XYFZ5<lFX/
E Gb$|K!FK!U{/
E!FUS/
D! E GYTE F[ L@J!GbUGU$HFL@K!FZF[ HS|ZK!FHfF
FP
/
L@/
U h F HfS1F92
UE /
F&HF9J!K!FE F&K!S1/
P
/
 Y`J! Y9/
UE /
 YaP
H/
SK! /
NUOE!F&K!UO L@J!GWFUOP J]0 e

Z/
U5<lFlFGh E!lJ!K!US1FYGblK!U{ L@J!GV=kj$ nvmZkoAyYF E GVJ!GY>; GHSYFHMGUH/
HSF
FUbK!UbU!L@FYG$E F7FHS1YK S1K!Y^7gK!Ub2
UE /
FME FMK!UV/
E FUS1/
D!E GYyE FML@J!G5lUg/
E F US/
D! e
E GYdE!Fl L@J!GrGUS1/
FUF$K!U@XSF$E!FlYFFYFU/
3 PJ]Y^/
U/
J!/
GrE F$K!U@ L@J!GhHKP
GU/
S1K E
FUbXSFHh gK!UVGU ~1K!US1GgE F&X/
S1HE FM SY/
XK!SGH|K!F&J!K!FE FUbF S1 Yy9HKO/
USF Y^J!YFS1 /
NUT5
C GH7 L@J]GHML@/
HL@GH&F HfS10 U{P
L@ F U EGH7FU{K!UFHJ! /
GrH/
S1K! E GVL@0 Hc P
P
0$E FPZD U PE FP
FHJ! /
GlP
/
XYFZ5\V X/
S1K! P
L@FUS1FhP
GH L@J!GHTUGWHGUr/
US1FYJ!YFS1 E]GH 5 /
UbF L@X YZGhK! UE G
FP L@J!GrFH7E FL@Hf/
E GVP
 YZGVJ! Y3HFYH/
S1K E GOF U@K!UW!U/
WJ!0 /
U3GrK!UE GOHF$E F e
HFcP
MY L@FUS1 /
NU3E FP L@J!GhHSFdL@/
HL@GlHfFdE /
Z/
E Fl E cJ! YSF>HFdL@ U/
J!K!P
MGL@G
 L@J!GHE /
HS/
US1GHaE!FdP
MH/
ZK!/
F USFdL@ UFY5ME cK UcE FP
 HJ! YSFHyFU$|ZK!FcHFdE FHGL@J]Ge
UF9HfF9H/
S1K!lF UOK!UFHS1YK!S1K!Y^[E F9GUS/
UK! /
NUE F& L@J!GW=kj

nmvmZpvwnmZlppA5B HS1

FHSYK!SK!Y9GUS/
FUF9K!UrJ!K!USF YGW=?S1FL@;!G/
US1FY<l S1 A]/
[P
[H/
K!/
FUSF9J!Y^S1FZ5C [!P
S1/
L@
E F7FHS1 HTJ! YSFHTHF&L@ U/
J!K!P
[UGYL@ P
L@FUS1FZ5

Ficheros
data/
C G P

 
NUrE F7P
GH>D FYGHE!F7X HF&E F7E SGH>GL@J! YS
E GH>=P
GX P
FHA

data/base/
C G P

 
NUrE F7P
GH>D FYGHE!F7X HF&E F7E SGH>P
G P
FH

Bugs
B PiGY^L@ S1GlE FMP
7J! 
U&J!K!FE!FM L@X
 Y FUbF PiK!SK!YGlJ! Y7J!YGJ!GY
GU Y K!Ub FHGlL@ H
FD!
FUSFM9P
GHGX ~FS1GHP
 YZGH
B HSdHF
NU3GUS1
FUFdE FS1 P
P
FH
UHK!D!
FUSFdJ! YdHFY!E!FdP
ZK!Uc H
HSFU
cFU3P
cFHY
S1K Y
E F7K!UVUK!FZGWL@ SGE GWE F&FHGy

Captulo 61. SQL


SF U

B HSFcJ!
S1K!P
G3 J]YF
N$GY

U Y^
L@FUSFMGL@G$J! YSFcE FMP
9S1FH
HTE GS1GY PiE!F


L{e

GZ
H =vwj$nvus A

CHFGUF Y^S1
E GFUFPP
FUK ~1FE FGUHfK!P
S1YF P
 
GU P>L@ HWJ!GJ!K!P
 Y^B P>UGL@e

XYFb i

C OF H3K!UXYFZ
 S1K YrE FroZu^okOlZkoqpm pk[=C FUK!~FVE FbGUHK!P
S
B

FHSYK!SK!Y E GAB U@R 3<$GU P


EM L@XFYP

U@OGS1YGHME F D U
FYGU@F P]P
FUZK!~1F

lB C

=Zouok[!mxvwslZkoqlpmZpkAFUO? >F HfF  YTfB HS1F[P


F UZK!~F9K!F9
L@J!P
FL@FUS1 e
B

E G$
U

P
L@FUSFMFUbK!UbJ!YGS1GS
J!G3E FM? P
P
 L@ E G
B

HFE F D U
NrK!UlYF 
H
NU{E F

lB]CP
P
 L@ E 

lB C eT>FUbR  e B UbR  e


lB CdiQOF PUGL@XYFHFl L@X
Nb

Cd

? E FH YYGP
P
N$K!UgUK!FZGlJ!YGS1GS
J!GlP
P
 L@ E!G
K!U4L@J!P

G@HfK!XGU ~1K!U!SG@E!F

P
F3

FYGU4g=UG

HSFLF UgR  HfS1FL


L@J!P
FL@F USN

$B!C>iQr=UG

C!AaK!U4U!L@FYG{E FW L@X


GH[|ZK!FbHF

C AaE K!Y^USF3F PyJ!YGZF S1G HfS1FLHFW


UHfS1 P
N@FUK!U4U L@F YG{E F

J!K!FHSGH[E!FgK!HK! Y
GhSUSG{
US1FYUGH[FU*? GL@G@FU P
ZK!UGHP

FUS1FHHFP
F
GU E GH

HSFLFUrP
GHdL@
HfL@GHh?
U

NVFPE FH YYGiP
P
GbE F

Y^
H P
SGbg FJ!S
NUrE F

J!YGE!K S1GHMGL@FY
 P
FH7|ZK!F$
L@J!P
F L@FUS1 X U@FP]P
FUK!~F

CX HfE]GOFU@P
WS1FUGP
G


HSF L[
<lK!Y^ US1FP
GH GHHf
K!
FUS1FHh ? lX HS1 USF HGSYGH`ZFUE FE GYFH` UK!U
 YGU$J!YGE!K S1GH

CbS P
F HaGL@G

FUFY PcGYJ Ah

Cdi<
i

=? Ah<l Q7=? Ah$>lMC BV=3Y P


FdMGY^J Ahz<

CO=<$S

Br= ZX HFM?Ui A

CFH$S L@X
U,K UF HfS1 UE  Y9GD!
 PaGiB!UR _ Q h P
OlL@FY
UV S1
GU P S1 UE  YE]H

?UHS1
SK!S1F3=l

?AFU YNgHK4MGL@
SWE F3 HfF H&E F$<$SGH[T \VQWFP E FH YYGP
P
G{E F3K!U

J!YGJ]K F HfS1E FVP


FUZK!~1FOYFPw 
GU PaF HfS1 UE  Y^B HS1{J!YGJ!K!F HfS1K!FrY S
D! E F UR _ {
GUH
HSw[X Hf
 L@F USFMFUVFPE
 P
F S1GWE FM? E F

CdB UVR _ hFHS1F&FHSUE  Y$

?ZK!F

SL@XZ
U FJ!S E GOJ!GYcP
g3Y U
 
NU?US1FYU 
GUP E F$B HfS1 UE  Y
 
NU=? $AB HS
ZFY^H
NUF HfS1 UE  Y>GY
Z
U PE F

C@YF 
X
Nb
UGY^L{ P
L@FUS1FlFPZUGL@XYF[E F[

Cdi_ fB U

R _ hFP FHS UE Y7GY



U PK!FWFSF UE
E Gh@YF 
X
N{F PUK!FZG@UGL@XYF hS1 L@X
U4
UGYe
L@ P
hE FW

Cdi_   L@X
U4FU*R _bHFgE FH YYGiP
P
NK!UFHSUE  Y7YFP

GUE G@P
P
 L@ E G

$ppzpskaZpm pk j$zk k9$W=B


C GHTGL@
S Ha? 3l

C A

? UWF HfS1 E GlS1Y^ X~ UE GE!K!Y^ US1FdL@K!GHT GHTF UgP
ME FD!U

NU

E FgK!UrZFYH
NU,L@K! L@J!P

E rE!FPFHS1 UE  YMGY


Z
UP
h!P
P
 L@ E G@
UGYL@ P
L@FUS1Fr$
G$  B HSgZFYH
NUHF3GUZ
YS
N@FUK!UFHS UE! YMY S1
D  EG{E K!Y USF3R Qmkomp
vwnmZpxZpm po3c  lppzpskpmZpkTZl`
|ZK!FMUGYL@ P
L@FUS1F7P
&FUS1F7HFMYF D F YFK! UE G$ XP
ME FM i
Y^
J!
NUE FSP
P
E 3E F

Cdi Q3F HMP


3ZFYHf
NU{$P


CrFHS1 UE  Y FcE MK!U9E FHe

Cdi Q$FU$pkdpmZWlpo7kmZ B U@FP!L@GL@FUS1G{E F$FHY


X
Y

FHSFE GK!L@FUS1GhzHfFdFHS17E F HfY^YGP


P
 UE GK!U3UK!FZG$F HS UE Y]E FUGL@
U E Gl
UGY^L@P
L@FUe
SFGL@GOZl FJ!P
 US1F3 F YE F

CK!U@P
FUK!~1FlE F$ P
 UFlGL@J!P
FS1GO=FK!Y
UZe

GL@J!P
F SFrP
UZK! FAh FH$E F 
Y1h HFY UJ!GH
XP
FHWS1GE  H$P
 HWGUHK P
S1 H3GL@J!K!S1 XP
FHh =J!GY
F^~FL@J!P
GVGUHK!P
S1 HMYFK!Y^H
ZHAB HS1$F HMK!U$S1 YFL@K!rGL@J!P
F^~lOJ]GY>FP
P
GVUGVHFlE F XF
FHJ!FYY`P
9D!U P

 
NUVE FPUK!FZGWFHS1 UE  Yy US1FH>E F7R Z

El Modelo de Datos Relacional


MGL@G@L@FU
GU L@GH US1FHh

CF HK!U*P
F UZK!~FVYF P

GU PB HS1G|K!
FYFWE F
Y&|ZK!FgHfF

X H9FUVFPjln kxwnc k pns`okxpuvwnmpxJ!K!XP

 E GW
U

 P
L@F USF&J!GYaBd  MGE EFUVR <l e
YFL@GH9K!UgE FHY
J!
NUGYL@ P!E FP]L{GE F P
G{E F3E  S1GH&YFP
 
GU P L@ H&S YE Fl=F U

nojlp

xwvwpksa kx nkxwn7Tkxwpu^vwnmZpx kT$pnsAh J!FYGbJ!Y


L@FYGg|ZK!FYFL@GHcE YTK!U$L@
Y E E F HfE F
K!UVJ!K!USG3E F7Z
HfS1[L@ H>
USK!
S1
Gy

$U7zpskTk pnsyokxpu^vwnmpxFHK!U&XZHfFME F7E  S1GH>|K F7HfFMJ!FY


XF7J!GY`P
GHK!HK! Y
GH>GL@G
K!U&u^nxkuu^vwml k pzxwps=lU E 7L@ Ha|ZK!FcS XP
 HA$U&S1 XP
MGUH
HSF7F UgD!P
 Ha$GP
K!L@U Hh
FUgP
 Ha|K!FM E cD!P
&YFJ!YFHFUS7K!UbYFZ
HS1YGhz$ E!7GP
K L{U&YFJ!YFHfF US7K!Ug S1Y^
XK!S1G$E F P
YF
HfS1YGrGUSF U
E GF UP
$S XP
 Zp9 pskdkd$pnsd kd on kknoksqMWowu^ZxwnscL@K!FHS1Y^3K!U
F^~FL@J!P
G3E F7X HF7E F&E SGHTGUH
HfS1FUS1F9FUVSYFHTS1 XP
 H

$;!;!C ?B!F H3K!UrS XP


r|ZK!FrYFGZFbFP`U!L@FYG= b3AhFPaUGL{XZYFb= VlB]AdP



K!E  EV=c?

AE!F&K!UrJ]YGZFFE GY^

; $bFH`K!UMS XP
c|ZK!Fc P
L@ FUcFP U L{FYG=;!b3AF PUGL@XYFc=;!VlB Ai$FP J!YF
G

=;!>?MB AE F7K!UV YS1


K!P
G
B!C C

P
L@ FUW
UGY^L@ 
NU4HGXYF3|ZK!W YS
K!P
GO=;!V$A`FH&F UE
E G{J!GYM|ZK!WJ!YGe

ZFFE!GY= b3A^B!HfS1GWH
YF&F UVK UVHFUS1
E GWJ!Y^&GUFSY`P
HE GHS1 XP
 HTFUS1YF7FP
P
 H

@ W   9T V 


   
 
 

SUPPLIER

PART

SNO | SNAME |
---+------+----1 | Smith |
2 | Jones |
3 | Adams |
4 | Blake |

CITY
London
Paris
Vienna
Rome

PNO | PNAME
|
---+---------+-----1 | Tornillos |
2 | Tuercas
|
3 | Cerrojos
|
4 | Levas
|

  H[S1 XP
 H $

SELLS
---+---

SNO | PNO
1
1
2
3
3
4
4

PRICE
4

|
|
|
|
|
|
|

1
2
4
1
3
2
3

10
8
15
25

  ]HFVJ!K!FE!FU*ZFY&GL@GkmZv pks7

  

HFVJ!K!F E FWF Y

GL@G3K!U[okxpu^vwmWF USYF7K!Ur YSwK!P


G$J! YS
K!P
 YyWK!UOJ!YGF FzE!GY`J! YS
K!P
 Y^
MGL@GgZFYFL@GHL@HdSYE!Fh i

{GJ!FY[FUVP
 HdS1 XP
 H>S PGL@GW UOH
E GWE F!U
E  HhJ!FYG

 US1FHTE F7FP
P
GgF HSK!E
 YFL@GHP
9S1FGY
&E FPL@GE!FP
GWYFP

GU P

Formalidades del Modelo Relacional de Datos

 PTGUFJ!S1G,L@ S1FL@ S1
G,|ZK!FOHK!XZ FX~G*FP>L@GE FP
G,YFP

GU PTFH3P
@okxpu^vwm,E FrP

SF GY
ME FMGU ~K US1GHhP
7K!PiFHaK!UbHK!XGU ~K!US G$E!FPiJ!YGE K!S1Gl Y^S1FH
 UGlE FcK!U&P

HS7E F

E GL@
U
GH  HS$YF P
 
NU@E FP
WS1FGY^w3E FGU ~K!U S1GH7J!YGJ!GY
GUW PL@GE FP
GOHfKUGL@XYF
UG3GUK!UE!
Y`GUbP
9YFP

NUVE FPn kxn mZvwp>kxwpuvwm!ZGYL@ P
L@FUS1FhK!UVE GL@
U
G

FHTH
L@J!P
FL@FUS1F&K!UbGU ~K!U!SG$E F7Z P
GYF H!GY`F^~FL@J!P
GhFPGU ~K!USGWE FMP
GHF USFYGHTFH>K U
E GL@
U
GiL@X
U4HGU*F~1FL{J!P
GH9E F3E GL@
U
GH9P
H[ E FU H7E FW YS1FYFH&E F3P
GUZ
S1K!E
Q &WP
GHU!L@FYGH>YF P
FH

 PTt on unWupoksvwpmZnVE FOP


GHgE GL@
U
GH

eS1K!J!P
 H

hII

D D

hMII

h`F HY
SGH

II

F HgFP

Dk h
D
D2 " " Dk
hI1I "
v1 v2 vk
v 1 # D1 v 1 # D1 v k # Dk
!GYF^~FL@J!P
GhK! UE!G&S1FUFL@GH
Q h

F USGUFH
FH
k$
D1$ {0,1} D2$ {a,b,c}
D1 " D2 {(0,a),(0,b),(0,c),(1,a)
GU ~K!USGWE F7P
 H

1 |ZK!2
hS1 P
FHT
F

$UTFP
 
NUOFHdK! P
|K
F Y>HK XGU ~1K!US1GVE FPJ!YGE K!S1GbY^S1FH
 UGgE F9K!UGbGbL@ HdE GL@
e
U
GH

R % D1 " D2 "

II

" Dk

!GY`F^~FL@J!P
Gh

{(0,a),(0,b),(1,a)}

FH>K!U[YF P

NU'&)(lF&F G3FH>K!UOHK!XGU ~K!USGWE F

L@FU
GU! E G$ US1FH

D1 " D2
 GHWL@
FL@XYGHWE FVK!U{YFP

NU
 Y^S1FH
 UG
E F

D " D2 "

II

eS1K!J!P
 H 1

" Dk

HFrP
P
L@ USK!J!P
 H ME OYFP
 
NUE Fr P
!UJ!YGE!K S1G

HFME
Fd|ZK!FMS1
FUFcU
F P

$UdYFP

NU$HfFdJ!K!FE!F>F Y!GL@GK!UMS XP


$E FdFHS1FML@GE GlFHaK!UgHK!XGU ~K!U S1G

GL@GZcE ~
L@GHh YF K!FYE F>pT psk] k!$pns

ky!on kknoks!qaWouxwnsE GUE FM E MSK!J]P


&HF7YFJ!YFHFUS7GL@G$K!U!P
&3E 7GP
K!L@e
U9GYYFHJ!GUE F79K!UVGL@J]GUFU!S1F7E F7P
[S1K!J!P
*(l UE G3UGL@XYFH

P
P
 L@ E GHT SY
XK!SGH+!

P
 HTGP
K!L@U Hh UGHd FY L@GH>[P
9E F!U

NUrE F7K!UVks-, kj$pokxwpuvnmpx
$U$ks,zkj$p`okxpu^vwnmZpx
h J] Y^c E c S1Y^
XK!S1G

FHK!UgGU ~1K!US1G U
S1GlE Fd SY
XK!SGH
hzR.

A A

hII

\V K!UWE GL@


U
G

k H`E FP
GHa SY
XK!SGH
hE FdE GUE FcHFdSGL@ UgP
1GH`2Z P
GYF

A
$ i $ k
i SGUFH>FHY
X
L@GHF HiFH|ZK!F L@[YF P
 
GU PZGL@G
DU

R(A1, A2, ... Ak)

Nota: Un esquema relacional es slo un juego de plantillas mientras que una relacin es
un ejemplo de un esquema relacional. La relacin consiste en las tuplas (y pueden ser
vistas como una tabla); no as el esquema relacional.

Dominios contra Tipos de Datos


@FL@GHV XP
 E G,E F nj[vwmvwns$FU
GYL@ P
L@FUS1FhyK!U

P
@HF
NU

GU ~K US1GE FOZ P


GYF H

 US1FY^
GY^>F P
 Y|ZK!F{FPE!GL@
U
GFHh

J!GYlF^~FL@J!P
GF PGU ~1K!U!SG*E FP
GHbF USF YGHgG*FP

E FgP
GH$U!L@FYGH3YF P
FH+!) U*SYL@
UGH$E FVH
HSFL@H3E!FbX HFbE FVE SGHfhFL@GH$ XP
 E G

E FOvwt ns kl pnsL@ Hg|K FE FE GL@


U
GH MK! UE G*FL@GHbE F/ U
E G*K!US1 XP
 hyFL@GH
SGL@ E GK!UE F
H
NUHfGXYFV|ZK!OSY
XK!SGH3
UP
K!
Y^lE

GU P
L@F USFh!FL@GH3E F 
E!
E G

|ZK!c~K!FGOE FE  S1GH7E F XZF Y^lHFYd P


L@ FU EGOF U@P
GYFHME FP
GH9 S1Y^
XK!S1GH /!GYcF~1F L@J!P
Gh
P
GHP
GYFH>E F

SNAME

E F9P
[S XP


SUPPLIER

HFY UO E F UHcE!F&Y^ S1FzYF Hfh L@


FUSY Hc|ZK!F

 P
L@ FUY^[F USFYGH (lF!U
L@GHdFHSGb H
U UE GbK!US1
J!GbE F[E  S1GH$ E [SY
XK!SGy

SNO

PS
J!GbE F

HfF Y^0 $TM\Vl

i
 J!Y^[ E F U HdE F9 Y SF YFH
 [MGU P
 H
U 
NU E FS
J!GHbE F
$
SNO
E  S1GHhS1 L@X
U@ XYFL{GH7HFP
F
GUE GrK!UE GL@
U
GJ] Y^$K!U@ SY
XK!SGy3
 P]E!GL@
U
GOE F
FHcFPZGU ~K!USGVE F[SGE  HP
 Hc E FUHdE F9 Y SFYFHdE F[P
GUZ
S1K!E4.
Q hiL@
F USY H
SNAME
$
FPE GL@
U
GgE F
FH>FPGU ~K!U!SG3E F7S1GE GHP
GHdU!L@F YGH>FUSF YGH

SNAME Q !haFP>S1
J!GE!F

E FP
GU
S1K!E1.

Q /!

FHS1F[F HcFPS
J!G

HfF Y^2V 

SNO

Operaciones en el Modelo de Datos Relacional


 UrP
$HF
NUOJ!YFZ


noj$pxvw pks kxzn kxwn7Tkxwpuvnmpx kalpns!]E F!U


L@GHMP
$UG
NU

L@ S1FL@ S1
3E FP]L@GE FP
G{YFP

GU P lGYWGUGFL@GH&GL@GP
GH&E  S1GH&J!K!FE FU PwL@ e
FU YHfF7K S1
P

 UE!GbK UOL@GE FP


GVE F9E  S1GHYF P
 
GU P
hJ!F YGWUGbGUGF L@GHM|ZK![J!GE FL@GH
 FY GUVS1GE! HaFHS HTS1 XP
 HaJ! YMYF K!J!F Y^ Y P
ZGlE F HfE!FMFH9X HFcE FME  S1GHaSGE  Z
 GY

F^~FL@J!P
Gh  PwZK!
FUWJ!GE Y
cJ!YFK!US1 Y J!GY P
GHaUGL@XYFME FdSGE GHaP
GHaJ!YGZFFE GYFzHa|K FdZFUe
E  U{F P YSwK!P
G65wS1GY^U
P
P
G75 z\V rE GH7GYL@ HME
FYFUS1FHME FUGS1 
GUF H&J] Y^lFJ!YFH Y>P
 H
GJ]FY^
GUFHTFUS1YF7YFP
 
GUFH

 P+83x kzopa>kxpu^vwnmpxFHyK!UcUGS1 
NU3 P
ZF XY^
 hFU3P
dK! PP
 HyGUHK!P
S HyHfFF iJ!YFH U

 J]P

 UE G3GJ!FY E GYFzH>FHJ!F


 P

 E]GHd9P
HYFP
 
GUF H

 P

xwu^Zxwn`>kxwpuvwnmpxF HK!UdUGS 
NUWP
NZ
 hE GUE F>P
 HyGUHK!P
S HyHfFF iJ!YFH U3GY^L{K e

P
 UE!G3 P
K!U H>YF HSY

GUFH>P
N
 H|K!F&P
 HTSK!J!P
 H>E F7P
[YFHJ!K!F HfS1&E F X UbH S
H FY^

lgebra Relacional

 P8Wx kzop9>kxwpuvwnmpxK!Fl
US1YGE K!
E lJ!GY9d  MGE EFU{R QzMGUH
HS1FlFUK U@GU ~K U!S1G
E F7GJ!FY 
GUF H>GUOP
H>YF P
 
GUFH

  M ;: !FiS1Y F$t xwpscgJ! YS


YcE F3K!UgYFP
 
NU|K!FgH S1
H Z UK!UgYFHS1Y^

NU
K!U[S1 XP
9|ZK!F&GUS
FUF9K!Ur S1Y^
XK!S1G
:=<3>;?@ A!
S
E
D S ! 'F E GUE F
$CB E
R
A
# F&P
9S1K!J!P
 $
E!FUGS1[K!U9S1K!J!P
[E F

E F UGS19FPZ P
GY`E F PSY
XK!SG
t
R t(A)
A
t
 THG
!
 c JI ! FSY FWpovwzns GP
K!L@U H+>
! FHJ!F K!
 GHE FgK!UrYF P
 
NUT F 
K!U
YFP
 
NUb|K FMGUS1
FUFMK!UbSY
XK!SG
IL* !
S M!A
DS
IF h E GUE F
! E FUGS1&FPR P
GY

X
R $CB
tX
# R
E F P SY
XK!SG
E F7P
[S1K!J!P


E E Z F

!TH(llM

! GUHfS1YK!ZFcFPJ!YGE K!SG YSF Hf


UGE FcE!GH`YFP

GUFH F  K!U7S1 XP


R
E F>Y UG
 Y
S" !
HF
K!UMS1 XP
dGU$Y UZG
Y^
S1!

FHFPGU ~K!US1GE F>P


 H
N
O
k
S
k
R
S
kN
" J!P
&F U
eS1K!J!P
 HaK!ZGHTJ!Y^
L@F YGH
GL@J!GUFUS1FH>GYL@ UgK!U&S1K!
3K!GH>!P
S1
L@GH
P
kO GL@J!GUF USFHGYL@ UVK!U9
kN S1K J]P
[FU
R

kO
S
l6
 $ -Q ! HK!J!GUFVP
VK!U
NU,E FgP
VSF GY
bE FgGU ~K!USGZHE FgE GHS1 XP
 H Rl
( E  H[P
 H
Q
S1 XP
 H

g L@XHE FXF UrHF YaE FPL@


HL@GgY UG
! h P
[K!U
NU
FHF PGU ~K!U S1GWE F

P
 HTS1K!J!P
 H|K!F&FHS UVF U

RS

GWFUbP
 H>E GH

 V


 M S !cGUHS1YK!F7P
9
US1FYHF
NUbE FMP
&SF GY
7E F7GU ~1K!US1GH>E F7E GHTS XP
H
(l E H>P
H>S1 XP
 H h Q
FH>FPGU ~K!US1GgE F&P
 HTS1K J]P
 H|K F7FHS UVFU
WFU
U(lF
R S R S1FSU UVFPL@
HL@GgY^UZGy
R
ST
UK!FZG3YF |ZK!
FYFM|K!F

( M bV

e GYXWY!HK!J!GUF$FPGU ~K!USGOE
FYFzU
$E FlE GHMSXZP
H F U

UK!FZGVE GH&S1 XP


 HcGU@FPL@
HL@GOY^ UGy
FU

J]FYG3UG3FU

GH

[Z ! GUFS1gE GH&SXP
 H7J!GYcHfK!H& S1Y^
XK!S1GH&GL@K!UFH

 S1Y
XZK!S1GH

WHF

E F

RF$FSHS1 U
 HMFPGU ~1K!U!SGVE FP
 HMSK!J]P
 HM|ZK!

K!U9S1 XP
&GUbP
GH> SY
XK!SGH

F

K!UgS1 XP
WGUP
GH

\V 3K UbSY
XK!SG$GL@!U

I7\[] </^ C\[] _;D^ \[] `^ abE] c3^ a@] d;:\[] `+>Jab] `*
Z
!!e K!
$
"
fg S1 L2h g   f U'i hl |j!KkA!Y^ml f Yhn
jn
l2h gof np!Y-hi j!Sbh YS fg
 U'h R S  USbhU fg
p Y^ f n  S1Y^
Xj!SbhYhql@!U
g+f n f mhUl2h g n
 g Sbjpn
 g j!h g ZnmhY fg !
g+f c
" j!n ;:\[] `=>)a@] ` !
l'hYS f U f l2h g j!UlSXn
l|j f hUS1 f U ff 
n SY
Xj!Sh
i h g f f/g C6nmhVYhYY f Zml2h grf n

e
C
l@
U U'ihsn
9hqnmj l{Ui jp=n

!
i Z
AB

J!Y^b L@X H9YF P


 
GUF HfhFPy SY
XK!SG

 W @t uv wvv 
x yv{zu|v }x yv~w-v 
v 

0 f  l2h g n
 g S1 Xn
 g |j fg+f U{p!Y-hqi j!mi h f
f Un
 
g g
j! f US f/g S1 Xn
 g i i  g

~@hwUT

A | B |
--+--+-1 | 2 |
4 | 5 |
7 | 8 |

C
3
6
9

g p! g h g
U

S
C | D | E
--+--+-3 | a | b
6 | c | d

!Yml f -Y h3n
jn
l2h gf np!Y-hi j!SbhW YS fg
R x S

nmj!U'i hnmh

 U'h

A | B | R.C | S.C |
--+--+---+---+--+-1 | 2 | 3 | 3 |
1 | 2 | 3 | 6 |
4 | 5 | 6 | 3 |

R" S

gS

D | E
a | b
c | d
a | b

f U'i Y f l2h g

f f g

 Ymh

g p] Y^j!U

4 | 5 |
7 | 8 |
7 | 8 |

g n
 g+f n f

iY^

mU

:\[] `+>Ja] `*

"

6
9
9

! S

|
|
|

6
3
6

U i Y f l2h g
f '

| c | d
| a | b
| c | d

A | B | R.C | S.C | D | E
--+--+---+---+--+-1 | 2 | 3 | 3 | a | b
4 | 5 | 6 | 6 | c | d

! Y f n
ml@
U Y=n
 g  hnmjl@U g i jpn

i  g Y f  n

/l2h g n
 g
j! f
SC
!!ZshXS f U f l2h g
"

US

f hqp f

Y mUT

I \[] <3^ \+] _;^ \[] `U^ ab] c3^ a@] d -: \[] `+>Ja] `

A | B | C | D | E
--+--+--+--+-1 | 2 | 3 | a | b
4 | 5 | 6 | c | d

(0( [ ! f 
j!UWSXn
WhUnmh g  S1Y^wXj!Sbh g lh hMh~( g+f 
j!UgS1 Xn
3hU
S
Sb
nmh g SY
Xj!Sh g (OR+( f !Uml2h g n
Xi
Z g mUVhl2hy
S9DU$S
4Sn|j f
$CB
# |j f h# U g g S fg nmh
S $hI! S; S Mh(! S FRi hU'i f S hI!i f U'hSj!UlSjpn
i f n
S1 Xn

R
$
$
f U~nmh g hql2phU f US f/g x y 6S f/gUf |j f n
$Sbjpn
 t hU g g S fXg nmh f U~nmh g hql2phU f US f/g

i f
n 9Y f
n  m
U
A B
R
( 
l
i  g
n  gMg
!
j f US f/g S1 X
n  g
R

g+f i f

A | B | C |
--+--+--+-a | b | c |
a | b | e |
b | c | e |
e | d | c |
e | d | e |
a | b | d |

Y
Z9hl2h

D
d
f
f
d
f
e

S
C | D
--+-c | d
e | f

A | B
--+-a | b
e | d

! Y^j!U6i fg Ymp!mU*i f !U


mUl@ g i f S1nmn
i i f nn
f
 xwxj$pm / h $pk /

XY^b

f n
 mhUni
Y ~ U g+f


@ W  uv v  X y@y v]s$Z


7 /yv

f n
 Yl|j f f l2h g hY[lj n
i hShqi h g6fg Sh g hp f Yi hY f/g Y f n
 mhUn fg Yhql2hp! fg
Y f Yjp f Y YXi  Sh g i f n
rX g+f i f i! Sh g )0 hn
Zl2h g OU'j 
f g SY-h f ~ f l2pnmhi f n
 gUf mU
p!Y f Z
 $tkopuvnmks`kmgkxzn kxndk`$pns`Tkxpu^vwnmZpx!=i hU'i f n
j! f Ur|j f Y
&YhU'h f Yonmh g

i f

U hl@XY fg i f Shqi h g nmh g p!Y-h ff ihY fYg |j f f U'i f U f n Y^S1
jnmh
'
+ g Sp!Y f 
j!US1
j Smn

 U'i h f nn
f XY&Y f n
 mhUnhUn
 g
j! f US Tornillos
g+f Y fg phU'i f !
f hp f Y^mUT

SUPPLIER.SNAME

PART.PNAME=Tornillos

(SUPPLIER

SELLS

PART))

 n
l@l2h g  f/g S1 g hqp f Y mhU f/g j U7hU g jn
S f Znmj!l2h g n
&hU g jn
S19 US f YmhYyhUS1Y
n
 g S1 X
n  g i f U'j f g SY-h f ~ f l2pnmh pT psk k!$pns! k! on kk noks qWowu^Zxns-!hXS f U'i Y f l2h g
j f US ff ~ f l2
p nKh
f n g
!
SNAME
----Smith
Adams

Clculo Relacional

 nMn
jnmh[ f n
 mhUn g+f
Y f
n  m
h Un
 n

X

g


U nwcxvwu^p` k]t ovwj$ko!nokm`\V Xi h g


f H

(lTV!hi hU'i f n
 g
g !7i f
n  g bS jpn
 g
 n xwu^ZxnMTkxwpuvnmpx k} Ztxwps` f
t xk`>kxpvnmpx
Xn fgAfg p f Y^ UbSbjp
n  g

Z Y^
Xn

xwu^xwncTkxwpu^vwnmZpx ky$nj$vmZvns

 S1Y^
Xj!Sbh

pxwu^ZxZs

Y^
US

f/gAfg p f

fg i f nn
jnmh

Y Ubhl2phU

>r!hihU'i

f
n  g

US

fg

Z Y
 e

 RphU'i Y f 2
l h gVg qnmh f nn
jnmhbY f n
 mhUni f Sjpn
 g =
p hY|j X
f fgrf n!U
h6j S1mn

ihphYMn

l@ 
h Y
i f n f Uj!~ fg Y f n
 mhUn fg 3! Yj!U|i! g j g mU2i f Snmn
i]i f (l> VS1l@X
U
i f TV
! f  $pk  h xwxwjlpmZ 

Clculo Relacional de Tuplas

  g  hU g jn
S g j!Smn

i  gf Ul >S f U f U f n g
j! f US f hYl@ Shy |!D R!Ri hU'i f fg j!U
x
f i f S1mphVSjpn
 h A f/g j!U{hU ~@j!UShi f  SY
Xj!Sh g F f/g j!U3Yl2jn
 $Y f n
mU
|j fg  S1 g   U

Y fg j
n S US f hU g g S fVf UVShqi  g n
 g Sjpn
 g
t(A)
F(t)
|j f Y f l2h g Y fg p
h U'i f Y
n H!
p Y f !
j US|i f n f ~ f l2pnmh mp&unmZsZxp&vwxwvpm no8Wx kzop9>kxp
uvnmpx)!
j Sm
n
 U'i W
h T
h Yl2j
n  Y f l2h g
n  g
!
j f US f 
h U g j
n S
Z Y^
 Xn

{x(SNAME) x

SUPPLIER
\nonumber

y SELLS
z PART (y(SNO)=x(SNO)
z(PNO)=y(PNO) \nonumber
z(PNAME)=Tornillos)} \nonumber

\nonumber

 Znmj!U'i hn
3hU g jn
SWhUSYHn
 g S1 Xn
 g i f Zp& psk klpnsT k!on kknoks>qMWowu^Zxns
h US1Yl2h g 
h S1YM f f nl@ g l2hY fg jn
S1i hi f mpaunmsxwp`vwxwvpm n783x kzop`>kxwpuvwnmpx
f U

lgebra Relacional contra Clculo Relacional

 nn
f XYY f n
 mhUnZ f nZn
j nmhbY f n
 mhUnZS f U f U f nl@ g l2hOt n kokk toksvwm& fg i f e

YhShqi  g n
 g hU g jn
S1 g |j fXg+f pj f i f UVhYl2jn
 Yoj!S1mn

 U'i h3n
f XY9Y f n
 mhUnpj f i f U
S@
l XZ
UlhYl2jn
 Y g+f j!S1mn

 U'i h f n n
jnmh9Y f n
 mhUn
hZ
f f Y g  g Sh[j f p!Y-hXi hphY
dzzVhii f U@R Y g S f p!Y-h fg hY g+f XZ g f Uj!U@n
hY^
Sbl2h /n
hY
Sl2h~i f Y f i'j!mU
i f Vhqi
i !l f
i
 US ff 
n Y!
j n!
j U f Rp!Y fYg mU@ YX
SY Y
|i f nn
jnmhVY f n
 mhUn g+f pj f i f
Y f i=!
j 
Y7
n  f )!
p Y fYg m
U gUf @
l USwl f US fHf |!
j
Zn f US f i f n!n
f XY^WY f n
 mhUn! Ysj!U
i g Yj g m
U6@
l g i f Snm
n 
i  g 
h XZY fVfg S f p!
j USb
h h
i
Y ~1 g+f  lpk   xwxwjlpm 
f i!
f V f f/g |j f nmh g n f Uj!~ fg X
f
n h$;l@ g i f n
 YS1
h g |j f nmh g X
p
  p! Y
nml f US f ! f n'hY-i f U~i f
fg f m!
!
j UVYhql2!
p m
n i
h Y}W
h
US f Yp!Y f S f |j f i f S

U

g i h gf U f n`n


jnmh@Y f n
 mhUn g hUi f ;l@ g n
Sh
g i h gAf U f nn
f XY7Y f n
mhUn)phY|j ff nin
f XY^

n  g hp f Y^ mhU fg hql@ f US1Y gVf nn


jnmh6nmhVSY g n
i 
l
U f nhY-i f U6i ff nmj!mUl@ gMf ! f US f
f Y@

El Lenguaje SQL
Vhql2h

n  g hi f nmh g l@ g l2hqi f YU'h g n f Uj!~ f/g Y f n


 mhUn fg h i  f/g S1$X g ih f U f n
f 
f
n mhUn=i f Sbjpn
 g zVhql2hrY f/g jn
S1i hhSbhi!3hU g jn
S1WhYl2jn
i |j S1mn

 U'ih f n
n
j nmh9Y f
n  mhUni f Sbj p=n
 g
h g j f |j!
n f US f h f n n
f XY^dY f n
 mhUnm! g+f pji f hY[l2jn
Y
Sl@XZ
U!
j Sm
n
 U'i h d\V h g
U f l@X Yhhp! mi /i fg |j f Ul@ g nmn
i f nin
jnmh
hi f n
n f XY[Y f
n  m
h Uf$|j S f U f l2h g j!UXn
g S1i f n
j!U g  Y^S f Y^ g S1
 g p!Y-hqphYmhe
U
i  g p
h Y i
 |j f U'W
h 
h Y[{
l  U6p! Y^S f i f nn
f XY^&si f nn
jnmhWY f n
mhUn fg
f

n
j nmhVY

Vhql@ U'i h

g p!Y^7
U gUf YmUh XhYYi hHhHl2hqi m  mU~i f i  Sbh g
Mp! mi /i fg Y^
Sbl@S1
 g  U 
f/g ph g
Xn f
Unmj!
YHhp f Y^mhU fg Y^
Sbl@S1
 g  g
hql2hbYhql2!
p  Y m
h U fg h)phY f ~ f l2pnmhr. P 6S f/gUf |j f U P UhS1Y-h g hp f Y^i hY fg
 Y
Sbl@S
h g !
p Y f w U f U f
n 
n f XY9Y f
n  m
h U
n U f UV
n j nmh$Y f n
 mhUn

Select

g
ZUm
U$lYhql@ U'i h g i f ml2p!Y /f g mUT f/g ph g
Xn f ml2p]Y^ml@
Y j!UcY f n
 mU3hU g S1Y-j!mi 
phYj!U[YhU g jn
S[W g
U Y}j!U9Y f
n  mUbn
Yjn
i!&Xj!UVU'hl@XY f i f Y f n
 mUT
!
j Um
h U fg  Y f 
i  g z|p f Y m
h U fg Sn fg hl2r
h t onjlk vn p kopkhsZjlpsZjhjl
vj$nM j$p h f Si g+f pj f i f Ubp
n
 Y
n  g hnmj@
l U g i f !
j U9Y f
n  m
U!
p Y^
h XS f U f Y!
j U
 US1m
i r
i !U


 nhl@ U'i hHl@ g j g i h f


Y^Y!
i  Sh g +
  g
US gMfg
U

 f/g n
[
U g SY-j!mU

 ]ch |j fgUf j!S1mn

Xp! Y9Y f  jp f

SELECT [ALL|DISTINCT]
{ * | expr_1 [AS c_alias_1] [, ...
[, expr_k [AS c_alias_k]]]}
FROM table_name_1 [t_alias_1]
[, ... [, table_name_n [t_alias_n]]]
[WHERE condition]
[GROUP BY name_of_attr_i
[,... [, name_of_attr_j]] [HAVING condition]]
[{UNION [ALL] | INTERSECT | EXCEPT} SELECT ...]
[ORDER BY name_of_attr_i [ASC|DESC]
[, ... [, name_of_attr_j [ASC|DESC]]]];

nmj g SY Y f l2h g  'hYn


Vhl2pn f ~1 g
US g i f
n r
U g SY-j!mU   !MhUY^mh gf ~ f l@e
pnmh g +  g S1 Xn
 g j!Smn

i! g p!Y^nmh 9
 U f U f UTpM psk` k$pns`k` on kk
g f ~ f l2pnmh g+g f i f !
noksyqTWowu^Zxnsz

Select sencillas

$|j!iS

f l2h g  n
j!U'h gMf ~ f l2pnmh g9g+f

Umnmnmh

g j!Smn

 U'i hsn
&
U g S1Y-j!mU

  !M

@ W  6 


- v yv~ y Yyv

! Y^lY f jp f YYdSbhi! g


n  g Sjpn
 g i f n
3S1 Xn
H $i hU'i ff n S1Y
Xj!Sbh Ar fg l@ hY
|j f R h hYl2jn
 Y f l2h g
n  g
j! f US f YhU g jn
S
SELECT * FROM PART
WHERE PRICE > 10;
f U f l2h g n
 g
j! f US f S1 Xn


shXS

PNO | PNAME
|
---+---------+----3 | Cerrojos
|
4 | Levas
|

$S1mn

 U'i h$;

f U6
n [
U g SY-j!mU
f Y f l2h g Y f jp f YY g qmn h~nmh g
f l2h g
n [
U g S1Yj!mUT

Z|j
Y

PRICE
15
25

  M g hn


S1 Y f l2h g Sbhi h g mn h g  S1Y
Xj!Sbh g i f n
[S1 Xn

g !V$@ Ari f
n $S1 Xn
| $j!S1mn

 e

 SY
Xj!Sh

SELECT PNAME, PRICE


FROM PART
WHERE
PRICE
S
 h
nY j>n
S10;
i h

 U fg f

fg

f/g

PNAME
| PRICE
--------+----Cerrojos
|
15
Levas
|
{hY^Y phU'i n
25
;p!Y-h

6S

fg+f |j f
n     M i
fg
f
f mU f UOn
f
n
9 g+f n f mU f }8Wx kzopdTkxwpuvnmpxqp! Yl@ g i f S1nmn fg !
  g j!n
m! mhU f/gf Un
Vn
j g jn
6 \6 Apj f i f U4S1l@X
U4hU f
j!Sm
n
U'i hH
n  g !
p n
XY^ g n
 fg $>h$($hgV$

XY^[Y

S1 Y

f n
mhU hU'hg

gUf nmZ
l f

US

SELECT PNAME, PRICE


FROM PART
WHERE PNAME = Cerrojos AND
= 0 OR PRICE < 15);
i  Y&hql2hW(PRICE
Y
jn
Sih

fg

PNAME
| PRICE
--------+----Cerrojos
|
15

  g hqp f Y mhU fg  Y^


Sbl@S1
 g}g+f pj f i f Uj!Smn

 Y f Un
n
g S1i f 
h X ~ f S1
7h g f Un
&n
j g jn

\6 AdhY f ~ f l2pnmhh g |j f Y f l2h g hU'h f Y`j! USbhlYj f/g S1 U g Sbhl@l2h g i h g p! f  g i f
j!UV Y^S1
jnm
h hphi!Y^wl2h g j!S1mn

 Yonw g
!
j f US f hU g jn
S
SELECT PNAME, PRICE * 2 AS DOUBLE
FROM PART
WHERE
* 2 < 50;
shXS U
l2h PRICE

PNAME
| DOUBLE
--------+-----Tornillos |
20
Tuercas
|
16
Cerrojos
|
30

6S

| j f
n 9p]n
 XY(l3 gS1Y g n
Mp!n
 XYn
 f fg f nU'j f h[SwSjnmhXi f n
 g+f j!U'i!
fg+f 
g SbS1U
6pj f i f j!Smn

 Y g+f p! Ygi  f n f l f USbh2i f n


6n
g S1hX ~ f S1
7h2p!Y^
 g
ZUY=!
j U$U'j f 7
h S1
Sbjnm[
h 9
n chnmj@
l UcY fg jn
SUS f J g S f U'j f 7h9SwSjnmhY f 
X fAf nn
m!S
h
i f ;!
j UV
n
 g *
n 
n
 g U'hpj f i f
j S1m
n
 Y g+ff UVSbhi h f nY fg Sh|i f n
[hU g jn
S1
hnmjl@U

Joins (Cruces)

 n g
j! f US ff ~ f l2pnmhHl2j fg SY9hlhn
 g nvwmZs}u^ouks- g+f Y f n

U f U
! Y^&Y-!
j Y`S1Y fg S Xn
 g |  >hl    [SY Z g i
f g j g

h Yl2j
n  Y f l2h g n
 g
j! f US f
U g SY-j!mUT

d

SY
Xj!Sh

g  hql2j!U fg
h

SELECT S.SNAME, P.PNAME


FROM SUPPLIER S, PART P, SELLS SE
WHERE S.SNO = SE.SNO AND
P.PNO = SE.PNO;
shXS

f U'i Y f l2h g n
 g
j f

US

S1 Xn
9hql2hgY

fg jn
Si'h

SNAME | PNAME
-----+----Smith | Tornillos
Smith | Tuercas
Jones | Levas
Adams | Tornillos
Adams | Cerrojos
Blake | Tuercas
Blake | Cerrojos
Blake | Levas

 U{n
ln
j g jn
$>$ f l2h g
USY-hqi j!mi h6j!Un

 g nU'hql@XY f p!Y^i Y f n


 mU{phYe
V
|j f   S1Y^
Xj!Sbh g YhUU'hql@XZY f Yhql@!U
!V|! f Un
 g Y f n
mhU fg $'hYphi f e
l2h g
i g S1
U!
j
Y f USY f nmh g  SY
Xj!Sh g hU3U'hl@XY f Yhql@!U g ml2pn
m! U'i hn
7i
mUsi f j!U
p!Y f i
 ~@{
h ]
n U'hq@
l XY f i f ]
n  S1Y
X!
j SbO
h hU f n]U'hl@XY f i f n]n

 gg+f j!mih{i f j!Upj!USbh 7~@h


U




n


j
n

|

i
n

H

l
@

l
@
W



h

[
Y
l
@


hS1
n hl2h g+f l2j fg S1Y^ f U mZp&mmZkonvm~ mZp}nvwmrmko
g+f
f
g
   l'
mZp
/!
 Yml f Y-h f n!
p Y-hqi !
j Sb
h  YS f/g
 U'
h | 

 $

h Y g+f n f m
h Ue
l2h g !U
l f US f  |j f nm
n  g Sjp
n  g |j fg  S1 g Z U~
n "  g 
h U'
i
" m
h U fg
i !
i  gVf U~
n $
n j g j
n 
\6
 A fg i f 
Y1h'nmh g  S1Y
X!
j Sbh g 
h UU'h@
l XY f Yhq@
l !Ui f X f U g+f Y9
!
j n f/g ! Z
Unml f US f
nf m@

l
Ul2h g
n  g hqnmj@
l U g Y f p f S1m
i  g Vl
 h
 !
 Vl !

Operadores Agregados

p!Y-hp=hYmhUrhqp f Yi hY fg ZY f ih g hl2h g hUgM0 hzM$$bh lhbh $A!
l  U f
n U'hq@
l XY f i f j!UV S1Y^
Xj!SbhWhql2hW Yjl f UShy+ nZnmhYoi f nhqp f Yi hY ZY f Z e
f Sbh@
i h gUf 
n Yj
n  g 

h XY f Sbhqi h g nmh g ZnmhY fg i f n
7Yhqnmjl@U fg p f m!i  f Un
&S1 Xn
&hql2pn f S1

|j

g+f6fg p f m! U*Y-jph gf UCn


VYhU g jn
S h f n`n
jnmh gUf
f  U
n  g
j f US
f g+f mU'!

i &Y-jph



fg nmh g hXY f nmh g

ZnmhY

f/g i f

@ W  



|j
 Y

l h g YhU'h f Y f nYh g S f p!Y-hql f i mhi f bS hqi h g mn h g


f Yf 2
lf 2h g
n  g
j! f US f 
h U g j
n S1

 YS1
jnmh

g i f n
lS1 Xn
Xlh)j!Smn

SELECT AVG(PRICE) AS AVG_PRICE


FROM PART;

 nY fg jn
Sih fg

|j

f Y f l2h g Y hU'h f
g SY-j!mUT

Y&Yj!USh

AVG_PRICE
------14.5
 YSwYjnmh

gXg+f
Y

f  h f
U

U n
bS Xn
lh7j!Smn

 Y f l2h g n

f

SELECT COUNT(PNO)
FROM
PART;
U'i Y l2h

shXS

COUNT
----4

Agregacin por Grupos

 U'h g p f Yl@
S f p!Y^S1
mhU Yn
 g Sjpn
 g i f j!U9S Xn
 f UVZY-jph g U!U f/g S1 g hU'i
mhU fg h
O
nmh g hqp f Yi hY fg  Y f Z/i h g i f/g Y
Sh g  US f/g p=j f i f U{pn

 Y g+f snmh g Yjph g fg i f 


Y1h f n
ZnmhYi f nhp f Y^ihYy Y f i hlU'h g+f n
jn
 U g hXY f Shqi h g nmh g ZnmhY fg i f n
9hqnmjl@U fg e
p f m!
 i h g
U'h g hXY f Sbhqi h g nmh g ZnmhY fg i f j!UbZY-jphy* nhqp f Yi hY  ZY f i'h g+f n
jn


U'
i
Zmi !
j nml f US f p! Y9i 7ZY-jphq!

 nMp! Y^S1
mhUl@ f UShi f n
 g Sbjpn
 gf U Y-j p=h g6g+f  f j!S1mn

 U'i hn
 g p!n
 XY g n

6u|,
A g+f j!mi  g i f j!U6n
g Si f  SY
Xj!Sh g |j f i f !U f Unmh g Y-jph g yS f U f l2h
6u|r
MXb   XY f l2h g p] Y^S1
mhUi hsn
9Y f n
mU f UVY-j p=h g hi f S1nl2hqi hg|j
...
i h g Sjp
n  gog 
h Ui f n@
l g l23
h Y-jph g g qnmh g iS1 f U f U f nRl{ g l2h$ZnmhY f U g j g  SY
Xj!Sh g
h

...

f
f

@ W  


Z 
|j

l h g hU'h f Yyj! USbh g


f Yf 2
n
 Y f l2h g
n 9YhU g jn
S

 YS1
jnmh

 U

U i mi h g phY i!Vp!Y-h ff i hY!hY[l2j!e


g m i h f '

SELECT S.SNO, S.SNAME, COUNT(SE.PNO)


FROM SUPPLIER S, SELLS SE
WHERE S.SNO = SE.SNO
GROUP BY S.SNO,
S.SNAME;
shXS U'i Y l2h

SNO | SNAME | COUNT


---+-----+----1 | Smith |
2
2 | Jones |
1
3 | Adams |
2
4 | Blake |
3

( f l2h g  'hYj!UXl@
Y^i 9nmh3|j ffg Shj!Y^Y f '
U ihW |j!*!Y^ml f 
Y hhn
T~@h
Ui f n
 g
 ,   

$'hY{p! YS
mhUl2h

l@ g l2hg S1Y^
Xj!Sbh f

S1 Xn


S.SNO | S.SNAME | SE.PNO


-----+------+----1
| Smith |
1
1
| Smith |
2
2
| Jones |
4
3
| Adams |
1
3
| Adams |
3
4
| Blake |
2
4
| Blake |
3
4
| Blake |
4

g
n  g S jpn
 gHf

UY-jph

V[

U i hShqi  g
n  g 
S jpnw g |j f
f j!U f '

g
Y

S1

f
U

f~f n

S.SNO | S.SNAME | SE.PNO


-----+------+----1
| Smith |
1
|
2
----------------2
| Jones |
4
----------------3
| Adams |
1
|
3
----------------4
| Blake |
2
|
3
|
4

 UU'j f/g S1Y-h f ~ f l2pnmhhqhXS f U f l2h g j SY-hbY-j p=h g r 'hY^phqi f l2h g pn

 Y f 7
n hp f Y^i hY
 Y f i hM$lV6p! Yci cZY-jphh/hXS f U f U'i h f n Y f/g jn
S1i hSbhS1ni f n
MhU g 
j n
S1i i!
 US f Y^m
h Yl f US f

6S

fg+f |j f p] Y^ f nY fg jn


Si h{i f j!UVYhU g jn
Sj!Smn

U'i h T$| hqp f Yi hY f/g


h XS f U f YVn

f i h g p! Ysi  Y g+f US1mi h{nmh g  S1Y^
Xj!Sbh g  Y-j p]i h g hi f X f l2h g p!Yml f Y-h{
n
g S2hX ~ f S1
h7 h g i f l@ g SY
Xj!Sh g |j f U'hp! Y f f U f Un
Yn
j g jn
 >$ g+f
h U Y U~j!Smn

U'i h6j U$j!UmU@ Y f i hY9hSY-h6n


i hhU'h g+f pj f i f U!
j Smnw
 Y
g+f n f m
j!Um
h U fg  Y f Z/
i  gMf Ub S1Y^
X!
j Sbh g |j f !
p Y f f U f U6n
9n
j g jn
 >$
 Y

Having

 [n
j g j n
VA0 E ~|i f h l@l2j!6p! f mi n
n
j g jn
X6 A gUf j m
n

!
p  Whq g mi f  g nmh@|j f nmnmh g jph g |j fg  g Zn
bj!n
m!mqi i  f n

l@ g @
l [  gof )p fYg mh f/g p f l@ mi  gof sn
&n
j g j nwVM0 i f f gmhnmj!  j mhq
f V
 f Zi  g fMi  f Rp f3g mq|j f j mn

fg qnmhb  mj h g pn


'h g i f f f h f g+ff
n
cY
n j g j
n r6!
 Md
 - h h  hn
i hq hqi  f Rp fg m3|j f K7hqnmj! f jmh f/g  f Z/i  g
i f f !
p  f f f
n [
n j g j
n V
A0
@ W  V yv
| j f
f f l2h gAg hqn
l f f nmh g p h ff i h fYg 
n
9h g jn 
|j

f 'i f l@ g i f jb  wjnmhj m n

 f l2h g

SELECT S.SNO, S.SNAME, COUNT(SE.PNO)


FROM SUPPLIER S, SELLS SE
WHERE S.SNO = SE.SNO

GROUP BY S.SNO, S.SNAME


HAVING COUNT(SE.PNO) > 1;
hq f 'i f l2h g
s
SNO | SNAME | COUNT
---+-----+----1 | Smith |
2
3 | Adams |
2
4 | Blake |
3

Subconsultas

 2n
 g n
j g j n
 g 46 MVM0 g+f p f l@ |
j n  g g j g+f n f g !
f f nj g h~i f|g jZhq g
!
j n
|j! f nmj!Z i hq'i fg+ffg p f f 
j rZnmh + f g f  g hq f nnmh i f f i f
Z i f
n 
f V
j mq6p f Z
i f n
 g jZhq g jn [ nj g hsi frg j
Yhq g jn  g l2pn
w f
n phqi f f Rp fg m
f Znm!
hsi f i d

@ W     

l h g  hq'h f nmh g  
jnmh g 
| j f f f l@ h p f mh|j f6f ny  wYjnmh2nmn
l@i h
f f 2
5wRh mnmnmh g 5)j mn

 f l2h g n
[Yhq g jn 
y|j

SELECT *
FROM PART
WHERE PRICE > (SELECT PRICE FROM PART
WHERE PNAME=Tornillos);

 n fg jn  ih g+f

PNO | PNAME
|
---+---------+----3 | Cerrojos
|
4 | Levas
|

PRICE
15
25

f Z g l2h g n
dh g jn c f mh phqi f l2h g f n
9p!n
 n
 f   i h g f
fg [ Vp ml f 7n)p mmp!mhHi f n
&hq g jn Zn
&|j f 'h g f f f l2h g Yhql2h|n
    M
f f Xn
 g+f j'i  f ~n
n
j g jn
X6 A )ih'i ff l2p] f Xjh g jn mi!i 
'h g f f f l2h g  f nmn
ghl2h~n
    M4m f /! Wi  jpn
si f n
   M f R
f 

n   
 c{m f i f f g+f f Znmj!i!Zf  g i  f nmj! m7h'h f f l2h grf n
p f mh2i f
n  jp
n nm
n @
l !
i w5 )h mnmnmh g 5KZ2phqi f l2h g  f |j f  g f np f mh~i f n
 j p=n

 !
j n fg @
l h
|j f f l2h g Yhq'
h f  hqi h g nmh g p 
h ff i h fYg |j f '
h f 'i f |
m
g
 
jnmh ph f ~ f l2
pnmhq!
p  phqi f nmh gMf
n m@
l m
 i f
n 
 g+f i f
i  h g !j m
n
 f l2h g
Vj!'i h

SELECT *
FROM SUPPLIER S
WHERE NOT EXISTS
(SELECT * FROM SELLS SE
WHERE SE.SNO = S.SNO);

 'j f/g b h f ~ f l2pnmhq=hq f 'i f l2h g j fg jn i h Kh'ph |j f i p h ff i h
i f n l f 'h g j* 
jnmh6 fg+f |j f j mn

l2h g b1i f n
    M f f 

n j g j
n 46 Mi f n
   ]cm f zVhql2hV f l2h g i fg hb fg n
 g j hq
p  
i  jpn
i f n
Yhq g jn  f f  fg i f  f nZZnmh i f b g+f
g+fXf 
n !X!
j ni f
n    !M f f 
g f l2p f i f
n  jp
n [ !

f '
n

f
jg n 
hq@
l 

Unin, Interseccin, Excepcin

 g  g hqp f  mh f g n


j n
n
jmq n
@m f gUf mq
n
2i
f f 
2i f n
 f h
i f
h ~@j h g i f n
 g jpn
 g i f
Zi] g i f ih gMg jhq g jn  g
@ W  uv yv w-v 
  

  g
j! f f  hq g jn

(l

SELECT S.SNO,
FROM SUPPLIER
WHERE S.SNAME
UNION
SELECT S.SNO,
FROM SUPPLIER
S.SNAME
WHERE
f n fg jn i h

$|j!

fg j f ~ f l2pnmhsi f

$63

S.SNAME, S.CITY
S
= Jones
S.SNAME, S.CITY
S
= Adams;
SNO | SNAME | CITY
---+-----+----2 | Jones | Paris
3 | Adams | Vienna

f f l2h g j f ~ f l2pnmhsp]
 V 

SELECT S.SNO,
FROM SUPPLIER
WHERE S.SNO >
INTERSECT
SELECT S.SNO,
FROM SUPPLIER
WHERE
i  &hqS.SNO
l2h >
jn

|j

fg

!
 M

S.SNAME, S.CITY
S
1
S.SNAME, S.CITY
S
2;
i h

SNO | SNAME | CITY


---+-----+----2 | Jones | Paris
La nica tupla devuelta por ambas partes de la consulta es la nica que tiene $SNO=2$.

Zmnml

|j

f f j f ~ f l2pnmhsi f  >r !

SELECT S.SNO,
FROM SUPPLIER
WHERE S.SNO >
EXCEPT
SELECT S.SNO,
FROM SUPPLIER
WHERE
i  &hqS.SNO
l2h >
jn

fg

S.SNAME, S.CITY
S
1
S.SNAME, S.CITY
S
3;
i h
SNO | SNAME | CITY
---+-----+----2 | Jones | Paris
3 | Adams | Vienna

Definicin de Datos
 nn f j!~ f

Omnmj! f jVhq ~bj hi f  hql@'i h g p!


 i f 
mqi f i  h g

Create Table

 n]hl@'i h{j'i l f n=p! si f   i  h gfgf n!|j f f H


 j'j f
'j f Z 
n ! [
  g m i g i f 
n hl@'i hWcM c O$  f g

Z

f n
 mq

j 

CREATE TABLE table_name


(name_of_attr_1 type_of_attr_1
[, name_of_attr_2 type_of_attr_2
[, ...]]);

@ W 


 y@v{! v 

! & f  n
 g n
 g i f mi  9
Y -
g f r
hn
 gMg
!
j f fg m g  !
j mh7 f g i f i 



- - 
 } H
KK g+f j m n



CREATE TABLE SUPPLIER


(SNO
INTEGER,
SNAME VARCHAR(20),
CITY VARCHAR(20));
CREATE TABLE PART
(PNO
INTEGER,
PNAME VARCHAR(20),
PRICE DECIMAL(4 , 2));
CREATE TABLE SELLS
(SNO INTEGER,
PNO INTEGER);

Tipos de Datos en SQL

hq

 [ f f h|m mh3h g
'hsi f p!n
 [hql2pn f   g i f p f  g mq'!
 =
 V f f hsm mhWhq g
'hi f l f i
p!n
   g i f p f  g mq'!
!Jl hi ml@nhq
'hXi f i wZ h g i f p f  g mq  g jl@ f 7i h
(
 V 
p p q  n=pf j h{f i ml@n g 2
s
n |i f f |!
p |!
hql@ f gUf  g jl f
f
f
q
p
q
q g+f
|j f Zn f 

 3c+'j@
l
W
h h g
7hi f i hqn f p!n
 &WYhql@[}h  f
b

!i f i f   f f g i f nmhq ji~i f mn h ji

n
n
0 $TVVl
! i f i f   f Yf g i f nmhqZ ji{
n f i f nmhq

Z jil@ iml@
n
n
VVl

m 'j! mq g
j f jXn
g X
 i f 
 n
j'h g m ph g i f i  h gMg hqph [ 
 i h g ph `i d

Create Index

f j m
n
nmh g m'i
fg p! W f n f  f n!  fg hHj  f n
 mT j f n
mq R f f

j{m'i w ff f n]  mj h
phqi f l2h g f j p f   hqi  g n
 jpn
 g
|j
!
A
t f f f tA $ a
f j f l2ph{p hml@i /l f f p hqph mhqn nl f hi f n fg jpn
 g t l@ g |j f
f j f l2php hqph mhqnn l@ 'hsi f R
  7 f  jV
!
m'
i
ff i  gUf j mn

 f nhql@'i hWcM c ~6( [+  g m  gfg

CREATE INDEX index_name


ON table_name ( name_of_attribute );

@ W  
 wv  

! b f  
j ,m'i
f mn n
l@i h2 g hq ff n b m j h
j mn

 f l2h g n
 g
j! f f m g b j mqT

b$Ci

f n
 f n
mq

   M

CREATE INDEX I
ON SUPPLIER (SNAME);

 n>m'i
f f /i h +g f l@ f f j hql@
l f f f g i f  `i { f @|j f j'j f 
jp
n  gUf m g+f  ff 6
n  f n
 mq    M g+f i!p  f nm'i
f 6 fg+f |j ff n
h
l2
mW
h |j f jj g j  mhHpj f i f p f m j!'i h g+f f jrm'i
ffg jVm f l f h f
n
9 f nm
h m!
i id

Create View

Z g hl2hj / K K fg i f  j n


O|j f 'h f i g f
f pj f i f f j
K | f n
 g+f i f i  h g p f hrp! f f nj g j! mhhql2h g f i g f/gUf h hq  
j 'i hVn
l2h g i f j3 3 Y-  f /nml f f j f |j!
Zn f f nml@ f i=hp! 

i 
n  f
n  n
 f Vn
 g mhsi f nnml@ f l@ f h$ g
h
  g Z g  g 'h f f {
i  h g nml@ f i h g p hp]mh g i! g mj mn f/g V g
l f f nml@ f
i h g 3 g jnm!
j  f n g g f @
l Wnm@
l  f 
s
n Hi f 
mi f n
3 g  fg i f  n
 g f n
 g
p! 9  f i f 
n  g 
n  g Z
 gUf  g
l f f nm@
l  f 

i  g p! Xl@ f
n

 n
lZ g ! f
M K ! *!

n nm
j  i f nmh g  nm
h h g i f n g g f @
l  f 9  
  j
Xi g j g mq6i f
n
 g
i
f f fg Y

 g !
p  9ml2pn f l f  Z g  g f !
  g+f &ZI
 i  g+f j m
n
 f
n hq@
l 'i h 7
p  i f 
j
9Z g U!
  g m  gf/g
M>
~w ]

CREATE VIEW view_name


AS select_stmt

i hq'i f
fg j&m g b j!mq g+f n f Zn
mi hql2h g+f i f m f r 6q
/f gUf |j select_stmt
'h g+fVf ~ f j Mj!'i h g+f f Vn
MZ g  ml2pn f l f fVg+f nml@ f
f
 f 6nmh g select_stmt

Y  g+ff ~ f j i!9 f [|j fg+f f n

j[hq g jn Yhq b 

n 9Z g 

j l g
f Xn
 g
j! f f i f  
mq{i f 
 ;  Y  sKK !


j m n

l2h g i f 'j f 
hn
 g 
 n
 g i f

-

CREATE VIEW London_Suppliers

AS SELECT S.SNAME, P.PNAME


FROM SUPPLIER S, PART P, SELLS SE
WHERE S.SNO = SE.SNO AND
P.PNO = SE.PNO AND
S.CITY = London;

$'h phi f 2
l h g j m n

 fg 
 [w 

hl2h g +
g f b   +g f i f
London_Suppliers
h b  n
Z Ug f

SELECT *
FROM London_Suppliers
WHERE P.PNAME = Tornillos;

 h$Yj!nq'h g i f 
hn
f 
n
 g
j f f 
 n

SNAME | PNAME
-----+------Smith | Tornillos

!

M
n j
n  fg f fg jn i'h f n g g f l@i f  g+f i f i  h g  f n

i hp f Z
l f f j
f g hswMn
 g 
n  g i f n
 gUf    M    lyYV ffg h f ~ f j 'i h
n
Yhq g jn |i i  f ~n
|i f  
mqi f n
$Z g lh b l |j f nmn
 g n
 g  g+f   gVfg hqn
 g

j 
n m  mhq fg i
mhqn fg i!i  gHf n
{hq g jn {h b n
O g ! gUf p=hi pn


p! hq f f
n  
n  fg jn  f
 

Drop Table, Drop Index, Drop View

f j mn

 f nyYhql@'i h2(lTHl  Cp!


jpn
 g nml@ f i  gf f nmn
!

f n
ml@m j  n


mnmj!

f 'i h hqi  g
n  g

DROP TABLE table_name;

!

f n
ml@m n
  n



|  Aj

m n

 f l2h g n
9m g b j!m

DROP TABLE SUPPLIER;

f j m n

 f nYhql@'i hH(l>|6( p!

f n
ml@m jrK'i
f

DROP INDEX index_name;

Zmnml

 i i j m n

'i h f nhl@'i hs(l>|{0


f f f n
ml@m f l2h g j & g X

DROP VIEW view_name;

Manipulacin de Datos
Insert Into

f V|j f6g+f f 6j n


 f   3 !=p=j f i fsg+f mn n f i!rh jpn
 g l f
i
 ff nhql@'i h w6!
Aw6A U  g m  gMfg
|b

INSERT INTO table_name (name_of_attr_1


[, name_of_attr_2 [,...]])
VALUES (val_attr_1
[, val_attr_2 [, ...]]);

! Mm +g f   n
p ml f  jpn
 f n
 f
n  mq | 
  s
K^ !=j mn

l2h g n
 g
j! f f m g b j!mqT

i f




; 

INSERT INTO SUPPLIER (SNO, SNAME, CITY)


VALUES (1, Smith, London);

!

7m

g+f   n
p ml f


jpn
 f 6n
 f n
mq

  

Rj m n

l2h g

INSERT INTO SELLS (SNO, PNO)


VALUES (1, 1);

Update

! ll2
 j'h{hl@ g Znmh f/g i f
hl@'ihW|(lc d[  g m  gfg


b m j h g i f jpn
 gf 2j f n
mq' gUf j m n

 f n

UPDATE table_name
SET name_of_attr_1 = value_1
[, ... [, name_of_attr_k = value_k]]
WHERE condition;

! dl2
 f nnmh i f n   m j h!MV f f n [
jnmh5wRh mnmnmh g 5Ri f n
 f n
 mqH $q
j mn

l2h g
UPDATE PART
SET PRICE = 15
WHERE PNAME = Tornillos;

 n)'j f 
h$nmh i f ni  m j h|!Mr~i f n
 jpn
&Yj!hH'hql2 ffg 5)h mnmn@h g 5 fg

 'h


 

Delete

! Mh   j j p=n


9i f j  n
9p! [
jn
 j m n

l2h gf nYhql@'i h(   WZT$


  g m i gMfg

DELETE FROM table_name


WHERE condition;

! h   f n9p h ff i'h nmn


l@i h5 l@ '
5i f n
 
 n

!
j f f m g b j!mT

| ]Aoj

m n

l2h g n
 g m

DELETE FROM SUPPLIER


WHERE SNAME = Smith;

System Catalogs

 hqi h g g f l@i f  g+f i f i! h g i  gUff l2pn f  K o | p! l@ f f


n Yhq b hqn7i f |j! n
 g  g  g iK'i
fg f fg i f mi  gf ~n
 g+f i f i  h g U g h g
f 
 /nmhh g i f n g g f l@ g+f p=j f i f gm fg
Z hql2h g i f Yj!n
|j! f h b  f n
mq6'h l@n
g+f b   gUf h f ~ f l2pnmhq] j* nmhh{j mn

i h2p! 6n


i f  
mqCi f Z g  g R g f
 /nm
h {
h nm{
l  f sn
gh g jn 6i f n
i f 
mi f n
gZ g  f l2p f |j fsg+f  f j
h g jn OYhq  {n
r g  f n g g f l@ hql@{p ml f hn
{[  w 9 K[w 
i f 
n  nm
h g
h @
l  f

n
n
[ g l fg i f p h f i f Yhqn
lhq g j n i f nqj g j! mh f 
!
ZI
p  h f f j 
i f/g m!
p ml@ g i f nmn
i /!q($ ~ g+f  d p! {hq f f
l@ g m
h @
l  m g h f nmh g  nm
h h g i f n g g f @
l 

SQL Embebido

 f/g  gUf mq f Z g  f l2h g hql2h g+f 


p j f i ff 2
l f f i  f Hjn f 
j!~ f i f 'h g 
p f
!UV i h g  hq f g p mmp!n fg ph n
 g |j f p
h i wl2h g |j f f j m
n
 Ti  i fg i f 
j
nCf 
!
j ~ f i f 'h g

V Vhq g j n  g |j f 'h g+f p=j f i f Oh l2jn


 j mn

'i h i pj h ph f ~ f l2pnmhn


 g
g jn  g f j g
Z g ![!  gUf p! Vi f f /n

 fg  g Yhq g jn  g f f/g l2h g jn f '


!
j ~ f i f 'h g i f l@ h phqi f f Rp f3g
hW|j f i 
ml2p=n f l f f |j f f l2h g   f i f j2 g+f i f i  h g i fg i f j@pn

 m|j f
fg fg  f f n=n f j!~ f i f n]'h g p> f 3j g g f l@Hi f fg+f |i f mnmn f fg hj
m f  f !
  fg  f gVz|n
7mh l{ mq g hq f nmh g mnmn f f/gofg Mnml@ f i! f
j

 g+f i f
i  h g |j f pj f i f   f i f g+f j mn

'i h  f l2 f Zmih!

hq

h
f g i f
mi f 
g+f b  g h

!
j nml
l@'i h g i
|{p
mh

f j mn

  f l2 f mi h f j2n f j!~ f i f 'h g Yhq g g f|f {m g


n n f 
j!~ f i f ny'h g f m g b j!mhq f/g i f $ - 3w  i  !ci Wm g
i  f l2p! f ghqn
 g p]n
  g n
 fg > V   g m g  j!mh fg 
@
l  f g
m g  j!mh fg i f n)n f j!~ f i f n'h g l f i
 f j [  
f f m g+f  nmn
l@i  g  j m g i f n
m f w g |j ff ~ f j nmh g Z
i h
f  !

l@$|j

 !
j 
 j!

|j f
g h

f l2h g nmh gof ~ f l2pnmh g i f hq g+f Zl2h g |j frf n f/g jn i hi f n
 g hq g jn  gofg
ml2hOHj {Yhq ~@j h{i f jpn
 g Y Hl@ h wHi f nmh g n f j!~ fg i f 'h g 'h



i h g !
p  rhp f  Yhqghq ~bj h g i f l2hih3|j f f fg l2h g jl f  g l2h
fg
g+f
p! 7 f i f &
i  jp
n 7

i f
n Yhq ~@j hHi f jpn
 g i f j f n  g ph j7m g b j!m7
 ]cy g f l f 
g l2hp=j f i fHg+f p hqph mhi hi f n
 /'i hj^    gf nmnmhq
phqi f l2h g j m
n
 f !
n Yhq@
l 'i {
h 
 V]
p   f Yjp f  j jpn
g{pj  f n!j g h
 

n  g

j f f jp
n 
! Mj
V!
i g j g mH@
l g i f nm
n 
i  g h fMf n i  f l2 f 
mi h
i ~ g+f   d  
    h K | /
Vj!'i h

n
hl2j!{p

Captulo 62. Arquitectura


Postgres Conceptos de arquitectura

fg i f Yhql f 
 3i f f
hlp f 'i f n
 g  g+fg i f n
M |j! f j 9i f
/f g R f 'i f 'i h@hl2hn
 g p!  fg i f  h g fg m f  j!n f  f
p! jnmhl2j!'hl@ g|g+f mnmnmhR n
l~ f i f  g+fg i f i  h g h g f/g j

n f f g+f Zmi h hq'hmi hOYhql2h{;p h fg h~ph j g j! mhz| g+fg mqh
j f fg p 
h f/g h g Yhqhqp f 
h g i f |
p h l@ g !
f nmh g9g
!
|

h fg H
h i f l2hmh g jp f Z g h
!
postmaster
n
[pn

 mq g q
h f n
9|j f b Z~1 f nqj g j! mh q
h f 'i ! f
j 'hh@
l gg+f mih fg i f  g+fg i f i  h gf g+f j'
i hpn
'h
!


n g g f l@h g
n g
j! f f 
g ~jl2hi f nmh
g f/g hq g g f

|6p

f nqp h l@ psql !


f n l@ g l2hp h fg h post-

gres

hq  hq
n j
Vhqn f mi f Z gUf/g i f i  h g i i  gf j*
h
g ( f mpostmaster
i h f/g h{jWhqn f mi f  g+fg i f i  h ggUfg j f n f nmn
l@ jWm g n
mq
hsj g mhy  g pn

 mhq fg i f h f 'i|j f |j! f f V  f i f XjXi f f l@mi  g+f


i f !
i  h g i f  h|i f j9m g n
 mV f nKn
l@i  g n
n
m f
!n
m f
 f Z
p f m
o 3  [  w ! f n
mh fg i f j g !
j  mg
h  b  Z g i f
n  f O
i n

j n f fg pj fg 7m


Xj6 f 7hHp 
h fgpostmaster
h f f n g+f Zmi h  f 'i !
|
h

'h

y
9t 7s9  v v /yv
f  f np h f/g hi f hq f 'irn)'j f 7h g+f Zmi h ^p!  i fVfg f pj hq f np h f/g h
h f 'i f n gUf Zmi h f ~ f 'i g+f hl2j
 g m6n
[m f f mi f n
postmas|j|j f f n
g f l2p fg+ffg f ~ f j 'i h f/g p f 'i hHp f
mhq fg  h
h f 'iOhql2hnmh g i f  f 'iOZ f f r g+f a
nmter
h g p 
h f/g h g i f postmaster
 ~
n m f

p f l{ f {j
hCp h fg h f hq f 'i f /n

 l2jn mpn f/g h f


imhq fg p 
h libpq
fg h gMf  f 'id|j|j f )n
pn

 mqO hq f 'i hi! w fg j p h f/g h




h f T
i rh f imhq fg l2jn f i f b ff n h f 'i{ f n f 'i'h fg 
f {jO
i  g i f l2hl f h f
|
Oml2p
n
mqi ff/g  |j! f j  fg |j f~f n
g hph  
f n)p 
h f/g h
 libpq
'i g f l2p frg+f9f ~ f j  f 
n V@
l g @
l @
l |j m f n g+f Zm
f
postmaster
i
h i f 
 g+f i f
i  h g !@
l f   g |j f
n 9p=
n
mq f b
hq f 'ipj f i frf ~ f j  g+f i fg i f

j 
n |!
j f g my
h *( f f f f fg h f sl f f ph |j f nmh g  
7h g |j f p=j f i f g+f  f !
i m
i h g9f ~
n @
l |!
j m
i f 
n 
n f f pj f i f ~'h g+f   f/g mn fg h g nmh6pj f i f g+f   f
i mi=h g
j g 'i hHj'hql2 f i f  
hs
i
f f f ! f n{
l |!
j m
Xi f n g+f mih i f 
 g+f i f
i  h g
f 
Z f {
j f $|j f nmh gg+f Z
mh g
6ph g f/gg+ff ~ f j O
h f 
n mi f m
i h i f j g !
j  mhi f 
n g jp f j g !
j  mpostmaster
h Ah g f/g h f |j ff n g jp f j g !

j  mh~h g f/g 'h
f fg  g+f jj g !
j  mh fg p f 
n f ~^jj g !
j  mhnm
n @
l i l
h ;ph g fg ;! [( f h
i  g h @
l  g
j  mhqh g f/g i f 

l f f 'h f f |j f{g+f f n g jp f j g !
j  mhCi f |

f n g jp f j g !
Whq

i f

hh ;!-R @j n


|j! f  g q
h hih g nmh g  
h g f n
 mhqi h g  hq2n
s g+f i f i  h g i f
f
p f  f f f  fg fg jp f j g j! mhsh g fg *h g fg

Captulo 63. Empezando


eVql2h f l2p f

  ~1  h6h g /f g k

p  g h g f fg  mh g p! j g  h g fg p=j f i f g+f M f n

/i h g ph Yj!nK


g i f nmh g ]
f j g j! mhzln
j'h g nmh g i f f f n

 f n i l@m g  i h i f n


V g+f i f i  h g ; g f
i l@m
g  i h f/g n
|p f g hq$|j f m g nm f n g h V f i f nmh g i f h mh g i f n
 g Z gUf/g
i f
i  h g9f m
m f nqp h fg h
* g Xp f g hqX'h f f |j fg+f f n g jp f j g j!
mV
h 

hqh /!h f ni l@mpostmaster
g b i h i f n g g f l@|p f g hq|pj f i f m g n
 j g 
h g fgAg m f f j[j f  fg p f 
nhHp
Zmn f 
i 
fg m g 
n 'i hh g fg
hq g jn f n
 g m g  j!mh fg i f m g n
 mq f n
 j!
i f
|i @
l m
g b mqV
f f3g+f  f/g 9!
j
[!
j 'i h$ 9hnmj!mi hn
9m g n
 ma
|n
j'h
|j!

f   g n f/f6fg f l@'j!nm!j!n
|j! f
g hqC i f fg |j fg+ffg m 
|j f h@
l f  Yhq f n!  f 
 h g fg i 



r

f ~ f l2pnmh|j f f r|j f Yhql@ f  f Yhq f n` f


f f n n
n
K f i f i f fg i f 
! h gf ~ f l2pnmh g
g hq i f fgf f n n f j!~ f i f h g jn h g f/g

Configurando el entorno

 g  gUf mq f )p=h f


n sl@ f Hi f h'!j  f n f h 'hqp! Hn
 g pn

mhq fg z g j
l@ml2h g |j f  h g fg  g mi hgm g 
n i h f m

i hgh [ f l f f &ih g jn f n
 j!
i f n
|i @
l m g b i h n
 g 'h  g i f m g 
n  mq g qi fg+f &m g n
  h g fg
h g fgfg j
Wp
n w mq@

n f f g+f Zmi h rhl2h~j g
j  mhqZ

l f f f fg 3 
fg 4
h 
n {!
p   f 
n f f j f ~ f l2pnmhi f j
p
n
 mq

n f f6fg|f nol2hq h m f  

h
!h g ml2p
n
m
i i Z
 g j@
l f l2h g |j f h g f/g  g mi O
h m g 
n i h f f ni f 
h mh psql
h nmh  hq'i hq'i f f  f n
i f h mh

i f f /usr/local/pgsql
g j g !
j nmhph f no'hql2 f i f n}!
i f h mhi hq'i f h g f/gH/usr/local/pgsql
f/g bm g 
n i h f /nm
l f f Rhi h g nmh g p 
h @
l  g i f h g fgHg+f m g 
n  f f/g f  g h! f f no
i f h mh
h nmh  hqi f f W
i f/g f
i f h m@
h 
n i fHg j g f nmn
/usr/local/pgsql/bin
j i f i f fg Aj g j
@Z
 f i f T
n g f nmn9i f f f n f Y T
n Yhql2h g ,
h g '
i f f [
i
% set path = ( /usr/local/pgsql/bin path )
 jlZ
 f i f n hqj fXg
f f n 
h .login i 
f g j{i f h mhsp f g hqn j g 
nYhql2h g ' g 6hs g f h f/g i f f 7 i

f nmnm

% PATH=/usr/local/pgsql/bin:$PATH
% export PATH

f f n] 
h .profile i fg ji f h mh6p f g hqn/( f/g i f  'h  g jl@ f l2h g |j f 
 i mi'h f n)i f h mhmi f h g f/g  g jp! Ti f l@ g z f l2h g f f f 
7 f j f '
f l f f MYhq'!j  jcZ
n f i fMg f nmn
rh[Yhq'!j  jdZ
n f i fMf h 'hc
nmh
n  hi fofg f i 
h jl f h 'h f f 'i f hl2pn f l f fMf nn ml2hXp!   @h[n f/g p f 
h6i f
n l2h
i m!
  m2i fg jp! ' fg i f hq m'j! i f f
3hq g jn  nmh g l@'j!n fg
i f 

|j f i f/g m f f n g f nm
n |j f j mn


f >
n i @
l m
g  i h i f n g g f @
l 2'h f f n
{hq' j mq f f nl2hqi hCp=h i f f hq
f 'i r|j f f 
n
  
~@h f b  h f ~ f l2pnmhq g A
n {@
l |j!m gUf Zmi h i f Z gUf/g i f
i  h gMfg j
@
l |!
j m
 f l2h  f fg  9h'!
 j 
n [Z
n f i ff h 'h V
h f n'hql2 f i f
n @
l |!
j m
 gUf Zmi h i f 
 g+fg i f
i  h g l2

6i f f fg p f m!
 
n

n f i fXf h 'h6
 $d   i f m


 j{p 
h @
l i f p
n
 mq
V g f

'h m!3|j f '


h~p=j f i f hq f  g+f n
)i f f $Yhq g jn  nil@m g b  i h
postmaster i h3i j!i!l
p! & +g f j  +g f i f |j
f g j f h 'h fg &Yhq'!j 
f
f f

Ejecucin del Monitor Interactivo (psql)

g jl@ f 'i hr|j fHg ji l@m g b ih   f ~ f j


n f  Zgj h
i hOj mn

 n
Z gUf
master
p
n
 mhq fg Yhql2hXj g j! mh rhl2hXl f mhl2h

n !
p  Xi f 
g |j f
i |i fg @
j m p f f i f i


W
h |j f f 'i 9|j f  f f @
l m'h g i f p f

( f g i
pj f i
n
X

pj f i
hq

ihOi

j 
i l f
f +!
i f i  h g pj f i f
g p f 
l f f +i
f fg {n
l@ h
p   mT
!

ff n=p h fg


hl f  
f f w> i!

i f nmh g  g
h

postf ~ f Yj 

h /usr/local/pgsql/bin
g f/g nmh

 h g fg Z  g+fg
f 
f  f f n f mi hp f
g+f i f i  h g  b  g
fogUf g
m
Z g

hqph [ {i h g mph g i


f f fg i f h f mqT3 ni l@m g  i h
l@ h f imhq fg p=h f i4 V/7h fg  m nmh g   fg h g 
i f hq f iKh fg nmhn fg f ~nwl@ g l@l@ |j!m!U g  f n f mq
j f b Mp hn f l@ g n
d'h 9i f h f  9n
9 g+f i f i  h g
f 
f f nmh 
g g
j! f f g l f g ~ fg i fHf [ h i f jh i f 2h g f/g n!hql2h psql h
!

createdb

% psql template1
Connection to database postgres failed.
connectDB() failed: Is the postmaster running and accepting connections
at UNIX Socket on port 5432?

h
% psql -h localhost template1
Connection to database postgres failed.
connectDB() failed: Is the postmaster running and accepting TCP/IP
(with -i) connections at localhost on port 5432?

'h @
l nml f frfg i f mi h7|j f  ! f n
'h /f g f gjmhql@ f hqh ! f g
m f 'i h3h f  n gUf Zmi h f |!
j postmaster

hi hy hq f
f f n g
j! f f l f g ~ f i ff [ h

FATAL 1:Feb 17 23:19:55:process userid (2360) != database owner (268)


w
ml
|j ff 
n i l@m g b  ih f[@f j f n
l f i!m ff nj g j m h f 
| j!
7hq
i hy*(l
n f |j f mn h f mm f j mn

7i h f n g jppostmaster
f j g j mhHi f h g /f g

Administrando una Base de datos

$|j f  h g fgVfg f[@f j 'i h g+f phi f l2h g f n


j'| gUf i f i h g p f )
p f ml f h f nmnm^$|j!i fg mZml2h g nm g i f fg  g mY g p= Vi l@m g b j' g+f
i f i h g
 l2 h mHi f nm g pn
mmhq fg h g f/g g jl f @|j f|f n7'hl2 f i f nmH gUf i f i h g
g 'h g+ffg p f mY fgAf nql@ g l2hg|j ff nqi fg j~j f f f n g g f l2
f noi @
l m
g  i h i f  g+fg i f i h g '{h'!j ih g jj f g mp
mn f Zmh g i f
f  mqi f  gUf/g i f i h g f hq' fg i f f i f  n f|f n'hql2 f i fHg j g  g+fg i h g
fg ff/gXf nY g hq f hq' fg pj f i f hq@
l nmn f j i fsfg gUf Ymq g h f f mq,
i fg  j m6i f  gUf/g i f i h g
$'h

Creacin de una base de datos

(l
lh g |j f 
| j f f f j'~ g+f i f i h g nmnml2i ~l@i )j f i f '
 f nmhhqnm
j f f h i f T
g
!
% createdb mydb

f hnmh g p

R'hsj

Zmn

mh

| j f m i h g p V f  g+fg i f i h g f
nmh g
j! f '
g f 

% createdb mydb
NOTICE:user "su nombre de usuario" is not allowed to create/destroy databases
createdb: database creation failed on mydb.

h g fg n f p f l@ f f jn


|j! f l f hi f  g+fg i f i h gVf j g g f l2|i i hV
j q
h l@ ml f fg+f f n}il@m g b i h i f nm6 g+f i f i h g |j f f y h g 'hql2 fg
i f nm g  g+fg i f i h g i f f hql f  ph jC  f n
/Z mh fg n
ml@ i h g
{j'{nmhqZ jii f ~Y  f fg 6h hqi h g nmh g j g j mh gsfg j h
i h g p g+f
i @
l m
g  i h i f j'r gUf i f i h g h g fg n f  f 9nm9 f /mqsi f  g+fg i f i h g
g+f j l f ffg i f mi hl|j ff ni l@m g b i h i f n g g f l2l'|i f h h  n f p f l@ g h g
p &
' f nmy
h * fg+f  g hhq g jn f nqi l@m g b ih i f n g g f l2

Acceder a una base de datos


|'9

&|j

h g b j!mi hj'X g+f i f i h g Rp=j f i f  f i f f nmnm


f '

 @f j 'ih2nmh g p h
jn fg n f p f l@ f bm
 g m
f 'ih~jp h
p f @
l f|f Zm i f
l2
+ g [
m f 
' $

 l2 g i f l2hq h
mqCi
b hi j f i f[@f j
l2 f
Ej g 'i h~nmsn
m f
fg i i f/g i f {h f f
i g j mi@
l g i f nm/ ff
fg

!onmh g
f h g fg ph f[@f l2pnmh
i f f/g i m f 
7l f psql
f
msi fg j j m' g    nmjn=n f
l f g @fg i f fg pj fg f g jp hq
~nm7
 ; Y Y  

p Hp hq nmh gf[@f 2


l pnmh gf fg f l2'jn/ h{p=j f i f
j f i f |j f i fg+ff|fbf Yj

 p mn  g+f i f i h psql
i /f g m f '
i hHnmh i f T
g l@
% psql mydb
nm f  f mi h f n g
j! f f l f g bf
f n f i 

Welcome to the POSTGRESQL interactive sql monitor:


Please read the file COPYRIGHT for copyright terms of POSTGRESQL
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: template1
mydb=>

 g f p hql2p m'i mYd|j fMf nl2h h fg Mn


g h[Xp=j f i fAfg m g j g hq g jn g i Hi f b h
fg 
i f j /f g p=mh|i f   hHl2 f mihHph f nl2hq h Unp 
h  l2
p hq'i f
nmh g
psql

i
h g i 
f fg Yp f |j 
f f l2p! f 2ph f n= / f 'i3h fbf lpnmhpj f i f hq f f nm
ji  f i f nm g m g i f 7 m g i f fg i ~ h g fgMfg m f 'i hy
mydb=> \h

f $|j f '  f l@m'i h~i f m  hqi j h g jn g 7p=j f i f p g f n hq f mi h{i f n
fg pmh|i f   hsn gUf Zmi h h g f gf/g m f 'i hy
|'W

mydb=> \g

 g hn f i m f n g+f mi h |j f p hq f/gUf nmhq g jn  f l@m' g jhq g jn Yhq{jpj h
{hql2nmg'iZs7h fg f fg m
p h fg j hql@ ml f f nm g hq g jn g f
l@m'i g hpj h2hql2/ spsql
n ff h g jn g i f/g i f j 
hqi
lh g l@Zmn f
j  i f m  hqi j nm g m f 
l f f fg m
f nm!
mydb=> \i nombreDelFichero

 g n
i f
f
psql

fYg 9|
fg m 

mydb=> \q

f l@m' 9Whqn
f nmn
m f Xi f i f fg  h'hq f l@ g
p f psql
fg m f f np hql2p i f nl2hq h ! f pj f i f j mn

 f/g pmh
f[@f l2pnmh f/g p=mh g jnmi h f n  f i f 'j f n
m f ! f nm g h
n
m f grg ml2pn fg hl f i g Yhql@ f ph   hV|j f ' i fg pj!
' g f nR 'ni f
n m f g+f M
'h i h h g hql f mh g l@n mpn fg nmh g
i f j'
n K f g+fg+f 'nmhqV
7
I * i

qi
h g i ffg 
grf nm'h ph
  g
g jn g i d
j mh f/g
g i f nmh g !
|j f hqYjps@
l g

Eliminando bases de datos


n i l@m g b i h i f nm gUf i f i h g l@i pj f i f|f n


ml@m' nmj m n

'ih{nm g m
f/gXf 
f f h i f b
!

j!

% dropdb mydb

 g m f n
ml@m'l g ml f f q
h i h g nmh g 
h g |
H g hqmi h g |nm g+f i f i h g
s'hspj f i f f Yjp f g+f  g |j f i f f 7' f gUf Yq
h 6p f jmqT

Captulo 64. El Lenguaje de consultas


 nn f j @f i f h g jn g i f h g fg h g fgf/g j'[ m f i f n f/g 'i i  & f
f l2j' gf f g mh f/g n fg hl2h mph g i fHg g f l2 f f g mn fg Z f f 'm f nm g i f
p hij  mqrj'mhq fg / g gVg hq2  f g m g hql2i g i f n'n f j @f i f h g jn g
h
m'ni f h g fg h g  j f nm!* g g+f mp hqph mhq'jp ml f Z g h|i f l2h
j g h g fg Cp f n

 hqp f mh f/gg+f 'mnmnm g  bm f 'mi fsfg f l2'jn


fgrg ml2pn f l f f nmi f p hqph mhq' n f j'$mi f |i f 'j fg b l f g mqi f i 6'h fg i f
m
Zl2hih2j hlpn f h j h mn f +i f d f ' f/g h{'j l f h g h g n
m h g
hg  f i   m'nmj f 'i h 
 'i (lc  ^ f  f j f &|j f n
j' g  /
f g m g i f nn f 
j @fg h f f g mhq fg i f n fg 'i $ 

Monitor interactivo

 nmh gfbf l2pnmh g |j fg


j f ' g jl@ml2h g |j f ' f i h|nm g+f i f i h g l2i Hhql2h g+f
i fg m frf 6nm g j g+f mq f mh W|j f '  'Yi h
* h gMf[@f l2pnmh g |j f p f
psql
f f fg f l2'jn l2
 gUf pj f i f f 'Yhq b f

f fg+f i! f h mh~p g /usr/local/pgsql/src/tutorial/


f ql2hj g nmh g Y f l2p f 
Vhq g j n ff n7 f h
h f n j h Kn' XREADME
nmh g
j! f f
% cd /usr/local/pgsql/src/tutorial
% psql -s mydb
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: postgres
mydb=> \i basics.sql

 nYhql2'i h
n f/fXf ~nm g Yhq g jn g
phq frf sl2hqi \i
h g mn fVg f pz|j f ' f
 g h g jn g i fVfg g+f m fg 
f f  mh g hl2'ih g
p
psql
hl2'ih g p M
f @
l g i f nm\d
n fg
i f hql2'i h g
i g phq
mn fg

i f g i f nmh
j'Vpj
f f nq

  f h r
g 
g fg p f mi h g U hp=mq -s n f
g  f g i 9
f f Zm nmhq g jn n gUf Zmi h

f h
basics.sql

l2h g b mh l2mq~i


f g g f l2fVhq g jn f g h g
j n
g i h
f n ff \? i fg i r
f f n)p hl2p psql p= c f 

Conceptos

 X'hqmqj'i l f n f ~h g f/g9fg nmXi f Ynm gUf |j ffg j'hn f Ymq~i f m g 'm g
i f j6h @f
h Vi9m g 'm f f nmXl@ g lhqn f Ki f b mj h g i X b mj h fg
i f j mph fg p f  K y
h g '7i gm g 'm f f jw   +7   |(|!
p f l2 f f  |j ffg 
mYhsnmhsnm h|i f hi nm9m g nmmqT [|j f nm g m i g i O'
f f f f ' m nm g Rj g f l2h g nmh g @
l m'h g 3 * Y- m'i g m l f f f g ml@ g l2h
j' i  fg j'H   * ~nm g *w | i  g h zZ zrhl2h g+f i h f
mh l f f nm g nm g+fggUf jp f  g+fg i f i h g j'XYhqn f  m~i f  g+fg i f i h g
f/g mhq'i ph jV

mhsp hq f/g h
hq g j f j'9
m g nm mqh g mhy
postmaster

Creacin de una nueva clase

j f i f f 
j 's7j f 7HYnm gUffg p f  mY'i h f n='hl2 f i f nmsnm g+f i f l@ g i f hi h g
nmh g 'hq2
l /f g i f  mj hH g j g mph g
CREATE TABLE weather (
city
varchar(80),
temp_lo
int,
temp_hi
int,
prcp
real,
date
date
);

- temperatura mnima
- temperatura mxima
- precipitacin

 f j f d|j f nm g p=nm g Ynm f Xnmh g mi f mi h fgg h gUf g mn f/g 9nm g l2 g
f 
j nK g l@m g jnm g + h g mi f mYi h f/g pj f i f 6nmn f  gUf g+f g mn fg l2Z g jnm g h
l@m
g Yjnm gHg gUf n f/g phq f{f b f i hqn f/g hql@mnmnm g nAhl2hnmhCp f l@ f i !h g
f/g i  g hqph [ nmh g mph g ' jn fg i f i {hql2hm R hq f /nm g l2nmn
m R' 6!
 
' !i f ml f = ml f/g l2p' g Yhql2hh b h g i f mph@ f f n h b h g hCj
mhHYhq j hi f mph g f hl@  mh g f)nhl2hW f f l2h g l@ g i f )h g fg p=j f i fg+f
h'!
 j i hhj
l f h  b mhCi f mph g i f i h g i f mi h g ph f nMj g j mh
Vhq g+f j f f l f f =nmh g 'hl2 fg i f mph'h g hq g m  ml f f p=nm g nm f f R
f p h|i hq'i fg+f f |!
j f p g hqph [  g h gfg p f mn fgf f n fg 'i `i  g f 'i h
l@ g n f h g f nYhql2'i hh g fg 7
i  mhnhl2'ihj g ihp V f j'
T
fg m
nm f f n g g f l2 f nm mhq'ni fVg f l2p f m f l hq f f l2h g |j f nm g nm g+fg f f
p h]
p f i /i fg |j fg hq f f g mhq fg i f nl2hqi f nmh f nm mh'n

Llenando una clase con instancias

 i f Ynm mq yv 


 g+f j g Xp nmn f ' j'Xnm g+f hVm g 'm g

INSERT INTO weather


VALUES (San Francisco, 46, 50, 0.25, 11/27/1994);

f i f j g f nhl27i h Z p r  'i f/g  mi i f g i f i h g i fg i f


 f h g r! f f nml f ffg h g j f n fg+f l@ g p]mi hXph |j f nmh g
i h gg hn f mi h g
h f/g h g !Yhql2hj'3m   g m{i f l f f H
h6i fg i f nm 
nmHi fg m'h 

2
l

p
m
n
h
K

f[@f
gUf
)l2Z
/Hpj

COPY weather FROM /home/user/weather.txt


USING DELIMITERS |;

i hq'i V
n p si f )
n  f hh
f i f r
f f R
f g+f  fg mn f n gUf Zmi h 
&
|j
n  f s
h i! f /l f f
f f n g+f mi h n fff

Consutar a una clase

f 'i'h|n)n
f f

 nm g+f f f pj f i fVg+f Y hq g jn i Yhq6j' +g f n f m f nm/mh'n'h l2nqshq g 


j nm
g i f p h f ma[ i f Ynm  mq i  Y gUf j g p= 7' f fg hy* i f nm mq Ug f
i
Zmi ff ~
j 7n
g i fg m'h mn p  f |j f n
g nmh g  mj h g |j f 'i fg+f i f 7j f n h g !

j'sjn
mm nmp  f |j s
f fg p f msj n
|j! f r f/g b m Ymq'!/h f[@f l2pnmhq7p=
f +jp f hqi g nm g nm g i f f f f g m
SELECT * FROM weather;

'i f hj pj g '


hqj nmi f

+---------+------+------+----+--------+
|city
| temp_lo | temp_hi | prcp
+---------+------+------+----+--------+
|San Francisco | 46
| 50
| 0.25
+---------+------+------+----+--------+
|San Francisco | 43
| 57
| 0
+---------+------+------+----+--------+
|Hayward
| 37
| 54
|
+---------+------+------+----+--------+

| date

| 11-27-1994 |
| 11-29-1994 |
| 11-29-1994 |

j f i fAf/g p f m j n


|j! f f Rp f g m  f nmn
g 9i f i fg m 'h;h f[@f l2pnmhqpj f i f ' f
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

 h g hqp f i h 3f g hqhqn f  'h g v  



'i v  !! g+f pj f i f j g f nmjn
mYmqi f
j n
|j! f h g jn Uh fbf l2pnmh
SELECT * FROM weather
WHERE city = San Francisco
AND prcp > 0.0;

i hlh fg jn ih


+---------+------+------+----+--------+
|city
| temp_lo | temp_hi | prcp | date
|
+---------+------+------+----+--------+
|San Francisco | 46
| 50
| 0.25 | 11-27-1994 |
+---------+------+------+----+--------+

f  'nm)pj f i 
f fg p f mY |j f mn h g fg jn i h g i f j g+f n f pj f i gUf i f
f n h g i f |   h3|j! 'i hsnm g   [  K K 

Vhql2hpj
j

SELECT DISTINCT city


FROM weather
ORDER BY city;

Redireccionamiento de consultas SELECT


Vjn
|j!

Xnm g+f
f hq g j n g+f n f pj f i fg+f f i f Ymhq'i Xj''j f 7

SELECT * INTO TABLE temp FROM weather;

 g hlh
h f no
yv  3
fg jn 

l2i f l2 f 7ml2pn


m jhl2'ih 
 / f /'i h Ug f j 7'j f nm g+f f l2p
 mj h'l f/g p fg|fg p f mi h gf nm{n
g {i fg m'hi f nohql2'i h  
hq' fg phqi f l2h g 7p=h g jpj f/g hq f n

 jn
|j! f hqp f m g h f nmHYnm gUf
f hql2hnmhW' Kl2h gMg h f jn
|j! f h  nm g+f

Joins (uniones) entre clases

6 g V 'h /'j fg b g hq g j n gAg nmh| f i m/Vj'nm g+f Vnm& f - g h g jn g pj f
i f Y f i f sl@n mpn fg YnK gUf/g |nmW f h~ f i f snmHl@ g l2nm g+f i f n=l2hi hO|j f
l@n mpn f/g m g 'm g i f nmXnm g+fg+f p hq fg i g nql@ g l2h f l2ph'XYhq g jn |j f
 f i=~l@ n mpn fg m g 'm g i f nm g l@ g l2 g hi
f f f/g nm g+fg {nm{ f g+f h'hq f
hl2hj'Hhq g jn hmT rhl2h f[@f l2pnmhqi
l2h g |j f |j f f l2h gf 'Yhq b  hi h g nmh g
f  g b h g |j fsfg  f f n hi f f l2p f j g i f h b h g f Z g b h g  f f h7 f f
g l2h g hql2p nmh g b mj h g f l2pnmh f l2p oi f Yi Om g 'm!hqnKh g
b mj h g f l2pnmhs f l2p qi f hi g nm g i f @
l g m g 'm g !
Nota: Esto es slo un modelo conceptual. El verdadero join puede hacerse de una manera ms eficaz, pero esto es invisible para el usuario.

 hqi f l2h g '


 f f/g hshqnm g
j! f f Yhq g jn 

SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high,


W2.city, W2.temp_lo AS low, W2.temp_hi AS high
FROM weather W1, weather W2
WHERE W1.temp_lo < W2.temp_lo
AND W1.temp_hi > W2.temp_hi;
+---------+---+----+----------+---+----+
|city
| low | high | city
| low | high |
+---------+---+----+----------+---+----+
|San Francisco | 43 | 57
| San Francisco | 46 | 50
|
+---------+---+----+----------+---+----+
|San Francisco | 37 | 54
| San Francisco | 46 | 50
|
+---------+---+----+----------+---+----+

Nota: : Los matices de este join estn en que la cualificacin es una expresin verdadera
definida por el producto cartesiano de las clases indicadas en la consulta. Para estas
instancias en el producto cartesiano cuya cualificacin sea verdadera, Postgres calcula y
devuelve los valores especificados en la lista de destino. Postgres SQL no da ningn significado a los valores duplicados en este tipo de expresiones. Esto significa que Postgres
en ocasiones recalcula la misma lista de destino varias veces. Esto ocurre frecuentemente cuando las expresiones booleanas se conectan con un "or". Para eliminar estos
duplicados, debe usar la declaracin select distinct .

 f g f  g hq  hrhl2h4 g hq g j g !
j mih g 
p h j'7m
g+ff f 'i f ~
ph A hi g nm g m g '
m g i f mn nm g+f 
 ~nm

g 'mi f nmrnm +g f f f
l2h K
f l@m7hnmhmXi f nm

i f mn h grg g f l2 g i f 
g+fg i f
i h g g+f h'hq f {hql2h   3 -   3 -
' ! '|hq g 

j n Hp=j f i f Y hq f f jl f h6 Z b mhi f 'hql2 f g i f  nm gU/f g
g j g jmh7 fg

Actualizaciones

j f i f  jn

 m g 'm
j f |j f mn n f j Xi f nm g
nm f l2p f j f n[j f i f

n hl2'i hsjpi f 
j phq[|j f i f g
gf i g f f/g j g 'i h f
f l2p f j gMf ni f 6h f l2 f j f [ i h g9g jp f mh
 jn

 nmh g 
i h g i ffg l2 f 

UPDATE weather
SET temp_hi = temp_hi - 2,
WHERE date > 11/28/1994;

temp_lo = temp_lo - 2

Borrados

 h g h [ i h gAgUf '
 f j g 'i h f nqhql2'i h  /

DELETE FROM weather WHERE city = Hayward;

g nmh g f  g b
p f  Zmi hHYhq6nm
)hqi h

h g i f f f p f [ f f  f f g 66 i g hq2h  i h g ( f f m Ug f
j n g i f mn [h l2
g Yhq g 

DELETE FROM classname;

g ml2pn f l f f h  hi g nm g m g  'm g i f nmXnm g+f i 


i i f[  'i hnm&7K* n g g f l2X'hsp f i  hq' l2mq~ fg i f ' f f g h
Kj'Xjn
mm'
 

Uso de funciones de conjunto

 h g n f j @fg i f Yhq g jn h g f i  g hqph  bj'mh f/g i f hq j h |'
f hq j hnmjnmjbmh fg jn i hp  i f l@n mpn f/g nm g i fVf  i 
h fbf l2pnmh f g f 3j'mh f/g nmhqn fg p nmjnm
h !R
g j l2 ! avg
l f i m!@
l@ ml2h!''i
l@mml2hq! g hq f j 6hqcount
j hi f m g sum
'm g
max
min
 g ml2ph   f hql2p f 'i f nm f nm mq f b f nm g j' mhq fg i f hq j hHnm g 
n j g jnm g
6 
i
f f ' mc
j'i l f n f b f 
  yv fg |j f 6

|  yv ; r

g+f n f  mh'nm g hnmjl2' g i f9f  i r fg i f nmh g jph g f h' fg}g+f Yhql2pj snm g

j'
mhq fg i f Yhq j h i fVfg f l2hihHhq  hqnm9
|!
j nm g nm7
j 7 mq6i f hq j h7!
l@ f b g |j f  yv gUf n f  mhq'l
jph g i f  nm g i fg p!
j g i f nmh g jp=h g f hq' f/gVgUf
hl2pj 6nm g j' mh f/g i f hq j y
h +( ffg f l2hqi hnmX
n j g jnm6 
pj f i f 'hh'
f f j' mh f/g i f hq j hp=j fg @
h |j f 'h f f6g+f mi @
h m f j g j'V
j' mq
i f hq j hsp i f f @
l m' |!
j nm g+f nm f  i i f nm9
j' mT
+h h  p  f nm g

n j g jnm g  yv g f l2p f hq f f g
j' mh fg i f h j y
h  g b m l f f 'nm7i h
j g f ipj f i ff/g m
j'rY
n j g jnm  yv' |j f 'hj g+f j' mhq fg i f jphq3p f hX'hl f
f f nmp f '
 @
l g l2hq'
i m K6phqi K g+f j g i i f jl2hqi hH@
l gMf   Vh=6 

!
Vhql2hh

j'mqi

Vhql2h

f[@f l2p=nmhphqi f l2h g j g  nml@mml2 f l2p f j f jn


|j f p= [ f hq

SELECT max(temp_lo) FROM weather;

l h gg  f 
| j!mji ihsmji i fYg i hq'i fg+f
i f h f/g g f l2p f j g phqi f
f f 2
l2h g p hq

i|j

SELECT city FROM weather WHERE temp_lo = max(temp_lo);

p f hs'hWj 'mhq' Xi f mi h[|j f nmj'ml2 =


! 'hpj f i fgUf j g i f ~6 
 m
Yhsnmhg|j f 
j g  l2h g U f g f
f l2 hq)phqi f lh g f pnm nmXYhq g jn p nmn f  X
 g hHj g 'i hHj ' Z  *[K
SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);

 h|j f 
f/g h [ f hq O|j f nm g j gUf n f mq fg j'hp f mqm'i f p f 'i f f |j f
nmj nm g {
j p hqp!m9j'mi f jph g mrml2ph  nmhW|j f p g+ff f n gUf n f f f mh
 g j' mh f/g i f j p=h g hq lZ
/2l2jO mn fg hl2m'i hnm g hqn
j g jnm g '-
h f[@f l2pnmhq=phqi f l2h g hq f f nm f l2p f j l@mml2 hql2i f Yi mj ii
h4

SELECT city, max(temp_lo)
FROM weather
GROUP BY city;

f 'h g i f j f
n f j '|nmHph mji idYhqi f l2h g n b fg g nm g jpi g j g 'ih
 yv=

|j

SELECT city, max(temp_lo)


FROM weather
GROUP BY city
HAVING min(temp_lo) < 0;

j n i h g )
p f hi f mji i f g Yhq f l2p f j g  6
h f hyZm
f 'h g i nmh g l@ g l2h g /f g 
'nml f f g g qnmh~'h g m f f/g {nm g  mji i f/g jh g '
hql2 fV
p h K5 5Kqi f f
g f l2p] f f 
Kl2h g ' f
|j

SELECT city, max(temp_lo)


FROM weather
WHERE city like P%
GROUP BY city
HAVING min(temp_lo) < 0;

 f 6j f [|j f phqi f l2h g pn


m mn fg  mm6i f n'hql2 f
f 
7|j f 'h| f fg 7j'mhq fg i f hq j hyU g h fg l@ gAf Y7|j f
H  yv' i f mi h$|j ff Z l2h g ' f mn h g nmjnmh g i f jph6p
'hsp g  f nq n b hsi f 6 


i f mji i f 6 

'i nm /f g b mYmq
hi g nm g 
 nm g |j f

Captulo 65. Caractersticas Avanzadas de SQL en Postgres


6 f 'i hsYj f [ hnmh g g p f h g  g mh g i f  h g f  p X f i f nmh g i h g Ri g
j f l2h g 'h 6 |j f nmnm g Y  f g mY g i f h g f/g |j f nmh g i g mj f i f nmh g f/g
h fg i f  g+fg i f i h g h f mhq'n fg R g g   f g m g m'nmj f , f f 'm ml f
 f n K bfXf f n f l2p=h! Vnmh fg 'hq l@mh g i f i h g b mj h g  g i h gf O f 
h fg 6hq j h g !h gf[bf l2pnmh g i ffg g+f mq{p=j f i f f 'h b g+f l2
 f
i f h mh|i f n j h mn Vhq g j n ff nVp! jnmh$ p 7 f nm9h l2adi f
f f n
vance.sql
j m
n
 nmhq!

Herencia

fYf l2h g i h g nm g+fg U Ynm gUf  p! n g  hq f f nm g p!  n f g i f nmh V


nm g jn f/g
g fg  i h g R
hg  l2
6Kj ii fg ^6 j mn l f f mn Xnm g+f p! n g i f f m7 f f i i f  f g

CREATE TABLE cities


name
population
altitude
);

(
text,
float,
int

- (in ft)

CREATE TABLE capitals (


state
char(2)
) INHERITS (cities);

 fg f  g hqj'[m g 'mXi f p! n g hqi h g nmh g b mj h g 'l f phqpjnm mh
n ji f !i f9g j6p=i f 3 f/g - n mphi f n)  mj h'l f 'hl f ! fg f 3j mph'
h
i f h g fg p= i f ' g ri f nmhqZ ji{7 m/n f * n mp=hsi f n  mj h|php=j nm mhq
phnmmq'! f/g hq )j mphi f i h g l2
~'
7hi f h g f/g p Xl f h g i f
pj hh  f i f i hn f p f  g mqT[ g nm g+f p! n g f f j b mj h f   g f |j f
l2j fg  V7
|!
j fg ih|p f [ f f f T- sh g fg j'Ynm g+f pj f i f f f i i f mj'h
 m g h  g nm g+fg j'Xh g jn Xpj f i f ' f f f f 'm  hs hqi g nm g m g 'm g
i f j'nm g+f hql2hs hqi g nm g m g ' m g i f j'Xnm g+f g j g i fg f 'i f fg
Nota: La jerarqua de la herencia es un grfico acclico dirigido.

 h [f @f l2pnmhqnm g
j! f f hq g 

j n f 'j f b hqi g |j f nmnm g mji i fg |j H
f fg  g m
ji g Xjn j i f  hsl{ g !
p f/g
SELECT name, altitude
FROM cities
WHERE altitude 500;
+-------+-------+
|name
| altitude |
+-------+-------+
|Las Vegas | 2174
|
+-------+-------+
|Mariposa | 1953
|
+-------+-------+

h h b H
h nmi hp= f '
hq  nmh g 'hql2 f/g i f q
h i g nm g mji i fYg m'Ynmj!Ki g mn g Yp! 
n fgAfg n f/g |j ffg  g ji g Xj'n ji{i f  hHl@ g p! f/g RnmYhq g jn fg
SELECT c.name, c.altitude

FROM cities* c
WHERE c.altitude > 500;
Vm

f j g

+-------+-------+
|name
| altitude
+-------+-------+
|Las Vegas | 2174
+-------+-------+
|Mariposa | 1953
+-------+-------+
|Madison
| 845
+-------+-------+

|
|
|
|

f n 9i fg pj! g i f  f/g m'i mc|j f nm9h g jn Vi f f


nm g nm g+fg |j fHfg /2ph i f  hi ff nmnm f 2nm bf |j!K|i
 hl2'ih g |j f 7 f l2h g i! g j mi h  /Y v   'i
T
fg 'h mi f n
jn|j f h  h g hql2h 

$|j!

Valores No-Atmicos

f nmh g p m'mp!mh g i f nrl2hi f nmh


h l@mh g h g f/g 'h~ph g+ff|fg
g 
nmh fYg nmh g |j f pj f i f  f i f gUf i
i f f b mj h g |j fg+f V f h
|'hi

f nmmh'n fg |j f


fg b mm7&nmh g
fg i f9f n)n f j @f i f
fg i f n
j'hHi f nmh g

f  n

 g+fMg h f  fg hqi g


f nmW f f 'mj 'h g i f nmh g
'i  / ! m'i g hp=h  f

nmh g
 mj
h
mph

 mj h
h g pj f
g jn [h
g  g+f

g i f j'
i f 2hq f
fbf l2pnmh

f mn mq
f g j
gUf pj f

Vectores

h g fg p f l@ f |j f nmh g b mj h g i f j'K g 'm gUf i f mi h g Yhql2h f h fg
l2jn mi ml f g mhn fg i f nmhqZ ji 6h mn f Rj f i f f f h fg i f jn
|j! f
i f nmh g mph g  gUf h2i f mp=h g i f  mi h g ph f nj g j mhyR Vmnmj g b g
j j g hq= ff l2h g
p ml f hHj'nm g+f hqr f h fg i f mph g  g+f
CREATE TABLE SAL_EMP (
name
text,
pay_by_quarter int4[],
schedule
text[][]
);

 Yhq g jn i f [ m f j'6nm gUf nmnml2i   hqCj'i f 'i f n mph



'l f !j4 f h jmi ml f g mhqni f n mph p |j ; f ! f nYjn f p f
g+f f n g nm mh b ml f/g b n)i f n f l2pn f i hHjb f h mi ml f g mhqnRi f n mphl  g  f
i jn f !]
|j f f p fYgUf {nm f 'i g+f l2'n}i f n f l2pn f ihil'h f n

l2h g n
j'h g
$
 !
g &'h f |j f j'i h f l2h g nmh f/g Hj f h f ' f  l2h g nmh g nmh f/g
f b f nmnm fg snmh g9g+f p /l2h g l f i m f hql2 g j g f i~h'hq f fg hs'h fg i g m hH
nm g m g p 9
m
m m
n
 fg  j j g
INSERT INTO SAL_EMP
VALUES (Bill,
{10000, 10000, 10000, 10000},
{{"meeting", "lunch"}, {}});

INSERT INTO SAL_EMP


VALUES (Carol,
{20000, 25000, 25000, 25000},
{{"talk", "consult"}, {"meeting"}});

h g fg j mn

Mi f h l29p f i f f l@m7i nm9h f 'mqHi f f h f/g ; g ih gf j'h


fg i f  Rjr f h i f f n f l f h g Yhql@ f hq f h f l@m'hO f h
$'h Xphi f l2h gf[@f j n
j 7 g h g jn g9g hq f  ]U ml f hsl2h g b l2h g hq
l2h~Y f i f Hj g hqnmh f n f l f h~i f n f h ph f  g Hhq g j n i f j f n
f nmh g 'hql2
f3g i f nmh gf l2p=n f i h g jh g p h g '6l2mi h f f n g+f j'i h b ml f/g b f
SELECT name
FROM SAL_EMP
WHERE SAL_EMP.pay_by_quarter[1]
SAL_EMP.pay_by_quarter[2];
+----+
|name |
+----+
|Carol |
+----+

 g
j! f f hq g jn f jp f f nqph|i f n f f } m l fg  f i f hqi h g nmh gf l2pn f i h g

SELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP;

+----------+
|pay_by_quarter |
+----------+
|10000
|
+----------+
|25000
|
+----------+

p h mqi f jb f h h g j


f l2h g   f i f Yjn
|j! f 
jg n f jp f f n p ml f f l i f nm f '
i i f mnmn p nmh g p ml f
g+f l2'
)l2Z
/phi

Yhq'
f h f g [ g
h g i h g i K g i f nK

SELECT SAL_EMP.schedule[1:2][1:1]
FROM SAL_EMP
WHERE SAL_EMP.name = Bill;
+-------------+
|schedule
|
+-------------+
|{{"meeting"},{""}} |
+-------------+

Time Travel (Viaje en el tiempo)

f hi f9g n
nm7 f g mW ri f h g fg Z //   K    
 X  K H     g f  m g hq fg p fg hml2p= h g hq f6f n
f '
i ml@ f hq f n l2 'hHi f nml2 f 'l@ f hqRj 
hHp! ml f |j f f f ' g f n
m'
h f p=hh f l2phy
 l2
mhq=i g phq f i f 'j f  g Y  f g mY g hl2hnmh g i g p= i h fYg 
Z f g !>|j f
p f @
l f O
m@
l f nhql2ph  l@ f hi f nZZm @ff f n f l2p=hYj'ih g+f i f/gUf/f g mm'j
[ f g h f  j'i hH'h g+f f fg f b f f nmnml2h p  f i f n f l2phq!+0 f
nmh gMf[@f l2pnmh g9f f nq
i f h mh
p l2h mh l2mT
|nl2hl

contrib

Time travel ha sido descartado:: : El texto restante en esta seccin se conserva solamente hasta que pueda ser reescrito ajustndose al contexto de las nuevas tcnicas que
permiten obtener los mismos resultados. Voluntarios? - thomas 12-01-1998.

h g fgMg hph  Xnm[mi f Xi f nm bff f n f l2phyU g hp f l@ f Xj6j g j mhh [ f hq'
g j n g  g m g 7h [f @f l2pnmhqAp f 'hq  nmphnmmq jni f mn 2mji i4i f
mph g j g f i{i f f f /n

 nm g
j! f f h g jn 
SELECT * FROM cities WHERE name = Mariposa;
+------+--------+-------+
|name
| population | altitude |
+------+--------+-------+
|Mariposa | 1320
| 1953
|
+------+--------+-------+

g fg
f l2hql
 f

j f f
g !
h
fg
p


j hql@ ml f ff 'hq  nmc f g mi f n f Z g  hi f mph g cZn


mi rp
f ha g f i l2
|phi m f/g p f  m  j3m f nmhXi f f l2phy-h f[@f l2pnmhq
nmphqnmm2p g ip fg+f f i f nmmji ii f mph g Rj g f ih  f mnm
h g jn 

SELECT name, population


FROM cities[epoch, now]
WHERE name = Mariposa;

i hq'i f

f phqym'i m f nqhl@ f hsi f n f nmh i f n g g f l2

Nota: En los sistemas Unix, esto siempre es la medianoche del 1 de enero de 1970,
GMT.

i'

f  n

i h hih g mn h M
hqn
f
g f[@f l2pnmh g ' g  'h nmXYhq g jn X f m h i f 

+------+--------+
|name
| population |
+------+--------+
|Mariposa | 1200
|
+------+--------+
|Mariposa | 1320
|
+------+--------+

 n7nmh p f i
|j f pj f i f
i f a
n m f 7nmh
h g jn X f

l m'ihp f nqhl@ f hi f nm f 7nmhi f


f f @
p Yf g+f f n g g f l2l@ f  g |j ff nnmh p f
fg nm'h 2 jn)h nmh  hq f nam f nmhi
mh phqi m9' f g+f  f m/i hHYhql2hg

f
i f
f

l2ph fgf nql f 'h nmh


f l@m'i hHp f n'
n
f l2phj mn

i h f mn

Ms caractersticas avanzadas

h g fg 
p h Ug f/f l2j' g   f g m g |j f '
h gUf ' Z g h f fg f j h mnm f nMjn
' g mihh f i hg'mj g j mh g 'j f 7h g i f i d g l f 'mhqi g Y / f g m g9g+f
i g Yj f  h f 6nm j!mi f 
n g j mhHhql2h f
nmXi f n h l2i h

Apndice UG1. ayuda de fecha/hora


Zonas horarias

h g fg i f f f f mh l2mq jnm m f 'p ri f hqi mY mn 7hq'M'h


i f |j f 'hW'Hj g g f l2 fg 'i i f m f  f -
p Vp h ff  Y f/g hnmh$
m
h l2mi f h'i f f l2ph j!i ) n g j f f  j g i hp p
m
h l2 m6i f hq'Xi f f l2phsp - w 
Z u

m/i

f/g
f f nm
h f/f

 >v  y 


v y > 
 Y


A(l

Zona de Tiempo

fuera de UTC
P 

( 

P 



P  

T
X 

P  
P 

  

P  

  (

P  

 ( 

P  

  

P  

  

P  

! 

P " 

  ! 
  

P  ( 
P $ 

  

P $ 

 

P $( 

 *  

P $ 

G+ 

P $ 

, -

P $ 

descripcin
6h Xi f nmjXi f ni mi f
'j f  f nm'i
f
7
K f ' mhq'nqn
m f nm
 g f
6h  ii f 6j f  f nm 7i

6h Xi f 6j f  f nm'i
h Xi ff 'h i~i f
j g b 
n mi f n fg f
6h Xi ff 'h ii f
 j g b nm f  n
6h Xi f nmjXi f niKi f
 j g b nm
6h Xi f nmjXi f niKi f
 j g b nmi f n g j
6h ii f  j g b nmi f n
fg f
6h ii f  j g b nmi f n
 g f
6h Xi f ! jl# i "Mhq' $
i f&%  '
) f nmhqj f  j g b nm
6h
 f
h
6
 f
6h
g j
h
 j g

i~i f  j g b nm
 n
i~i f  j g b nm
 n
i~i f  j g b nmi f n
i~i f7f 'hHi f
b mnmi f nqh fg f

6h
ii f Gpq'"Mhq
i f&% 
'
6h f g 'i [ i f ,h f

./"/

Zona de Tiempo
*=

fuera de UTC
>$ 

descripcin
6h i?Vnmji?niKi?n-@ A ?
i?  jA  nm

)B

> 

C Xi?)DCqnmjYA

 * 

> ( 

C
i~i?  jA b nmi?n
CE?A ?

F

> 

C Xi?nmXGC3A i?&F
m'

 =

> 

C X
i?nmjXi?niKi?n
CE?A
? i?jA  nm

* 

> 

HC
i~i?/n-@I?A ?i?
 jA b nm

J+

>K 

MN "

>K( 

HC L?J 
C LOL?P-@ ?A ?&L?
Q A b Pm

RS

>( 

C L?R UT

V

> 

C L?V 3
L L

WW= 

>( 

C L?P Q  L?P-LK?
W Q E
C XL?P-?A ?

W= -

>Y "

C L?P Q ZL?P-Lm&?
W Q E
C X?/  P

WW

>Y 
>Y "

W Q C3XL?P-WA ?/[\Cq'XL?
% - '
C L?m  ? 
C^] 'G?A

RS "

>Y 

C LOL?RSA "?P

)BW 

>Y 

C L?  ? CL?W Q C3X


L?PG? b C

)BW= 

>Y 

C L?P Q  L?P-LK?
W Q E
C XL?PG? b C

 

>Y( 

V 

>  "

C L?  ?  CL? Q ?Gm


C L?  ?  CIL?
R
7Pm ? 

W

> 

C L?W Q CEXG? b P

=_

> "

C XC :` "P3L?=Aba

= 

> 

C ?A (L [ L?=Aba7cedGf

]3 -

> 

)BW

>  

C L?  ? C] 'G?A+


C L?W Q C3XL?P-?/  C

)BW M 

>  "

C L?m  ? (CL?W Q CEX


L?P3F? b C

)BW

> 

 C'ZL?W Q C3XL?P-?/  C

_@ '

> ( 

C ?A L  L?_C Ug 

W

>  "

C L? -?/G
?PP?A

> 

HC L?m  ? C^L? Q ?Gm

] M

./h

Zona de Tiempo
Wj= -

fuera de UTC
> 

descripcin
C L?P Q  L?P-LmL?P
@ ?A ?L?W Q C3X=

! )D

 

C X m' X=P-L?
! ?/? g  Ak

 

W Q C3X&L?P-@ ?A ?

MN 

 

C L?P-CE?A ?&L?  l mY

_=

eY 

C L?P Q  L?P-LmL?
_? g l C Q LPmL

 =

e3 

C L?P Q  L?P-LmL?
 Pm m

_]3

S( 

C ?A L  L?


_? g l C Q 
LPmL

_ 

e 

C
?A  L [ L?
_? g l C Q 
L PmL

 

em 

nCEo[ peLOL?
 pePmqprmGceVq'L f

W=

sem 

nCEo[ L?P Q  L?P-Lm&L?P-?Abpr?

 tm

sSm( 

! )uv>m
C Q oUA

=

sSw( 

nC3oUx L?P Q  L?P-LxF?qpro:xP

W 

sSw( 

nC3oUx ?AbprxqLxoUp(L?P-?Abpe?

 tw

sSw( 

! )uv>w
C Q oUA

 

sey 

nHC3oUx peLOF?qpeoUxP

)B=

sey 

nCEo:x L?P Q  L?P-LzxL?Px


)DCEqpex{x

 ty

sSy( 

! )uv>y
C Q oUA

)B 

seK 

nCEo:x ?AbprxqLxoUp(L?Px
` CEqpex"{x

t=

seK 

nCEoUx L?P Q  L?P-LxL?P


tx|G}|GC

t 

se~ 

nCEo:x prLOL?P-tx|G}|GC

 = 

se~ 

nCEo:x L?P Q  L?P-LzxL?


Q a3C3q

n=

se$ 

nHC3oUx L?P Q
 L?PLx?q
nx g x"  Px Aba7x

 -

se$ 

nCEo:x ?AbprxqLxoUp(L? Q a7CEq

 n 

sS"7 "

nCEoUx peLL?  Px"Aka3xsenx g x

  

se3 

nCEo:x L?  PxAba3x?qpeoUxP

_

seG "

nHC3oUx _C ` ?

RS= M

sS"Y7 

q?x L?]3?|G
x
Reqpe?oUqx|GCEqxP@I?Abpe?

W

./"

Zonas Horarias Australianas

xA CEqxA
CEoUxoUxA Q AbpeoUxPxqxA BA Q A  x"o:xqpr?A L?L?qC ` qx"| Eq| Q ?qpexqu|GCEq Q q
| Q oUxprCL?&PxZprC3prxPLxLvL?Px"A8CEqxA
CEoUxoUxAL?&PxZprx3Px L?&3Ab Q ?LxZL?&PxA8C3qx"A
CEs
o:x"o:xAL?8tC3Abpr7o?A:nx"LC3A| CEq|GprC3A L?L?qC ` qx|G3q| CEq^CEqxACEoUxoUxA?qI| C ` q
L?}qLxA ?qPCEA8WAbprxLCEA % qLC3Ab

CST EST
7PxICEX|G3qL?P|GC ` XjPxLCEo % W  % '  R  _"' % W ?Abpexx|Gpr(x ?qpeCEq|G?A

CST
Ab?qpr?oUXo?prxoUxqAk Q ?qLCIPC3A8|GC3q7?qCEA Q AkproUxPxqCEA
EST

7e e\383UUe8  eU"S83Ge7U"


Zona Horaria

 

Desplazamiento desde
UTC
> 

W 

>( 

Descripcin

3? ` XCWAbp T qLxo?qproUxPL?


Q AkproUxPx
3? ` XC^WAbp T qLxo@IoU?qprxP
L? Q AbpeoUxPx

Interpretacin de las entradas de Fecha/tiempo

CEA peXjC3AZL? l ?|Gxpr? ` XCAbC3qpeCELCEAZL?|GCEL}|GxLC3A Q AbxqLC Q qN|GC3q Q qpeCL?Io Q prqxA


|GC ` Q q?A
UeUU+Ge3Oe8+83Gbee
^txoUpr?qLCPx|GxL?qxL?F?qpeoUxLx?q ` Q ?Abpro:xA |GPxAb}| x"qLC| x"Lx Q qC L?PxA ` xo|GxA
| C ` C|GxL?qx"pr? ` XCEC3qx&C3oUxoUx"Cq ` ?oUC
x

EPx ` Q ?AbpeoUx |GCEqpe?q?&LC3A\X Q qpeCEAce  f+?AkprC?A Q qx|GxL?qxL?pr? ` XC

AbjPx ` Q ?Abpro:x | CEqpr?q? Q q Q 3qcesefe-3xoUoUx ec feEC Q qX Q qpeCce fe-?AkprCO?A


Q qx | xL?qxL? l ?| x& Q ?&X Q ?
L ?pe?q?o?P3qC ` 3
o?&L?P ` ? A

Y

|

(Px ` Q ?AbpeoUx?AAbC3Px ` ?qpe?Zq Q ` oU|Gx-?qprCEq| ?A?AF| Q xP Q ?oUxL?Z?AkprxAFCEXs


| CEq?A Q q|Gx ` XCOAb?q| PPC Q q l ?| x |GC3q|Gxpr?qxLxR @ sS~"yIcSX\ ?7$"$$"G
XxoUxWq?oUC L?P-"$$$fjCIpe? ` j
X CceX8?7"mwyXxoUxm w "yf

jPx ` Q ?AbpeoUx|GC `  ?qx^|GC3q Q q ` xAce>fC Q q ` ?qC3AcS<sSf(?qpeCEq|G?A&?AC


Q 
q x C3qx&C3oUxoUx C Q q|Gx ` XC?AkX?| zxP

-Px ` Q ?Abpro:x ?A Q qx|GxL?qxL?pr?peCE| C ` XxoUx&|GCEqOXjC3Ab3P?A\| x"L?qxA


xnx|G?o Q q3Ab Q ?Lx3qxoUxF?qPxFprx3PxL?|GCEqA Q PprxL?8Px ` Q ?AkproUxXx"o:x|GxLx
fe"Lx"^ceX8b?7
fe ` C3qprvceX8b?3
f+
| x"L?qx ?AbX?|GxP-ceX8b?7
Thursday
January
C^qC3Ab? g CEoLOceX8?7 ftoday

on

tCEq?PCEA87xPCEoU?A\L?P-|Gx ` XCIPx ` xAb|GxoUx&L?3p(XxoUx&PCEA|Gx ` XCEA:tCEo?Ur? ` s


XPC3XCEq?Hx{CE ` ?AbjLzx^XxoUx
7xL| CEqxP ` ?qpe?^C3oUx ` q Q peC7Ak(Ab?s
today
Q qLCEAXx"o:x

now

(
 qCPC?q| Q ?qpro:x"-x|G? Q qx 3Ab Q ?Lx3qxoUx Ab ` Pxo8?qOPx prx3PxL? | CEqs
A Q Pprx XxoUx?q|GCEqpeoUxoPx ` Q ? AbpeoUxxPx CEqxCEo:x"o:x

|

3qCIPC?q| Q ?qproUx"Pxqx Q q?o:oCEo

x ` Q ?AbpeoUx ?A Q qq ` ?oCC Q q|Gx ` XCIq Q ` oU| C

./

x

7x
` T AL? mZL3peCEAbEAbqCAb?xP?LCH| CEqXCEAbpe?oUCEo:Lx"LCEpeoCH|Gx ` XC
L?IpeXC l ?|GxE?qprC3q|G?A PCqpr?oUXo?pexo T | C ` C Q q l ?|Gx|GC3q|Gxpr?qxLx"\ce?7
fFC3q~vyL3prCvAb?Iqpe?o:Xo?pexI|GC ` Cvx{CE ` ?Ab7OLx ` ?qpeoUxA
Q ?|GC3qKwL3peCEA Ak?qpe?oUXo?prx|GC ` Cx{(C3"LzxL?P-x{CE"oU?AbX?|Gpr(x ` ?qpe?3
19990118

Px ` Q ?Akpro:xHpr?q?^HL3peCEAZ Q qBx"{CxAbLCL?| CEL}|GxLCE?qpeCEq| ?AZAb?


qpe?oUXo?prx|GC ` CILx&L?PEx{C

|

3?A `T A8Pxo3CI Q ?&LC3A\L3prC3Ab?qprC3q|G?A8Ak?qpe?oUXo?prx&|GC ` C^?P-x{C

L -?Abp T ?q ` CELC l ?| xW Q oC3X?xIAb-?P-|Gx ` XC LxqCIx&AkLC P?zLCpeCELx7x


vAbj?Pj7xPCEo8?A `T AX? Q ? {COC Q x"PjxI?qprC3q|G?AAb? qpr?oUXo?pex|GC ` C Q q
Lx
?7

?P|Gx ` XC ` ?AqCxIAbLCOP?LCprC3Lx"(zxvAb?P((x"PC3o8?A `T AXj? Q ?{CC


 Q xPE Q ?&"Y"?qprC3q|G?A\Ab?&qpe?o:Xo?prx&|GC ` C Q q ` ?A

?P| x ` XCvLzxqCxAbLCP?LCpeCELx7x"3Ab?Pj7xPC3oF?A `T AXj? Q ?{CC


 Q xPE Q ?&""?qprC3q|G?A\Ab?&qpe?o:Xo?prx&|GC ` C Q qLx

EqCEAk?&qpr?oUXo?prx&|GC ` C Q qx"{C

8Ab?vx?AbX?|G}|GxLC  xq Q Px?Px"{CDL?AbXPx"x Q qCDxP8x"P ` x|G?qxLCqpe?oUqC


cSqCIx^x"{C|G?oC ?qH?PE|GxP?qLx"o:C ! o?3C3oUxqCEXj?oCIq Q ` o:|Gx ` ?q(pe?&  D?A8?PEx{C
| ?oUCEf
w -qC Ab?x?AkXj?|G}|GxLCEAb-?P|Gx ` XjCIx{C pe?q?LCEA L3peCEA L?PCEq3p Q L"?qpeCEq|G?A

xb Q Abprx ` CEA^?P x{CxOmL3peCEA  ?P |Gx ` XCqC?A `T AIX? Q ?{C Q ?vK?qpeCEq|G?A
A Q ` x ` C3A\YAkEqCEA Q ` x ` C3A8$
m

Sugerencia: Los aos Gregorianos 1-99AD pueden ser introducidos usando 4 dgitos
precedidos por ceros (p. e. 0099 es 99AD). Los tres dgitos tambin son aceptados
como un ao bajo muchas circunstancias, sin embargo dependiendo de la posicin
la cadena numrica puede ser interpreta en lugar de un da.

Historia
Nota: Contrido por Jos Soares 1.

WP3Lx J Q PxqC leQ ?q7?qpex"LC^XCEo ?o Q LprC l oUxq| AFJeC3Ab?XjOJ Q Abp Q A |GxP3?o cewmseyf
XoC33x3P? ` ?qpr?^| CE3?^A Q qC ` 3o?L?PXxLo? |GxP3?or7?P?o Q LprCpexPx"qCJ Q P Q A x?Akx"o
|GxP7?o8cS"m~m"sS"ww~"fbkPCEAxAbpeoU3qC ` CEA&pr?q?qv Q ? Q Abxo\?P(X?oUCELCJ Q PxqCHXjxo:xZxAb3qxo
Q qq|GCDq ` ?oCD|GxLxLzxL?AbL?vL?vWq?oCL?vmK" 3WAkprC?A^?P8PPx ` xLC=x
J Q PxqCceJS=f"Je=L?Ab7qxYmC3oUxAbjL?P ` ?LC3LzxH L?PL?^Wq?oCL?HmK"^
xAbpex?P ` ?LCELxuL?P-YWq?oCm"K& I

= x^J Q PxqCE^?A L l ?o?qpe?I Q ? ]7?| x^J Q Pxqx(WP|GxP?qLxoUCJ Q PxqC leQ ?IqpeoCEL Q |Gs
LCXC3oJ Q P Q Ax?Akx"o\?qmw ] Q ? Q AkxLC|GC ` q ` ?qpr? xAbpexI?Pw~YELC3qL?XxAb?A
? ` X?xoCEq^x| x ` 7x"o:Ab?xP|GxP?qLx"oCIZo?3CEo:x"qC?q^?P| x"P?qLxoUCZJ Q PxqC3?Px{CproC3s
X|GxPj?A&xXoC3" ` xLx ` ?qpr?I|GC ` COyw -m^LzxABy"w7 YwILxAWAkprCvLx Q qN?oUoC3o8L? Q q
Lx ?qOxXjoUCE" ` xLx ` ?qpe?Y"~Lx"AbWP3?oUoC3ox| Q ` Q PxLC^L?P3|GxP?qLxoUC ` CE(Hx"P7txXx
Zo?3C3oUCH\ReRSRx o? l CEo ` x"o ?P|GxP?qLxoUCHx|GC3oL?|GC3qvPxAqAbpeo Q |G| CEq?AL?P(CEq| PCL?
-o? qpeC

"

WqH?PE|GxP?qLx"o:C Zo?3C3oUxqCE?PEx{CproC3X|GxP-?A8xXoCE ` xLx ` ?qpe?&"yw>v"KH m"LxA


^yw3 YmYwFLx"A<Ak| CE3?8xXoC3 ` xLx ` ?qpr?88x{CEAXjxo:x?P"x"{C peoCEX|GxPAb?L?AbXPx|G?
Q qLx&|GCEqOo?AkX?|GpeC xP-|GxP?qLxoUC ZoU?7CEoUxqC
xxXoCE ` x| Eqyw>K3-m" ?Abpex PCE3o:xLx ` ?Lxqpr?Kx{CEA3Ab?AbprC3AF|GxLx&mx{CEAb
Q Akx"qLCIPx"A8Ab Q ?qpe?Ao?3PxA
xLx&x{CL7Ab3P?XCEom?A Q qx{CI3Ak?AkprC
zq? ` 3xo7CE"|GxLx&x"{CL7Ab7P?XC3oqC^?A Q qx{C3Ab?AbpeC
zq? ` 3xo7CE"|GxLx&x"{CL7Ab7P?XC3om?A Q qx{CI3Ak?AkprCL?AbX Q A8L?peCELC
=?&?Abpe? ` C3LCEK~""Y"^Y"Y&qCAkCEqx{C3A\3Ab?AbpeCEAGX?oCIy"Y"
YmIAbCEqNx"{C3A3Ab?AbpeCEAtCEo?P|GCEqpeoUxoUC33?q?Pj7?:+CO|GxP?qLxoUCJ Q PxqCAb3PCPCEAx{CEA
L7Ak3P?A8XCEom AkCEqx{CEA83Ab?AbpeCEA
xI Q PxXx"XxPjL? ]3?3o?oCL?Pj"w~YIL?| o? prv Q ?IAb? L?3x Q prxoLzxA&xI@I|Gp Q 7o?ZL?
w~Yx"Ak Q ?F?PwL?F@I|Gp Q 7o?L?3?Ab? Q oq ` ?Lxprx ` ?qpr?FL?AbX Q AL?Pm&L?@I|Gp Q 3oU?3
WAbpeCAb?ICE3Ab?o:7?qRepexPx"(tCEPCEqrx7tCEo:p Q 7x"P(WAbXx{xCEA CEpeoCEA XxzAk?AFxpeEP|GC3APC
Ab Q ?oCEqBXCE|GCL?AbX Q AbjX?oCPC3AXx"Ab?AZtoCEpe?Abprxqpe?AZAb?o?AbAbpe?oCEqBx"P|Gx ` 3C3PCEA
XxzAk?A&CEoUpeCELC3CEA3o:?7CEAq(Cv|Gx ` 3xoC3qx"Akprx Q ?IqCv? ` X??Abpr? Ab7PCxo? l CEo ` x
leQ ?^CE3Ab?oU(x"LxXjC3oZoUxqBVo?pex{xHA Q ACEPC3qxAceq|GP Q LCPC Q ?x"C3oUx?AZ f ?q
KwYk Ab7?P(Y ?Xpr? ` 3o?KwY leQ ?Ab? Q zLCXjC3o\?P7m ?Xpez? ` 3o?&KwY3 WAbprCH?AFPC Q ?
pe?q?
L?PC3A\AbAkpr? ` xA\ _HRSBXjoUCEL Q |G?qLC PC^Ab Q ?qpe?3
cal

% cal 9 1752
Septiembre 1752
S M Tu W Th F S
1 2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Nota: SQL92 dista que Dentro de la definicin del fecha/tiempo literal , los valores
fecha/tiempo estn restringidos por las reglas naturales para las fechas y los tiempos
acorde con el calendario Gregoriano . Las Fechas entre 1752-09-03 y 1752-09-13,
aunque se han eliminado en algunos pases por el "fiat" Papal, conforme a las reglas
naturales y son por lo tanto fechas validas.

= l ?o?qpr?AF|GxP?qLxoUC3A(xqvAbLCHL?AbxoUoCPPxLCEAF?qO(x"o:CEAP Q 3xo?AL?P ` Q qLC3 ` Q | CEA


XoC3|G?L?qL?PjAkAbpr? ` xZo?3CEo:xqCtCEoF?:+? ` XjPC33CEA&Xo:q|GXCEAL?Pj|GxP?qLx"o:CqC
X Q ?L?q^o? ` CEqpexoUAb?xAbprx&?PAb3PCmI:xP?3?qLx&L| ?F Q ??PW ` X?oUxLjCEon Q xq3L
q7?qpe?P|GxP?qLxoUC ?q YyKF I<xF3?qpr?L?\PxF\?X3P|GxFL?8qx Q Abx?P|GxP?qLxoC
Zo?3C3oUxqC XxoUx Q AkCI|G(PbWP-|GxP?qLxoUCIFqC^?A Q pePxLCIXx"o:xPx"A\}?AbprxA

Notas



B+CEAk? A l ?oUx|Gxo:prx |bC `

Apndice DG1. El Repositorio del CVS


WP"| EL3C leQ ?q(pe?8L?tC3Abpe3o?AAb?xP ` x|G?qx xL ` qAbpro:x Q prPxqLC?P"AkAbpr? ` x&L?83?Abpr3q
L?|GEL7CI
` prCELC3Ab3 xq3q ` C Q X Q pePx3P?AXxoUx|GCEXxo\?P T o:3CEP
nxxP ` ?qC3ALC3A
L?P-|GEL7CIL?F 
L ?AbL??P-Ab?oU(LCEoL?tC3Abpr7o?A\xA Q `T Q qx PCE| x"P

Organizacin del rbol de CVS


Author: Escrito por Marc G. Fournier 1 el 1998-11-05.

Traductor: Traducido por Equipo de traduccin de PostgreSQL 2 el 2001-03-14.

ce_kL?P3GRSA ` x?P(@ P?xx ?Ak|GoUpeC Q qO?Abp Q X?qLCHLC3| Q ` ?qprCPPx ` xLCe z G :G U


U G\eUG<<G  ` Q l x|GPLqprqLo L Q prPxor Q FX Q Lo Q Ppexo ` Q
qpeoUbxqpe^XxoUxPE Q bEPBLkq Q prPxo Q qD|GPqprLH L ` 3L3q oU|
PEprx ` 3 q| 3Px"
 `
3oUxqPxpro:x"L Q | |GEq"q^X Q LIXEo ` q38Lo| ` qLxoUP
ZX Q Lq|3qb Q  oq^ Q X T 7qxXoU3qx"P
- LbLP Q XLqLEbPLo|Gprx ` qs
pex
P 3PxkXx lSQ  qpe | ` ]3qOLPx_bLP- f
WP"| ` xqL 3 Gj3 peq Q q qL|GxL3ojcex3fe
G Q FP8Xo ` pr8| ` XoE3xo Q qx
-r
|GoUpex&o(bEqHL Q q ` EL Q PbWbprqL|GxLEo l x|GPprx&
prx ` 3 q"XEoUr ` XP3"o| Q Xo:xo
Px leQ qpr Q l Eo ` x3x"q^Px&oPxbF LP ` 3L Q Pzpr|q^| Q xP Q o ` ` qp leQ p Q o
$ cvs checkout -r REL6_4 tc

Wbp Q ep P"x3P3XEoFUr ` XP33bxP Q qxb Q o:xI Q x Q qoUoEo8c Q q Q 3fqbx


oPxb" Q bprLvq\|GxXxLq|EqpeoUxoUPqPx |EXxLproUx3xbx|Gp Q xP<

Sugerencia: Tambin puede usted comprobar un mdulo conforme era en cualquier


momento dado utilizando la opcin -D.

Q xqL pr Q pr Q bpeL `T 8L Q q}|Go |3qPx `  `


x pr Q prx"X Q L Q bpeLXqbxo
qvPzxpe Q pex"| ` Q qxIPqx | Q oU(x Q o|EoUoU Q qx ` xpeoULq ` 3oL }|Gs
o3&| 3qpro:x^q ` oOLIo7b3q 3x ` E Q Iprq ` E w^}|Go3&|3qNPx&b Q qpr
oEb 3q
fich1

fich2

1.1
1.1
1.2*1.2
1.3 \- 1.3*1.4
\

fich3

fich4

fich5

1.1
1.1 /-1.1*
1.2
-1.2*1.3
/ 1.3
1.4 / 1.4
\-1.5*1.5
1.6

<-*-

TAG (etiqueta)



LEqLPx pr Q prx

&xo T o l o q|Gx x}| "sS( Y}|GYse ""pe|

TAG

Nota: Para crear la rama de una nueva release, se emplea de nuevo el comando -b, del
mismo modo anterior.

bpr ` 3LEXxoUx|GoxoPxoPxb&7y m|G&PIkz Q qpr7




$ cd pgsql
$ cvs tag -b REL6_4

P| Q xP-|Goxo T Pxpe Q pex Pxo:x ` xXxoUx&P T oUEP-\WW W



EoUxGXxoUx8x Q PPE|EqIx|G|GF Gprx ` 3
q kq| PPto: ` oE | o LE Q 7
LoU| s
pEoU3b WW 
W F \W_-L l Eo ` xF Q q ` "| P Q bpeLPELE |3qprq Q x|G3q
x3x
cd RELEASE
cvs checkout -P -r REL6_4 pgsql
cd ../CURRENT
cvs checkout -P pgsql

P Q vLxo T P Q 3xoxLE T o:EPILOLo|GpEoU3b

XxoUpeoLvbpe ` ` qpEF p ` x"o T P\|EqproRELEASE/pgsql


EPL Q oUx ` xLCURRENT/pgsql
P\oXEkp3oUDb
q| Q qpro:xHqB| xLx T o:EPL^Lo|Gp3oU3bXjo ` peo T x|Gp Q xPx"| EqqLXqLqpe
L|GxLx T oU*
EP

Q bprL U !z bp T peoUx3xb+xqL qIP T oU3P leQ qpr


T 7x"P pELZprxP| ` Z ` Xxs
` 3xqprpr Q prxqLZPxo:x ` xLPxFoPxb7CURRENT
R l * Q xo\ !z g Eo:a3q+Eqpe
 Q o|G
proU Q Q kp(L7oU3peqx 3 l 3o g &bprxo:prLOprx37qoPxb&7oUxqCURRENT
|G

q xZ7 Q Q bpeLoxPx P7|G|Ga Q pce Q xPxLE| ` Xo33x|GEqLb| x"oU3xfq|GxP(q
Q qxoUx ` x
$ cvs checkout -r REL6_4

pEL PZ Q Q bpeLHx"7xFLqpro L8bxFbpeo Q |Gp Q oUxFL8Lo|GpEoU3b8obpro:q38xbxoUx ` x


Q bprLvxXP|Gx Q qXxpr|GHxbxbpro Q |Gp Q o:x LLo|GpEo:E ^x|G Q q
cvs commit

`  qpro:x Q kprLkZq| Q qpro:xLqproHL PPxP(Xx"pe|Gvbx"XP|Gx xbx oUx ` xZ U z! xbx


o:x ` x

Tomando Las Fuentes Va CVS Annimo

Q boUx Q bpeL ` xqprqoUbXoE ` xPx leQ qpeZx|Gp Q xPL Q qx l 3o ` xOo Q Pxo
XELo:zx Q bprLDo&x Q b|Gxo:PEZxq Q bpeoXoEXbo:7LEo& Q prPxo&qpEq|G
XxoUx&o| Q Xox"oPx\x|Gp Q x"Px|GEqLpe ` Xqpr ` X

h-,

0213

3+

_H|Gbpexo T Q kprL Q qxv|EXxvPE|GxPLF ce43q| Q oUoUqp8o:bEq43qpro3P 3bpe `


 bpr ` xOLHEqpeoEP LoUb3qI43q| Q oUoqpesek ` Q Pp T qxbsefe Q X Q L Q bprL
p ` xoLprpeX8[ ggg |G3| P| | ` %56| Q xP Q o7EpeoUxOLo| |GEqD Q xo|b7 l pes
g xoFZ_OU|Gp Q xP ` qpeFoU| ` qLx ` E Px&7oUkEq^ "cePx `T o|GqprFq^P ` Es
` qp L&b|Go:3oUf9 8 Q |G
Ebbpe ` xprqq Q qx (o:bEqOo| qpe&L
qbpexPx"Lx
cvs
X 3oL l | p


Ynx"7x Q qx&|Eq3qceP33qfq| zxP3x"P3bo:7LEoF


$ cvs -d :pserver:anoncvs@postgresql.org:/usr/local/cvsroot login

\P8Xo Q 
q prxo T Q Xxb g 3oLGqpro3L Q |Gx:
< 3P q| kprxo T x|Gojbp
Q 
q x7 X Q  PXjxk g EoLbxP ` x|Gqxo T postgresql
q
Gq Q Lo|GpEo:LFL l |Gp
.cvspass
cS
Q o ` 
L o|GpEoU7f
;b|Gxo Q Px leQ qpe\L&tEbpe3o
cvs -z3 -d :pserver:anoncvs@postgresql.org:/usr/local/cvsroot co -P pgsql

P^| Q x PEqkprxPx Px lSQ  qpe\L&tEkpr7oq Q q Q 3Lo|Gp3oU


LP3LoU| pEo:Iq
pgsql
P- Q Q bpeLk&q| Q  qpeoUx
Nota: Si tiene usted una conexin rpida con Internet, puede que no necesite -z3, que
instruye a CVS para utilizar compresin gzip para la transferencia de datos. Pero en
una conexin a velocidad de modem, proporciona una ventaja muy sustancial.

WkprxZLb|Gxo-x  q|GxP7 Q qvX3| `T 8Pqpex Q b ` XP ` qpr Lb|Gxo7xo Q v


q }|Go
| 3q Q q ` EL ` 
L OY~ ~.<X Q LOp ` xoUbvxPoL L3oLvm ` q Q pE(x
tar.gz
(
qpexb+x^LIF 
q b ` Q  bpro:x^x"kprx^ Q qpeqpex Q bpeLBx"| p Q xPxoq Q 7x `  qprIP
}|Go
m

 ` Xo& Q Z Q oUx Q bprLx"| p Q xPxoPxFPpr ` x leQ qpeLP7 xP3 Q 3LoU| s


pEo:
" ^Ur| Q pr
pgsql

$ cvs -z3 update -d -P

WkpLk|Gxo3xo T b3PPE |Gx ` 3EZXo3L Q G| LE&LbLIPxHPpe ` xHx|Gp Q x"Px|G3qNoxPs


Lxt Q L Q bpeLx"| p Q xPxoqDxXqx Q qE ` q Q p(bpezX|Gx ` qprq|GP Q B|3q
Q qxPqx L7P 3|GLx"LOL ` EL `
w#t Q L Q kprL `  ` xEoUo:xoUb^xP*L^pr|GPEj|GoxqL Q q}|Go
q Q
.cvsrc
Lo|GpEo: LL l  |Gp Q &|3qprq3x
cvs -z3
update -d -P

Wkp Q ` qbpeoUx Px'3X|GEq


x pELEPE| ` x"qL38xPE| 7bHPx=3X|GEq

-z3
-d -P
xP-| ` x qL|G( Q XLxpr7
3oUx"b ` XP ` qpe&prq& Q pe|GPx"o
$ cvs update

XxoUx&x|Gp Q x"Pxo Q \}|Go3

h"4

Atencin
Algunas versiones anteriores de CVS tenan un error que llevaba a
que todos los ficheros comprobados se almacenasen con permisos de
escritura para todo el mundo (777) en su directorio. Si le ha pasado
esto, puede usted hacer algo como
$ chmod -R go-w pgsql

para colocar los permisos adecuadamente. Este error se fij a partir de


la versin 1.9.28 de CVS.

 X Q L&x"| o Q q ` Eqpe(qL>EpeoUx8|EbxbLPEpeXL&o| Q Xo:xoo7kEq\Xo7x


LPE lSQ qpeLZt3bpr7oqP Q 3xoL PxIPpr ` x^7oUkEqL Lbxo:oPPtxo:x `T qs
l 3o ` x|G3q|Eq Q Ppr P ` xq Q xP3 Q (q&|3q - ` o&Px LE| Q ` qpex|GEqvqPzqx
qHprpeX8[ ggvg | 3|GP| | ` ?U

Tomando Los Fuentes Va CVSup


q xxPpeo:qx"pe7x&xP Q  L x"q3q ` ^Xjxo:xo| Q XoUxoP T oUEP el Q qpeLt3bpr7o 
 Q X8:F Q X leQ Lbxo:oEPPxL XEo)@EqOtEPbpeoUx#A3Xx"o:xLbpro: Q  ooXEbp(oUE8F
3pro T o:
EP\L}| o3\XxoUx&WPEXoE7| pI]3oV B

q x7q(pexb+x ` XEoUpexqprIL Q prPxo Q X Q IX Q LoXP|GxoL l 3o ` x}|GxP
oXEbp7o: U q Q kbpr ` x^PE| x"P3Xo ` peqL Q qx|G|GOP
3|GxPo T XLxPx2EXs
o:x"|  EqLH|G7Z| `

C peoUxZ7qprxbrx" q|GP Q 7qbq| oEqx|GEqo T XLx^xP


Q qH}| qpeXjoEp3|EPLproUxq l oU q|GxL| xLqx\ Q
bo:7
L EoL
t Ekpr3oU\Llog
3LIx diff
b3P Iq7xP E|Gx ` 3 E8LkLPxPpe ` x x"| p Q xPx|3q

Preparando un Sistema Cliente CVSup


o Q oqL3 T oxXxoUxZ Q F Q XX Q Lxx|Go\ Q pro:x"7x Q qvoUX3bp3oUP3|GxP
LF cb ` XP ` qpe Q q T o xvLHLo|GpEoU3 b Q kprLkp T p ` x"qL Q qx l EpN}rx
cekqx"XkEprfqOP Q 3xo\L Q qoX3bp3oU37x `T Fx3xbEf T ox PE|GxP(L xqEpex"| EqFL
T oU3P-LLo|GpEoU3
 Q X8:Wbprx8
L 3 T ox"8X Q LqH|3bpeoqP `  `

|GLx L3qLZ Q o Q bprLN|Eqbo:7xo8 Q |3Xx P3|GxP(LPoXEbpEoUOF GWq Q qL


q Q bpeoEkbpr ` xb"o|Gqpr ` qpr ` 3 qbpex"PxL Q qHoX3bp3oUq
Xs
o&xqproU Eo ` qpr\P&peqzx ` E3xb Q q T oU3PLLbxoUoPPL tEkpr7o/home/cvs/
q

/opt/postgres/cvs/
Lbx Q bpeL ` xqprqo Q oXEbpEo:Iq
q|GP Q 3x


/home/cvs/

setenv CVSROOT /home/cvs

q Q }|Go
/ Q qxPqx b ` Pxo8q Q }| o
.bashrc
LqL L& Q k.cshrc
PP

-LXqs

.profile

L3 q|GxP"xoFP T o xILPoUX3bp3oUvL


qx7 Q IkI}+x^ =CC 7k
cvs
X Q LFx|Gobp^|Eq Q
q q|| ` xqL
$ cvs init

peoUxFP | Q xPEL3oUx Q kprL(o\xP ` qE Q qLo|GpEoUHPPx ` xL


| Q xqLPkpr
CVSROOT
P-Lo|Gp3oU  =CCI

h-D

$ ls $CVSROOT
CVSROOT/

Ejecutando un Cliente CVSup

oU} Q Q
bq| Q qpro:x^q Q Xx"pe7qNPx ` x*EoUx^LPEZbkpr ` xb(X Q L
Q kprLOx"| okpcvsup
pr|GPxqL
which cvsup

WqpEq|Gbb ` XP ` qpr&:+| Q pe

cvsup

Q pePx"qL

$ cvsup -L 2 postgres.cvsup

LEqL
x|Gpr(xxP Q q3 ` qbxb+L bpexp Q XxoUx Q X Q Lx Q kprL ` 3qp3oUxo8P
Xo 33o E-L
L2 Pxx|Gp Q x"Px|G3qE
&P x^o Q prxPq ` 3oI Q Q bpeL
xLx
L x Q }|GoIL|Eq} Q o:postgres.cvsup
x"| EqL Q X8
Q P ` EbpeoUx ` E Q qH}|Go3L|3q} Q oUx|GEqHL Q X ` 3L}|GxL XxoUx Q qxqbs
pex"Px| EqHbX| z}|Gx^ Q ` x"qpeq Q qHoX3bp3oUF PE|GxPE| ` XPpbcS_NLP-b*3
xOpro:x"L Q | oP E | ` qprxoU3Ix ` ELBLHLE| Q ` qpex|GEquLP}|Go#CI37x ` qprjq
peoUxL Q |Go P 3| ` xq
L EkP D Q X Q LvLxo Q qx ` x3q x"P*
D| ` XP|GxLxXo `
Xxo |  Q ^X Q LI(x"PoPxHXqx"7oUxL |Go ` E Q Z| ` qpexoU EZxH
L 3|Gse
X Ekpr7ok3Ps
b bXx"Pq Q j bf
# Este fichero representa el fichero de distribucin estandar de CVSup
# para el proyecto de ORDBMS PostgreSQL.
# Modificado por lockhart@alumni.caltech.edu 1997-08-28
# - Apunta a mi foto fija local del rbol fuente.
# - Recupera el repositorio CVS completo, y no slo la ltima actualizacin.
#
# Valores de defecto que se aplican a todas las recolecciones.
*default host=postgresql.org
*default compress
*default release=cvs
*default delete use-rel-suffix
# activar la lnea siguiente para tomar la ltima actualizacin.
#*default tag=.
# activar la lnea siguiente para tomar todo lo que se ha especificado antes
# o por defecto en la fecha especificada a continuacin.
#*default date=97.08.29.00.00.00
# el directorio base apunta a donde CVSup almacenar sus ficheros de marcas.
# crear un subdirectorio sup/
#*default base=/opt/postgres # /usr/local/pgsql
*default base=/home/cvs
# el directorio prefijo apunta a donde CVSup almacenar la/s distribucin/es actuales.
*default prefix=/home/cvs
# la distribucin completa, incluyendo todo lo siguiente.
pgsql

h"

#
#
#
#

distribuciones individuales contra el paquete completo


pgsql-doc
pgsql-perl5
pgsql-src

WPb Q qpe8}| o&L|Eq} Q oUx|G3q L F Q Xb Q 3o qP"boU7LEo l prXL t3bpr7oF


Lb| x"oU3xo T q|Gx ` qprPx l EpI}-+x x|Gp Q x"P
# Este fichero representa el fichero de distribucin estandar de CVSup
# para el proyecto de ORDBMS PostgreSQL.
#
# Valores de defecto que se aplican a todas las recolecciones, a todas las descargas.
*default host=postgresql.org
*default compress
*default release=cvs
*default delete use-rel-suffix
*default tag=.
# el directorio base apunta a donde CVSup almacenar sus ficheros de marcas.
*default base=/usr/local/pgsql
# el directorio prefijo apunta a dnde CVSup almacenar las distribuciones actuales.
*default prefix=/usr/local/pgsql
# distribucin completa, incluyendo todo lo siguiente.
pgsql
#
#
#
#

distribuciones individuales contra el paquete completo


pgsql-doc
pgsql-perl5
pgsql-src

Instalando CVSup

 Q XbX Q Lx"L Q o:o| ` I}|Go3 leQ qprb3qxoU3 Xo|Eqbpeo Q LEG \t8D[L


q Q W ` Q |G `T l x"| P Q pePx"o Q qB3qxo: Q H|3qbpeo Q +o:P
NxXxoUpeo&LPE lSQ qs
pek3Xjo:q|GXxP ` qpeIXEo Q P| ` XPxLEo8HEL Q Pxse ` Q v| xXjxIXoOpex ` 7 q ` Q
*3P Q ` 
q EE7"b&q|GbpexXjxo:x&Px|3qbpeo Q |G|G3q8
UGe+Ge3OUee>I\eS38

021+3

t Q L Q bpeL Q peP"xoFPE 3qxoUEbpeq Q qxXPxprx l 3o ` xXxoUx Px Q IPE 3qxoU3&b


x3xqHo ` prLIxPEboU7L3o l peXLt3bpr7oJLK+IkEkp T Q bpeL Q prPxqL ]3oUV XxoUx
Q qxx"LxXprx|bEqOceXEo:prq7f
P- Q &F Q Xbp T LbXEq3P&| `
Nota: CVSup fue desarrollado originariamente como una herramienta para la distribucin
del rbol fuente de FreeBSD. Est disponible como una adaptacin, y para aquellos que
utilizan FreeBSD, si esto no es suficiente para decirles como obtenerlo e instalarlo, les
agradeceremos que nos aporten un procedimiento eficaz.

hh

WqZP ` `  qp L\b|Go:3orkb LbXEqq 3qxoU3XxoUx\PXx-o Q ymb~yV knttvnt s


 YE8DRSt oUk~"y-Pq Q seP3| w"k~"y-Pq Q se7P3|G Xxo| EPxoUbGxqL Xxo| Q qC
L Q o:x Pj}| oprxo|EqPE3qxoUE&Xx"o:x
c
qOb o Q o XxoUx
ko Q qG| PqprfxL| Q xLXxoUx Q XPxpex l 3o ` x cvsup cvsupd
x

Q pePx Q kprLv]3oV 
 qbpex"P&PxxLxXprx| EqL Q X8

prq Q bpeLMEpro:x8XjPxpex l Eo ` xkP3|GxP|G\Lb|Gxo Q PE3qx"o:Ex"XoEXxLE


LbLPEboU7L3o l peXOLt3bpe3o JNJ
Y ` Xo Q 38P}|GoZprxoXxoUx7oU}|GxojP|EqpeqL Pxkpro Q | p Q o:xFL8Lo| p3oUEk
kEPx xb P ` qEXjxo:x&PE}|GoIpexoLPq Q P383qxo:Ekp T pr|E\^Px\X T 3qx
` xqkq| P Q 3qbqq(q7q ` Xx Q pexLLLzoU| pEo:E
x

EPE3qxoUbq| Q qproUx qP-q7PE Q Xjo:EoLPE}|Go prxor"k ` XjP ` qpr


Lb ` Xx Q pe&P-}|GoIpexoq Q Lo|GpEo: P7L
$ cd /usr/local/bin
$ tar zxvf /usr/local/src/cvsup-16.0-linux-i386.tar.gz
$ mv cvsup.1 ../doc/man/man1/

\x Q qxbpeo Q |Gp Q oUxLvLo|GpEo:E^q P\}| (oDpexorLb ` Xx Q prvP


}|Goprxoq Q boPE| x"P-bo|G ` Q 7xPE3qxoU3xPxLo|G| Eqx"L| Q xLjx
| ` ^xqpr

b7o b&L Q &PEq Q OE83qx"o:E8b&q| Q qproUxqqH Q Xjxpe


$ rehash
$ which cvsup
$ set path=(path a cvsup $path)
$ which cvsup
/usr/local/bin/cvsup

Instalacin a partir de los Fuentes.

xHqbpexPx|GEqxOXjxo:proL^PE leQ qprZL^ Q


X qpEpex"P `  qpe^pro:7xPjXo:q|GXxPs
` qprF
X Eo Q 8Px ` x*
EoUxFLkbpr ` xq| kprxo T q xqpeP| ` X PxLEo8H3L Q PxOP 3UWkpr
| ` XPx"
L 3ok q| Q qpro:xZLb
X Eq3PZ| ` H\t8 
L q Q | ` Xx Q pe]3oUV #
| ` I| EL
leQ qpr7
Nota: Una instalacin limpia de Modula-3 se lleva aproximadamente 200 MB de espacio
en disco, de los que se pueden recuperar unos 50 MB cuando se borren los fuentes.

UGe+Ge3ORQeS
ReqkprxP28HEL Q Pxse
x/ ` PxLbpeoU Q | EqL28H3L Q Px"sSLbLFtEP3pe|Gq Q >8H3qpro xP JLT " Q q
` xqpeqHx"| pr7x `  qprHP|GEL*3xbM3oU3qxP ` qprLkx"o:oUEPPxLXV3o&pr

h"

W 3bpe ` \kxo| uFqpeo J 7xLbpeoU Q | Eq t8 t8Dvkp T | ` s


Xo: ` LxxXo3 ` xLx ` qpr Q qE8W8DVUWqP ` ` qpLb|Go:3orPx&(oUs
kEq  sekqkprxPx3x P ` Xx ` qpe q\nHsSw( Y ` qproUx Q Px(  kse
bpex3x| 3qbpro Q zLxIxXjxoqpr ` qprXjxo:x+EpeoUx 7oUb3qcXG\nsey dGfq|EoUo:zx
q\nsew Y(


Sugerencia: Este empaquetado rpm particular tiene muchos ficheros RPM, de


modo que seguramente quiera usted situarlos en un directorio aparte.

ZYSqbprx-[>[3\o\]G^28_ ^`[xse3
# rpm -Uvh pm3*.rpm

;b]b\x*`pr2[x'^bpeoU`|G3qc^| 7`\8
a

# cd /usr/local/src
# tar zxf cvsup-16.0.tar.gz

3qbpro `3d
4
x [d
x ^bpeoU
`|G3e
q ^ |G7E`\j(`\oU]qpb[x^qpeogfex|G 3oh}| xi\xoUx7pexo
xq|Gb^x-^R^[x=[7oo:zx\\G(
[

# make M3FLAGS="-DNOGUI"

 bj*`oZ|Eqbpeo`o4`q7qx"o:bph"pe|c\xoUxIpro:x[x-^xo[Ox bkpr]xq [E|`x[


qM\` ^x&peqoqbpr-x [-x ^i8_ ^`[xseqpeqpr7
# make M3FLAGS="-DNOGUI -DSTATIC"

m;Yeqkprx-[.[E7q(xo:I|3qbpeo`^
# make M3FLAGS="-DNOGUI -DSTATIC" install

Notas

j]x
[p k|GoUx-\\3` Eo
j]x
[p ^3|Gs\Ebpe3ob*[seb'[bprx E\x[q` Eo
a

*prp\8 [` n\xq`j k #l [rx#]| oEse| ] EsS.] \xose|Eqse|G( p] [


mj]x
[p [x \x-f`qpe | ]
w*prp\8 #mcmnm^ |G7|[| |]
y*prp\8 #mcmnm^ |G7|[| |]
j]x
[p ^\'\ [bpeoUx | ]
o

~*prp\8 #mcmnm^ feo3^ Eo


jfep\8[#fep\\ \3bpr7ob*[ Eo%\`
fep\8[#\3bpr7ob*[ Eo%\`

-p

8=k++8_k |G7`\

`\

Gfep\8[#\3bpr7ob*[ Eo%\`
-a"pep\8[%]( \[]pq[ |Gx#]
"pep\8[%mcmRmH okxo|G ^3pex-[ | ] I#] ^`[x"sS(-p] [-*]7 p] [

-p"

-p

Apndice DG2. Documentacin


o \3bp d^2
[W
x ^E|`]qprx|G3q\x|G
o ^
t 3bpr7o=
] h=
fh|
[%^x-\oq^od^bxs
o:o [[xo:k[(|Eq`qpc^ bpex7^E|`]qpex|GEqn^k|GoU3[(bbpe.]x tEkpr7oF-` [q*`xb+
 `qpego fex(E kkpr
x ^3|`]qprx|G3R
q ^3bo\|G-x \x'
^ o \Eq^o x7[xF|`bpr3q] h
feoU 
| `qprFr
\go ]pro -x [` `xo: Hq| Eqpro:xoo \`bpex=
\Eo\k
]E ] E-bqOpeqo\*
`os
|`oUoUox [-E \Eo:pr>
^>
[bpex"G
^| EoUo
k[%\

Mapa de la documentacin

t3bpr7o prq&|`xpeof3o]xp3\hb|E=^2^E|`]qpE
s

pM\[x"q|3qqf3o]x|GEqx"| o|bx'^2[xW\osSqbprx-[x|G3q
s

n8D"*`&b>`bxW\xoUxqx73x|G3qrEqs[q^| ] ofeo q| x(


s

+ `]
s

\h

3|

qprx|GEqO] \obxW\x"o:x>[|Gp`oUxt] hG^peq^x prx-]3 q|] oU.feoq|Gx

3qx=]xq| ] o.fSoq|Gxoh-\^x

7e2ueu3GeGS3v3Ge7U"
Fichero
[C t  tYSZn

Descripcin
+\`qpe=^4\3oU7p

[#Ywv - 

Sqbpeo`|G|G3qt^&qbpex[x| Eqcxepep3
b*] [syo:pfeswyprpz
Y

[=k++8{k

Y f ]

[o3bpeo: prp
8

[#^3|` pr] \[x"pe

t[xqpr[[x'\xoUxqf3o]=^2^.\`o:x"| Eq

[#^3|#\Ekpr7o prxo 3

+ `]

[#^3|#\o33oUx] ]o \ 7

7`x'^[%\joE3o:x-]x^3oxet3bprk|GoU\pz

[#^3|#\o33oUx] ]o pexo: 3

7`zx'^[%\oE7oUx-]x^3oxen8Dz

[#^3|o}feoq| 3 \ 3
8

[#^3|o}feoq| 3 prxo: 7

Sq 3o x|GEqOqpro^`|Gp3oUx
Dqbxb+=^o3bpeo^`oUxqpe]x-|7
3|

qp(8q(pe3oUx-^3txen8Dz

Dxq`x-[%^oU.feoq|Gx'xet3bprk|GoU\pz
Dxq`x-[%^o.fSoq|Gx'xen8DVz
8

[#^3|p`p3oUx-[ \ 3

eqpeo ^`| |GEqcxStEbpeb|Go:\pz


Y

[#^3|p`p3oUx-[ prxo 3
Y

Sqpro^`|G|GEq~xen8Dz

[#^3|#`bo: \ 3

7`zx'^[%``xoUMxet3bprk|GoU\pz

[#^3|#`bo: pexo: 7

7`zx'^[%``xoUMxen8Dz

:
^\Eqqd^:\h3qx6]xqxb| ] | ] +`q^3o:xqq]o+^F}|GoE)^prp7^.[
pe \I=k++8HkOqp ^xt[x=f`qpe=^tEbpe3o

El proyecto de documentacin

t`^W^\3qo=^'^3|`]qprx|G3qOpex"qpqRfwEo]xpHnH8D|] c U z -x]3

-p

3o xp3r^E\Eq[H| ] _\xoUpen^n[xqkprx-[x|GEq bphq^xo^vtEbpe3oN(*`8b


b|`prx|Go|bxr^|G] pro:x"7xrx"o|3q[x'f`qprW^M[xc^E|`]qprx|G3q33o|G]
7qoUxo\x*`pr=^2^E|`]qpex"| Eq
f ]
^

xf`qpe)^4[x^E|`]qpex|GEq^bFx"qb|Go:p+`kx"q^Z}| oE)^prp7\[xqqif3os
]x
p 7
8D k[/\o \Ebp 7^. [ 7
8ur
+3| |I [/^4
\go ]pro
x `q-x `p Eo \|G}|Gxo
[xHbpe
o `|Gp `oUxH [| Eqpeq ^ ^M
`
q ^E|`]qp p |Gq| x`bx
q ^.[
+E| |*z8
pex ]7 q [^ prq4
o `
q ^3|`]qp n^Ikpr [v`i
^}qx^|G
] ObI| Eqprq ^vbI7o h
}q-x []qpr
x\3o8Ur. ] \[3`pr [x
q ^~8H^`[x"o pr*
[ prk-c
n +x>
^+
kbpr [R8H ^`[xor
^2
vcEo]x [k
z
xHYSqpro^`|Gpr3qp+3| | J \xoUxprqo`q^`qHIoh-\^Z`]xoU^4[x"| x"o:x|GproUbs
pe|Gx4
^+
+E| |W
+3| |Rk[]qpe T [+^x+`qxi\ ^oEbx ofoq|Gx^7[x|GxoUx|bprs
o:zbpe|Gxt
^2
+E| |
E| 3q `qp d^&bpex'^E|`]qprx| Eqbx |Eqbpeo`^d`bxq^I(x"o:x o:oUx-]qprxbqs
|[`7q^+x-^ ^2@ex-]\4[xog|I;8H ^`[xoE| | pr*[kpr ^2vcEog]Nx-[b
k[ 

Eo -x []qpe>
[x"|\x"] \obx bW\o^`|Gq] \EoUpexq^}|GoE:" zg ' V3G
e*z^^
x^+\\[/Nxo\xoUx[]qx"ox-[3qo:oEo4^fwEo]xpOxd\xoUpro4^
x*`#\V3oUpexojade
[ |] ^}|GotEbpeb|Go:\p:
vc g]
x

t58`q_f3o]xpB\EoUpex-^B|] bx-[^xn\Eo
\oNqBbR`bxqDkp3M] 3s
]q
p 3b*
\oUq|  \j-x []qpr
\EoF `q|G-x \x|G ^.x ^\xoUxIjade
x|Go:f3o]xprE>\j*`{EW^[V^Es
| `]qp xqprt

^2
[x| \x ] \obxM
\Eo [-q-x ^| `-x ^  \3oUpr2
^prx
[xr
q [x"\
+x
^bpr
[

Fuentes de la documentacin

xtf`qpeG^[x'^3|`]qprx|GEqR\`^qH7qoq~fEo]xpi^&pepM\[x"q3-\h3qxW^
]xq
p ] [ q ]3xo
3[d
x ]x"*
Eo:zd
x ^i
[d
x ^E|`]qpex"| Ee
q ^I
t 3bpe3o&kk|GoU3go h
.   x 7

`kx"
q ^d(3S 32 G 2ZU3 U ! 2 G 3
8D
zn+E| | ?  g 3 U "t
3 x
+z2
x ]x
3oU2
x ^2
[>
x ^3|`]qprx|G3qxk ^I|3q7oUpe ^2
x Ibgo h| Eq7oUpe ^x
x 7
8u8
o \Ekp r^ 7
8DF. [O^'
\o ]peo +
x `qx `p Eo\ \|G}| x"t
o [x bpeo `|Gp `oUx. [(| 3qs
peq^b^M`qe^3|`]qp x\3o:+] \[E`bxq^.[E| |z\ \og]pro&*`[
bpe [r^ [O^E|`]qp c^}qxZ|G
] b 7go hZ. [(o `[pe-x ^}q-x [Ox\Eo\:+ ] \[E%`pr [x
q ^
[x 
+xG
^bpr [M^>
vcEo]Nx [k
z
k[O\

xr^3|`]qprx|GEqbHxo`q^ ^^^7xoUx'f`qpr/3^x*`Hqpe3oUx-] E
xb ] [-x ] E'[M
x ^E|`]qpex"| EqNkprqprI
[x^| 3q7oUpe ] E 
q `qN| 3q `qp |Eoqpr
[x 7oUb
3qZxqpr*
`xW
\xbxo hqxb
o 33 [pex bo hq
EoUo:-x ^x"W
^M
[r
x ^bpeoU
`|G3q
zqO ]3x"oU
Ebp HqrE|`oUoUgo hZ
q ] ^xpe-x ]qpeHpr-x ] \E|r3|`oUo:o h | 3qOp ^E4[34^3s
|`]qp E -x [#] ] pr ] \txoU>
x fex|G [pex"
o [xpeoUxqb|G3qHIx
`^xo>
x [Et^bxoUo [[-x ^3o
k|GoUp Eo=
^
`xb" ] E:^}q( ^M`qb*
` ]'
x ^peoUxqb|G3q

Estructura del documento

G| p`x-[]qprZx|`xpror^3|`]qpE&k|GoUpE|3qb+E| |x^x+`q~^ [[Epeq


`R
q ^E|`]qprfw`qpe*`'[H|3qprq H*`'^}q[3qp3oUqc^>+3|G |rEpeoEF}s
|Go 36f`qpr
^. [#^E|`]qp 9kbp E }|Go Etf`qpeFkFq| `qpro:x"qHq
`qp |3qd[
x ]x
3oU
x ^:
3pro 3}|Go E)f`qpe:
`b-x ^E6\xoU
x [
x ^E|`]qdoc/src/sgml/
pex|GEq :4
x f`qs
pe
\o: ]o:>
x ^}| o 3=f`qpeE Eq
Ekpr7o b] [

\

k kpr &.[V^3|`]qpvqpr3o:x^33q|[`3q^Op ^3>[EWEpeoEW^E|`]qp3&| ]



xoUpex^bx-[^x^3qoUx-^x^qNnH8u73x^*`M[x^qpeogfexd^.[qx77x^3ox|G
\

-,

"| [t] E7o:bb\Eo p ^x [x ^3|`]qprx|GEq b[u|Eq\`[bx|G3qd^[8o:x"peEq 73


3pro3r^E|`]qp3bphq^\Eq[HprxqpqfEog]xpDn8D*| ] uq | \x
] \obx
fwh

p`p3oUx-[ b] [
k&.
[jp `p 3oU-x [jqpro ^`|Gp 3oU 37| Eq:+ ] \[E vrOq| [`3I [ ]qp EW^7\o33oUx-]xs
| EqH`vq(peq|GEqv=[x'^&x`^xox-[ [|GpEoqMfex-][xoUx^|3q # kbpr&\[
^3|`]q
p 3prpeqkprxoUpe. ^"|G
] I] \"xo

ko: k] [
`

k>
[xI7
`M
x ^. [`E `x"o: YSq| [`3 
q f3o]x|G3q E3oUpe \E2^
^xp E&qpeofex|Gx
q(.[^2``x"o:kbpe8.[-kprd^Eq^&] \[x"xoqf3o]x|GEq~^&\3o*` k

of+oq| 3 k] [
k[8ux
q `x [.^ o feo q|Gxq YSq| [`3bqprx^tEbpe3o % qkbpe\.[[`3xoO^3qO^
oU|33oqf3o]x|GEqR^[3\|G] E

o33oUx-] ]q k] [


\

k
[x7
`=
x ^ [\o 33oU-x ]-x ^Eo:q YSq| [`7 
q fwEo]x|G3q 33o=[x8prqb3[^x-^M^\tEkprs
7o EE3o2[x\qpeofex|G G^>\oE3o:x-]x|G3q

x-^]q b] [
x7`x'^.[-x-^]qbpeoUx-^Eo: 3xo|bx'[x&qkprx-[x|GEqqEpex=^>[x7oUb3q

Estilos y convenciones

3|
Nprqd
`{
q `qoU| |Eq `qp ^^pe`pex"Z|Eq|G\p3Ze`qB3oUxqBq]o ^
[[E3q] `Zpr[\x"o:x:^E|`]qprx| Eq 3q+f3o]x-^x [ o|Gqpe.]qpr ["|3q`qs
p>^=
[:
x ^E|`]qpex|GEi
q ^\
t Ebpe3oxb ^x-^x-\prx^xx 78DIZq`q+f`p`oW\oUE]
7xo:x:
\x"o:prt
^k&| Eq `qp Ibo hqk. [|G|  Eq-x ^x"\r
]xqprq ^x | ] :+ ] \[E:^ [
`E
{^R
+3| | 3-x ]3 qbOq| [`o hx3xb `
q \j*
`
{ BE`]xoU ^vpe*
`pexi
^
+3| |
+  |

Herramientas de autor para SGML

G| p`x-[]qpr'[x+^E|`]qpex|GEqb^ t3bpr7oFb xb| oUp~`bxq^r`q.^pEo=^ pep3


q3o]x-[Vx]x|G%\b] [7 xb+] hx3xb z|Eq[V]xo|Gx-^c^.[j|Eqprq^n`pr[xq^
pr*
`prx 7
8DR
^>
+E| |
7
8DHM+E| |IqIb7qHxfS|Gpex.^3t^7^ x2[xq`]oEkx"o:oUx-]qpex6^Fx-`p3o
^ |G ^*Ox3oUp.k[|3q`qpn^IoUo:x]qprx>] h"W`bx-^&[\x*`pr^I.^|G3q
]x|G- ]x"| Z| EqH[xOprqb3H
q \b
] [%
kq-x [
`
q EIbbpe. ]x
x\3o:+ ] \V[3  ^nx"p

q `#
z(kprx\oUo:-x ]qpex b&q| `qpro:x"qHc
q [xqbpe-x [x"| E~
q ^2
[W
x ^bpro:
`|GEq

emacs/psgml

xe
zjpeqn
q `n
q ] ^c^pro:x3xrx 2 z 78D 7k |3q}`o:x|3s
:oemacs
o |Gpex-]qxemacs
pe+[\o]peohM`pr[xo
\xoUxqko:prxope`pex"&v|3qpro [xoG[x|Eqkbs
emacs
peq| x>^2[x=]xo|Gx

Sqpro^`|Gxr[x b*`qpe[zqxq`}|Go
Sx x`bprxq^[)\xprb6f`oUx
~/.emacs
q|GbxoUz
Y

"4

; ********** for SGML mode (psgml)


(setq sgml-catalog-files "/usr/lib/sgml/CATALOG")
(setq sgml-local-catalogs "/usr/lib/sgml/CATALOG")
(autoload sgml-mode "psgml" "Major mode to edit SGML files." t )

x{x-^x7`qxIqpeoUx-^xZqO[]] }|Gor\x"o:x 78uqR[x^}q|GEqkprqpr7\jxo:x


x-`p Es] ^sex [bp:
(setq
auto-mode-alist
(("\\.sgml$" . sgml-mode)
))

x-^x}| oif`qpr 78DOprq&.[-k`qpr*[E*`&x-[E}qx-[ ^[-}|Go


!- Mantenga este comentario al final del fichero
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"./reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:("/usr/lib/sgml/catalog")
sgml-local-ecat-files:nil
End:
-

x^kproU*`|GEqr^tEbpe3o q|[`32`q^}|Go^^}q|GEqb

reference.ced

`x

q ^bp `bx
q ^
\k
#
] [#
`q7
x ]xq(o:xZ|G
] ^+
x ^ peoUx3xUrxo |Eqn[E}| o3
b\xoUx^3t^:\xoUpe6^emacs
[/[3o qboUpexo`qx2^|[xoUx|G3qd+C   tk~]qproUx=[Ebph
^prx
q ^ } \3o:+ ] \V[3`bpr ^bp `7oUxproUx3xb+x
q ^Z33obpe}| o7fw`qpe*`
`qx \ 
q ^|G
`bpr ^ \|G}| x"o:zxI*
`W
`qx^qkprxq|Gx^-x \\
q ^=
^i
`
q ^E|`]qp
+3| |x|G
q ^I*`>
['
x \oU ]oU>
x [qx kW
x \xo|b ^x xbp
!doctype appendix PUBLIC "-//Davenport//DTD DocBook V3.0//EN"

bx+[zqxb7q}|GxI*`Z|`x[*`o\|3bx*`bx|Gx-\x'^'[o 78D [p ]xoghZ|Eo:o|Gs


pex ]qpe^b>\`^(o:}|Gxo[ ^E|`]qp^|Eqqk] [set^E| `^7 b] [
k

-D

Haciendo documentaciones

k[
^O7
v kR
`pr [b
x \xoUxO| ] \ [x7
o ^3|`]qprx|G3
q ^E ^c
f`qpei
+E| |
nxmake
Ix-[`qx"G^}q|GEq:^qp3oUq^*`&`h8bx&q|GbxoU}rx"o6M] ^}|Gxoq`
qbpe-x [x|GEq
`b|Gx

\ ] \V[|Gpex ]qpe
doc/../src/Makefile.custom
\xoU=
x E3peqojMakefile

q fEog]x"| E+
q ^ [doc/../src/Makefile
qp 3oU
q Uk
q ]bbpe. ]x [}|Go
src/Makefile.custom
peqbpexE \j|Gp

# Makefile.custom
# Thomas Lockhart 1998-03-01
POSTGRESDIR= /opt/postgres/current
CFLAGS+= -m486
YFLAGS+= -v
# documentation
HSTYLE= /home/lockhart/SGML/db143.d/docbook/html
PSTYLE= /home/lockhart/SGML/db143.d/docbook/print
^Eq^n  
kNt  
k^peo ]qxq. [)\xprDx
\xoUx
+x
^kpr [
n8DvH| \x] \obx8oE\| pr7x-]qpr7kbpEF}docbook.dsl
|Go3G^&ex:^bpe[H3qR\xoUx
[ 8H^`[xo pe
[ prb- ^2
vcEog]N-x [b 3b>
`bx~
q 3pro:x"8
+x:
^&kpr [3qp Eq|Gb
\`
^
q ^}q(oc
n  ^Z
t  | ] Z[\xprI| ] \[p ZZ| ] q]3oG
^ ["}| o '^=
[x
++
x ^ bpe [|] b - c] hFxoUo:3xZ| 3qvn  
kt  
kE kn
q ] `|G
3bbpe. ]x
bpex" 
rx'
^bpe [bq| 3qproUxgo h"qq
q \x*
`peqbpe-x [-x ^3q

/usr/lib/sgml/

/usr/share/lib/sgml/

/usr/local/lib/sgml/

E)\x*`pr6^:^E|`]qpex|GEq^n8Dd\`^qIko7q(o:x^3^^G[x>f`qpr 78D
b|Go:3
q ^i[^b
`qpr7
%
%
%
%
%
%
%

cd doc/src
make tutorial.tar.gz
make user.tar.gz
make admin.tar.gz
make programmer.tar.gz
make postgres.tar.gz
make install

bpE:\x`peG\`.^qkoqbpex[x-^E:^^&.[*^o|Gp3oUM\oUq|G\x-[^>[x'^E|`]qpex"s
|G3qb|Go:3q^
k

% cd doc
% make install

Pginas man

b-x ] Et[>
x `pe [ ^-x ^
\xoUx
| 3q7oUpr)
o [x"=
\h"7qx t
k*kvH  ^4
+3| |
docbook2man
xbx-[^x"+Uoff x-^|`
x-^x+\xoUx~\h"7qx+]x"q -nxbpex[)] ]qp{^Hb|Go:3obp3V[x
`pe
[ ^x ^*o
`oU
x `
q \xo|Gn
\xoUx:+| `pexo| EoUoU| pr-x ]qprn
[xr
]xo|GxM
^v
t Ebpe3o
 ] E8x{x ^ ^`q>
x \*
`{(x| x"qpe ^x ^~^
q `7x=
f`q|  Eq\*
`2
\go ]prq| 3q}
`o:x"o
[xb|G|G3c
q ^2
\Vh7qx"G
]xqq. [-}|Go i^b-x [ ^x

"

bp hk|GoUpex q \o[Oo*`oZ[V\x`peZtv


\xoUxif`q|GEs
qdocbook2man

xo:Ux-]3 qoU*`o
*`Fbq|[`7Fqd[x2^bpeoU`| EqrSGMLSpm
^
g\` 6^
jade
qbpe-x [xobp 3=\x*
`pebnsgmls
b] \[]qpe&:+|`pr7
$ cd doc/src
$ make man

*`&3qoUxoh>`q}| oIpex"oq.[%^o|GpEo:

doc/src

U3GGeGeS" e3O3G7v
jYeqkprx-[ .[\x*`pr

G*`\b\q|`qpeoUxG^\Eq[\qprp\8[k[[ \ [q7 | ]#l[]o:p:| ]e\

docbook2man

YSqbpex[[#] ^`[M\jo[ 78D


a

;Yeqkprx-[

^\3q[qr[x6^feoqpro

\O]

"b3p^x7xqi[peq>^qbprx-[x|G3q~^

nsgmls

jade

|Gx6^Ftv

\[

Generacin de copias impresas para v6.5

xn^E|`]qpex"| EqtEbpeb|Go:\jp2\xo:xO| \x] \obxbO3qoUx|3q7oUpeq^[xbf`qpe


7
8D x
3)
\x"o:b
x ^E \` ^ ] \Eo:prxo [xx+
\\[/
Nxosem m 
 \` M
^n
\*
`
{ 3
|G-x ]3 3=xe(>
x [x b|G|G3q*
`&7q. z[x b-x [ ^x&k ] \oU ]W
x `qO}|Go \3bprk|GoU \p:

Texto de copia impresa

k x|Gp`x[xqq|Gx-^xZ7oUkEqq`7xkt3o8oUx-EqFbpr3oU|Gx  kp3
}INSTALL

| oEbpHISTORY
hq q`qMfEog]xp'^\prpW\[xq3\o>\o37qqi^ }|GoEf`qpr 78D
UGe7Oe-SeS
x"qp
| ]
kv3qo:xq_^E^cf`qpe 78u*`v7xbpeq
INSTALL
HISTORY
peoUxqc
^^[E}|Goqpeo]^
txoUx&3qo:xo^k|GoU3x
% cd doc/src/sgml
% make installation.rtf

;Y] \3oUpr
a

installation.rtf

x \\['e3o^

;3 +&[-xq|G^i[3G] ho7qt^2[x'\h3qx


x`bpr&[Exq|GM^\h3qxqc7[3 tx7 p`\x"W\`[3x-^x
 [|G|G Eqp ^u[pep  `kpr. [4]xo7
q ^oU |G
xN[
w \`[3-x ^xr
`prs
xq^i[x oU*[x3kbpi^xohW`qx"q| i^&|[`]qx'] h"] i^>o|GxoUx|Gprob
*`&bpe'
x ^qpeo ^ [%[
]pe& `\oU Eo6^>
[x ~(

m;k[]q2[xt\xo:prt^[ ^E|`]qp*`&q^bx"qHq|GbxoUx
tx"o:x
[]q8p^x[xqEpex"^=[xF7oUkEq^^\["}qx-[-^[pep x| .\s
INSTALL
| En
q ^
x"*`[[xF`Zprq3xqv*` 7o |Eqb[xZ(o:bEqvx|Gp`x[GtxoUx
[]q
p ^[prp *` kp \3o8q|G ]

x ^+
[x
q Epex"
^7oUb3q%
\obHISTORY
oUExq^n] ^}s
| x"
q ^I.[3prp `[ [E#
EI
w;k/\Eo:pr[-oE`[prx-^ | ] YYjx `pe

-p

y*bxq^&.]x|G&7G[]qG[x8qf3o]x|GEq^\pex[xq
wEo:o6[3 ]x[p3
INSTALL
:
^W
[E*
`xqv| EqpeoU
` ^Hx-[O\V3oUpeW
\xoUx | ]b\o:]
o=[xZx-[p`o:x7^W[x| [`]s
qx

Copia impresa postscript

nxI*`&xEo^xo(x"o:x |3bx=]qproUx8b3qoUxqtEbpeb|Go:\pxo^j|\j-
U3S38O+S-W \
xo|bH*
`+
\\[/
mxoHx3x3qD [proUx3xb e^H ] \Eo:prxoN7qoUx-^\3o +xs
7#8  /kq\xoUpr|`[xor(xOp^N.[pepkr[c^xc[xOpe*`pex~^Hx"peoU`p nx^oU
x-`q*`i\Eo[R^] h[fEog]xprR^[jprpvx|G.\pex[-x]7 qki^x*`i[E qs
]
o E6^2
\h3q>
x ^
[x&x
[W
x ^4
3qprq ^E\
q o fe oUq|GxqH| 3oUo|Gpex.]qprxW[xk| |GEq
[bpex ^xd
q [xprx
[xk
q *
`bo}oU r
q ^o|Gpr-x ]qpr2
x [W
x \h3q>
x ^4
[xx"
[>
x ^F
3q(pes
q ^E
vc\
^

tEo:+] \V[3-\xoUx&3qo:xo[xqpeoUx-^xb| oU3x


% cd doc/src/sgml
% make tutorial.rtf

3o:x2`qq`Oi^E|`]qp^q+\\['e3o^\d^E\V` \
] \3oUpe[E}|Go 
a

;Y] \oU]xW[x x[x>^Eqpeq^E*`&3xbpe7


mYSqboUpr^}`o:x"ZqB.[^E|`]qp|Gqpro| x^xH}`o:xHq[x~\Vh7qxr`pr[xq^.[
3pr3c

q ^&|Gqpro:x ^i^2
] ho7q
p^E[3^3|`]qp 3prqq }
`oUx
t `. ^ 
`b|Gxo
q [E}|Go Ef`qpr 7
8u
x| x^qx 3o:x\|G4\jxo:x^qpe}|Gxox*`[[x\xoUpe^G[x4^E|`]qpex|GEqI*`:\`s
^xqvprqo8}`o:xqx\E|Gx}`oUxbo\prqvq7xoUx4\xoUpe^7[x^E|`]qs
pex|GEq
vc
[

w

-oUx3xbrE3oU[*^3|`]qpHxb`bprxq^^bx-[p3G^W\h3qx Hxq|G3:^&|[`]qxq
x pex[x
[

bpe 3[E7oUx-fezx3\\V[reEo^&x\xo qpe]qpei]xo|Gxp^v[jprpOoUkprxqpr


\` 7^.[\oU]o&prp`[|] bp`(o:xc`qxpro:`p ^^E`3oUx3x-^ [|G|GEq
p ^^[7pep ^obpexqpr&c
^bx|Gpr( [7 `3oUx7x ^d`bx
q ^^[3
EpeEb
q ^& `3o:x"7x-^Hx
\xoUpe
o ^x
`-E `3oUx3/
\[|Gpr-x ]qpr|G-x ^>
x ^3|`]qp ^^. [-pezp `[d^. [%[3o

y
^

3xIproUxpexq^H[^E|`]qp~]xo|Gxq^r[x x[x^Z43qprq^E|Eq[(|EoUoUE\V3qs
qprq]oM^\h3qx'\xoUx&|Gx-^xqpeoUx-^x3


o

~#\] \[x|GM[3 (x[3oW^Hq]ob^d\h7q(xc^M[xc^o |Gxq[xHx[xr^^Eqs


peq ^3\| Eqc[E7-x [3o\| Eo:o|Gp 39 kbp b
[p ]'
x `
q 3=]
q `p E:\Eo6^3|`]qp


`xo ^ [^3|`]qp q [fEog]xp qxpr*


7
b^ +\\[ceEo^'\x"o:xM\jo]peo4`qx
^|G3qoh-\^x2] h8x^[xqprb fw`o:xq|GbxoU



oU]x[%^3|`]qp^xW`q}| oIqcf3o]xpItEbpeb|Go:\p:

Y] \

G8 ] \o:]x[7}|GoHtEbpeb|Go:\p`pr[xq^
k [3*`Z[7}|GoH| ] \o:]^
gzip
q [%^o|Gp 3oU

doc

"

Herramientas

n] E+^E|`]qpex-^q`bpro:x/\oUq|Gx|EqproU7] p^E^^qkprx-[x|GEqH\xoUxc[x"


^
feo qpeo:oU-x ]qprxF
`E Eqq| kx"o:x:
\xoU
x \o E| bxoG[xi^E|`]qprx|G3q qx
[xvqbpex [x"| E
q ^ ^ 
t 8uIq
q `
[xk*
`
q ^xi
[xqbpex [x| z3_
q ^ ^O. [=\V3oUpex
7o
d
[x
[pr ]x t
`qx qbpe-x [x|GEq7qo:x [%^ ^2
^bpro:
`|G Eq:
Eo:3q-x [G
^
[x
oUo:x ]qpex"9 kkprx b>
^b|Go:3o hr
q ] h x3xb
t`^qNkpro2EpeoUx7^kpro:`|GEqZ] \jx*`prx-^xW^bpexoUo:x-]qpex"t3o>fex*Eo
o ]pexF
q fEog]x"| Eq^ E7oFbpex ^7^4
[E6\x
`pe2
x [x"t
[bprx6
^| EoUo Z+[xq(| [`oU ] (
x*
`<

Instalacin de RPM Linux

xqbpex-[x"| Eq] hbq|G[[x\xoUx8bkpr]xq`|] \xpr[|Eq ^nxp/`pe[xF t8u


^bxoUU
o [[-x ^W\V3o8Dxo |&Zx [xbk ^\F73
q `-x ]3 q
\3b
[\qbpex [x
o ^ ^6
[x
f`qs
pek"| ] ^b2
^k|GoU3qb|G|G 3q=
\EkproU EoU
UGe+M
;Yeqkprx-[2[E t8

jxo:x>@Sx^M[3=\x*`pr\o[x|GEqx-^3

B \

YSqbprx-[[x[pr]xrx"6^Fkpr[^4vr3o]Nx-[b g\jq^q^7^[xxqpe`^x-^
^=
[3\
t 8D} [x
[pe ]x"
+x)
^8kpr [7\` ^q (x3ob ^'] `+
]U Eo:x ^xo \| p
xx*
` [[x"8*
`&x \xo<|GqH| EqR[E\\
t 8
a

\xoUx *
`8q|[`3xq+[x^}q|G3q^ n  k
*|Gp`x-[|G`
^t  
d
kOsrc/Makefile.custom
*`&x-\`qprxqxW[x\+x=^bpr[

Instalacin en FreeBSD

nx`q3oUxq|3q`qpe^ GU U ^r[x~^E|`]qpex|GEq^c[x"ZoUo:x]qpex"+^E\V3qs
[6
\xoU4
x 7o. v | E\Ebpe3ob*[ Eo7q^[`[x>^3|`]qprx|G3qHbFx| p`x-[x
x-`p ] hpr|G-x ]qpr|G-x ^x&prxo ^G
`q>
x ] h*
`qxZ| Eqc3oU O
UGe+e34:3Ue3U-I


3
u

txoUx| ] \[xo[x'^3|`]qprx|GEqE3oU7o.

kq|Gbpexqbprx-[xo`q38|`xqpE
\3oUprb
%
%
%
%

cd
cd
cd
cd

/usr/ports/devel/gmake && make install


/usr/ports/textproc/docproj && make install
/usr/ports/textproc/docbook && make install
/usr/ports/textproc/dsssl-docbook-modular && make install

;3 +xot[x\(x"o:x"*[G^&qpEoUqd\xoUx x|G| .^jo x-[E|3q`qpr^o:oUx-]qpex=^


a

jade

Nota: Esto no era requerido para la mquina FreeBSD de postgresql.org, as que puede
que esto no sea necesario.

export SMGL_ROOT=/usr/local/share/sgml
SGML_CATALOG_FILES=/usr/local/share/sgml/jade/catalog
SGML_CATALOG_FILES=/usr/local/share/sgml/html/catalog:$SGML_CATALOG_FILES



SGML_CATALOG_FILES=/usr/local/share/sgml/iso8879/catalog:$SGML_CATALOG_FILES
SGML_CATALOG_FILES=/usr/local/share/sgml/transpec/catalog:$SGML_CATALOG_FILES
SGML_CATALOG_FILES=/usr/local/share/sgml/docbook/catalog:$SGML_CATALOG_FILES
export SGML_CATALOG_FILES

Skp=\jxo:x&kqprx8b 3xk b+bpr[d\x"o:x| b pe|Gbz


x

8Dx-|3Iq|Gbpex^x[*`qEZxo*`]qpE \| x[WvbpEZxqe^Ibox{(x-^^ExH`


8u
x |7
} [7 | `kp ]
HSTYLE=/usr/local/share/sgml/docbook/dsssl/modular/html/
PSTYLE=/usr/local/share/sgml/docbook/dsssl/modular/print/

tEo6^b|Eqprx-^I`&q|Gbpex"oghW`bxo*]x|7qIb[d]x-|3z\x"o:x| ] \[xo:

Instalacin en Debian

nx`q`*I|] \[p^2\x`pe6^2[x>^3|`]qprx|G3qc^4[x oUo:x-]qpex6^E\Es


q
[>
\xoU>
x 3xq
UGe+e3Fje=u"e
;Yeqkprx-[+x-^^E|  |^d`q\8
apt-get install jade
apt-get install docbook
apt-get install docbook-stylesheets

;Yeqkprx-[2[x"8[pr]x8+x:^bpe[
a

xoU}*`&*`

unzip

kphqbpex-[x^MIqkprx-[&[ \x"*`pr7

apt-get install unzip

uEqb7xF[}|Go| ] \o:]^|3q[x[pe]x"rx"^ bpe[ q prp\\[#mcmcmH qmx-[b |]#^E| 


^b| ] \o:
]-x [Mxe*
d
` h\q%
`bo-bxo z
k^peko|#8ux.|7}[z7 |`kp]
| `-x ^x


Ix{h-^x[[xt^}q|GEqG^n  k^t  kx^s

HSTYLE= /usr/share/docbook/html
PSTYLE= /usr/share/docbook/print

Instalacin manual de las herramientas

bpex^W`qx^3o7i^b|Go:\|GEq^.[\oE|Gb^iE3peqoqbpex[xo[fepmxoI*`qs
|Gbpexohr\xoUx.^pexo>[x~f`qped+E| |B|EqHk]x|GZNpeoUxprxo[x|3q{[x+x^^bpe[
 - ~
^
vc3o]xc
q N-x [b~
\xo| o xo}|Go E\nH
8DO

k

xR]x"qo:x~] hfh|G[)^cE3peqo'[x oUo:x-]qpex 78D+3| |B*`-h bxpEs


]xo
^E
^Hb
] [p [+ JLKUb] [pO [q|GbprxR[xO7oUb3qB7v^r]m(txoUx
|3q}sgmltools
o ]xo

`&peq2
[x (o:bEq| Eo:o| pr>
x ^
]'
m \o `3

"

gnum4 -version

qbprx-[x^7v]m7qbph[[|Eq[q ]3oU 7q`]mHb*]b[p [+W[vq|3qpro:x"ogh(ks


\` 
^7
[xIqbpex [x|G3
q `bpe. ^Npr
q ^o hIb*
] [p [+k rx^~[xrx">^Zbpe[~+E| |n^
vcEog]x
q N-x [b x qkpro `| |G (q7
^x"3x: Eq\xoUxqkpr-x [xo&kprxZo:oU-x ]qprx7
^
] ^b
\xoU-x ^

Requisitos previos

 *`>`kpr^vq|Gkprx
s

qx&qkprx-[x|GEqRf`q|G3qx"q^M^Za o( a
s

qx&qkprx-[x|GEqOpro:x"3xbrx"q^i^k]x|G  2M\EbpeoUEo
s

xW`pr[^x-^n`q\~\x"o:xW^b| ] \oU]o}|Go3

3|Eqk*`o


@ex ^>
^>
@e-x ]\[x"og|
b|GoU3okpz
s

3|

x 7o:bEqv q[E}|Go

JJ x[

jade1_1.zip

q[ ] ]qpr^

^(oUbEq( JT

+  |
s

8_ ^`[xo pr
[bpr J ^>
vc3o]xq~Nx-[bRx[x 7oUb3q >fw`>EoU7qx-[]qpe'`bx-^x
x"o:x2\o^`|GobpEG^E|`]qp3z
s
\

t 7
8D J ^Iqqxo pex
q xw[x^7oUb3q ( Iq
oUxM[x^*`
bprx3x>^\Eq[qH[ ] ]qpd^&b|Go:3obpz psgml-1.0.1.tar.gz
s

 ] \3oUprxqpe
s

xWmM^2@ex-^
s

xW\h3qxWmM^2+E| |JL?
s

xWmM^28H ^`[xo pr*[kpr


s

x`xW^ pr7t\\oJLF
s

JL5

NM^t 78uJ

JLA

xb2^2^xpEG^=E3qO437o33o& fSpmxo 78D

TK

Instalacin de Jade
UGe+Ge3Ot
x>[x\qbpeo`|G| EqG^qbpex[x|G3qqc[x\R] EbpeoUx-^x xoUoU7x3
b|] \jo:]x[x+^kpro:`|GEqv|3qn`q\vqv.[O[`7x"o x-^|`x.^Nk[7| ]xq^r\xoUx
\xoUx&x|Gob
p i\` ^ko| ] Ibpe3
a

unzip -aU jade1_1.zip



j@ex-^\qO xFk^|Eqbpeo`^7`bxq^&7v x-`p3|EqfS^=] ^ *`8prq^oh*`8^prxo


`q
\EoE
`O| `qprx  x *
`>
@e-x ] 4[xog|Ixb^i[`}|Gqpr]qpe`q
| ] Makefile

\xoUr
x \o \xo:x"o `_|7t
p \x"o:xH [[Ej7
`qxH*
`qx ^x|Gox>
o `{
q ^o| p 3oU xe| 3q
`qD
q ]3oO| ] [xvx*
`pr|Gp `oUR
x ^ `] h"*
`qx
\EoZUr. ] \[zF3xb .[6^o|Gp Eo:
\o:q|G
\-x [^'
@e-x ^ -| \x=
o ^ ^ [7 [3}|Go
x [*^o| p Eo: Ho|G q|Gox ^3
^prxgo [ d

^ ^x#
]E ] :+| `pexo   Makefile
q| kprxobonx"b
`qN}|Go b[[x]x-^
qN[^o|Gp3oU
Makefile
Makefile.jade

o:q|G\x-[E|`^|]pr^Ibo)`kx^|3q )
*--+e |`xq^b|3qbs
peo `3'@ex-^Wxex'^feoq|Gx'^ t[ \xoUko 78DOEE3o[E*`bph |Eqkpro`^r@ex-^z
| 3qbUr-x ] EZ*
`
q bx3xkp E3xH*
`M^3oh^|Gx-]3xo]bh |3bx *`M[*`
xq

Makefile.jade

\|Eo:oUx[\}|Go
[3q^{[x^qbpeo`|G|G(qM^n@Sx]Oux|Gq^[E
| x ]7 Eq|GbxoU 3Makefile
nxx-[`q(x7xoUx[*`\q| kprxqboj}+x-^x*`b=] `bs
peoUW
x `qE `]x"o: i^2
[x=
] h\oU. \obqprxpr(x"\| EqO `\(-x [Eot
] h pe
\| 3
prefix = /usr/local
XDEFINES = -DSGML_CATALOG_FILES_DEFAULT=\"/usr/local/share/sgml/catalog\"
XLIBS = -lm
RANLIB = ranlib
srcdir = ..
XLIBDIRS = grove spgrove style
XPROGDIRS = jade

I3boU7r[x\|G}| x"| Eq^r^Eq^q|EqpeoUxo[| xph-[E* 78D_\EoW^fe|Gp ^


[3I}|GoEd^\EoUpeRxe*`-hIprq7x`O| x]3xog[xvx-[] hIx-^|`x.^{\xoUx
E`qkpr-x [x|GE
q z  `ubbpe. ]x
q q| kpr~
x [EZxb `bpe7
]q|G 3qx ^3x"o:oU3r
x \xo:d
x [x
[3oUo:zd
x ^d
fw`q|G Eq+
]xpr ] hpr| x"Z
\xoUxH [| ]x
q ^ Ue+ 
^ + [Epex [| ]
bp hqHq

Makefile

m;kb|GoU7x  
\ xoUx&| ] \[xo6@ex-^Fd[x"8oUoUx-]qprxt^ t8
wqx7*`&kp | ] \[x-^E -e e xohW[x&qkprx-[x|GEq

Instalacin del DTD de DocBook


UGe+Ge3OOu=u

>u7I\3

kI|7.ev*`v] \V[x| c[3^}|GE`| e`3u[t^~E| |


k(xb
` ^
 [O^ |  : . [*

` | ] \ [~
@Sx ^
`
U>
x | ] ^x|G

^. ] h6
^
[E\}/usr/local/share/sgml/
|G Et^2
+E| |7 | k r-x h& [-}|G 
 `b e r\j-x :x& []-x \W

x ^W
[x\ \|G}|Gx|  G
^ [ e \Vd^>
^E|`]. H
catalog
[x2
U. fe } |Gx&/
e. gx2
^+
[x. e ^-x ^M
x [3}|G. Ex| `-x [&. Nbi
^ |  :
-x ]3 i|Gk r-x h [/]x \:
x ^8| x :x| r} 
Y C '
\3b
[ ] Oe:
`2
x '] h"7 Uk 
^2

8D
x7]x-Ux7\x-UxZErx-[x-6[x4^fer:}|GE4^\ eZc\x-Ux xb`rx-
[}|G 
( `r-x [3t^E  ^. [#^ |  U 7] |G -x ^i] hx gU3x `kx
`
| B}catalog
|G e[[-x ]-x ^
`R
*
[Ei^b| :3xn
x  ^EB  |GI| x  [
}|G 
| ] M`~\CATALOG

`e
 x|G-x r-x [3x{-x ^. ^i[>
x [ x
catalog

CATALOG /usr/local/share/sgml/CATALOG



jk[}|G
|r^Ux:e\V3^t[(x<xG\U]UxGx\|G x-[z/[x:^|[x-Ux
CATALOG
|  7
8D

SGMLDECL docbook.dcl

 \` b)
[x"M
^ fe  ri
 fe} . | x"^b
x 
 D}|GEd^n[xIr^x-^Etx-Uxb[3
}|GEG+E| |d[x"G[
x bUx-|] Iex


PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC

"-//Davenport//DTD DocBook V3.0//EN" docbook.dtd


"-//USA-DOD//DTD Table Model 951010//EN" cals-tbl.dtd
"-//Davenport//ELEMENTS DocBook Information Pool V3.0//EN" dbpool.mod
"-//Davenport//ELEMENTS DocBook Document Hierarchy V3.0//EN" dbhier.mod
"-//Davenport//ENTITIES DocBook Additional General Entities V3.0//EN" dbgenent

t`\`*`[/|3^4+E| | x+`^}|GZ*`| e.^C *


k. :7&*
`&. [7
[r ] ^[ ]. ^.O|G-x ^>
x `x'^&bx=[x8=`R ]>^&}| .3
`Hx"*
*
`kd
^xHb  [\-x r 
t ` ^M
\  >[E}| . EZ  `*
^ U|  : E7^ `H^
U
|  : 7
8Dvb(*
`. Ur
] ^}|G-x t[7
x  f  |Gx   [3}|G 
+3| |

ex ]3 M fe  | zx [|  `^| -x Ux| r <
Y CZ^4
[x" r ^-x ^CATALOG
b} \[*`4
|G
k r-x h~:x" [3   r-x [-x [3xe h-^ \ 
[
^ ^7-x Ux
f` rkr
\` ^.
| :x )fh|G [] r& r[x"8\=

] 3:-x ^xt
] h8-x U3-x z+-x ^. ] ht
^ `v. U-x ^x
PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN" ISO/ISOlat1

I3bU7*`&[% ]>^}|G| e.>`~^| :E^|G ^ 3\*`&]b3


\`+[E}|GE6^.e^x^)Y C*.d`H`^| :
vc`(x]e:[x.
Ux ^x=
\ g`x  ^. [-| x h-[E*+^3 ^x| ] \x{-x 2
x [x& rISO
 ^x ^*
`bx3>
x Ux ^
C

Instalacin de las hojas de estilo DSSSL de Norman Walsh


UGe+Ge3Oe8S"8GeSeiu

333

W3UnBeG
Q

.>[\`  G^[-Gc[\R] E-^'] ht-:(


j-\-[-V["^e['^tvc g]  b] \[.]r=^] \U] :[E}G3

^t
[G^ :
`G
  [[`
-O-^ `.^<+

`. [`
-O\-\
-G [b U

/usr/local/share
`I ] \[ M[3W[3
*
} G. E& `e^ U.  : Ob

/usr/local/share/docbook
k[%] -^k.
:
>-[
M\ G ^i 
a

unzip -aU db119.zip

] -^\E-[-[-G H6] \[-[E6f] `[-U3t8D ^


7
` '^
` `-U EG^
 (

[

- ] \[-[E} .3r8D *-[G^U_f`en^ 78D


 :

doc/src/sgml

jade -t sgml -d /usr/local/share/docbook/html/docbook.dsl -D ../graphics postgres.sgml

book1.htm

-,

\.[ ^d]bh=[i^2[ -[^[[

g^3-F[ \\.g^b] \V^bHE`{\ E-^ 2^Me#3


fw"O
U E U

jade -t rtf -d /usr/local/share/docbook/print/docbook.dsl -D ../graphics postgres.sgml

Instalacin de PSGML
UGe+Ge3O
3

cQ

.>[\`  G^[-Gc[\R] E-^'] ht-:(


jb]b\*`r\[} .W^=[:^:`GGUr.`r=}`U] -|7\W] -|3\-[[
\->[ -.
 `Ob e i[38
} G EG ] \ [-^E8M
[t
[
 :

a

\` G--^'[G["b*`.e[7}G
^d
] ^*`M
k]  W
\`/usr/local/share/emacs/site^d-- g].ed 78D
lisp/site-start.el
`-^i[d.
Gb e7
(setq load-path
(cons "/usr/local/share/emacs/site-lisp/psgml" load-path))
(autoload sgml-mode "psgml" "Major mode to edit SGML files." t)

%GbW`E6 78u~`-^i-]3 
 ^^iH8DR-^&E
(setq auto-mode-alist
(cons ("\\.s?html?\\" . sgml-mode) auto-mode-alist))

cc`73] \ g-e`7^3'rn`7 R 78DkE`b-` t`]


`\ `d^  U W\U G \-[\-8 [
*
 7
8DI
]
/usr/local/lib/sgml
i[
3Ur. ] \[3^G

\ `[3`r [-
E^3: g7[W-^
/usr/local/share/sgml
`-^].
e7

;`^}--)[ O:[>^. g

SGML_CATALOG_FILES

Z`^2\.: -[--`v-[-Gc^> 78DRxe[%] -`-[ [2^ghWG ] z




^F[`I^-[-}Gf`.e
e6^4] \[F-
7
8D ^4
] ^I*`>
-]32
[EG\psgml.el
er\-&`&k-^`d>[3\`*E
\)^
fe 

`

[-)

Instalacin de JadeTeX

(
*`%-]3 n\`^ZE-[-G@-^_\-+`E] ~`e[^^e\-if g] 
e.
-@w^7:c`*`&t^7
>`E fmcUkc^.\`gI3-h&-[^
] \ Z fe U U7
R['
3r  ^+
^E ^H

\ ->^d
 ^Ef`G v3. j
\
G -[] Oei
\-M[E'^ `] E7] hb ] \[ 
`d
n`E 
[b
-^ ] h"k
 ]
@-^j*b
[ 
"7
^I r [3 hH e`\V G br `^i
]: gcd] ^ ^H*
`
\
&. [r ] \

"4

  [-F~`r[--:@-^ Gbgh *` OtaE bf`G^R

.e[`7.^[Ec\`.er [g-\j b)3[8 f e8


\ vc  [ |3^2["8-2fw`.ek-^7\t\-&3-3 U\e-[EG\V*`r
^
] -EWf-G3^r3*\.gfe%]OG*`[na b\VFE`\`Eb@-^/^E
[[E8b>
\` ^ H  -  [Ek r&-
v] h"G
\U3 ]
-g

g -]

j E.[] ]n^ :383%O77b` *`


i^ -[-G \
}G
*`i] `Eg^` W. E:#-]3 NO[`3M`e^U. :
makefile
[[-] -^
^^H
 -hR-[
`3^r
[3i\*
`. e+
^c] -*`~Gb
cooked
x-`*
`2

d ^3\d
-] \ i] \[. Ezb
@-^

r>^i] \[[}Gn^if g] 
7W\3b[I*`*`.g^.^-
jadetex.fmt
[
} G 
\-~-]3 ->[~}`-G H^d3[\V-gcb`-[~`
 -[-G
jadetex.ltx
b
W[
 WW-]3 -b>
\- >
& 
\RequirePackage[german,french,english]{babel}[1997/01/23]

ME37-]r>^32\ b[d[E\^] "8*`>. kr&d }*`-6"3[%\-&[[

 @-^ f`G -]3^7.:N~\^.7.g ef g] e>[ E-[


^7^

\-[3>] -`-[^+3e # \-^c[3>] ^3>x] ~] h2-:-
[%^  U
z
doc/src/sgml

jade -t tex -d /usr/local/share/docbook/print/docbook.dsl -D ../graphics postgres.sgml


jadetex postgres.tex
jadetex postgres.tex
dvips postgres.dvi

 `\` 3`-^
H j
\--hd^`-ei
[b
`^Ur. `G
{^ G ^
*``b-\.G^-^vb ZE*.\-^Ek^:^3^i-[ ] ^HO`'@-^D3
f] -G
M^:
U. fS. } G 6
`- -^:e
\V` ^k.  ] \ [-^^4
] - *
`
`r [ G
 ``4
^7
^-3] "*
 
E2^ -[[4
^Z *-U -h-n^7
-` ^Vc E `  -[-
G



Otras herramientas

b*] [ [*a '^b-^2\-

Notas

jade

d+ |

*\8 #rmcmcmH [[ *E%l3-[(%]^ ^ G |S ] [


*\8 #mcmnm^   ]- ]\"7#^^\-Uk3%^ G |- (
a

*\8 #mcmnm^ [-| ]G-^7


*\8 #mcmnm^ mc-[b ]#^  O|%^bb[

*\8 `be3 `- ^`8#\`#\-|3--b3Er]#`

*\8 #mcmnm^   ]%^(.\:

*\8 b[[ \[3  ]#l.[]#]e\8#^G |a


o

~jf\8[#f\\ 3`  ]%\V`]3%EE[


*\8 #mcmnm^ mc-[b ]#^  O|%^bb[

-D

"\8[%mcmRmH b] [ [r U


Gf\8[#f\8 [-|  ]%\`G-^7
-a"\8[%mcmRmH  ]#^7\ #^  |#`:%^ G|7" \
"\8[%mR-[b ]#^ G* |#^bb[
-f\8[#f\8 [3- : [`8 b7#\`-b] [
-"\8[%mcmRmH [-|  ] -^3
-"\8[%mcmRmH  ]#^7\ 
-o"\8[%mR-[b ]#^ G* |#^bb[
~"\8[%mcmRmH [3-: [`8 b7#\+r# `e-\b] [ ] [
"\8[%mcmRmH f e.| k]e[ [`^7 ]
"\8[%mcmRmH b[ b*] [#\`[
a

] [

"

-p

Bibliografa

.[Gr^U.fe}G\d[.`g"\E # OM3e

Libros de referencia sobre SQL

Documentacin especfica sobre PostgreSQL

Procedimientos y Articulos

You might also like