Está en la página 1de 65

FORTALECIMIENTO DE LAS CAPACIDADES TIC EN PYMES Y GOBIERNOS LOCALES

MEDIANTE EL USO DE SOFTWARE LIBRE

PROYECTO

MATERIAL DE APOYO CURSO BSICO DE ADMINISTRACIN


DEL

SGBD POSTGRESQL
Elaborado por: Ing. Patricia Araya Obando

Programa de las Naciones Unidas Para el Desarrollo Universidad nacional

This document is licensed under the Attribution !hareAli"e #.$ Unported license% available at http:&&creativecommons.org&licenses&by sa&#.$&.

www.detodoprogramacion.com

TABLA

DE 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

www.detodoprogramacion.com

JUSTIFICACIN
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.

OBJETIVO GENERAL
Erindar al estudiante los conoci"ientos necesarios para !ue sea capa, de gestionar bases de datos utili,ando el %GE2 $ostgres!l.

OBJETIVOS ESPECFICOS
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.

www.detodoprogramacion.com

METODOLOGA
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.

REQUISITOS

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

www.detodoprogramacion.com

CAPTULO 1
INSTALACIN Y CONFIGURACIN DEL SGBD

www.detodoprogramacion.com

CONOCIENDO POSTGRESQL
$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.

INSTALACIN:
$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.

UTILIZANDO APT-GET 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 Teclear s %e "ostrar5 infor"acin adicional donde se solicitar5 !ue se presione la tecla enter 8 listo; tene"os postgres instalado. (

www.detodoprogramacion.com

UTILIZANDO 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(. .

www.detodoprogramacion.com

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* UA C)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 '!+(

www.detodoprogramacion.com

INFORMACIN ACERCA DE LA 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 carpeta0 @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.

EL SERVICIO DE POSTGRESQL
$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

#ual!uier "odificacin !ue se desee reali,ar sobre Hstas carpetas; deber5 reali,arse co"o usuario root.
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

www.detodoprogramacion.com

CONFIGURAR POSTGRESQL POR PRIMER 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

www.detodoprogramacion.com

$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 sameuser 8 la ca"biare"os por* local all postgres md, Al igual con* local all #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

all

ident sameuser

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

www.detodoprogramacion.com

-on.iguraci/n0
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 pg1hba.con.* !ue se utili,a para definir los diferentes tipos de accesos !ue un usuario tiene en el cluster. X pg1ident.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.

Archivo pg1hba.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* host test$$2 test 2$.$.$.2$$ 0,,.0,,.0,,.0,, md,

Esta "is"a entrada se podra escribir ta"biHn con la "ascara de red en notacin #)2 * host test$$2 test 2$.$.$.2$$&#0 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* host test$$2 test 2$.$.$.$ 0,,.0,,.0,,.$ md,

Esta "is"a entrada se podra escribir ta"biHn con la "ascara de red en notacin #)2 * host test$$2 test 2$.$.$.$&03 md,

2 To"ado de 9ttp*@@FFF.linu7-es.org@node@((1; )ntroduccin a $ostgres&'-#onfiguracin; El rincn de 'inu7

02

www.detodoprogramacion.com

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* hostssl all test 2$.$.$.2$$ 0,,.0,,.0,,.0,, md, hostssl all test 2$.2.2.2$$ 0,,.0,,.0,,.0,, 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* host host all test 2$.$.$.$&03 re4ect 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%&'.

Archivo 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. ma51connections: 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 shared1bu..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

www.detodoprogramacion.com

6or"1mem: +sada en operaciones !ue contengan O 2E 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 maintenance16or"1mem: +sada en operaciones del tipo ?A#++M; ACA'M[E; # EATE )C2E\; A'TE TAE'E; A22 :O E)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..ective1cache1si7e: $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 chec"point1segments: 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 ma51stac"1depth 8integer9: Especifica el ta"aIo "57i"o de profundidad de la pila de ejecucin del servidor .El ta"anIo ideal debe ser el resultado del co"ando uli"it -s - 0ME

Par:metros del "ernel:


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 'inu7 2.4 8 posteriores; el co"porta"iento por defecto de la "e"oria virtual no es pti"o para postgres; para ello "odificare"os el par5"etro* overco""itD"e"or83. En el arc9ivo @etc@s8sctl agregar* "ernel.shmma5 ; 2&# de la <A= disponible en bytes. vm.overcommit1memory;0 En consola; co"o usuario root*
#s%sctl -w &ernel.shmma# = 0@3 de la AM disponible en b8tes. #s%sctl -w vm.overcommit'memor%=(
3 9ttp*@@FFF.netForJ-t9eor8.co.uJ@docs@postgres!l@vol3@'inu7Me"or8Overco""it.9t"l

04

www.detodoprogramacion.com

DESINSTALAR POSTGRESQL
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

www.detodoprogramacion.com

CAPTULO 2
SQL
M

CARACTERSTICAS PARTICULARES DEL SGBD

www.detodoprogramacion.com

UTILIZACIN
$psql -$ user

BSICA DE LA TERMINAL INTERACTIVA

$ara ingresar a la ter"inal con el usuario user a la base de datos base*


!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.

www.detodoprogramacion.com

TIPOS

DE DATOS RELEVANTES EN

POSTGRESQL

#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.

TIPOS DE DATOS DEL ESTNDAR SQL3 EN POSTGRESQL


Tipos de datos del est:ndar !@A# en Postgre!@A Tipo en $ostgres #orrespondiente en %&'3 2escripcin bool c9ar=n> date float4@6 float6 int2 int4 int4 int4 "one8 ti"e ti"espan ti"esta"p varc9ar=n> boolean c9aracter=n> date float=6(Y6(> real; double precision s"allint int; integer deci"al=6.Y6.> nu"eric=6.Y6.> deci"al=/;2> ti"e interval valor lgico o booleano =true@false> cadena de car5cteres de ta"aIo fijo fec9a =sin 9ora> nG"ero de punto flotante con precisin 6(Y6( nG"ero de punto flotante de doble precisin entero de dos b8tes con signo entero de cuatro b8tes con signo nG"ero e7acto con 66Y66 nG"ero e7acto con 6/Y6/ cantidad "onetaria 9ora en 9oras; "inutos; segundos 8 centHsi"as intervalo de tie"po cadena de car5cteres de ta"aIo variable

ti"esta"p Fit9 ti"e ,one fec9a 8 9ora con ,onificacin c9aracter var8ing=n>

06

www.detodoprogramacion.com

TIPOS DE DATOS EXTENDIDOS POR POSTGRESQL


Tipos de datos e5tendidos en Postgre!@A Tipo bo7 cidr circle inet int6 line lseg pat9 point pol8gon serial 2escripcin caja rectangular en el plano direccin de red o de host en )$ versin 4 crculo en el plano direccin de red o de host en )$ versin 4 entero de oc9o b8tes con signo lnea infinita en el plano seg"ento de lnea en el plano tra8ectoria geo"Htrica; abierta o cerrada; en el plano punto geo"Htrico en el plano tra8ectoria geo"Htrica cerrada en el plano identificador nu"Hrico Gnico

Tipos de datos Autoincrementales8serial9: $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* AATE< TABAE tabla ADD campo intC? -<EATE !E@UEN-E nombredelasecuencia1se*? AATE< TABAE tabla AATE< -OAU=N campo !ET DEDAUAT ne5tval8nombredelasecuencia1se*9? UPDATE tabla !ET campo;ne5tval8Enombredelasecuencia1se*E9?

0/

www.detodoprogramacion.com

TIPOS DE DATOS DE POSTGRESQL


Tipo ,-. a!stime aclitem !ool !o# !pchar !%tea char cid cidr circle /ate datetime filename float0 float8 inet int( int(8 int0 int8 line lseg macaddr mone% name numeric oid oid8 path point conjunto de tuplas fec9a 8 9ora absoluta de rango li"itado =+ni7 s8ste" ti"e> lista de control de acceso booleano ^true^@^false^ rect5ngulo geo"Htrico ^=i,!uierda abajo; derec9a arriba>^ car5cteres rellenos con espacios; longitud especificada al "o"ento de creacin arreglo de b8tes de longitud variable un slo car5cter command identifier type; identificador de secuencia en transacciones direccin de red crculo geo"Htrico ^=centro; radio>^ fec9a AC%) %&' ^aaaa-""-dd^ fec9a 8 9ora ^aaaa-""-dd 99*""*ss^ no"bre de arc9ivo usado en tablas del siste"a nG"ero real de precisin si"ple de 4 b8tes nG"ero real de precisin doble de 6 b8tes direccin de red nG"ero entero de dos b8tes; de -32J a 32J 6 nu"eros enteros de 2 b8tes; usado interna"ente nG"ero entero de 4 b8tes; -2E to 2E nG"ero entero de 6 b8tes; /1Y/106 dgitos lnea geo"Htrica ^=pt0; pt2>^ seg"ento de lnea geo"Htrica ^=pt0; pt2>^ direccin MA# unidad "onetaria ^`d;ddd.cc^ tipo de 30 car5cteres para guardar identificadores del siste"a nG"ero de precisin "Gltiple tipo de identificacin de objetos arreglo de 6 oids; utili,ado en tablas del siste"a tra8ectoria geo"Htrica ^=pt0; ...>^ punto geo"Htrico ^=7; 8>^ 21 Descripci/n

www.detodoprogramacion.com

Tipo pol%gon regproc reltime smgr te#t tid time timespan polgono geo"Htrico ^=pt0; ...>^ procedi"iento registrado

Descripci/n

intervalo de tie"po de rango li"itado 8 relativo =+ni7 delta ti"e> "anejador de al"acena"iento =storage manager> cadena de car5cteres nativa de longitud variable tipo de identificador de tupla; locali,acin fsica de tupla 9ora AC%) %&' ^99*""*ss^ 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 varchar #id tipo desconocido cadena de car5cteres sin espacios al final; longitud especificada al "o"ento de creacin identificador de transaccin

20

www.detodoprogramacion.com

OPERACIONES

SOBRE TABLAS Y 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 diagrama1EE<.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* base1de1datos.s*l consultas1resueltas.s*l

$ara ver un resG"en de las funciones de $ostgre%&'; el estudiante debe estudiar el arc9ivo* postgres*l1cheat1sheet.pd.

22

www.detodoprogramacion.com

SC

EMAS

+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 .

EJEMPLOS
Funcionalidad bsica:
test=# 12-3.- ,14-53 foo

CREATE SCHEMA
test=# 12-3.- .367- foo.info 8id 9:.; t#t .-<.=

CREATE TABLE
test=# 9:,-2. 9:.> foo.info ?37$-,81; '.his is schema foo'=

INSERT 23062 1
test=# 12-3.- ,14-53 !ar

CREATE SCHEMA
test=# 12-3.- .367- !ar.info 8id 9:.; t#t .-<.=

CREATE TABLE
test=# 9:,-2. 9:.> !ar.info ?37$-,81; '.his is schema !ar'=

INSERT 23069 1
test=# ,-7-1. foo.info.t#t; !ar.info.t#t test-# @2>5 foo.info; !ar.info test-# A4-2- foo.info.id=!ar.info.id

txt | txt --------------------+-------------------This is schema !! | This is schema "a# $1 #!%& Cambiar de schema:
test=# ,-. search'path .> foo

SET 'a#a cam"ia# (e#ma)e)teme)te e* schema e) ca+a c!)exi,)37.-2 $,-2 test ,-. search'path .> !ar;foo

E* cam"i! s.#ti#/ e ect! s!*ame)te +es(.0s +e c!)ecta#se +e ).e1!2


test=# ,-. search'path .> !ar; foo

SET

23

www.detodoprogramacion.com

test=# ,-7-1. t#t @2>5 info

txt -------------------This is schema "a# $1 #!%&


test=# ,-7-1. B @2>5 info'view

ERR3R- Re*ati!) 4i) !51ie%4 +!es )!t exist test67 SELECT 8 9R3M (."*ic2i) !51ie%: !! | "a# --------------------+-------------------This is schema !! | This is schema "a#

PERMISOS Y 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! .seCREATE SCHEMA ta#<a) A=TH3RI>ATI3N ta#<a): ! CREATE SCHEMA A=TH3RI>ATI3N ta#<a):

ELIMINAR ESQUEMAS
?R3' SCHEMA ta#<a): Si @a existe) +at!s e) e* es;.ema?R3' SCHEMA ta#<a) CASCA?E:

FUNCIONES DE SCHEMAS
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,ASIS,CLIE,CONT,C E!,IN"E,#ASI,#ISC,#UTU,P ES, $$,SE%U,SE ",SISE,TESO&

LIMITACIONES
)! es (!si"*e t#a)s e#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

www.detodoprogramacion.com

DISPARADORES !TRIGGERS"

EN

POSTGRESQL#

+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<T; un UPDATE un DEAETE en la susodic9a tabla. +n disparador se puede definir de las siguientes "aneras* $ara !ue ocurra ACTE% de cual!uier )C%E T;+$2ATE 2E'ETE $ara !ue ocurra 2E%$+E% de cual!uier )C%E T;+$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.
-<EATE T<IFFE< nombre G BEDO<E H ADTE< I G IN!E<T H UPDATE H DEAETE J O< ... K I ON tabla J DO< J EA-L K G <OM H !TATE=ENT I K ENE-UTE P<O-EDU<E nombre de .uncion 8 argumentos 9

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.

CARACTERSTICAS Y REGLAS A 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#O 2>

4 To"ado de 9ttp*@@FFF.postgres!l-es.org@node@310; e #op8rig9t 211/ $osgre%&'-es.org - afael Martine,

23

www.detodoprogramacion.com

$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#O 2 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%E T;+$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.

VARIABLES ESPECIALES EN PL PGSQL


#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* NEM Tipo de dato E#O 2< ?ariable !ue contiene la nueva fila de la tabla para las operaciones )C%E T@+$2ATE en disparadores del tipo roF-level. Esta variable es C+'' en disparadores del tipo state"ent-level. OAD Tipo de dato E#O 2< ?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. TF1NA=E Tipo de dato na"e< variable !ue contiene el no"bre del disparador !ue est5 usando la funcin actual"ente. TF1MLEN Tipo de dato te7t< una cadena de te7to con el valor EE:O E o A:TE disparador !ue est5 usando la funcin actual"ente 9a sido definido dependiendo de co"o el

2(

www.detodoprogramacion.com

TF1AEOEA 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 TF1OP Tipo de dato te7t< una cadena de te7to con el valor )C%E T; +$2ATE o 2E'ETE dependiendo de la operacin !ue 9a activado el disparador !ue est5 usando la funcin actual"ente. TF1<EAID Tipo de dato oid< el identificador de objeto de la tabla !ue 9a activado el disparador !ue est5 usando la funcin actual"ente. TF1<EANA=E 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. TF1TABAE1NA=E Tipo de dato na"e< el no"bre de la tabla !ue 9a activado el disparador !ue est5 usando la funcin actual"ente. TF1TABAE1!-LE=A 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. TF1NA<F! Tipo de dato integer< el nG"ero de argu"entos dados al procedi"iento en la sentencia # EATE T )GGE . TF1A<FOJ K 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.

EJEMPLOS 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.

www.detodoprogramacion.com

postgres=# 12-3.- /3.363,- 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. -<EATE P<O-EDU<AA AANFUAFE plpgs*l? A9ora crea"os una tabla para poder definir nuestro pri"er disparador* -<EATE TABAE numeros8 numero bigint NOT NUAA% cuadrado bigint% cubo bigint% rai70 real% rai7# real% P<I=A<P QEP 8numero9 9? 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+''* -<EATE O< <EPAA-E DUN-TION proteger1datos89 <ETU<N! T<IFFE< A! Rproteger1datosR DE-AA<E BEFIN Esta .uncion es usada para proteger datos en un tabla No se permitira el borrado de .ilas si la usamos en un disparador de tipo BEDO<E & ro6 level <ETU<N NUAA? END? Rproteger1datosR AANFUAFE plpgs*l? A continuacin defini"os en la tabla numeros un disparador del tipo EE:O E @ roF-level para la operacin 2E'ETE. M5s adelante vere"os co"o funciona* -<EATE T<IFFE< proteger1datos BEDO<E DEAETE ON numeros DO< EA-L <OM ENE-UTE P<O-EDU<E proteger1datos89?

26

www.detodoprogramacion.com

'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 $ )MA M ]EM; btree =nu"ero> Triggers* protegerDdatos EE:O E 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* -<EATE O< <EPAA-E DUN-TION rellenar1datos89 <ETU<N! T<IFFE< A! Rrellenar1datosR DE-AA<E BEFIN NEM.cuadrado :; po6er8NEM.numero%09? NEM.cubo :; po6er8NEM.numero%#9? NEM.rai70 :; s*rt8NEM.numero9? NEM.rai7# :; cbrt8NEM.numero9? <ETU<N NEM? END?
$rellenar'datos$ 73:F$3F- plpgsql

-<EATE T<IFFE< rellenar1datos BEDO<E IN!E<T O< UPDATE ON numeros DO< EA-L <OM ENE-UTE P<O-EDU<E rellenar1datos89? '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/

www.detodoprogramacion.com

)nde7es* cnu"erosDpJe8c $ )MA M ]EM; btree =nu"ero> Triggers* protegerDdatos EE:O E 2E'ETE OC nu"eros :O EA#B OU E\E#+TE $ O#E2+ E protegerDdatos=> rellenarDdatos EE:O E )C%E T 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=# ,-7-1. B from numeros

nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T------T-------T------=1 roFs>


testEE1=# 9:,-2. 9:.> numeros 8numero= ?37$-, 8(=

)C%E T 1 0
testEE1=# ,-7-1. B from numeros

nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T------T---------T--------2f 4 f 6 f 0.40420 f 0.23//2 =0 roFs>


testEE1=# 9:,-2. 9:.> numeros 8numero= ?37$-, 83=

)C%E T 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--------2f 4 f 6 f 0.40420 f 0.23//2 3f / f 2. f 0..3213 f 0.44223 =2 roFs>
testEE1=# $G/3.- numeros ,-. numero = 0 A4-2- numero = 3

+$2ATE 0
testEE1=# ,-7-1. B from numeros

nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T------T---------T--------2f 4 f 6 f 0.40420 f 0.23//2 4f 0( f (4 f 2 f 0.36.4 =2 roFs> Be"os reali,ado 2 )C%E T 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

www.detodoprogramacion.com

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*
NEM.cuadrado :; po6er8NEM.numero%09? NEM.cubo :; po6er8NEM.numero%#9? NEM.rai70 :; s*rt8NEM.numero9? NEM.rai7# :; cbrt8NEM.numero9? <ETU<N NEM?

#uando ejecuta"os el pri"er )C%E T =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#O 2> al"acenada en la variable CEU; 8 sali"os de la funcin rellenar_datos(). El siste"a al"acena entonces el E#O 2 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=# /-7-.- @2>5 numeros

2E'ETE 1
testEE1=# ,-7-1. B from numeros

nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T------T---------T--------2f 4 f 6 f 0.40420 f 0.23//2 4f 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=# /2>G .29FF-2 proteger'datos >: numeros

2 O$ T )GGE
testEE1=# /2>G .29FF-2 rellenar'datos >: numeros

2 O$ T )GGE 30

www.detodoprogramacion.com

A continuacin creare"os un disparador Gnico para las sentencias )C%E T; +$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$. -<EATE O< <EPAA-E DUN-TION proteger1y1rellenar1datos89 <ETU<N! T<IFFE< A! Rproteger1y1rellenar1datosR DE-AA<E BEFIN ID 8TF1OP ; EIN!E<TE O< TF1OP ; EUPDATEE 9 TLEN NEM.cuadrado :; po6er8NEM.numero%09? NEM.cubo :; po6er8NEM.numero%#9? NEM.rai70 :; s*rt8NEM.numero9? NEM.rai7# :; cbrt8NEM.numero9? <ETU<N NEM? EA!EID 8TF1OP ; EDEAETEE9 TLEN <ETU<N NUAA? END ID? END? $proteger_y_rellenar_datos$ LAN !A " plpgs#l$ -<EATE T<IFFE< proteger1y1rellenar1datos BEDO<E IN!E<T O< UPDATE O< DEAETE ON numeros DO< EA-L <OM ENE-UTE P<O-EDU<E proteger1y1rellenar1datos89? '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 $ )MA M ]EM; btree =nu"ero> Triggers* rellenarDdatos EE:O E )C%E T O 2E'ETE O +$2ATE OC nu"eros :O EA#B OU E\E#+TE $ O#E2+ E protegerD8DrellenarDdatos=>

32

www.detodoprogramacion.com

M todo seguir5 funcionando de la "is"a "anera !ue con los dos disparadores del co"ien,o*
testEE1=# ,-7-1. B from numeros nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T------T---------T--------2f 4 f 6 f 0.40420 f 0.23//2 4f 0( f (4 f 2 f 0.36.4 =2 roFs> testEE1=# 9:,-2. 9:.> numeros 8numero= ?37$-, 8H=

)C%E T 1 0
testEE1=# 9:,-2. 9:.> numeros 8numero= ?37$-, 8I=

)C%E T 1 0
testEE1=# ,-7-1. B from numeros

nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T------T---------T--------2f 4 f 6 f 0.40420 f 0.23//2 4f 0( f (4 f 2 f 0.36.4 3f 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/3.- numeros ,-. numero = 1E A4-2- numero = I

+$2ATE 0
testEE1=# ,-7-1. B from numeros

nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T------T---------T--------2f 4 f 6 f 0.40420 f 0.23//2 4f 0( f (4 f 2 f 0.36.4 3f 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=# /-7-.- @2>5 numeros where numero =1E

2E'ETE 1
testEE1=# ,-7-1. B from numeros

nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T------T---------T--------2f 4 f 6 f 0.40420 f 0.23//2 4f 0( f (4 f 2 f 0.36.4 3f 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%E T; +$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

www.detodoprogramacion.com

$ara de"ostrar co"o pode"os utili,ar esto va"os a definir una nueva tabla* -<EATE TABAE cambios8 timestamp1 TI=E!TA=P MITL TI=E SONE de.ault NOM89% nombre1disparador te5t% tipo1disparador te5t% nivel1disparador te5t% comando te5t 9?

'a funcin la pode"os definir asi* -<EATE O< <EPAA-E DUN-TION grabar1operaciones89 <ETU<N! T<IFFE< A! Rgrabar1operacionesR DE-AA<E BEFIN IN!E<T INTO cambios 8 nombre1disparador% tipo1disparador% nivel1disparador% comando9 OAAUE! 8 TF1NA=E% TF1MLEN% TF1AEOEA% TF1OP 9? <ETU<N NUAA? END? $grabar_operaciones$ LAN !A " plpgs#l$ M el disparador lo instalara"os de la siguiente for"a* -<EATE T<IFFE< grabar1operaciones ADTE< IN!E<T O< UPDATE O< DEAETE ON numeros DO< EA-L !TATE=ENT ENE-UTE P<O-EDU<E grabar1operaciones89? '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

www.detodoprogramacion.com

)nde7es* cnu"erosDpJe8c $ )MA M ]EM; btree =nu"ero> Triggers* grabarDoperaciones A:TE )C%E T O 2E'ETE O +$2ATE OC nu"eros :O EA#B %TATEMECT E\E#+TE $ O#E2+ E grabarDoperaciones=> protegerD8DrellenarDdatos EE:O E )C%E T 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=# ,-7-1. B from cam!ios

ti"esta"pD f no"breDdisparador f tipoDdisparador f nivelDdisparador f co"ando ------------T-------------------T-----------------T------------------T--------=1 roFs>


testEE1=# 9:,-2. 9:.> numeros 8numero= ?37$-, 81EE=

)C%E T 1 0
testEE1=# ,-7-1. B from numeros nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T---------T---------T--------2f 4f 6 f 0.40420 f 0.23//2 4f 0( f (4 f 2 f 0.36.4 3f 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=# ,-7-1. 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%E T

=0 roF>
testEE1=# $G/3.- numeros ,-. numero = 1EEE A4-2- numero = 1EE

+$2ATE 0
testEE1=# ,-7-1. B from numeros nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T------------T---------T--------2f 4f 6 f 0.40420 f 0.23//2 4f 0( f (4 f 2 f 0.36.4 3f 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=# ,-7-1. 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%E T 211/-1(-00 23*1(*16.23/420T12 f grabarDoperaciones f A:TE f %TATEMECT f +$2ATE

=2 roFs>

33

www.detodoprogramacion.com

testEE1=# /-7-.- @2>5 numeros where numero =1EEE

2E'ETE 1
testEE1=# ,-7-1. B from numeros

nu"ero f cuadrado f cubo f rai,2 f rai,3 --------T----------T------------T---------T--------2f 4f 6 f 0.40420 f 0.23//2 4f 0( f (4 f 2 f 0.36.4 3f 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=# ,-7-1. 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%E T 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>

ALGUNAS 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 TGDA G?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 -<EATE TABAE testing8 valor BIFINT NOT NUAA% argumento2 OA<-LA<% argumento0 OA<-LA<% P<I=A<P QEP 8valor9 9?

3(

www.detodoprogramacion.com

-- #rea el stored procedure -<EATE O< <EPAA-E DUN-TION sp1con1argumentos89 <ETU<N! T<IFFE< A! Rsp1con1argumentosR DE-AA<E BEFIN ID 8TF1OP ; EIN!E<TE O< TF1OP ; EUPDATEE 9 TLEN NEM.argumento2 :; TF1A<FOJ$K? NEM.argumento0 :; TF1A<FOJ2K? <ETU<N NEM? EA!EID 8TF1OP ; EDEAETEE9 TLEN <ETU<N NUAA? END ID? END? $sp_con_argumentos$ LAN !A " plpgs#l$ -- #rea el trigger -<EATE T<IFFE< sp1con1argumentos BEDO<E IN!E<T O< UPDATE O< DEAETE ON testing DO< EA-L <OM ENE-UTE P<O-EDU<E sp1con1argumentos8EAOOQ2E% EAOOQ0E9? -- )nserta el pri"er valor; por ende se lla"a al triggers IN!E<T INTO testing8valor9 OAAUE!829? -- %e observan los valores de la tabla !EAE-T T D<O= testing?

Eje"plos de triggers sobre la base de datos de eje"plo en el arc9ivo trigger.s!l de los "ateriales adicionales.

3.

www.detodoprogramacion.com

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* -<EATE TABAE cities 8 name te5t% population .loat% altitude int in .eet 9? -<EATE TABAE capitals 8 state char809 9 INLE<IT! 8cities9? IN!E<T INTO cities OAAUE! 8E!an DranciscoE% U.03E),% V#9? IN!E<T INTO cities OAAUE! 8EAas OegasE% 0.,C#E),% 02U39? IN!E<T INTO cities OAAUE! 8E=ariposaE% 20$$% 2W,#9? IN!E<T INTO capitals OAAUE! 8E!acramentoE% #.VW3E),% #$% E-AE9? IN!E<T INTO capitals OAAUE! 8E=adisonE% 2.W2#E),% C3,% EMIE9? !EAE-T T D<O= cities? !EAE-T T D<O= 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---------7as ?egas J (1L0 5ariposa J 1MH3 5adison J 80H

36

www.detodoprogramacion.com

'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---------7as ?egas J (1L0 5ariposa 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 7as ?egas J (1L0 13MLM3 J 5ariposa J 1MH3 13MLM8 J 5adison J 80H

$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 7as ?egas J (1L0 cities J 5ariposa J 1MH3 capitals J 5adison # apt-get install postgresql-contri!J

80H

Co propaga los inserts auto"5tica"ente*


9:,-2. 9:.> cities 8name; population; altitude; state= ?37$-, 8':ew Nor&'; :$77; :$77; ':N'=

Todos los constrains chec" y not null constraints son heredados autom:ticamente.otros tipos de constraints 8uni*ue% primary "ey% and .oreign "ey constraints9 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/

www.detodoprogramacion.com

#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

www.detodoprogramacion.com

PARTICIONAMIENTO
%e basa en 9erencia.

DE

TABLAS:

%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.3 E'E#PLO $articiona"iento de pagos 8 dese"bolsos -rear tablas hi4as:
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><

Trasladar los datos de la tabla padre a las tablas hi4as.


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^<

3 $ara la versin 6.4 de postgres la opcin !ue 9a8 !ue activar es partition.

40

www.detodoprogramacion.com

-rear +ndices en las tablas hi4as:


# # # # # # 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><

Borrar 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%E T )CTO clie.pagosD8Ddese"bolsosD"en2111Dcl ?A'+E% =CEU.g>< E'%): = CEU.fecDpago betFeen ^0@0@2111^ AC2 ^30@02@2111^ > TBEC )C%E T )CTO clie.pagosD8Ddese"bolsosD2111Dcl ?A'+E% =CEU.g>< E'%): = CEU.fecDpago betFeen ^0@0@2110^ AC2 ^30@02@2110^ > TBEC )C%E T )CTO clie.pagosD8Ddese"bolsosD2111Dcl ?A'+E% =CEU.g>< E'%): = CEU.fecDpago betFeen ^0@0@2112^ AC2 ^30@02@2112^ > TBEC )C%E T )CTO clie.pagosD8Ddese"bolsosD2111Dcl ?A'+E% =CEU.g>< E'%): = CEU.fecDpago betFeen ^0@0@2113^ AC2 ^30@02@2113^ > TBEC )C%E T )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:O E )C%E T OC clie.pagosD8Ddese"bolsosDcl :O EA#B OU E\E#+TE $ O#E2+ E clie.pagosD8Ddese"bolsosDinsertDtrigger=><

Eje"plos de particiona"iento sobre la base de datos de eje"plo en el arc9ivo particiona"iento.s!l de los "ateriales adicionales.

42

www.detodoprogramacion.com

CONSULTAS

ENTRE BASES DE 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.ues.edu.sv. Ctese !ue se debe indicar el usuario 8 passFord para reali,ar la cone7in. IN!E<T INTO carrera !EAE-T T D<O= dblin"8 Ehost;adacad.academica.ues.edu.sv dbname;historico user;publico pass6ord;publicoE% Eselect T .rom carrera 6here codigo;>EPU$3#2>E and plan1estudios;2WWCE 9 A! resultados8codigo te5t% plan smallint% tipo te5t% nombre te5t% cod1uacad te5t% cod1uadmin te5t9 ? 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<T INTO imagen !EAE-T T D<O= dblin"8 Ehost;adacad.academica.ues.edu.sv dbname;ni10$$V user;publico pass6ord;publicoE% E select carnet%>E.oto>E%>E4pg>E%.otogra.ia%>EDotogra.+a de el&la alumno&a>E%no689 .rom aspirante1ingreso%solicita1primer1ingreso 6here numero1.ormulario;numero1.ormulario1aspirante1ing and estado1seleccion;>E!>E and .otogra.ia is not null E 9 A! resultados8carnet te5t% denominacion te5t% .ormato te5t% datos bytea% descripcion te5t% .echa date9 MLE<E carnet in 8!EAE-T carnet .rom alumno9?

43

www.detodoprogramacion.com

IN!E<T INTO imagen !EAE-T T D<O= dblin"8 Ehost;adacad.academica.ues.edu.sv dbname;ni10$$U user;publico pass6ord;publicoE% E select carnet%>E.oto>E%>E4pg>E%.otogra.ia%>EDotogra.+a de el&la alumno&a>E%no689 .rom aspirante1ingreso%solicita1primer1ingreso 6here numero1.ormulario;numero1.ormulario1aspirante1ing and estado1seleccion;>E!>E and .otogra.ia is not null E 9 A! resultados8carnet te5t% denominacion te5t% .ormato te5t% datos bytea% descripcion te5t% .echa date9 MLE<E carnet in 8!EAE-T carnet .rom alumno9? %e pueden dejar abiertas cone7iones cuando se va a 9acer "5s de una consulta por cone7in* dblin"1connect8Enombredelacone5ionE%Estringdecone5ionE9? para desconectarlo dblin"1disconnect8nombredelacone5ion9? Eje"plo*
select dblink_connect45dbname3postgres56$ d!lin&'connect --------------->O 81 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 81( 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

www.detodoprogramacion.com

%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&'connect --------------->O 81 row= select dblink_exec45insert into 8oo =alues4>9'55?55'55@Aa0A'Ab0A'Ac0AB556$56$ d!lin&'e#ec ----------------9:,-2. M033II 1 81 row= select dblink_connect45myconn5' 5dbname3regression56$ d!lin&'connect --------------->O 81 row= select dblink_exec45myconn5' 5insert into 8oo =alues4>9'55?55'55@Aa0A'Ab0A'Ac0AB556$56$ d!lin&'e#ec -----------------9:,-2. I03(H80 1 81 row=

TABLAS

TEMPORALES

'as tablas te"porales se crean utili,ando la opcin te"p* Eje"plo*


12-3.- .-5G .367- prue!a8ciud'id integer; ciud'codigo numeric; ciud'nom!re varchar= > llenPndola directamente con una consultaD select name as id;'1ed' as codigo'tipoid;description as nom!re;null as notas;1 as ma#docs;smodified as fecha'crea;smodified as fecha'modif into temp expediente from folders where length8name=*=1E

ARC

IVOS

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 tcconsultas .rom E&home&usuario&E!!$$0 0.t5tE DEAI=ITE< A! E%E NUAA as EE? 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 E&home&usuario&e5pediente.csvE DEAI=ITE< A! E%E NUAA as EE? 43

www.detodoprogramacion.com

CAPTULO $
ADMINISTRACIN Y MANTENIMIENTO DE LAS BASES DE DATOS

www.detodoprogramacion.com

ERRAMIENTAS GRFICAS PARA LA ADMINISTRACIN DE BASES DE DATOS EN

POSTGRESQL

$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
$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.

www.detodoprogramacion.com

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

www.detodoprogramacion.com

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/

www.detodoprogramacion.com

%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

www.detodoprogramacion.com

DBVISUALIZER
?erificar !ue estH Java instalado. 2escargarlo de* 9ttp*@@FFF.dbvis.co"@products@dbvis@doFnload@ En consola; co"o usuario root*
#sh d!vis'linu#'L'E'0.sh

%e iniciar5 el instalador; 9acer clic en ne7t.

Bacer clic en K) accept ...L 8 seguida"ente en ne7t.

30

www.detodoprogramacion.com

Escoger en KEroFseL donde desea instalar dbvis 8 clicJ en ne7t.

#lic en ne7t.

#lic en ne7t.

32

www.detodoprogramacion.com

%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

www.detodoprogramacion.com

Utili7ando DbOisuali7er: $ara iniciarlo*


$/var/opt//!?isualiRer-L.E.0/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

www.detodoprogramacion.com

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

www.detodoprogramacion.com

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(

www.detodoprogramacion.com

RUTINAS

DE

MANTENIMIENTO:

ROUTINE VACUUMING!
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.

ACTUALIZACIN DE PLANIFICACIN DE ESTADSTICA


'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!.

esu"en de la infor"acin de FFF.postgres!l.org reali,ado por Andrea Torres.

3.

www.detodoprogramacion.com

AUTOVACUUM DAEMON
'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.

RUTINA DE INDEXACIN
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

www.detodoprogramacion.com

RESPALDOS
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
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*
$pg'dump 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


$pg'dump -h host1 d!name J psql -h host( d!name

$ara respaldar todas las bases de datos de un cluster*


$pg'dumpall 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*


pg'dump d!name J gRip S archivo.gR

estaurar con*
gunRip -c archivo.gR J psql d!name

+sando split*
pg'dump d!name J split -! 1m - archivo

estaurar con*
cat archivoB J psql d!name

3/

www.detodoprogramacion.com

POINT IN TIME RECOVERY #PITR$%


2eben establecerse en el postgres!l.conf =@etc@postgres!l@6.3@"ain@postgres!l.conf> archive1mode ; on archive1command ; Etest X . &opt&bitacoras&Y. ZZ cp Yp &opt&bitacoras&Y.E %ola"ente si es necesario for,ar la creacin de un bacJup incre"ental cada \\\ segundos archive1timeout ; #$$ '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&C.#&main&pg15log. 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 . Lacer un bac"up: #onectarse con el usuario postgres.
$psql -$ postgres template1 template1#,-7-1. pg'start'!ac&up8'/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 pg'#logfile'name'offset8'E/1-EEEE(E'=

Ta"biHn es posible 9acer las dos cosas directa"ente con*


template1#select B from pg'#logfile'name'offset8pg'start'!ac&up8'/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

www.detodoprogramacion.com

?olver a entrar co"o postgres 8 ejecutar*


template1#,-7-1. pg'stop'!ac&up8=

'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 pg'#logfile'name'offset8'E/1-E13111'=

@@#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 pg'#logfile'name'offset8pg'stop'!ac&up8==

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 <ecuperar un bac"up : $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&C.#&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&C.#&main&pg15log> . #rear un arc9ivo de instrucciones de restauracin deno"inado crecovery.con.c en el directorio del cluster =p.e. vi @var&lib&postgres&C.#&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* restore1command ; Ecp &var&lib&postgres&C.#&main&pg15log&Y. [Yp[E recovery1target1time;E2#&$,&0$$W 20:,,:3U.,3CCVU -!TE #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 pg1hba.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

www.detodoprogramacion.com

Entonces pode"os 8a arrancar el servidor. $ueden verse en la bit5cora &var&log&postgres*l&postgres*l C.# main.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 pg1hba.con. 8 recargar la configuracin.

(2

www.detodoprogramacion.com

CAPTULO #
REPLICACIN

www.detodoprogramacion.com

REPLICACIN
$ara el estudio de Hste te"a utili,are"os el artculo* eplicacin 8 alta disponibilidad de $ostgre%&' con pgpool-))6 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.

6 9ttp*@@linu7silo.net@articles@postgres!l-pgpool.9t"l

(4

www.detodoprogramacion.com

FUENTES CONSULTADAS:
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

www.detodoprogramacion.com

También podría gustarte