Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROYECTO
SGBD POSTGRESQL
Elaborado por: Ing. Patricia Araya Obando
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.
%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
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
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
#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
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
'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
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$$� 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,
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
04
www.detodoprogramacion.com
DESINSTALAR POSTGRESQL
En caso !ue se desee desintalar postgres!l; co"o usuario root*
#aptitude purge postgresql
03
www.detodoprogramacion.com
CAPTULO 2
SQL
M
www.detodoprogramacion.com
UTILIZACIN
$psql -$ user
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
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*
En esta ter"inal pode"os escribir los co"andos s!l; sola"ente se van a ejecutar cuando se escriba un '?(*
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.
ti"esta"p Fit9 ti"e ,one fec9a 8 9ora con ,onificacin c9aracter var8ing=n>
06
www.detodoprogramacion.com
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
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
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
SET
23
www.detodoprogramacion.com
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.
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.
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
# EATE 2ATAEA%E
postgres=# "c 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
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
)C%E T 1 0
testEE1=# ,-7-1. B from numeros
)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
)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
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
80H
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><
3 $ara la versin 6.4 de postgres la opcin !ue 9a8 !ue activar es partition.
40
www.detodoprogramacion.com
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
'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!
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
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
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
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
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*
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
+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
30
www.detodoprogramacion.com
#lic en ne7t.
#lic en ne7t.
32
www.detodoprogramacion.com
33
www.detodoprogramacion.com
34
www.detodoprogramacion.com
Escribir la infor"acin de cone7in. Bacer clic en K$ing %erverL para verificar !ue la cone7in estH bien.
33
www.detodoprogramacion.com
$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.
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
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
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'=
%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
'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-
(3
www.detodoprogramacion.com