Está en la página 1de 65

P PROYECTO ROYECTO

F FORTALECIMIENTO ORTALECIMIENTO DE DE LAS LAS CAPACIDADES CAPACIDADES TIC TIC


EN EN P PY YME MES S Y Y G GOBIERNOS OBIERNOS L LOCALES OCALES
MEDIANTE MEDIANTE EL EL USO USO DE DE SOFTWARE SOFTWARE LIBRE LIBRE
M MATERIAL ATERIAL DE DE A APOYO POYO
C CURSO URSO B BSICO SICO DE DE
A ADMINISTRACIN DMINISTRACIN DEL DEL SGBD P SGBD POSTGRE OSTGRESQL SQL
Elaborado por:
Ing. Patricia Araya Obando
Programa de las Naciones Unidas Para el Desarrollo
Universidad nacional
Marzo 2!
T TABLA ABLA DE DE CONTENIDOS CONTENIDOS
Tabla de contenidos..............................................................................................................................................................2
Justificacin..........................................................................................................................................................................3
Objetivo General...................................................................................................................................................................3
Objetivos Especficos...........................................................................................................................................................3
Metodologa..........................................................................................................................................................................4
e!uisitos "ni"os..............................................................................................................................................................4
#onociendo $ostgre%&'......................................................................................................................................................(
)nstalacin*............................................................................................................................................................................(
+tili,ando apt-get install......................................................................................................................................................(
+tili,ando aptitude................................................................................................................................................................
)nfor"acin acerca de la instalacin..................................................................................................................................../
El servicio de $ostgre%&'..................................................................................................................................................../
#onfigurar postgres!l por pri"er ve,.................................................................................................................................01
2esinstalar $ostgre%&'......................................................................................................................................................03
+tili,aci4n b5sica de la ter"inal interactiva.......................................................................................................................0.
Tipos de datos relevantes en $ostgre%&' .........................................................................................................................06
Tipos de datos del est5ndar %&'3 en $ostgre%&'.............................................................................................................06
Tipos de datos e7tendidos por $ostgre%&'........................................................................................................................0/
Tipos de datos de $ostgre%&'............................................................................................................................................21
Operaciones sobre tablas 8 datos........................................................................................................................................22
%c9e"as..............................................................................................................................................................................23
Eje"plos.............................................................................................................................................................................23
$er"isos 8 seguridad..........................................................................................................................................................24
Eli"inar Es!ue"as.............................................................................................................................................................24
:unciones de %c9e"as........................................................................................................................................................24
public;asis;clie;cont;cred;inve;"asi;"isc;"utu;pres;rr99;segu;serv;sise;teso<....................................................................24
'i"itaciones.......................................................................................................................................................................24
2isparadores =triggers> en $ostgre%&'..............................................................................................................................23
#aractersticas 8 reglas a seguir*........................................................................................................................................23
?ariables especiales en $'@$G%&'...................................................................................................................................2(
Eje"plos pr5cticos..............................................................................................................................................................2.
Algunas anotaciones...........................................................................................................................................................3(
Berencia..............................................................................................................................................................................36
$articiona"iento de Tablas*...............................................................................................................................................40
Eje"plo...............................................................................................................................................................................40
#onsultas entre bases de datos............................................................................................................................................43
Tablas te"porales...............................................................................................................................................................43
Arc9ivos #%?.....................................................................................................................................................................43
Berra"ientas gr5ficas para la ad"inistracin de bases de datos en $ostgre%&'..............................................................4.
$GA2M)C3........................................................................................................................................................................4.
2b?isuali,er.......................................................................................................................................................................30
#onsultas entre bases de datos*..........................................................................................................................................3.
outine ?acuu"ing............................................................................................................................................................3.
Actuali,acin de $lanificacin de Estadstica ...................................................................................................................3.
Autovacuu" 2ae"on.........................................................................................................................................................36
utina de )nde7acin .........................................................................................................................................................36
espaldos............................................................................................................................................................................3/
$GD2+M$..........................................................................................................................................................................3/
$oint )n Ti"e ecover8 =$)T>.........................................................................................................................................(1
eplicacin.........................................................................................................................................................................(4
2
J JUSTIFICACIN USTIFICACIN
Bo8 en da; casi la totalidad de los siste"as de infor"acin e7istentes consiste en el uso de
%iste"as Gestores de Eases de 2atos =%GE2> relacionales. En el "ercado del softFare e7isten
"Gltiples opciones propietarias bien conocidas para suplir esta necesidad; sin e"bargo en el
presente ta"biHn e7isten opciones libres !ue; por su escasa capacidad publicitaria; son
notable"ente desconocidas; al "enos en nuestro entorno. Este curso pretende enseIar las
caractersticas b5sicas del %GE2 $ostgre%&' co"o alternativa en prestaciones 8 robuste, para
cual!uier tipo de de"anda a los %GE2 propietarios "5s e7tendidos.
O OBJETIVO BJETIVO G GENERAL ENERAL
Erindar al estudiante los conoci"ientos necesarios para !ue sea capa, de gestionar bases de datos
utili,ando el %GE2 $ostgres!l.
O OBJETIVOS BJETIVOS E ESPECFICOS SPECFICOS
Al final del curso el estudiante estar5 en capacidad de*
0. 'levar a cabo el proceso de instalacin 8 configuracin de $ostgres!l 6.3.
2. #onfigurar el %GE2 de acuerdo con los recursos del e!uipo.
3. Asegurar los datos "ediante "ecanis"os de autenticacin de clientes.
4. eali,ar operaciones b5sicas de tablas 8 datos "ediante el lenguaje $%&'.
3. Ad"inistrar gr5fica"ente bases de datos.
(. 'levar a cabo rutinas de "anteni"iento 8 "onitoreo de las bases de datos.
.. espaldar 8 recuperar los datos.
6. +tili,ar algunas caractersticas avan,adas del %GE2 co"o lo son dbliJ; 9erencia 8
particiona"iento de tablas.
/. Bacer replicacin de bases de datos.
3
M METODOLOGA ETODOLOGA
El objetivo principal de este "anual es lograr trans"itir al estudiante los conoci"ientos necesarios
para !ue sea capa, de gestionar bases de datos utili,ando el %GE2 $ostgres!l.
$ara ello se 9ar5 uso de otros "ateriales adicionales; los cuales deben ser provedos al estudiante; 8a
!ue este docu"ento 9ar5 referencia a ellos.
R REQUISITOS EQUISITOS MNIMOS MNIMOS
Este curso est5 dirigido a personas con conoci"ientos b5sicos de*
#o"putacin; =especial"ente en el siste"a operativo GC+@'inu7>.
'enguaje %&' Est5ndar.
'a distribucin GC+@'inu7 sobre la
!ue est5 opti"i,ado 8 probado este
"anual es 2ebian 'enn8 3.1.3
4
CAPTULO 1
CAPTULO 1
INSTALACIN Y CONFIGURACIN INSTALACIN Y CONFIGURACIN
DEL SGBD DEL SGBD
C CONOCIENDO ONOCIENDO P POSTGRE OSTGRESQL SQL
$ara conocer un poco de $ostgre%&'8 sus caractersticas el estudiante deber5 iniciar le8endo el
artculo K$ostgre%&' la alternativa a los %GE2 propietariosL; de #arlos Juan Martn $Hre,; el cual
se encuentra en los "ateriales adicionales del curso.
I INSTALACIN NSTALACIN: :
$ostgre%&' se puede instalar de varias for"as; a continuacin presentare"os las dos "as co"unes
utili,ando los repositorios; estas son* por "edio de apt-get install 8 por "edio de aptitude.
U UTILIZANDO TILIZANDO APT APT- -GET GET INSTALL INSTALL
Abrir una ter"inal.
0.#onvertirse en usuario root*
$su
2.Escribir la contraseIa de root.
Ma co"o usuario root*
#apt-get install postgresql
%e "ostrar5*
'e8endo lista de pa!uetes... Bec9o
#reando 5rbol de dependencias
'e8endo la infor"acin de estado... Bec9o
%e instalar5n los siguientes pa!uetes e7tras*
postgres!l-6.3 postgres!l-co""on
$a!uetes sugeridos*
oidentd ident-server
%e instalar5n los siguientes pa!uetes C+E?O%*
postgres!l postgres!l-6.3 postgres!l-co""on
1 actuali,ados; 3 se instalar5n; 1 para eli"inar 8 1 no actuali,ados.
%e necesita descargar 1E@336(JE de arc9ivos.
%e utili,ar5n 04.6ME de espacio de disco adicional despuHs de esta operacin.
N2esea continuar O%@nPQ
"eclear s
%e "ostrar5 infor"acin adicional donde se solicitar5 !ue se presione la tecla enter 8 listo; tene"os
postgres instalado.
(
U UTILIZANDO TILIZANDO APTITUDE APTITUDE
#o"o usuario root*
#aptitude
%e abrir5 la aplicacin de instalacin de pa!uetes*
Esta aplicacin utili,a varias teclas para reali,ar acciones; por eje"plo*
u R Actuali,ar el repositorio
+ R )nstalar actuali,aciones de seguridad
@ R $ara buscar un pa!uete 9acia abajo
S R $ara buscar un pa!uete 9acia arriba
T R $ara instalar un pa!uete 8 sus dependencias.
- R $ara desinstalar un pa!uete
D R $ara desinstalar un pa!uete 8 purgar los arc9ivos.
! R $ara salir
Entonces; para instalar el pa!uete de postgres tecleare"os #$%& se "ostrar5 la caja de di5logo de
bGs!ueda; seguida"ente se escribe el no"bre del pa!uete postgres!l; confor"e se va escribiendo el
no"bre del pa!uete se va reali,ando la bGs!ueda.
Teclea"os enter para cerrar la caja de di5logo de bGs!ueda o 9ace"os clic en #Aceptar%.
.
Eien; a9ora !ue 9e"os encontrado el pa!uete a instalar lo "arca"os tecleando un #'%& lo cual
"arcar5 el pa!uete en verde; as co"o todas las dependencias a instalar.
A continuacin teclea"os #g% para !ue se "uestren todos los pa!uetes a instalar
8 por Glti"o teclea"os #g% nueva"ente para !ue se dH la instalacin. En la consola se "ostrar5*
$reconfigurando pa!uetes ...
%eleccionando el pa!uete postgres!l-client-co""on previa"ente no seleccionado.
='e8endo la base de datos ...
0/1263 arc9ivos 8 directorios instalados actual"ente.>
2ese"pa!uetando postgres!l-client-co""on =de ...@postgres!l-client-co""onD/4lenn80Dall.deb> ...
%eleccionando el pa!uete postgres!l-client-6.3 previa"ente no seleccionado.
2ese"pa!uetando postgres!l-client-6.3 =de ...@postgres!l-client-6.3D6.3.6-1lenn80Di36(.deb> ...
%eleccionando el pa!uete postgres!l-co""on previa"ente no seleccionado.
2ese"pa!uetando postgres!l-co""on =de ...@postgres!l-co""onD/4lenn80Dall.deb> ...
%eleccionando el pa!uete postgres!l-6.3 previa"ente no seleccionado.
2ese"pa!uetando postgres!l-6.3 =de ...@postgres!l-6.3D6.3.6-1lenn80Di36(.deb> ...
%eleccionando el pa!uete postgres!l previa"ente no seleccionado.
2ese"pa!uetando postgres!l =de ...@postgres!lD6.3.6-1lenn80Dall.deb> ...
$rocesando disparadores para "an-db ...
#onfigurando postgres!l-client-co""on =/4lenn80> ...
#onfigurando postgres!l-client-6.3 =6.3.6-1lenn80> ...
#onfigurando postgres!l-co""on =/4lenn80> ...
supportedDversions* UAC)CG* +nJnoFn 2ebian release* 3.1.3
#onfigurando postgres!l-6.3 =6.3.6-1lenn80> ...
%tarting $ostgre%&' 6.3 database server* "ain.
#onfigurando postgres!l =6.3.6-1lenn80> ...
$resione ECTE para continuar.
Teclea"os enter 8 listoVV tene"os postgres instalado.
$ara salir de aptitude teclea"os #(% 8 9ace"os clicJ en #)*%
6
I INFORMACIN NFORMACIN ACERCA ACERCA DE DE LA LA INSTALACIN INSTALACIN
+na ve, !ue se instal $ostgre%&'se 9an creado algunas carpetas !ue debe"os conocer*
Todos los arc9ivos de configuracin se encuentran en la carpeta
0

@etc@postgres!l@6.3@"ain@
El cluster co"o tal=progra"as !ue se ejecutan 8 en donde viven las bases de datos> se encuentra en*
@var@lib@postgres!l@6.3@"ain@@var@lib@postgres!l@6.3@"ain@
En caso de errores es necesario consultar el log del %GE2; Hste se encuentra en*
@var@log@postgres!l@postgres!l-6.3-"ain.log
8 puede ser consultado "ediante el co"ando*
tail -f /var/log/postgresql/postgresql-8.3-main.log
Este co"ando ir5 "ostrando en la ter"inal todos los ca"bios !ue se lleven a cabo en el log.
E EL L SERVICIO SERVICIO DE DE P POSTGRE OSTGRESQL SQL
$ostgres 9a sido instalado co"o un servicio; el cual se iniciar5 auto"atica"ente una ve, !ue se
arran!ue el siste"a operativo.
$ara detener el servicio*
/etc/init.d/postgresql-8.3 stop
$ara iniciar el servicio*
/etc/init.d/postgresql-8.3 start
$ara reiniciar el servicio*
/etc/init.d/postgresql-8.3 restart
$ara recargar la configuracin del servicio*
/etc/init.d/postgresql-8.3 reload
0 E' nG"ero 6.3 corresponde a la versin de postgres !ue se 9a instalado; por lo !ue puede variar. En caso de otras
distribuciones de postgres la ruta sera @usr@local@pgs!l@data
/
#ual!uier "odificacin !ue se desee reali,ar sobre
Hstas carpetas; deber5 reali,arse co"o usuario root.
C CONFIGURAR ONFIGURAR POSTGRESQL POSTGRESQL POR POR PRIMER PRIMER VEZ VEZ
Al instalarse postgres se crea el usuario postgres. %ola"ente el usuario root puede convertirse en
usuario postgres; para lo cual se debe*
En una ter"inal*
0. #onvertirse en usuario root*
$su
2. Escribir la contraseIa de root.
3. #onvertirse en usuario postgres*
#su postgres
El s9ell a9ora se ver5* postgresWno"bredela"a!uina.
Probando postgres:
Al escribir ps!l se entra a una ter"inal interactiva de postgres; en donde se pueden llevar a cabo
todas las funcionalidades de postgres.
$psql template1
'os te"plates son para !ue cuando se crea una base de datos tenga ciertas cosas por defecto; es
decir; todo lo !ue se apli!ue sobre te"plate0 lo tendr5n las bases de datos !ue se creen a partir de
ese "o"ento; 8a !ue en postgres cuando se crea una nueva base de datos; lo !ue se 9ace es una
copia de te"plate0.
%e ver5 co"o se "uestra a continuacin*
A continuacin va"os a configurar postgres para poder entrar a la ter"inal interactiva con el
usuario postgres con contraseIa; sin tener !ue convertirse en root.
template1=#alter user postgres with password 'password'
01
$ara crear un usuario ad"inistrador !ue pueda crear bases de datos*
template1=#create user admin with password 'admin' created!
$ara salir del editor ps!l*
temptate1=#"q
$ara convertirse en usuario root nueva"ente*
$e#it
A continuacin 9are"os unas pruebas*
#psql template1 -$ admin
'o anterior dar5 un error debido a la configuracin por defecto !ue tiene postgres; para corregirlo
va"os a editar editar el arc9ivo pgD9ba.conf; !ue se encuentra en @etc@postgres!l@6.3@"ain
Euscare"os las lnea*
local all postgres ident same+ser
8 la ca"biare"os por*
local all postgres md,
Al igual con*
local all all ident same+ser
#a"biarla por
local all all md,
Ba8 !ue recargar la configuracin de postgres lo cual se 9ace con el siguiente co"ando; co"o
usuario root*
#/etc/init.d/postgresql-8.3 reload
Bare"os otra prueba*
psql template1 -$ admin
A9ora si nos solicitar5 la contraseIa del usuario ad"inVV
$ostgre%&' se puede e"pe,ar a utili,ar sin necesidad de configurarlo. %i va"os a utili,ar
$ostgre%&' para algo i"portante 8 con cierto volu"en de datos 8 usuarios es i"prescindible !ue lo
configure"os para dic9o trabajo. 'a configuracin inicial de postgres no to"a en cuenta la cantidad
de "e"oria AM de la "5!uina; por lo !ue 9a8 !ue ajustar algunos valores para !ue lo 9aga.
00
-on.ig+raci/n
2
El co"porta"iento de $ostgre%&' en nuestro siste"a es controlado por "edio de tres arc9ivos de
configuracin !ue se encuentran en el directorio de datos donde se iniciali,a el cluster $ostgre%&'.
2ic9o directorio es @etc@postgres!l@6.3@"ain@ . Estos tres arc9ivos son*
X pg01ba.con.* !ue se utili,a para definir los diferentes tipos de accesos !ue un usuario tiene
en el cluster.
X pg0ident.con.* !ue se utili,a para definir la infor"acin necesaria en el caso !ue utilice"os
un acceso del tipo ident en pgD9ba.conf .
X postgres(l.con.* En este arc9ivo pode"os ca"biar todos los par5"etros de configuracin
!ue afectan al funciona"iento 8 al co"porta"iento de $ostgre%&' en nuestra "a!uina.
$asa"os a continuacin a e7plicar los ca"bios "as i"portantes !ue pode"os 9acer en algunos de
estos arc9ivos.
Arc1ivo pg01ba.con.
Este arc9ivo se utili,a para definir co"o; donde 8 desde !ue sitio un usuario puede utili,ar el cluster
$ostgre%&'. Todas las lineas !ue e"piecen con el caracter # se interpretan co"o co"entarios. El
resto debe de tener el siguiente for"ato*
[Tipoconexin][database][usuario][IP][Netmask][Tipoautenticacin][opciones]
2ependiendo del tipo de cone7in 8 del tipo de autenticacin; O)$P;OCet"asJP 8 OopcionesP pueden
ser opcionales. ?a"os a e7plicar un poco co"o definir las reglas de acceso.
El tipo de cone7in puede tener los siguientes valores; local; 9ost; 9ostssl 8 9ostnossl. El tipo de
"Htodo puede tener los siguientes valores; trust; reject; "d3; cr8pt; passFord; Jrb3; ident; pa" o
ldap.
+na serie de eje"plos nos a8udar5n a co"prender "ejor co"o pode"os configurar diferentes
accesos al cluster $ostgre%&'.
Ejemplo 1 .- Acceso por tcp@ip =red> a la base de datos test110; co"o usuario test desde la
co"putadora con )$ 01.1.1.011; 8 "Htodo de autenticacin "d3*
1ost test! test !...! 2,,.2,,.2,,.2,, md,
Esta "is"a entrada se podra escribir ta"biHn con la "ascara de red en notacin #)2*
1ost test! test !...!$22 md,
Ejemplo 2 .- Acceso por tcp@ip =red> a la base de datos test110; co"o usuario test desde todos los
ordenadores de la red 01.1.1.1; con "ascara de red 233.233.233.1 =234 ordenadores en total> 8
"Htodo de autentificar "d3*
1ost test! test !... 2,,.2,,.2,,. md,
Esta "is"a entrada se podra escribir ta"biHn con la "ascara de red en notacin #)2*
1ost test! test !...$23 md,
2 To"ado de 9ttp*@@FFF.linu7-es.org@node@((1; )ntroduccin a $ostgres&'-#onfiguracin; El rincn de 'inu7
02
Ejemplo 3 .- Acceso por tcp@ip =red>; encriptado; a todas las bases de datos de nuestro cluster; co"o
usuario test desde la co"putadora con )$ 01.1.1.011; 8 la co"putadora 01.0.0.011 8 "Htodo de
autenticacin "d3 =necesita"os dos entradas en nuestro arc9ivo pgD9ba.conf*
1ostssl all test !...! 2,,.2,,.2,,.2,, md,
1ostssl all test !.!.!.! 2,,.2,,.2,,.2,, md,
Ejemplo 4.- 2enegar el acceso a todos las bases de datos de nuestro cluster al usuario test; desde
todos los ordenadores de la red 01.1.1.1@24 8 dar acceso al resto del "undo con el "Htodo "d3*
1ost all test !...$23 re4ect
1ost all all ...$ md,
As podra"os seguir jugando con todas las posibilidades !ue nos brinda este arc9ivo de
configuracin. $or supuesto !ue las bases de datos 8 usuarios usados en este arc9ivo tienen !ue
e7istir en nuestro cluster para !ue todo funcione.
$ara poner en produccin los ca"bios en este arc9ivo tendre"os !ue decirle a $ostgre%&' !ue
vuelva a leerlo. Easta con un si"ple 'reload' =@etc@init.d@postgres!l-6.3 reload> desde la lnea de
co"andos o con la funcin pgDreloadDconf=> co"o usuario postgres desde ps!l; el cliente
$ostgre%&'.= postgresRY %E'E#T pgDreloadDconf=><>
$ara una docu"entacin detallada sobre el arc9ivo pgD9ba.conf; consultar la seccin #9apter 21.
#lient Aut9entication de la docu"entacin oficial de $ostgre%&'.
Arc1ivo postgres(l.con.
'os ca"bios !ue se realicen en este arc9ivo afectar5n a todas las bases de datos !ue tenga"os
definidas en nuestro cluster $ostgre%&'. 'a "a8ora de los ca"bios se pueden poner en produccin
con un si"ple 'reload' =@etc@init.d@postgres!l-6.3 reload>; otros ca"bios necesitan !ue arran!ue"os
de nuevo nuestro cluster =@etc@init.d@postgres!l-6.3 restart>
Mas infor"acin sobre todos los par5"etros !ue pode"os ca"biar en este arc9ivo; !ue afectan 8
co"o se pueden poner en produccin se puede encontrar en la seccin 0.. %erver #onfiguration de
la docu"entacin oficial de $ostgre%&'.
A continuacin va"os a ver los par5"etros "as i"portantes !ue debera"os ca"biar si e"pe,a"os
a usar $ostgre%&' para un uso serio 8 si !uere"os sacarle el "57i"o partido a nuestra "5!uina.
ma50connections: CG"ero "57i"o de clientes conectados a la ve, a nuestras bases de datos.
2ebera"os de incre"entar este valor en proporcin al nu"ero de clientes concurrentes en nuestro
cluster $ostgre%&'. +n buen valor para e"pe,ar es el 011*
"a7Dconnections R 011
s1ared0b+..ers: Este par5"etro es i"portantsi"o 8 define el ta"aIo del buffer de "e"oria
utili,ado por $ostgre%&'. Co por au"entar este valor "uc9o tendre"os "ejor respuesta. En un
servidor dedicado pode"os e"pe,ar con un 23Z del total de nuestra "e"oria. Cunca "as de 0@3
=33Z> del total. $or eje"plo; en un servidor con 4Gb8tes de "e"oria; pode"os usar 0124ME
co"o valor inicial.
s9aredDbuffers R 0124ME
03
6or70mem: +sada en operaciones !ue contengan O2E EM; 2)%T)C#T; joins; .... En un
servidor dedicado pode"os usar un 2-4Z del total de nuestra "e"oria si tene"os sola"ente unas
pocas sesiones =clientes> grandes. nunca "as de AM@nu".cone7iones. #o"o valor inicial
pode"os usar 6 Mb8tes; para aplicaciones Feb; 8 9asta 026ME para una aplicacin de
dataFare9ouse.
ForJD"e" R 6ME
maintenance06or70mem: +sada en operaciones del tipo ?A#++M; ACA'M[E; #EATE
)C2E\; A'TE TAE'E; A22 :OE)GC ]EM. %u valor depender5 "uc9o del ta"aIo de
nuestras bases de datos. $or eje"plo; en un servidor con 4Gb8tes de "e"oria; pode"os usar
23(ME co"o valor inicial. 'a fr"ula es 0@0( de nuestra "e"oria AM.
"aintenanceDForJD"e" R 23(ME
e..ective0cac1e0size: $ar5"etro usado por el ^!uer8 planner^ de nuestro "otor de bases de datos
para opti"i,ar la lectura de datos. En un servidor dedicado pode"os e"pe,ar con un 31Z del total
de nuestra "e"oria. #o"o "57i"o unos 2@3 =((Z> del total. $or eje"plo; en un servidor con
4Gb8tes de "e"oria; pode"os usar 2146ME co"o valor inicial.
effectiveDcac9eDsi,e R 2146ME
c1ec7point0segments: Este par5"etro es "u8 i"portante en bases de datos con nu"erosas
operaciones de escritura =insert;update;delete>. $ara e"pe,ar pode"os e"pe,ar con un valor de (4.
En grandes bases de datos con "uc9os Gb8tes de datos escritos pode"os au"entar este valor 9asta
026-23(.
c9ecJpointDseg"ents R (4
Par8metros del 7ernel:
Es "u8 i"portante tener en cuenta !ue al au"entar los valores por defecto de "uc9os de estos
par5"etros; tendre"os !ue au"entar los valores por defecto de algunos par5"etros del Jernel de
nuestro siste"a. )nfor"acin detallada de co"o 9acer esto se encuentra en la seccin 0(.4.
Managing ]ernel esources de la docu"entacin oficial de $ostgre%&'.
+no de los valores "5s i"portantes es s9""a7; el valor !ue le va"os a asignar es igual a 0@3 de la
AM disponible en E8tes.
En el arc9ivo @etc@s8sctl agregar*
7ernel.s1mma5 9 !$2 de la :AM disponible en bytes.
En consola; co"o usuario root*
#s%sctl -w &ernel.shmma# = 0@3 de la AM disponible en b8tes.
04
D DESINSTALAR ESINSTALAR P POSTGRE OSTGRESQL SQL
En caso !ue se desee desintalar postgres!l; co"o usuario root*
#aptitude purge postgresql
$ara borrar los arc9ivos de configuracin*
# aptitude search 'c
# aptitude purge 'c
03
CAPTULO 2
CAPTULO 2
SQL SQL
M
CARACTERSTICAS PARTICULARES CARACTERSTICAS PARTICULARES
DEL SGBD DEL SGBD
U UTILIZACIN TILIZACIN BSICA BSICA DE DE LA LA TERMINAL TERMINAL INTERACTIVA INTERACTIVA
$ara ingresar a la ter"inal con el usuario user a la base de datos base*
$psql -$ user !ase
$ara ingresar a una base de datos en otro e!uipo*
$psql -$ user -h host -d !asededatos
donde 9ost es la direccin ip del e!uipo re"oto o el no"bre de un 9ost !ue estH registrado en el
arc9ivo @etc@9osts
$ara cargar un script s!l en una base de datos*
$psql -$ user !asededatos ( archivo
+na ve, en la ter"inal*
la ter"inal nos indica !ue esta"os en la base de datos te"plate0.
$ara conectarse a otra base de datos utili,a"os ;c*
$ara cargar un script s!l desde dentro de la ter"inal*
"i /home/usuario/archivo
En esta ter"inal pode"os escribir los co"andos s!l; sola"ente se van a ejecutar cuando se escriba
un #<%*
$ara conocer "as co"andos de la ter"inal interactiva
")
0.
T TIPOS IPOS DE DE DATOS DATOS RELEVANTES RELEVANTES EN EN P POSTGRE OSTGRESQL SQL
#o"o todos los "anejadores de bases de datos; $ostgre%&' i"ple"enta los tipos de datos
definidos para el est5ndar %&'3 8 au"enta algunos otros. A continuacin se presentan los tipos de
datos de postgres.
T TIPOS IPOS DE DE DATOS DATOS DEL DEL ESTNDAR ESTNDAR SQL3 SQL3 EN EN P POSTGRE OSTGRESQL SQL
"ipos de datos del est8ndar )=>2 en Postgre)=>
Tipo en $ostgres #orrespondiente en %&'3 2escripcin
bool boolean
valor lgico o booleano
=true@false>
c9ar=n> c9aracter=n>
cadena de car5cteres de
ta"aIo fijo
date date fec9a =sin 9ora>
float4@6 float=6(Y6(>
nG"ero de punto flotante con
precisin 6(Y6(
float6 real; double precision
nG"ero de punto flotante de
doble precisin
int2 s"allint entero de dos b8tes con signo
int4 int; integer
entero de cuatro b8tes con
signo
int4 deci"al=6.Y6.> nG"ero e7acto con 66Y66
int4 nu"eric=6.Y6.> nG"ero e7acto con 6/Y6/
"one8 deci"al=/;2> cantidad "onetaria
ti"e ti"e
9ora en 9oras; "inutos;
segundos 8 centHsi"as
ti"espan interval intervalo de tie"po
ti"esta"p ti"esta"p Fit9 ti"e ,one fec9a 8 9ora con ,onificacin
varc9ar=n> c9aracter var8ing=n>
cadena de car5cteres de
ta"aIo variable
06
T TIPOS IPOS DE DE DATOS DATOS EXTENDIDOS EXTENDIDOS POR POR P POSTGRE OSTGRESQL SQL
"ipos de datos e5tendidos en Postgre)=>
Tipo 2escripcin
bo7 caja rectangular en el plano
cidr
direccin de red o de host en )$
versin 4
circle crculo en el plano
inet
direccin de red o de host en )$
versin 4
int6 entero de oc9o b8tes con signo
line lnea infinita en el plano
lseg seg"ento de lnea en el plano
pat9
tra8ectoria geo"Htrica; abierta o
cerrada; en el plano
point punto geo"Htrico en el plano
pol8gon
tra8ectoria geo"Htrica cerrada en el
plano
serial identificador nu"Hrico Gnico
"ipos de datos A+toincrementales?serial@:
$ara declarar un ca"po co"o autoincre"ental*
create table tabla =
campo serial
ca"po2 _.
ca"po3...
>
$ara 9acer un insert*
)nsert into table =ca"po2;ca"po3> values=... ;...>
Especificar los de"as ca"pos de la tabla a insertar; no incluir el ca"po tipo serial.
$ara agregarle un ca"po incre"ental a una tabla*
Co e7iste alter table add colu"n ca"po serial; por lo !ue 9a8 !ue 9acer*
A>"E: "AA>E tabla ADD campo intB<
-:EA"E )E=UEN-E nombredelasec+encia0se(<
A>"E: "AA>E tabla A>"E: -O>UMN campo )E" DECAU>"
ne5tval?nombredelasec+encia0se(@<
UPDA"E tabla )E" campo9ne5tval?Dnombredelasec+encia0se(D@<
0/
T TIPOS IPOS DE DE DATOS DATOS DE DE P POSTGRE OSTGRESQL SQL
"ipo Descripci/n
*+, conjunto de tuplas
a!stime fec9a 8 9ora absoluta de rango li"itado =+ni7 s8ste" ti"e>
aclitem lista de control de acceso
!ool booleano ^true^@^false^
!o# rect5ngulo geo"Htrico ^=i,!uierda abajo; derec9a arriba>^
!pchar car5cteres rellenos con espacios; longitud especificada al "o"ento de creacin
!%tea arreglo de b8tes de longitud variable
char un slo car5cter
cid command identifier type; identificador de secuencia en transacciones
cidr direccin de red
circle crculo geo"Htrico ^=centro; radio>^
-ate fec9a AC%) %&' ^aaaa-""-dd^
datetime fec9a 8 9ora ^aaaa-""-dd 99*""*ss^
filename no"bre de arc9ivo usado en tablas del siste"a
float. nG"ero real de precisin si"ple de 4 b8tes
float8 nG"ero real de precisin doble de 6 b8tes
inet direccin de red
int/ nG"ero entero de dos b8tes; de -32J a 32J
int/8 6 nu"eros enteros de 2 b8tes; usado interna"ente
int. nG"ero entero de 4 b8tes; -2E to 2E
int8 nG"ero entero de 6 b8tes; /1Y/106 dgitos
line lnea geo"Htrica ^=pt0; pt2>^
lseg seg"ento de lnea geo"Htrica ^=pt0; pt2>^
macaddr direccin MA#
mone% unidad "onetaria ^`d;ddd.cc^
name tipo de 30 car5cteres para guardar identificadores del siste"a
numeric nG"ero de precisin "Gltiple
oid tipo de identificacin de objetos
oid8 arreglo de 6 oids; utili,ado en tablas del siste"a
path tra8ectoria geo"Htrica ^=pt0; ...>^
point punto geo"Htrico ^=7; 8>^
21
"ipo Descripci/n
pol%gon polgono geo"Htrico ^=pt0; ...>^
regproc procedi"iento registrado
reltime intervalo de tie"po de rango li"itado 8 relativo =+ni7 delta ti"e>
smgr "anejador de al"acena"iento =storage manager>
te#t cadena de car5cteres nativa de longitud variable
tid tipo de identificador de tupla; locali,acin fsica de tupla
time 9ora AC%) %&' ^99*""*ss^
timespan intervalo de tie"po ^W anu"berb aunitsb^
timestamp fec9a 8 9ora en for"ato )%O de rango li"itado
tinterval intervalo de tie"po ^=absti"e; absti"e>^
un&nown tipo desconocido
varchar
cadena de car5cteres sin espacios al final; longitud especificada al "o"ento de
creacin
#id identificador de transaccin
20
O OPERACIONES PERACIONES SOBRE SOBRE TABLAS TABLAS Y Y DATOS DATOS
En los "ateriales adicionales del curso se encuentra una carpeta lla"ada KEase de 2atos de
Eje"ploL; la cual contiene scripts con eje"plos de operaciones b5sicas sobre tablas.
El arc9ivo diagrama0EE:.pd. contiene el "odelo Entidad-elacin de la Ease de 2atos a utili,ar
co"o eje"plo.
$ara repasar las operaciones b5sicas sobre tablas el estudiante debe estudiar el arc9ivo lla"ado*
base0de0datos.s(l
cons+ltas0res+eltas.s(l
$ara ver un resG"en de las funciones de $ostgre%&'; el estudiante debe estudiar el arc9ivo*
postgres(l0c1eat0s1eet.pd.
22
S SCEMAS CEMAS
+n es!ue"a es esencial"ente un espacio de no"bres* contiene el no"bre de objetos =tablas; tipos
de datos; funciones 8 operadores>; cu8os no"bres pueden duplicar los de otros objetos e7istentes en
otros es!ue"as. 'os objetos con no"bre se accede bien por ccalificacinc de sus no"bres con el
no"bre de es!ue"a co"o prefijo; o "ediante el estableci"iento de una ruta de bGs!ueda !ue
inclu8e el es!ue"a deseado . +n co"ando #EATE especifica un no"bre de objeto no calificado;
crea el objeto en el es!ue"a actual .
E EJEMPLOS JEMPLOS
Funcionalidad bsica:
test=# 01+2,+ *03+42 foo
CREATE SCHEMA
test=# 01+2,+ ,256+ foo.info 7id 89,: t#t ,+;,<
CREATE TABLE
test=# 89*+1, 89,= foo.info >26$+*71: ',his is schema foo'<
INSERT 23062 1
test=# 01+2,+ *03+42 !ar
CREATE SCHEMA
test=# 01+2,+ ,256+ !ar.info 7id 89,: t#t ,+;,<
CREATE TABLE
test=# 89*+1, 89,= !ar.info >26$+*71: ',his is schema !ar'<
INSERT 23069 1
test=# *+6+0, foo.info.t#t: !ar.info.t#t
test-# ?1=4 foo.info: !ar.info
test-# @3+1+ foo.info.id=!ar.info.id
txt | txt
--------------------+--------------------
This is schema !! | This is schema "a#
$1 #!%&
Cambiar de schema:
test=# *+, searchApath ,= foo
SET
'a#a cam"ia# (e#ma)e)teme)te e* schema e) ca+a c!)exi,)-
26,+1 $*+1 test *+, searchApath ,= !ar:foo
E* cam"i! s.#ti#/ eect! s!*ame)te +es(.0s +e c!)ecta#se +e ).e1!2
test=# *+, searchApath ,= !ar: foo
SET
23
test=# *+6+0, t#t ?1=4 info
txt
--------------------
This is schema "a#
$1 #!%&
test=# *+6+0, B ?1=4 infoAview
ERR3R- Re*ati!) 4i)!51ie%4 +!es )!t exist
test67 SELECT 8 9R3M (."*ic2i)!51ie%:
!! | "a#
--------------------+--------------------
This is schema !! | This is schema "a#
P PERMISOS ERMISOS Y Y SEGURIDAD SEGURIDAD
L!s es;.emas s!*ame)te (.e+e) se# c#ea+!s (!# *!s s.(e#.s.a#i!s2
'a#a c#ea# .) es;.ema (a#a !t#! .s.a#i! .se-
CREATE SCHEMA ta#<a) A=TH3RI>ATI3N ta#<a):
!
CREATE SCHEMA A=TH3RI>ATI3N ta#<a):
E ELIMINAR LIMINAR E ESQUEMAS SQUEMAS
?R3' SCHEMA ta#<a):
Si @a existe) +at!s e) e* es;.ema-
?R3' SCHEMA ta#<a) CASCA?E:
F FUNCIONES UNCIONES DE DE S SCHEMAS CHEMAS
c.##e)t5schema$&
Ret!#)a e* )!m"#e +e* es;.ema act.a*2
c.##e)t5schemas$"!!*ea)&
Ret!#)a t!+!s *!s es;.emas e) sea#ch (ath
SET sea#ch5(ath T3
PUBLIC PUBLIC, ,ASIS ASIS, ,CLIE CLIE, ,CONT CONT, ,CE! CE!, ,IN"E IN"E, ,#ASI #ASI, ,#ISC #ISC, ,#UTU #UTU, ,PES PES, ,$$ $$, ,SE%U SE%U, ,SE" SE", ,SISE SISE, ,TESO TESO& &
L LIMITACIONES IMITACIONES
)! es (!si"*e t#a)se#i# !"Aet!s e)t#e es;.emasB (a#a e**!-
CREATE TABLE )e%5schema2m@ta"*e AS SELECT 8 9R3M !*+5schema2m@ta"*e
INSERT INT3 )e%5schema2m@ta"*e SELECT 8 9R3M !*+5schema2m@ta"*e:
24
D DISPARADORES ISPARADORES ! !TRIGGERS TRIGGERS" " EN EN P POSTGRE OSTGRESQL SQL
# #
+na de las funcionalidades disponibles en $ostgre%&' son los deno"inados disparadores =triggers>.
+n disparador no es otra cosa !ue una accin definida en una tabla de nuestra base de datos 8
ejecutada auto"5tica"ente por una funcin progra"ada por nosotros. Esta accin se activar5; segGn
la defina"os; cuando realice"os un IN)E:"; un UPDA"E un DE>E"E en la susodic9a tabla.
+n disparador se puede definir de las siguientes "aneras*
$ara !ue ocurra ACTE% de cual!uier )C%ET;+$2ATE 2E'ETE
$ara !ue ocurra 2E%$+E% de cual!uier )C%ET;+$2ATE 2E'ETE
$ara !ue se ejecute una sola ve, por co"ando %&' =state"ent-level trigger>
$ara !ue se ejecute por cada linea afectada por un co"ando %&' =roF-level trigger>
Esta es la definicin del co"ando %&' !ue se puede utili,ar para definir un disparador en una tabla.
-:EA"E ":IEEE: nombre F AECO:E G AC"E: H F IN)E:" G UPDA"E G DE>E"E I O: ... J H
ON tabla I CO: I EA-K J F :OL G )"A"EMEN" H J
EME-U"E P:O-EDU:E nombre de .+ncion ? arg+mentos @
Antes de definir el disparador tendre"os !ue definir el procedi"iento al"acenado !ue se ejecutar5
cuando nuestro disparador se active.
El procedi"iento al"acenado usado por nuestro disparador se puede progra"ar en cual!uiera de los
lenguajes de procedi"ientos disponibles; entre ellos; el proporcionado por defecto cuando se instala
$ostgre%&'; $'@pg%&'. Este lenguaje es el !ue utili,are"os en todos los eje"plos de este artculo.
C CARACTERSTICAS ARACTERSTICAS Y Y REGLAS REGLAS A A SEGUIR SEGUIR: :
'as reglas "5s i"portantes a tener en cuenta; cuando defina"os un disparador 8@ progra"e"os un
procedi"iento al"acenado !ue se va8a a utili,ar por un disparador*
El procedi"iento al"acenado !ue se va8a a utili,ar por el disparador debe de definirse e
instalarse antes de definir el propio disparador.
+n procedi"iento !ue se va8a a utili,ar por un disparador no puede tener argu"entos 8
tiene !ue devolver el tipo ctriggerc.
+n "is"o procedi"iento al"acenado se puede utili,ar por "Gltiples disparadores en
diferentes tablas.
$rocedi"ientos al"acenados utili,ados por disparadores !ue se ejecutan una sola ve, per
co"ando %&' =state"ent-level> tienen !ue devolver sie"pre C+''.
$rocedi"ientos al"acenados utili,ados por disparadores !ue se ejecutan una ve, per linea
afectada por el co"ando %&' =roF-level> pueden devolver una fila de tabla.
$rocedi"ientos al"acenados utili,ados por disparadores !ue se ejecutan una ve, per fila
afectada por el co"ando %&' =roF-level> 8 ACTE% de ejecutar el co"ando %&' !ue lo
lan,; pueden*
-etornar C+'' para saltarse la operacin en la fila afectada.
-d devolver una fila de tabla =E#O2>
3 To"ado de 9ttp*@@FFF.postgres!l-es.org@node@310; e #op8rig9t 211/ $osgre%&'-es.org - afael Martine,
23
$rocedi"ientos al"acenados utili,ados por disparadores !ue se ejecutan 2E%$+E% de
ejecutar el co"ando %&' !ue lo lan,; ignoran el valor de retorno; asi !ue pueden retornar
C+'' sin proble"as.
En resu"en; independendiente"ente de co"o se defina un disparador; el procedi"iento
al"acenado utili,ado por dic9o disparador tiene !ue devolver bien C+''; bien un valor
E#O2 con la "is"a estructura !ue la tabla !ue lan, dic9o disparador.
%i una tabla tiene "5s de un disparador definido para un "is"o evento
=)C%ET;+$2ATE;2E'ETE>; estos se ejecutar5n en orden alfabHtico por el no"bre del
disparador. En el caso de disparadores del tipo ACTE% @ roF-level; la file retornada por cada
disparador; se convierte en la entrada del siguiente. %i alguno de ellos retorna C+''; la operacin
ser5 anulada para la fila afectada.
$rocedi"ientos al"acenados utili,ados por disparadores pueden ejecutar sentencias %&' !ue a su
ve, pueden activar otros disparadores. Esto se conoce co"o disparadores en cascada. Co e7iste
l"ite para el nG"ero de disparadores !ue se pueden lla"ar pero es responsabilidad del
progra"ador el evitar una recursin infinita de lla"adas en la !ue un disparador se lla"e as "is"o
de "anera recursiva.
Otra cosa !ue tene"os !ue tener en cuenta es !ue; por cada disparador !ue defina"os en una tabla;
nuestra base de datos tendr5 !ue ejecutar la funcin asociada a dic9o disparador. El uso de
disparadores de "anera incorrecta inefectiva puede afectar significativa"ente al rendi"iento de
nuestra base de datos. 'os principiantes deberian de usar un tie"po para entender co"o funcionan 8
asi poder 9acer un uso correcto de los "is"os antes de usarlos en siste"as en produccin.
V VARIABLES ARIABLES ESPECIALES ESPECIALES EN EN PLPGSQL PLPGSQL
#uando una funcin escrita en $'@pg%&' es lla"ada por un disparador tene"os ciertas variable
especiales disponibles en dic9a funcin. Estas variables son las siguientes*
NEL
Tipo de dato E#O2< ?ariable !ue contiene la nueva fila de la tabla para las operaciones
)C%ET@+$2ATE en disparadores del tipo roF-level. Esta variable es C+'' en disparadores del
tipo state"ent-level.
O>D
Tipo de dato E#O2< ?ariable !ue contiene la antigua fila de la tabla para las operaciones
+$2ATE@2E'ETE en disparadores del tipo roF-level. Esta variable es C+'' en disparadores del
tipo state"ent-level.
"E0NAME
Tipo de dato na"e< variable !ue contiene el no"bre del disparador !ue est5 usando la funcin
actual"ente.
"E0LKEN
Tipo de dato te7t< una cadena de te7to con el valor EE:OE o A:TE dependiendo de co"o el
disparador !ue est5 usando la funcin actual"ente 9a sido definido
2(
"E0>ENE>
Tipo de dato te7t< una cadena de te7to con el valor OU o %TATEMECT dependiendo de co"o el
disparador !ue est5 usando la funcin actual"ente 9a sido definido
"E0OP
Tipo de dato te7t< una cadena de te7to con el valor )C%ET; +$2ATE o 2E'ETE dependiendo de
la operacin !ue 9a activado el disparador !ue est5 usando la funcin actual"ente.
"E0:E>ID
Tipo de dato oid< el identificador de objeto de la tabla !ue 9a activado el disparador !ue est5 usando
la funcin actual"ente.
"E0:E>NAME
Tipo de dato na"e< el no"bre de la tabla !ue 9a activado el disparador !ue est5 usando la funcin
actual"ente. Esta variable es obsoleta 8 puede desaparacer en el futuro. +sar TGDTAE'EDCAME.
"E0"AA>E0NAME
Tipo de dato na"e< el no"bre de la tabla !ue 9a activado el disparador !ue est5 usando la funcin
actual"ente.
"E0"AA>E0)-KEMA
Tipo de dato na"e< el no"bre de la sc9e"a de la tabla !ue 9a activado el disparador !ue est5
usando la funcin actual"ente.
"E0NA:E)
Tipo de dato integer< el nG"ero de argu"entos dados al procedi"iento en la sentencia #EATE
T)GGE.
"E0A:ENI J
Tipo de dato te7t arra8< los argu"entos de la sentencia #EATE T)GGE. El ndice e"pie,a a
contar desde 1. )ndices inv5lidos ="enores !ue 1 "a8ores@iguales !ue tgDnargs> resultan en
valores nulos.
E EJEMPLOS JEMPLOS PRCTICOS PRCTICOS
+na ve, !ue 9e"os visto la teoria b5sica de disparadores nada "ejor !ue unos cuantos eje"plos
pr5cticos para ver co"o se usan 8 defininen los disparadores en $ostgre%&'. =estos eje"plos 9an
sido co"probados en postgre%&' 6.3..>.
#rea"os una base de datos para utili,arla con nuestros eje"plos*
postgresCserverD'$ psql
Uelco"e to ps!l 6.3..; t9e $ostgre%&' interactive ter"inal.
T8pe* Scop8rig9t for distribution ter"s
S9 for 9elp Fit9 %&' co""ands
SQ for 9elp Fit9 ps!l co""ands
Sg or ter"inate Fit9 se"icolon to e7ecute !uer8
S! to !uit
2.
postgres=# 01+2,+ -2,252*+ testEE1
#EATE 2ATAEA%E
postgres=# "c testEE1
Mou are noF connected to database ctest110c.
testEE1=#
'o pri"ero !ue tene"os !ue 9acer es instalar el lenguaje plpgs!l si no lo tene"os instalado.
-:EA"E P:O-EDU:A> >ANEUAEE plpgs(l<
A9ora crea"os una tabla para poder definir nuestro pri"er disparador*
-:EA"E "AA>E n+meros?
n+mero bigint NO" NU>>&
c+adrado bigint&
c+bo bigint&
raiz2 real&
raiz2 real&
P:IMA:O PEO ?n+mero@
@<
2espuHs tene"os !ue crear una funcin en $'@pg%&' para ser usada por nuestro disparador.
Cuestra pri"era funcin es la "5s si"ple !ue se puede definir 8 lo Gnico !ue 9ar5 ser5 devolver el
valor C+''*
-:EA"E O: :EP>A-E CUN-"ION proteger0datos?@ :E"U:N) ":IEEE: A)
Qproteger0datosQ
DE->A:E
AEEIN

RR
RR Esta .+ncion es +sada para proteger datos en +n tabla
RR No se permitira el borrado de .ilas si la +samos
RR en +n disparador de tipo AECO:E $ ro6Rlevel
RR
:E"U:N NU>><
END<
Qproteger0datosQ >ANEUAEE plpgs(l<
A continuacin defini"os en la tabla numeros un disparador del tipo EE:OE @ roF-level para la
operacin 2E'ETE. M5s adelante vere"os co"o funciona*
-:EA"E ":IEEE: proteger0datos AECO:E DE>E"E
ON n+meros CO: EA-K :OL
EME-U"E P:O-EDU:E proteger0datos?@<
26
'a definicin de nuestra tabla 9a !uedado as*
testEE1=# "d numeros
Table cpublic.nu"erosc
#olu"n f T8pe f Modifiers
----------T--------T-----------
nu"ero f bigint f not null
cuadrado f bigint f
cubo f bigint f
rai,2 f real f
rai,3 f real f
)nde7es*
cnu"erosDpJe8c $)MAM ]EM; btree =nu"ero>
Triggers*
protegerDdatos EE:OE 2E'ETE OC nu"eros
:O EA#B OU E\E#+TE $O#E2+E protegerDdatos=>
A9ora va"os a definir una nueva funcin un poco "5s co"plicada 8 un nuevo disparador en
nuestra tabla numeros*
-:EA"E O: :EP>A-E CUN-"ION rellenar0datos?@ :E"U:N) ":IEEE: A)
Qrellenar0datosQ
DE->A:E
AEEIN

NEL.c+adrado :9 po6er?NEL.n+mero&2@<
NEL.c+bo :9 po6er?NEL.n+mero&2@<
NEL.raiz2 :9 s(rt?NEL.n+mero@<
NEL.raiz2 :9 cbrt?NEL.n+mero@<
:E"U:N NEL<
END<
$rellenarAdatos$ 629F$2F+ plpgsql
-:EA"E ":IEEE: rellenar0datos AECO:E IN)E:" O: UPDA"E
ON n+meros CO: EA-K :OL
EME-U"E P:O-EDU:E rellenar0datos?@<
'a definicin de nuestra tabla 9a !uedado as*
testEE1=# "d numeros
Table cpublic.nu"erosc
#olu"n f T8pe f Modifiers
----------T--------T-----------
nu"ero f bigint f not null
cuadrado f bigint f
cubo f bigint f
rai,2 f real f
rai,3 f real f
2/
)nde7es*
cnu"erosDpJe8c $)MAM ]EM; btree =nu"ero>
Triggers*
protegerDdatos EE:OE 2E'ETE OC nu"eros
:O EA#B OU E\E#+TE $O#E2+E protegerDdatos=>
rellenarDdatos EE:OE )C%ET O +$2ATE OC nu"eros
:O EA#B OU E\E#+TE $O#E2+E rellenarDdatos=>
A9ora va"os a ver co"o los disparadores !ue 9e"os definido en la tabla numeros funcionan*
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------T-------T-------
=1 roFs>
testEE1=# 89*+1, 89,= numeros 7numero< >26$+* 7/<
)C%ET 1 0
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
=0 roFs>
testEE1=# 89*+1, 89,= numeros 7numero< >26$+* 73<
)C%ET 1 0
test110RY %E'E#T g fro" nu"eros<
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
3 f / f 2. f 0..3213 f 0.44223
=2 roFs>
testEE1=# $G-2,+ numeros *+, numero = . @3+1+ numero = 3
+$2ATE 0
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
4 f 0( f (4 f 2 f 0.36.4
=2 roFs>
Be"os reali,ado 2 )C%ET 8 0 +$2ATE. Esto significa !ue por cada uno de estos co"andos el
siste"a 9a ejecutado la funcin rellenar_datos(); una ve, por cada fila afectada 8 antes de actuali,ar
la tabla numeros.
#o"o se puede co"probar; nosotros sola"ente 9e"os actuali,ado la colu"na numero; pero al listar
el contenido de nuestra tabla ve"os co"o el resto de colu"nas =cuadrado, cubo, raiz2 8 raiz3>
ta"biHn contienen valores.
31
2e esta actuali,acin se 9a encargado la funcin rellenar_datos() lla"ada por nuestro disparador.
?a"os a anali,ar lo !ue 9ace esta funcin*
NEL.c+adrado :9 po6er?NEL.n+mero&2@<
NEL.c+bo :9 po6er?NEL.n+mero&2@<
NEL.raiz2 :9 s(rt?NEL.n+mero@<
NEL.raiz2 :9 cbrt?NEL.n+mero@<
:E"U:N NEL<
#uando ejecuta"os el pri"er )C%ET =nu"ero R 2>; el disparador rellenar_datos lla"a a la
funcin rellenar_datos() una ve,.
El valor de la variable CEU al e"pe,ar a ejecutarse rellenar_datos() es nu"eroR2;
cuadradoRC+''; cuboRC+''; rai,2RC+''; rai,3RC+''.
Cuestra tabla todava no contiene ninguna fila.
A continuacin calcula"os el cuadrado; el cubo; la rai, cuadrada 8 la rai, cubica de 2 8 asigna"os
estos valores a CEU.cuadrado; CEU.cubo; CEU.rai,2 8 CEU.rai,3.
El valor de la variable CEU antes de la sentencia ET+C CEU es a9ora nu"eroR2; cuadradoR4;
cuboR6; rai,2R0.40420; rai,3R0.23//2.
#on la sentencia ET+C CEU; retorna"os la fila =E#O2> al"acenada en la variable CEU; 8
sali"os de la funcin rellenar_datos(). El siste"a al"acena entonces el E#O2 contenido en
CEU en la tabla numeros.

2e la "is"a "anera funciona el disparador proteger_datos cuando ejecuta"os una sentencia
2E'ETE. Antes de borrar nada ejecutar5 la funcin proteger_datos().
Esta funcin retorna el valor C+'' 8 esto significa; segun la regla (.0 definida en este artculo; !ue
para la fila afectada no se ejecutar5 el co"anado 2E'ETE. $or eso 8 "ientras este disparador este
instalado ser5 i"posible de borrar nada de la tabla numeros.
testEE1=# -+6+,+ ?1=4 numeros
2E'ETE 1
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
4 f 0( f (4 f 2 f 0.36.4
=2 roFs>
?a"os a continuar co"plicando las cosas. $ri"ero; va"os a desinstalar nuestros dos disparadores
proteger_datos 8 rellenar_datos.
testEE1=# -1=G ,18FF+1 protegerAdatos =9 numeros
2O$ T)GGE
testEE1=# -1=G ,18FF+1 rellenarAdatos =9 numeros
2O$ T)GGE
30
A continuacin creare"os un disparador Gnico para las sentencias )C%ET; +$2ATE 8 2E'ETE.
Este nuevo disparador utili,ar5 una nueva funcin en la !ue tendre"os !ue tener en cuenta !ue tipo
de co"ando 9a activado el disparador; si !uere"os retornar el valor correcto. $ara ello utili,are"os
la variable TGDO$.
-:EA"E O: :EP>A-E CUN-"ION proteger0y0rellenar0datos?@ :E"U:N) ":IEEE:
A) Qproteger0y0rellenar0datosQ
DE->A:E
AEEIN
IC ?"E0OP 9 DIN)E:"D O: "E0OP 9 DUPDA"ED @ "KEN
NEL.c+adrado :9 po6er?NEL.n+mero&2@<
NEL.c+bo :9 po6er?NEL.n+mero&2@<
NEL.raiz2 :9 s(rt?NEL.n+mero@<
NEL.raiz2 :9 cbrt?NEL.n+mero@<
:E"U:N NEL<

E>)EIC ?"E0OP 9 DDE>E"ED@ "KEN
:E"U:N NU>><

END IC<
END<
$proteger_y_rellenar_datos$ LAN!A" plpgs#l$
-:EA"E ":IEEE: proteger0y0rellenar0datos AECO:E IN)E:" O: UPDA"E O:
DE>E"E
ON n+meros CO: EA-K :OL
EME-U"E P:O-EDU:E proteger0y0rellenar0datos?@<
'a definicin de nuestra tabla 9a !uedado asi*
testEE1=# "d numeros
Table cpublic.nu"erosc
#olu"n f T8pe f Modifiers
----------T--------T-----------
nu"ero f bigint f not null
cuadrado f bigint f
cubo f bigint f
rai,2 f real f
rai,3 f real f
)nde7es*
cnu"erosDpJe8c $)MAM ]EM; btree =nu"ero>
Triggers*
rellenarDdatos EE:OE )C%ET O 2E'ETE O +$2ATE OC nu"eros
:O EA#B OU E\E#+TE $O#E2+E protegerD8DrellenarDdatos=>
32
M todo seguir5 funcionando de la "is"a "anera !ue con los dos disparadores del co"ien,o*
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
4 f 0( f (4 f 2 f 0.36.4
=2 roFs>
testEE1=# 89*+1, 89,= numeros 7numero< >26$+* 7H<
)C%ET 1 0
testEE1=# 89*+1, 89,= numeros 7numero< >26$+* 7I<
)C%ET 1 0
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
4 f 0( f (4 f 2 f 0.36.4
3 f 23 f 023 f 2.23(1. f 0..1//6
( f 3( f 20( f 2.44/4/ f 0.60.02
=4 roFs>
testEE1=# $G-2,+ numeros *+, numero = 1E @3+1+ numero = I
+$2ATE 0
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
4 f 0( f (4 f 2 f 0.36.4
3 f 23 f 023 f 2.23(1. f 0..1//6
01 f 011 f 0111 f 3.0(226 f 2.03443
=4 roFs>
testEE1=# -+6+,+ ?1=4 numeros where numero =1E
2E'ETE 1
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
4 f 0( f (4 f 2 f 0.36.4
3 f 23 f 023 f 2.23(1. f 0..1//6
01 f 011 f 0111 f 3.0(226 f 2.03443
=4 roFs>
$or Glti"o 8 antes de ter"inar; va"os a definir un disparador del tipo state"ent-level !ue se ejecute
despues de nuestras sentencias )C%ET; +$2ATE 8 2E'ETE. 'a funcin ejecutada por este
disparador grabar5 datos de la ejecucin en la tabla cambios =esto no sirve para "uc9o en la vida
real; pero co"o eje"plo esta bien para ver co"o funciona>.
33
$ara de"ostrar co"o pode"os utili,ar esto va"os a definir una nueva tabla*
-:EA"E "AA>E cambios?
timestamp0 "IME)"AMP LI"K "IME SONE de.a+lt NOL?@&
nombre0disparador te5t&
tipo0disparador te5t&
nivel0disparador te5t&
comando te5t
@<
'a funcin la pode"os definir asi*
-:EA"E O: :EP>A-E CUN-"ION grabar0operaciones?@ :E"U:N) ":IEEE: A)
Qgrabar0operacionesQ
DE->A:E
AEEIN

IN)E:" IN"O cambios ?
nombre0disparador&
tipo0disparador&
nivel0disparador&
comando@
NA>UE) ?
"E0NAME&
"E0LKEN&
"E0>ENE>&
"E0OP
@<
:E"U:N NU>><
END<
$grabar_operaciones$ LAN!A" plpgs#l$
M el disparador lo instalara"os de la siguiente for"a*
-:EA"E ":IEEE: grabar0operaciones AC"E: IN)E:" O: UPDA"E O: DE>E"E
ON n+meros CO: EA-K )"A"EMEN"
EME-U"E P:O-EDU:E grabar0operaciones?@<
'a definicin de nuestra tabla !uedara asi*
testEE1=# "d numeros
Table cpublic.nu"erosc
#olu"n f T8pe f Modifiers
----------T--------T-----------
nu"ero f bigint f not null
cuadrado f bigint f
cubo f bigint f
rai,2 f real f
rai,3 f real f
34
)nde7es*
cnu"erosDpJe8c $)MAM ]EM; btree =nu"ero>
Triggers*
grabarDoperaciones A:TE )C%ET O 2E'ETE O +$2ATE OC nu"eros
:O EA#B %TATEMECT E\E#+TE $O#E2+E grabarDoperaciones=>
protegerD8DrellenarDdatos EE:OE )C%ET O 2E'ETE O +$2ATE OC nu"eros
:O EA#B OU E\E#+TE $O#E2+E protegerD8DrellenarDdatos=>
A continuacin se puede ver co"o funcionara*
testEE1=# *+6+0, B from cam!ios
ti"esta"pD f no"breDdisparador f tipoDdisparador f nivelDdisparador f co"ando
------------T-------------------T-----------------T------------------T---------
=1 roFs>
testEE1=# 89*+1, 89,= numeros 7numero< >26$+* 71EE<
)C%ET 1 0
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T---------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
4 f 0( f (4 f 2 f 0.36.4
3 f 23 f 023 f 2.23(1. f 0..1//6
01 f 011 f 0111 f 3.0(226 f 2.03443
011 f 01111 f 0111111 f 01 f 4.(403/
=3 roFs>
testEE1=# *+6+0, B from cam!ios
ti"esta"pD f no"breDdisparador f tipoDdisparador f nivelDdisparador f co"ando
-------------------------------T--------------------T-----------------T------------------T---------
211/-1(-00 23*13*2/../4334T12 f grabarDoperaciones f A:TE f %TATEMECT f )C%ET
=0 roF>
testEE1=# $G-2,+ numeros *+, numero = 1EEE @3+1+ numero = 1EE
+$2ATE 0
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
4 f 0( f (4 f 2 f 0.36.4
3 f 23 f 023 f 2.23(1. f 0..1//6
01 f 011 f 0111 f 3.0(226 f 2.03443
0111 f 0111111 f 0111111111 f 30.(226 f 01
=3 roFs>
testEE1=# *+6+0, B from cam!ios
ti"esta"pD f no"breDdisparador f tipoDdisparador f nivelDdisparador f co"ando
-------------------------------T--------------------T-----------------T------------------T---------
211/-1(-00 23*13*2/../4334T12 f grabarDoperaciones f A:TE f %TATEMECT f )C%ET
211/-1(-00 23*1(*16.23/420T12 f grabarDoperaciones f A:TE f %TATEMECT f +$2ATE
=2 roFs>
33
testEE1=# -+6+,+ ?1=4 numeros where numero =1EEE
2E'ETE 1
testEE1=# *+6+0, B from numeros
nu"ero f cuadrado f cubo f rai,2 f rai,3
--------T----------T------------T---------T---------
2 f 4 f 6 f 0.40420 f 0.23//2
4 f 0( f (4 f 2 f 0.36.4
3 f 23 f 023 f 2.23(1. f 0..1//6
01 f 011 f 0111 f 3.0(226 f 2.03443
0111 f 0111111 f 0111111111 f 30.(226 f 01
=3 roFs>
testEE1=# *+6+0, B from cam!ios
ti"esta"pD f no"breDdisparador f tipoDdisparador f nivelDdisparador f co"ando
-------------------------------T--------------------T-----------------T------------------T---------
211/-1(-00 23*13*2/../4334T12 f grabarDoperaciones f A:TE f %TATEMECT f )C%ET
211/-1(-00 23*1(*16.23/420T12 f grabarDoperaciones f A:TE f %TATEMECT f +$2ATE
211/-1(-00 23*1(*2(.3(6(32T12 f grabarDoperaciones f A:TE f %TATEMECT f 2E'ETE
=3 roFs>
A ALGUNAS LGUNAS ANOTACIONES ANOTACIONES
#uando se crea la funcin del trigger; Hsta no puede tener par5"etros; sin e"bargo el triger co"o
tal s.
#uando un disparador se define; los argu"entos pueden ser especificados para ello.
El propsito de la inclusin de argu"entos en la definicin del trigger es per"itir a los diferentes
factores desencadenantes con re!uisitos si"ilares lla"ar a la "is"a funcin. #o"o eje"plo; podra
ser una funcin de activacin generali,ada !ue to"a co"o argu"entos dos no"bres de colu"na 8
pone el usuario actual en uno 8 la "arca de tie"po actual en la otra.
$ara tener acceso a los par5"etros del trigger se utili,a la variable TGDAG?O P; la cual es un
arreglo de te7to co"o se "encion anterior"ente.
Eje"plo*
-- #rea una tabla para al"acenar los datos
-:EA"E "AA>E testing?
valor AIEIN" NO" NU>>&
arg+mento! NA:-KA:&
arg+mento2 NA:-KA:&
P:IMA:O PEO ?valor@
@<
3(
-- #rea el stored procedure
-:EA"E O: :EP>A-E CUN-"ION sp0con0arg+mentos?@ :E"U:N) ":IEEE: A)
Qsp0con0arg+mentosQ
DE->A:E
AEEIN
IC ?"E0OP 9 DIN)E:"D O: "E0OP 9 DUPDA"ED @ "KEN

NEL.arg+mento! :9 "E0A:ENIJ<
NEL.arg+mento2 :9 "E0A:ENI!J<
:E"U:N NEL<

E>)EIC ?"E0OP 9 DDE>E"ED@ "KEN
:E"U:N NU>><

END IC<
END<
$sp_con_argumentos$ LAN!A" plpgs#l$
-- #rea el trigger
-:EA"E ":IEEE: sp0con0arg+mentos AECO:E IN)E:" O: UPDA"E O: DE>E"E
ON testing CO: EA-K :OL
EME-U"E P:O-EDU:E sp0con0arg+mentos?D>OOP!D& D>OOP2D@<
-- )nserta el pri"er valor; por ende se lla"a al triggers
IN)E:" IN"O testing?valor@ NA>UE)?!@<
-- %e observan los valores de la tabla
)E>E-" T C:OM testing<
Eje"plos de triggers sobre la
base de datos de eje"plo en el
arc9ivo trigger.s!l de los
"ateriales adicionales.
3.
ERENCIA ERENCIA
Berencia sirve para "odelar casos en !ue una tabla es una especiali,acin de otra=s>.
$ara estudiar este te"a utili,are"os las siguientes tablas*
Ba8 ciudades !ue no son capitales*
-:EA"E "AA>E cities ?
name te5t&
pop+lation .loat&
altit+de int RR in .eet
@<
-:EA"E "AA>E capitals ?
state c1ar?2@
@ INKE:I") ?cities@<
IN)E:" IN"O cities NA>UE) ?D)an CranciscoD& U.23E',& V2@<
IN)E:" IN"O cities NA>UE) ?D>as NegasD& 2.,B2E',& 2!U3@<
IN)E:" IN"O cities NA>UE) ?DMariposaD& !2& !W,2@<
IN)E:" IN"O capitals NA>UE) ?D)acramentoD& 2.VW3E',& 2& D-AD@<
IN)E:" IN"O capitals NA>UE) ?DMadisonD& !.W!2E',& B3,& DLID@<
)E>E-" T C:OM cities<
)E>E-" T C:OM capitals<
En $ostgre%&'; una tabla puede 9eredar de cero o "as tablas; 8 una consulta puede referenciar 8a
sea; todas la filas de una tabla as co"o todas las filas de una tabla "as todas la filas de sus tablas
descendientes.
E4emplo:
%"L"&T name' altitude
()*+ cities
,-")" altitude . /00$
Esto retorna*
name J altitude
-----------K----------
6as >egas J /1L.
4ariposa J 1MH3
4adison J 8.H
36
'a siguiente consulta encuentra todas las ciudades !ue no son capitales de estados 8 !ue se situan a
una altitud de 311 pies*
%"L"&T name' altitude
()*+ *NL1 cities
,-")" altitude . /00$
name J altitude
-----------K----------
6as >egas J /1L.
4ariposa J 1MH3
OC'M*
'a opcin onl8 solo puede ser utili,ada en co"andos )nsert; +pdate o 2elete.
$ara saber de cual tabla se origina el resultado de la consulta*
%"L"&T c2tableoid' c2name' c2altitude
()*+ cities c
,-")" c2altitude . /00$
ta!leoid J name J altitude
----------K-----------K----------
13MLM3 J 6as >egas J /1L.
13MLM3 J 4ariposa J 1MH3
13MLM8 J 4adison J 8.H
$ara ver los no"bres de las tablas*
%"L"&T p2relname' c2name' c2altitude
()*+ cities c' pg_class p
,-")" c2altitude . /00 and c2tableoid 3 p2oid$
relname J name J altitude
----------K-----------K----------
cities J 6as >egas J /1L.
cities J 4ariposa J 1MH3
capitals J 4adison # apt-get install postgresql-contri!J 8.H
Co propaga los inserts auto"5tica"ente*
89*+1, 89,= cities 7name: population: altitude: state<
>26$+* 7'9ew Nor&': 9$66: 9$66: '9N'<
"odos los constrains c1ec7 y notRn+ll constraints son 1eredados a+tom8ticamente.otros tipos
de constraints ?+ni(+e& primary 7ey& and .oreign 7ey constraints@ no.
+na tabla puede 9eredar de "5s de una tabla padre; en cu8o caso se tiene la unin de las colu"nas
definidas por las tablas padres. #ual!uier colu"na declarada en la definicin de la tabla 9ija se
su"a a estas. %i el "is"o no"bre de colu"na aparece en las colu"nas de los padres; o en a"bas
una tabla padre 8 la tabla 9ija; entonces; estas colu"nas se co"binan para !ue slo 9a8a una
colu"na de este tipo en la tabla 9ija. $ara !ue se co"binen; las colu"nas deben tener el "is"o tipo
de datos; de lo contrario se produce un error. 'a colu"na fusionada tendr5 copias de todas las
restricciones c9ecJ procedentes de cual!uiera de las definiciones de las colu"nas de donde viene la
colu"na; 8 ser5 "arcada not-null si alguna de las definiciones est5 as "arcada.
3/
#o"o se puede observar del eje"plo anterior postgres "aneja la 9erencia de la siguiente "anera*
#uando se 9ace un select de la tabla padre; postgres devolver5 todos los registros !ue coincidan con
la cl5usula select tanto de la tabla padre co"o de las tablas 9ijas !ue Hsta tenga.
%i se usa Onl8; sola"ente devolver5 los registros de la tabla padre.
%i un registro se encuentra en la tabla padre 8 en la tabla 9ija; postgres lo devolver5 dos veces en los
resultados del select.
41
P PARTICIONAMIENTO ARTICIONAMIENTO DE DE T TABLAS ABLAS: :
%e basa en 9erencia.
%e tiene una tabla padre; !ue por lo general no tiene datos 8 sola"ente se usa para unir las tablas
particionadas; las cuales consisten en sus tablas 9ijas.
$asos*
0. #rear las tablas 9ijas; agregarles un constraint de c9ecJ para !ue no per"itan insertar datos
!ue no cu"plan con el criterio de particionado.
2. $or "edio de select into; poblar las tablas 9ijas uitli,ando en F9ere el constraint c9ecJ de la
tabla.
3. #rear ndices en las tablas 9ijas sobre los ca"pos utili,ados co"o criterios de particin.
4. #rear constraints de llave pri"aria 8 otros si as se desea sobre las tablas 9ijas; 8a !ue estos
no se 9eredan.
3. Eorrar con Konl8L los datos de la tabla padre para !ue no estHn duplicados.
(. #rear un trigger !ue se encarge de redireccionar los inserts de la tabla padre a la tabla 9ija
correspondiente.
Importante:
$ara opti"i,ar las consultas verificar !ue en el arc9ivo postgres.conf estH activada la opcin
constraint_exclusion, la cual se encarga de antes de 9acer una bGs!ueda sobre una tabla; verificar
!ue los criterios de bGs!ueda coincidan con los contraint c9ecJ de la tabla.
4
E E'E#PLO 'E#PLO
$articiona"iento de pagos 8 dese"bolsos
-rear tablas 1i4as:
create table clie.pagosD8Ddese"bolsosD"en2111Dcl = c9ecJ =fecDpago a ^0@0@2111^>> in9erits
=clie.pagosD8Ddese"bolsosDcl><
create table clie.pagosD8Ddese"bolsosD2111Dcl = c9ecJ =fecDpago betFeen ^0@0@2111^ and ^30@02@2111^>> in9erits
=clie.pagosD8Ddese"bolsosDcl><
create table clie.pagosD8Ddese"bolsosD2110Dcl = c9ecJ =fecDpago betFeen ^0@0@2110^ and ^30@02@2110^>> in9erits
=clie.pagosD8Ddese"bolsosDcl><
create table clie.pagosD8Ddese"bolsosD2112Dcl = c9ecJ =fecDpago betFeen ^0@0@2112^ and ^30@02@2112^>> in9erits
=clie.pagosD8Ddese"bolsosDcl><
create table clie.pagosD8Ddese"bolsosD2113Dcl = c9ecJ =fecDpago betFeen ^0@0@2113^ and ^30@02@2113^>> in9erits
=clie.pagosD8Ddese"bolsosDcl><
"rasladar los datos de la tabla padre a las tablas 1i4as.
insert into clie.pagosD8Ddese"bolsosD"en2111Dcl select g fro" clie.pagosD8Ddese"bolsosDcl F9ere fecDpago a
^0@0@2111^<
insert into clie.pagosD8Ddese"bolsosD2111Dcl select g fro" clie.pagosD8Ddese"bolsosDcl F9ere fecDpago betFeen
^0@0@2111^ and ^30@02@2111^<
insert into clie.pagosD8Ddese"bolsosD2110Dcl select g fro" clie.pagosD8Ddese"bolsosDcl F9ere fecDpago betFeen
^0@0@2110^ and ^30@02@2110^<
insert into clie.pagosD8Ddese"bolsosD2112Dcl select g fro" clie.pagosD8Ddese"bolsosDcl F9ere fecDpago betFeen
^0@0@2112^ and ^30@02@2112^<
insert into clie.pagosD8Ddese"bolsosD2113Dcl select g fro" clie.pagosD8Ddese"bolsosDcl F9ere fecDpago betFeen
^0@0@2113^ and ^30@02@2113^<
4 $ara la versin 6.4 de postgres la opcin !ue 9a8 !ue activar es partition.
40
-rear *ndices en las tablas 1i4as:
#EATE )C2E\ pagosD8Ddese"bolsosD"en2111DfecDpago OC clie.pagosD8Ddese"bolsosD"en2111Dcl =fecDpago><
#EATE )C2E\ pagosD8Ddese"bolsosD2111DfecDpago OC clie.pagosD8Ddese"bolsosD2111Dcl =fecDpago><
#EATE )C2E\ pagosD8Ddese"bolsosD2110DfecDpago OC clie.pagosD8Ddese"bolsosD2110Dcl =fecDpago><
#EATE )C2E\ pagosD8Ddese"bolsosD2112DfecDpago OC clie.pagosD8Ddese"bolsosD2112Dcl =fecDpago><
#EATE )C2E\ pagosD8Ddese"bolsosD2113DfecDpago OC clie.pagosD8Ddese"bolsosD2113Dcl =fecDpago><
#EATE )C2E\ pagosD8Ddese"bolsosD2114DfecDpago OC clie.pagosD8Ddese"bolsosD2114Dcl =fecDpago><
Aorrar los datos de la tabla padre:
delete fro" onl8 clie.pagosD8Ddese"bolsosDcl<
-rear trigger de inserciones:
#EATE O E$'A#E :+C#T)OC clie.pagosD8Ddese"bolsosDinsertDtrigger=>
ET+C% T)GGE A% ``
EEG)C
): = CEU.fecDpago a ^0@0@2111^> TBEC
)C%ET )CTO clie.pagosD8Ddese"bolsosD"en2111Dcl ?A'+E% =CEU.g><
E'%): = CEU.fecDpago betFeen ^0@0@2111^ AC2 ^30@02@2111^ > TBEC
)C%ET )CTO clie.pagosD8Ddese"bolsosD2111Dcl ?A'+E% =CEU.g><
E'%): = CEU.fecDpago betFeen ^0@0@2110^ AC2 ^30@02@2110^ > TBEC
)C%ET )CTO clie.pagosD8Ddese"bolsosD2111Dcl ?A'+E% =CEU.g><
E'%): = CEU.fecDpago betFeen ^0@0@2112^ AC2 ^30@02@2112^ > TBEC
)C%ET )CTO clie.pagosD8Ddese"bolsosD2111Dcl ?A'+E% =CEU.g><
E'%): = CEU.fecDpago betFeen ^0@0@2113^ AC2 ^30@02@2113^ > TBEC
)C%ET )CTO clie.pagosD8Ddese"bolsosD2111Dcl ?A'+E% =CEU.g><
E'%E
A)%E COT)#E ^:ec9a fuera de rango Z. Ojo por!ue no se introduce^;CEU.fecDpago<
EC2 ):<
ET+C C+''<
EC2<
``
'ACG+AGE plpgs!l<
#EATE T)GGE clie.insertDpagosD8Ddese"bolsosDtrigger
EE:OE )C%ET OC clie.pagosD8Ddese"bolsosDcl
:O EA#B OU E\E#+TE $O#E2+E clie.pagosD8Ddese"bolsosDinsertDtrigger=><
42
Eje"plos de particiona"iento sobre la base de
datos de eje"plo en el arc9ivo
particiona"iento.s!l de los "ateriales
adicionales.
C CONSULTAS ONSULTAS ENTRE ENTRE BASES BASES DE DE DATOS DATOS
'as consultas entre dos bases de datos se llevan a cabo por "edio de dblinJ.
$ara instalar esta caracterstica*
)nstalar postgres!l-contrib *
# apt-get install postgresql-contri!
#orrer en la base de datos =o "ejor en la te"plate> el script
#psql template1 -$ postgres
template1# "i /usr/share/postgresql/8.3/contri!/d!lin&.sql
Eje"plos de consultas*
El siguiente eje"plo inserta en la tabla carrera de la actual base de datos los resultados del select
sobre la tabla carrera de la base de datos 9ostorico del 9ost adacad.academica.+es.ed+.sv.
Ctese !ue se debe indicar el usuario 8 passFord para reali,ar la cone7in.
IN)E:" IN"O carrera )E>E-" T
C:OM dblin7?
D1ost9adacad.academica.+es.ed+.sv
dbname91istorico +ser9p+blico pass6ord9p+blicoD&
Dselect T .rom carrera 61ere codigo9;DPU32!;D and plan0est+dios9!WWBD
@
A) res+ltados?codigo te5t& plan smallint& tipo te5t& nombre te5t&
cod0+acad te5t& cod0+admin te5t@ <
Es i"portante destacar !ue para !ue el usuario pueda acceder a la base de datos re"ota; Hste debe
tener la entrada de acceso correspondiente en el arc9ivo de configuracin pgD9ba.conf.
)N)E:" IN"O imagen
)E>E-" T
C:OM dblin7?
D1ost9adacad.academica.+es.ed+.sv
dbname9ni02V +ser9p+blico pass6ord9p+blicoD&
D
select carnet&;D.oto;D&;D4pg;D&.otogra.ia&;DCotogra.*a de el$la al+mno$a;D&no6?@ .rom
aspirante0ingreso&solicita0primer0ingreso 61ere
n+mero0.orm+lario9n+mero0.orm+lario0aspirante0ing and estado0seleccion9;D);D and
.otogra.ia is not n+ll
D
@
A) res+ltados?carnet te5t& denominacion te5t& .ormato te5t& datos bytea& descripcion te5t&
.ec1a date@
LKE:E carnet in ?)E>E-" carnet .rom al+mno@<
43
IN)E:" IN"O imagen
)E>E-" T
C:OM dblin7?
D1ost9adacad.academica.+es.ed+.sv
dbname9ni02U +ser9p+blico pass6ord9p+blicoD&
D
select carnet&;D.oto;D&;D4pg;D&.otogra.ia&;DCotogra.*a de el$la al+mno$a;D&no6?@ .rom
aspirante0ingreso&solicita0primer0ingreso 61ere
n+mero0.orm+lario9n+mero0.orm+lario0aspirante0ing and estado0seleccion9;D);D and
.otogra.ia is not n+ll
D
@
A) res+ltados?carnet te5t& denominacion te5t& .ormato te5t& datos bytea& descripcion te5t&
.ec1a date@
LKE:E carnet in ?)E>E-" carnet .rom al+mno@<
%e pueden dejar abiertas cone7iones cuando se va a 9acer "5s de una consulta por cone7in*
dblin70connect?Dnombredelacone5ionD&Dstringdecone5ionD@<
para desconectarlo
dblin70disconnect?nombredelacone5ion@<
Eje"plo*
select dblink_connect45dbname3postgres56$
d!lin&Aconnect
----------------
=O
71 row<
select 7 8rom dblink45select proname' prosrc 8rom pg_proc56
as t94proname name' prosrc text6 :;ere proname like 5bytea<5$
proname J prosrc
------------K------------
!%teacat J !%teacat
!%teaeq J !%teaeq
!%tealt J !%tealt
!%teale J !%teale
!%teagt J !%teagt
!%teage J !%teage
!%teane J !%teane
!%teacmp J !%teacmp
!%teali&e J !%teali&e
!%teanli&e J !%teanli&e
!%teain J !%teain
!%teaout J !%teaout
71/ rows<
select dblink_disconnect45myconn56$
dblink_disconnect
----------------
=O
$ara ejecutar co"andos*
select dblink_exec45insert into 8oo =alues4>9'55?55'55@Aa0A'Ab0A'Ac0AB556$56$
44
%e pueden abrir varias cone7iones si"ult5nea"ente; sola"ente se debe tener cuidado de indicarle a
dblinJ 8 dblinJDe7ec sobre cual cone7in se est5 trabajando*
select dblink_connect45dbname3dblink_test_sla=e56$
d!lin&Aconnect
----------------
=O
71 row<
select dblink_exec45insert into 8oo =alues4>9'55?55'55@Aa0A'Ab0A'Ac0AB556$56$
d!lin&Ae#ec
-----------------
89*+1, M.33II 1
71 row<
select dblink_connect45myconn5' 5dbname3regression56$
d!lin&Aconnect
----------------
=O
71 row<
select dblink_exec45myconn5' 5insert into 8oo
=alues4>9'55?55'55@Aa0A'Ab0A'Ac0AB556$56$
d!lin&Ae#ec
------------------
89*+1, I.3/H8. 1
71 row<
T TABLAS ABLAS TEMPORALES TEMPORALES
'as tablas te"porales se crean utili,ando la opcin te"p*
Eje"plo*
01+2,+ ,+4G ,256+ prue!a7ciudAid integer: ciudAcodigo numeric: ciudAnom!re
varchar<
= llenPndola directamente con una consultaD
select name as id:'0ed' as codigoAtipoid:description as nom!re:null as notas:1
as ma#docs:smodified as fechaAcrea:smodified as fechaAmodif into temp expediente
from folders where length7name<(=1E
A ARCIVOS RCIVOS CSV CSV
$ara llenar una tabla a partir de un arc9ivo csv=valores separados por co"a>; utili,a"os el co"ando
Scop8; por eje"plo*
;copy tccons+ltas .rom D$1ome$+s+ario$E))2R2.t5tD DE>IMI"E: A) D&D NU>> as DD<
El eje"plo anterior carga sobre la tabla tcconsultas los datos !ue estHn guardados en el arc9ivo
E%%112.t7t
$ara enviar a un arc9ivo csv los datos de una tabla*
;copy e5pediente to D$1ome$+s+ario$e5pediente.csvD DE>IMI"E: A) D&D NU>> as DD<
43
CAPTULO #
CAPTULO #
ADMINISTRACIN ADMINISTRACIN
Y Y
MANTENIMIENTO MANTENIMIENTO
DE LAS BASES DE DATOS DE LAS BASES DE DATOS
ERRAMIENTAS ERRAMIENTAS GRFICAS GRFICAS PARA PARA LA LA ADMINISTRACIN ADMINISTRACIN DE DE BASES BASES DE DE
DATOS DATOS EN EN P POSTGRE OSTGRESQL SQL
$ara ad"inistrar las bases de datos conta"os con la ter"inal interactiva; pero ade"5s conta"os con
dos valiosas 9erra"ientas gr5ficas !ue nos pueden llegar a facilitar el trabajo; ellas son*
pgad"in3* es una 9erra"ienta "u8 co"pleta.
2b?isuali,er* tiene una funcionalidad !ue pgad"in3 no tiene=genera el diagra"a entidad
relacin de la base de datos>
PGADMIN3 PGADMIN3
$ara instalar pgad"in3 utili,are"os el siguiente co"ando co"o usuario root*
#apt-get install pgadmin3
+na ve, !ue se 9a instalado pgad"in3 lo pode"os utili,ar con el co"ando*
$pgadmin3 Q
Esto nos "ostrar5*
Bace"os clic en cerrar; pode"os desactivar !ue "uestre tips al iniciar si as lo desea"os.
4.
A continuacin va"os a crear la cone7in a la base de datos. $ode"os configurar cuantas
cone7iones desee"os*
Bace"os clic en el cono !ue se "uestra a continuacin*
%e "ostrar5 la siguiente caja de di5logo*
Es "u8 i"portante desactivar la opcin de guardar passFords=%tore passFord>; 8a !ue si se deja
activada en la carpeta @9o"e@usuario se crear5 un arc9ivo lla"ado .pgpass oculto; el cual contiene
en te7to plano; el no"bre de la base de datos; el usuario 8 el pass6ordXXX
Bace"os clic en Aceptar; si todos los datos ingresados fueron correctos 8 tene"os per"isos de
acceso a la base de datos; se "ostrar5 lo siguiente*
46
Baciendo clic sobre la cone7in !ue acaba"os de crear va"os a ver las bases de datos de esa
cone7in; pero solo va"os a tener acceso a las bases de datos a las !ue tenga per"iso el usuario*
Operaciones sobre tablas*
Baciendo clic derec9o sobre una tabla se "ostrar5 un "enG; entre sus opciones tene"os* ?ieF
2ata-b ?ieF top 011 roFs; la cual nos "uestra el contenido de la tabla; 8 nos per"ite 9acer
inserciones; borrados 8 "odificaciones de datos.
%e pueden aplicar filtros de bGs!ueda sobre los datos de la tabla con el cono*
4/
%e "ostrar5 la siguiente caja de di5logo*
+na ve, !ue valida"os las condiciones 9ace"os clic en Aceptar 8 se "ostrar5n los resultados.
'a 9erra"ienta provee "uc9si"as funcionalidades; se insta al estudiante a estudiarlasV
31
D DB BV VISUALIZER ISUALIZER
?erificar !ue estH Java instalado.
2escargarlo de*
9ttp*@@FFF.dbvis.co"@products@dbvis@doFnload@
En consola; co"o usuario root*
#sh d!visAlinu#ALAEA..sh
%e iniciar5 el instalador; 9acer clic en ne7t.
Bacer clic en K) accept ...L 8 seguida"ente en ne7t.

30
Escoger en KEroFseL donde desea instalar dbvis 8 clicJ en ne7t.
#lic en ne7t.
#lic en ne7t.
32
%i lo desea "ar!ue la opcin de crear cono en el Escritorio 8 9aga clic en ne7t.
#lic en K:inis9L 8 listo; dbvis est5 instalado.
33
Utilizando DbNis+alizer:
$ara iniciarlo*
$/var/opt/-!>isualiRer-L.E../d!vis Q
Escribi"os el no"bre !ue desea"os para la cone7in.
Escoge"os el driver para $ostgre%&' 8 9ace"os clic en ne7t.
34
Escribir la infor"acin de cone7in. Bacer clic en K$ing %erverL para verificar !ue la cone7in estH
bien.
Bacer clic en K:inis9L.
Bacer clic en K#loseL.
33
Al igual !ue en pgad"in3 9ace"os clic en la cone7in.
$ode"os llevar a cabo sola"ente funciones de consulta; por eje"plo; no pode"os insertar;
"odificar o borrar datos de las tablas.
$ero la funcionalidad !ue nos da 2b?isuali,er es !ue pode"os ver el diagra"a Entidad-elacin
de la base de datos*
Bace"os clic sobre la base de datos.
Al lado derec9o de la ventana 9ace"os clic en la pestaIa references; verificar !ue estH "arcada la
opcin KGrap9L*
3(
C CONSULTAS ONSULTAS ENTRE ENTRE BASES BASES DE DE DATOS DATOS: :
R ROUTINE OUTINE V VACUUMING ACUUMING
! !
En tHr"inos de bases de datos $ostgres!l; se ocupa reali,ar un "anteni"iento preventivo cada
cierto tie"po; nor"al"ente basta con ejecutar Autovacuu".
El "anteni"iento se debe reali,ar por*
eutili,acin o recuperacin de espacio en el disco duro; debido a las actuali,aciones o
eli"inacin de filas.
Evitar pHrdidas de datos.
Actuali,ar estadsticas de datos.
El ?acuu" se puede reali,ar co"o actividad paralela; en conjunto con las de"5s transacciones de la
base de datos =selects; updates; inserts; deletes>.
Ba8 dos for"as de ?acuu"; el 'a,8 8 el total. El 'a,8 ?acuu" necesita "5s espacio en disco; 8a
!ue se ejecuta "5s lento; as las transacciones en la base de datos continuaran funcionando
nor"al"ente; slo no se "odifica durante el proceso la transaccin A'TE TAE'E.
El ?acuu" Total blo!ue la tabla con la !ue trabaja; no per"ite transacciones en paralelo; 8 aun!ue
reduce el ta"aIo de la tabla; no 9ace lo "is"o con el ndice =puede ocurrir lo contrario; !ue se 9aga
"5s grande> . %e aconseja utili,ar el ?acuu" est5ndar.
A ACTUALIZACIN CTUALIZACIN DE DE P PLANIFICACIN LANIFICACIN DE DE E ESTADSTICA STADSTICA
'a infor"acin estadstica sirve para generar organi,ados planes para consultas; esto por "edio del
co"ando Anal8,e; !ue ejecuta Autovacuu" cuando lo considere necesario. Aplica ta"biHn para
tablas 8 colu"nas; pero es "5s r5pida si se ejecuta sobre la base de datos directa"ente.
'a prevencin de errores en las transacciones de )2 Uraparound
En ocasiones puede resultar !ue algunos datos se pierdan por la transaccin se"5ntica de
$ostgre%&'; aun!ue estos e7istan aGn. $or ellos; en pro"edio cada dos "illones de transacciones
se debe reali,ar un vacuu"< se debe considerar los autovacuu"Dfree,eD"inDage 8
autovacuu"Dfree,eD"a7Dage; 8 sus diferencias de uso; co"o el au"ento de ta"aIo del directorio
pgDclog al utili,ar autovacu""Dfree,eD"a7Dage o lo irrelevante ! puede llegar a ser un
autovacuu"Dfree,eD"inDage en algGn "o"ento deter"inado.
#on las tablas pgDclass 8 pgDdatabases del siste"a es posible reali,ar segui"ientos a los \)2s
antiguos; gracias a la colu"na relfro,en7id pgDclass.
$ara reali,ar "anual"ente un vacuu" co"pleto de la base de datos*
$Svacuumd! -R -v -f dotlrn
$ara ver las diferentes opciones*
$man vacuumd!.
3 esu"en de la infor"acin de FFF.postgres!l.org reali,ado por Andrea Torres.
3.
A AUTOVACUUM UTOVACUUM D DAEMON AEMON
'as funciones principales son*
Autovacuu"Dnapti"e* consiste en distribuir los trabajos de cada base de datos a travHs del
tie"po.
Autovacuu"D"a7DForJers* lo !ue 9ace es indicar los procesos !ue se utili,aran en cada
base de datos al "is"o tie"po< si 9a8 "5s de una base de datos en el siste"a; se ejecutar5
una despuHs de finali,ar otra.
R RUTINA UTINA DE DE I INDEXACIN NDEXACIN
El co"ando E)C2E\ sirve para generar ndice de for"a peridica; prevenir el au"ento del
ta"aIo del ndice =esto por proble"as en la recuperacin del espacio interno de ndice de E-tree> 8
evitar !ue lo !ue se tenga en ndices; sea "a8or a la infor"acin contenida< al "is"o tie"po; la
inde7acin a8uda a "ejorar la velocidad de acceso de los datos.
$eridica"ente la base de datos debe ser reinde7ada para !ue no di"inu8a el rendi"iento.
Especial"ente cuando se 9an reali,ado "uc9as inserciones.
einde7ar la Ease de 2atos*
Abrir una ter"inal
$Spsql -$ usuario template1
dotlrn=Sreinde# data!ase !asedatos
dotlrn=S"q
36
R RESPALDOS ESPALDOS
Ba8 dos for"as de 9acer respaldos de las bases de datos; co"o una fotografa de la base de datos en
un "o"ento dado=pgDdu"p> o co"o un respaldo a un "o"ento del tie"po dado=$)T>. A
continuacin estudiare"os a"bos "Htodos*
PG"DUMP PG"DUMP
Es co"o to"ar una fotografa de la base de datos en ese "o"ento. Co se puede recuperar la base de
datos a un "o"ento dado.
$ara reali,ar el respaldo*
$pgAdump d!name S archivo.dmp
$ara recuperar el respaldo*
Antes de recuperar el respaldo se debe crear la base de datos a partir de te"plate1; para !ue la base
de datos conserve las caractersticas del te"plate0 en el !ue fue creado.
$created! -, templateE d!name
$psql d!name ( archivo.dmp
$ara respaldar una base de datos de un servidor a otro
$pgAdump -h host1 d!name J psql -h host/ d!name
$ara respaldar todas las bases de datos de un cluster*
$pgAdumpall S archivo.dmp
$ara restaurar todas las bases de datos de un cluster*
$psql postgres ( archivo.dmp
o lo !ue es loo "is"o*
$psql -f archivo.dmp postgres
$ara respaldar bases de datos grandes*
pgAdump d!name J gRip S archivo.gR
estaurar con*
gunRip -c archivo.gR J psql d!name
+sando split*
pgAdump d!name J split -! 1m - archivo
estaurar con*
cat archivoB J psql d!name
3/
P POINT OINT I IN N T TIME IME R RECOVERY ECOVERY #PITR$ #PITR$
% %
2eben establecerse en el postgres!l.conf =@etc@postgres!l@6.3@"ain@postgres!l.conf>
arc1ive0mode 9 on
arc1ive0command 9 Dtest X R. $opt$bitacoras$Y. ZZ cp Yp $opt$bitacoras$Y.D
%ola"ente si es necesario for,ar la creacin de un bacJup incre"ental cada \\\ segundos
arc1ive0timeo+t 9 2
'o i"portante es decidir adonde van a enviarse los arc9ivos de respaldo =ojal5 un servidor o
dispositivo de al"acena"iento re"oto>.
%i falla el al"acena"iento; los arc9ivos incre"entales se !uedan guardados en el pgD7log 9asta !ue
tal circunstancia se resuelva.
El pgD7log se encuentra en* $var$lib$postgres(l$B.2$main$pg05log.
Obvia"ente la particin donde estH el pgD7log@ podra llenarse. En caso de !ue eso suceda;
$ostgre%&' 9ar5 un $AC)# s9utdoFn; lo !ue i"plica !ue no se pierde ninguna transaccin; pero
9asta !ue no 9a8a algo de espacio; la E2 no podr5 levantarse nueva"ente. %i todo va bien; en el
pgD7log@ slo se "antienen los / Glti"os arc9ivos.
El directorio donde va8an a al"acenarse =p.e. @opt@bitacoras> debe pertenecerle a postgres =o Hste
usuario tener per"iso de escritura>. %i no; no podr5 trasladar los arc9ivos 8 pasar5 lo "encionado
anterior"ente.
#uando algo sucede con el co"ando de traslado; !ueda registrado en el log de postgres!l; as !ue es
reco"endable consultar de ve, en cuando el log.
#uando todo est5 preparado; se puede 9acer un restart de postgres!l .
Kacer +n bac7+p:
#onectarse con el usuario postgres.
$psql -$ postgres template1
template1#*+6+0, pgAstartA!ac&up7'/opt'<
El no"bre !ue devuelve; es el id del seg"ento del pri"er arc9ivo de respaldo incre"ental !ue
debe"os copiar; los anteriores pueden ignorarse. $ara ver el no"bre del arc9ivo*
template1#select B from pgA#logfileAnameAoffset7'E/1+EEEE/E'<
Ta"biHn es posible 9acer las dos cosas directa"ente con*
template1#select B from pgA#logfileAnameAoffset7pgAstartA!ac&up7'/opt'<<
%alir 8 9acer una copia co"pleta del directorio donde est5 el cluster =@var@lib@postgres@6.3@"ain>
$cd /var/li!/postgres/8.3/
$tar cRf /opt/data.tar.gR main
( Gua elaborada por #arlos Juan Martn $Hre,
(1
?olver a entrar co"o postgres 8 ejecutar*
template1#*+6+0, pgAstopA!ac&up7<
'a salida dice cual es el Glti"o seg"ento de transacciones durante la reali,acin del bacJup. $ara
saber el arc9ivo*
select B from pgA#logfileAnameAoffset7'E/1+E12010'<
@@#a"biar la cadena por la !ue corresponda !ue fue la salida de pgDstopDbacJup=><
O bien 9aber ejecutado de una sola ve,*
select B from pgA#logfileAnameAoffset7pgAstopA!ac&up7<<
Mover el bacJup co"pleto a un lugar seguro.
Mover los arc9ivos incre"entales de @opt@bitacoras a partir del !ue dijo el startDbacJup 9asta el !ue
dijo el stopDbacJup al dispositivo donde se va8a a reali,ar el bacJup
:ec+perar +n bac7+p :
$ara poder restaurar necesitare"os el bacJup co"pleto as co"o los arc9ivos incre"entales !ue se
generaron durante el respaldo =entre el start 8 el stop> 8 los posteriores.
%e puede restaurar 9asta un punto dado en el tie"po; por lo !ue no 9a8 proble"a si lo !ue necesito
es recuperar datos borrados antes de un "o"ento en concreto 8 tengo arc9ivos incre"entales
posteriores al desastre.
2etener el servicio de postgres.
Eli"inar todo lo !ue 9a8a dentro del directorio del cluster =p.e. $var$lib$postgres$B.2$main> .
2esco"pri"ir el arc9ivo de bacJup co"pleto =.tar.g,>.
#opiar los arc9ivos incre"entales respaldados=los !ue estan en $opt$bitacoras> en el pgD7log =p.e.
$var$lib$postgres$B.2$main$pg05log> .
#rear un arc9ivo de instrucciones de restauracin deno"inado crecovery.con.c en el directorio del
cluster =p.e. vi @var$lib$postgres$B.2$main$recovery.con.>.
)ndicar !uH se debe 9acer para restaurar. 'o "5s b5sico es indicar donde est5n los arc9ivos de
restauracin 8 9asta !uH "o"ento !uere"os restaurar*
restore0command 9 Dcp $var$lib$postgres$B.2$main$pg05log$Y. [Yp[D
recovery0target0time9D!2$,$2W !2:,,:3U.,3BBVU -)"D
#o"o usuario root *
Antes de arrancar la E2; puede ser i"portante i"pedir !ue se conecte nadie al %GE2 para asegurar
previa"ente !ue todo est5 en orden* para ello Gnica"ente es necesario "odificar el pg01ba.con..
$ara !ue no 9a8a proble"as; antes de reiniciar es conveniente li"piar el directorio donde se estaban
9aciendo la transferencia de arc9ivos incre"entales para !ue no se encuentre con uno !ue 8a e7ista
8 !uede detenido el traslado.
(0
Entonces pode"os 8a arrancar el servidor.
$ueden verse en la bit5cora $var$log$postgres(l$postgres(lRB.2Rmain.log los efectos de la
restauracin* el servidor .
$ostgre%&' procede a leer los arc9ivos incre"entales 9asta el punto en tie"po dado.
+na ve, concluda la restauracin; el arc9ivo recovery.con. es reno"brado a recovery.done
#o"probar !ue todo se restaur co"o deba .
e9abilitar el acceso de los usuarios en el pg01ba.con. 8 recargar la configuracin.
(2
CAPTULO $
CAPTULO $
REPLICACIN REPLICACIN
R REPLICACIN EPLICACIN
$ara el estudio de Hste te"a utili,are"os el artculo* eplicacin 8 alta disponibilidad de
$ostgre%&' con pgpool-))
.
de Jau"e %abater; el cual se encuentra en los "ateriales adicionales del
curso con el no"bre postgres-pgpool.odt. Este artculo 9a sido "odificado 8 corregido. Asi"is"o
en los "ateriales adicionales se pueden encontrar varios arc9ivos con los scripts sugeridos en el
artculo.
. 9ttp*@@linu7silo.net@articles@postgres!l-pgpool.9t"l
(4
F FUENTES UENTES C CONSULTADAS ONSULTADAS: :
FFF.postgres!l.org
9ttp*@@FFF.linu7-es.org@node@((1
9ttp*@@FFF.ibiblio.org@pub@linu7@docs@'u#a%@Tutoriales@COTA%-#+%O-EE22@notas-
curso-E2@node034.9t"l
9ttp*@@linu7silo.net@articles@postgres!l-pgpool.9t"lYsobre-pgpool-ii
9ttp*@@lca211..linu7.org.au@attDdata@Miniconfs=2f>$ostgre%&'@attac9"ents@gettingDstarted.p
df
9ttp*@@FiJi.postgres!l.org@FiJi@
9ttp*@@FFF.postgres!l-es.org@node@310 ;
9ttp*@@linu7silo.net@articles@postgres!l-pgpool.9t"l
(3

También podría gustarte