.6.2 0in,o de ,ebrero de 2)1 06 das $ase de datos obeto*relacional 0RD$M-
Sistema operativo Licencia En espaol
Multiplata,orma 'ostgre-/L License1 o
PostgreSQL es un -istema de gestin de bases de datos relacional orientado a obetos y libre, publicado bajo la licencia 'ostgre-/L,1 similar a la $-D o la M7(. Como muchos otros proyectos de cdigo abierto, el desarrollo de PostgreSQL no es manejado por una empresa o persona, sino que es dirigido por una comunidad de desarrolladores que trabajan de forma desinteresada, altruista, libre o apoyados por organi8aciones comerciales. Dicha comunidad es denominada el '#D# (PostgreSQL Global Development Group. Índice !ocultar"
1ombre del producto
29istoria
3!aractersticas
3.1:lta concurrencia
3.2:mplia ariedad de tipos natios
3.3tras caractersticas
3.4Funciones
3.5;entaas
4'roductos alrededor de 'ostgre-/L
59istorial de liberaciones
5.1:lternatias !omerciales
5.2#7-
5.3Replicacin
5.49erramientas de administracin
5.5$to
5.6?ML
6@suarios destacados
'remios
"Re,erencias
Anlaces e>ternos
#ombre del producto $l uso de caracteres en may%scula en el nombre PostgreSQL puede confundir a algunas personas a primera &ista. Las distintas pronunciaciones de ' -/L' pueden lle&ar a confusin. Los desarrolladores de PostgreSQL lo pronuncian )po*st +-s ju* -l)/. $s tambi0n com%n o1r abre&iadamente como simplemente 'Postgres', el que fue su nombre srcinal. Debido a su soporte del est2ndar SQL entre la mayor parte de bases de datos relacionales, la comunidad consider cambiar el nombre al anterior Postgres. Sin embargo, el PostgreSQL Core 3eam anunci en 4556 que el producto seguir1a llam2ndose PostgreSQL. $l nombre hace referencia a los or1genes del proyecto como la base de datos 'post77ngres', y los autores srcinales tambi0n desarrollaron la base de datos 8ngres.
Historia PostgreSQL ha tenido una larga e&olucin, la cual se inicia en 9:;4 con el proyecto 7ngres en la @niersidad de $er%ele+. $ste proyecto, liderado por MicBael -tonebra%er, fue uno de los primeros intentos en implementar un motor de base de datos relacional. Despu0s de haber trabajado un largo tiempo en Ingres y de haber tenido una eni&ersidad en 9:;? para trabajar en un nue&o proyecto sobre la e
la base de datos Ecomprend1aF las relaciones y pod1a obtener informacin de tablas relacionadas utiliando reglas. Postgres us muchas ideas de 8ngres pero no su cdigo. La siguiente lista muestra los hitos m2s importantes en la &ida del proyecto Postgres.
9:;GH se publicaron &arios papers que describ1an las bases del sistema.
9:;;H ya se contaba con una &ersin utiliable.
9:;:H el grupo publicaba la &ersin 9 para una pequeIa comunidad de usuarios.
9::5H se publicaba la &ersin 4 la cual ten1a pr2cticamente reescrito el sistema de reglas. 9::9H publicacin de la &ersin J, esta aIad1a la capacidad de m%ltiples motores de almacenamiento.
9::JH crecimiento importante de la comunidad de usuarios, la cual demandaba m2s caracter1sticas.
9::KH despu0s de la publicacin de la &ersin K, el proyecto termin y el grupo se disol&i. Despu0s de que el proyecto P@S3AB$S terminara, dos graduados de la uni&ersidad, :ndre Eu y oll+ !Ben, comenaron a trabajar sobre el cdigo de P@S3AB$S, esto fue
posible dado que P@S3AB$S estaba licenciado bajo la $-D, y lo primero que hicieron fue aIadir soporte para el lenguaje SQL a P@S3AB$S, dado que anteriormente contaba con un intGrprete del lenguaje de consultas Q>$L (basado en 8ngres, creando as1 el sistema al cual denominaron Postgres:?. Para el aIo 9::G se unieron al proyecto personas ajenas a la >ni&ersidad como Marc Fournier de ub.@rg #etMoring Ser&ices, $ruce Momian y ;adim $. Mi%Bee quienes
proporcionaron el primer ser&idor de desarrollo no uni&ersitario para el esfuero de desarrollo de cdigo abierto y comenaron a trabajar para estabiliar el cdigo de Postgres:?. $n el aIo 9::G decidieron cambiar el nombre de Postgres:? de tal modo que refleje la caracter1stica del lenguaje -/L y lo terminaron llamando PostgreSQL, cuya primera &ersin de cdigo abierto fue lanada el 9 de agosto de 9::G. La primera &ersin formal de PostgreSQL (G.5 fue liberada en enero de 9::6. Desde entonces, muchos desarrolladores entusiastas de los motores de base de datos se unieron al proyecto, coordinaron &1a 8nternet y entre todos comenaron a incorporar muchas caracter1sticas al motor.
unque la licencia permit1a la comercialiacin de PostgreSQL, el cdigo no se desarroll en principio con fines comerciales, algo sorprendente considerando las &entajas que PostgreSQL ofrec1a. La principal deri&acin se srcin cuando Paula aMthtorn (un miembro del equipo srcinal de 8ngres que se pas a Postgres y MicBael -tonebra%er conformaron 8llustra 8nformation 3echnologies para comercialiar Postgres. $n 4555, e< in&ersionistas de Red 9at crearon la empresa Areat Nridge para comercialiar PostgreSQL y competir contra pro&eedores comerciales de bases de datos. Areat Nridge auspici a &arios desarrolladores de PostgreSQL y don recursos de &uelta a la comunidad, pero a fines de 4559 cerr debido a la dura competencia de compaI1as como Bed at y pobres condiciones del mercado. $n 4559, Command Prompt, 8nc. lan =ammonth PostgreSQL, la m2s antigua distribucin comercial de PostgreSQL. Contin%a brindando soporte a la comunidad PostgreSQL a tra&0s del auspicio de desarrolladores y proyectos, incluyendo PL)Perl, PL)php y el alojamiento de proyectos de comunidades como PostgreSQL Nuild Oarm. $n enero de 455?, PostgreSQL recibi apoyo del pro&eedor de base de datos 'erasie -o,tare, conocido por su producto $triee que se utiliaba en la plataforma oell etare. Per&asi&e anunci soporte comercial y participacin comunitaria y logr algo de
0
a PostgreSQL ahora', aunque no se dieron especificaciones en ese momento. Para no&iembre de 455?, Sun Solaris 95 (lanamiento G)5G inclu1a PostgreSQL. $n agosto de 4556 $nterpriseDN anunci el Postgres Besource Center y $nterpriseDN Postgres, diseIados para ser una completamente configurada distribucin de PostgreSQL
incluyendo muchos mdulos contribuidos y agregados. $nterpriseDN Postgres fue renombrado Postgres Plus en maro de 455;. $l proyecto PostgreSQL contin%a haciendo lanamientos principales anualmente y lanamientos menores de reparacin de bugs, todos disponibles bajo la licencia PostgreSQL, y basados en contribuciones de pro&eedores comerciales, empresas aportantes y programadores de cdigo abierto mayormente.
Características lgunas de sus principales caracter1sticas son, entre otrasH
Alta concurrencia =ediante un sistema denominado =CC (cceso concurrente multi&ersin, por sus siglas en ingl0s PostgreSQL permite que mientras un proceso escribe en una tabla, otros accedan a la misma tabla sin necesidad de bloqueos. Cada usuario obtiene una &isin consistente de lo %ltimo a lo que se le hio commit. $sta estrategia es superior al uso de bloqueos por tabla o por ,ilas com%n en otras bases, eliminando la necesidad del uso de bloqueos e
Amplia variedad de tipos nativos PostgreSQL pro&ee nati&amente soporte paraH
#%meros de precisin arbitraria .
3e
Oiguras geom0tricas (con una &ariedad de funciones asociadas.
Direcciones 7' (8P&K e 8P&G.
Nloques de direcciones estilo !7DR.
Direcciones M:!.
:rra+s.
dicionalmente los usuarios pueden crear sus propios tipos de datos, los que pueden ser por completo inde
Otras características
Disparadores (triggersH >n disparador o trigger se define como una accin espec1fica que
se realia de acuerdo a un e&ento, cuando 0ste ocurra dentro de la base de datos. $n PostgreSQL esto significa la ejecucin de un procedimiento almacenado basado en una determinada accin sobre una tabla espec1fica. hora todos los disparadores se definen por seis caracter1sticasH
$l nombre del disparador o trigger
$l momento en que el disparador debe arrancar
$l e&ento del disparador deber2 acti&arse sobre...
La tabla donde el disparador se acti&ar2
La frecuencia de la ejecucin
La funcin que podr1a ser llamada
La funcin no es correcta $ntonces combinando estas seis caracter1sticas, PostgreSQL le permitir2 crear una amplia funcionalidad a tra&0s de su sistema de acti&acin de disparadores ( triggers.
;istas.
8ntegridad transaccional.
erencia de tablas.
3ipos de datos y operaciones geom0tricas.
Soporte para transacciones distribuidas. Permite a PostgreSQL integrarse en un sistema distribuido formado por &arios recursos (p.ej, una base de datos PostgreSQL, otra @racle, una cola de mensajes 8N= =Q =S y un $BP SP gestionado por un ser&idor de aplicaciones donde el 0.sp .
Funciones Nloques de cdigo que se ejecutan en el ser&idor. Pueden ser escritos en &arios lenguajes, con la potencia que cada uno de ellos da, desde las operaciones b2sicas de
programacin, tales como bifurcaciones y bucles, hasta las complejidades de la programacin orientada a objetos o la programacin funcional. Los disparadores (triggers en ingl0s son funciones enlaadas a operaciones sobre los datos. lgunos de los lenguajes que se pueden usar son los siguientesH
>n lenguaje propio llamado 'LI'g-/L (similar al 'LI-/L de oracle. !.
!NN.
aa 'LIaa eb.
'LI'erl.
pl'9'.
'LI'+tBon.
'LIRub+.
'LIsB.
'LI(cl.
'LI-cBeme.
Lenguaje para aplicaciones estad1sticas R por medio de 'LIR. PostgreSQL soporta funciones que retornan 'filas', donde la salida puede tratarse como un conjunto de &alores que pueden ser tratados igual a una fila retornada por una consulta (query en ingl0s. Las funciones pueden ser definidas para ejecutarse con los derechos del usuario ejecutor o con los derechos de un usuario pre&iamente definido. $l concepto de funciones, en otros DN=S, son muchas &eces referidas como 'procedimientos almacenados' (stored procedures en ingl0s.
Ventajas 7Seguridad en t0rminos generales 78ntegridad en NDH restricciones en el dominio 78ntegridad referencial 7firmaciones (ssertions
7Disparadores (3riggers 7utoriaciones 7Cone
Productos alrededor de PostgreSQL $l '#D# solo desarrolla el =otor de Datos y un n%mero pequeIo de utilidades, para potenciar el trabajo con PostgreSQL suele ser necesario aIadir utilidades e
Historial de liberaciones Liberación "#"$ $#" " $
Primera liberación
Última versión menor
Última liberación
15*)5*)1
).)3
15*)*21
15*)*)5
1.)
$%%&!$$!"'
1*)1*2
O
1*)6*)"
6.1.1
$%%!"!
1*1)*)2
6.2.1
$%%!$"!$
*
1"*)3*)1
6.3.2
$%%+!"'!"
'
1"*1)*3)
6.4.2
$%%+!$!"
,
1*)6*)
6.5.3
$%%%!$"!$*
#"
2)))*)5*)"
.).3
"""!$$!$$
#$
2))1*)4*13
.1.3
""$!"+!$,
#
2))2*)2*)4
.2."
"",!",!"%
#*
2))2*11*2
.3.21
""+!"$!"
#' +#"
2))3*11*1 2))5*)1*1
.4.3) ".).26
"$"!$"!"' "$"!$"!"'
+#$
2))5*11*)"
".1.23
"$"!$!$&
+#
2))6*12*)5
".2.23
"$$!"%!&
+#*
2))"*)2*)4
".3.23
"$*!"!"
+#'
2))*)*)1
".4.22
"$'!"!'
%#"
2)1)*)*2)
.).23
"$,!$"!"+
!!! !
2)11*)*12 %#$ %# 2)12*)*1) 2)13*)*) %#* 2)14*12*1" %#' %#, 2)16*)1*) 2)16*)*2 %#& Soportado por la com-nidad
Alternativas Comerciales Aracias a su licencia $-D, se permite la utiliacin del cdigo para ser comercialiado. >no de los casos ejemplo es la de $nterprise DN (Postgresql Plus, la cual incluye &arios agregados y una interfa de desarrollo basada en aa. $ntre otras empresas que utilian Postgresql para comercialiar se encuentra Cyber3ech (lemania, con su producto CyberCluster.
GIS PostGIS $
eplicaci!n Pg.l-ster Beplicacin multi maestro. Slon/!I Beplicacin maestro escla&o. P/0eplica Beplicacin maestro escla&o y multi maestro asincrnica.
"erramientas de administraci!n Pg1dmin* $ntorno de escritorio &isual. 8nstalable en plataformas Linu>, Free$-D, -olaris, Mac -? y Windos. Permite conectarse a bases de datos PostgreSQL que est0n ejecut2ndose en
cualquier plataforma. Oacilita la gestin y administracin de bases de datos ya sea mediante instrucciones SQL o con ayuda de un entorno gr2fico. Permite acceder a todas las funcionalidades de la base de datos/ consulta, manipulacin y gestin de datos, incluso opciones a&anadas como manipulacin del motor de replicacin Slony78 Pg1ccess $ntorno de escritorio &isual. P2pPg1dmin $ntorno Meb.
ps#l Cliente de consola. Database 3aster $ntorno de escritorio &isual.
$%s#ueda de te&to Full te&t searc' 8ncluido en el n%cleo a partir de la &ersin ;.J. ia (searcB2 y penF(- para &ersiones anteriores a la ;.J.
()L 43L*4SL5 soporte ia ?'atB e>tensiones en la seccin contrib .
Usuarios destacados
.org, .in,o, .mobi y .aero registros de dominios por :,ilias.3
La :merican !Bemical -ociet+.
$:-F.
7MDb.
-%+pe.
(i;o.
'enn+ :rcade.
-on+ nline.4
@.-. Departamento de (rabao.
@-'-.
;eri-ign.
'ictiger.com
Wisconsin !ircuit !ourt :ccess con G R 9;5AN DNs replicados en tiempo real.
pen:!- y .LR.
7A#7. 7FA.
!arto!iudad .5 del 8A# de $spaIa.
Premios PostgreSQL ha recibido los siguientes reconocimientosH6
9::: Linu<orld $ditorTs Choice Mard for Nest Database
4555 Linu< ournal $ditorsT Choice Mards for Nest Database
4554 Linu< #eM =edia $ditors Choice Mard for Nest Database
455J Linu< ournal $ditorsT Choice Mards for Nest Database 455K Linu< #eM =edia Mard Oor Nest Database
455K Linu< ournal $ditorsT Choice Mards for Nest Database
455K rs3echnica Nest Ser&er pplication Mard
455? Linu< ournal $ditorsT Choice Mards for Nest Database
455G Linu< ournal $ditorsT Choice Mards for Nest Database
455; De&eloper.com Product of the Uear, Database 3ool
PgAdmin III
pgAdmin III es una aplicación gráfica para gestionar PostgreSQL
pgAdmin III es una aplicación gráfica para gestionar el gestor de bases de datos 'ostgre-/L, siendo la más completa y popular con licencia Open Source. Está escrita en !! usando la librer"a gráfica multiplataforma #ue permite #ue se pueda usan en Linu>, Free$-D, -olaris, Mac - ?y Windos. Es capa$ de gestionar %ersiones a partir de la PostgreSQL &.' e(ecutándose en cual#uier plataforma, as" como %ersiones comerciales de 'ostgre-/Lcomo Per%asi%e Postgres, Enterprise)*, +ammot -eplicator y S-A Poer/res.
>Widgets, lo
pgAdmin III está dise0ado para responder a las necesidades de todos los usuarios, desde escribir consultas SQL simples asta desarrollar bases de datos comple(as. El interfa$ gráfico soporta todas las caracter"sticas de y facilita enormemente la administración. La aplicación tambi1n incluye un editor SQL con resaltado 'ostgre-/L de sinta2is, un editor de código de la parte del ser%idor, un agente para lan$ar scripts programados, soporte para el motor de replicación Slony3I y muco más. La cone2ión al ser%idor puede acerse mediante cone2ión 4P5IP o 6ni2 )omain Soc7ets 8en plataformas 9ni2:, y puede encriptarse mediante SSL para mayor seguridad.
.ontenido ;ocultar<
1 7nstalacin 2 :ctuali8ar a una ersin mPs moderna 2.1 MGtodo rPpido 2.2 MGtodo compilado 3 ;er tambiGn 4 Anlaces e>ternos
Instalación
La %ersión =.>.' trae importantes me(oras
)ado #ue esta aplicación se encuentra en los repositorios, tan sólo tendremos #ue instalar el pa#uete pgadmin3. En el men? de aplicaciones no %erás #ue se incluya una entrada para esta aplicación. Esto es debido a #ue ay un error en la elaboración del pa#uete. Esto pasa con los pa#uetes )ebian #ue no se an
adaptado a la pol"tica de men?s de 6buntu. Lee el art"culo :ctiar el men< Debianpara %er como se acti%a el men? )ebian y luego %erás como aparece la entrada en Aplicaciones 3@ Debian 3@ Apps 3@ Databases.
Actuali$ar a una %ersión más moderna La %ersión de pgAdmin III #ue %iene en los repositorios es algo antigua 8la =..: y la aplicación ya %a por la =.B., de modo #ue es buena idea ponerse un poco al d"a. 4ienes dos opciones, o usas los pa#uetes #ue e compilado yo o los compilas tu. Si as elegido el m1todo fácil, los pa#uetes están en BttpHII.guia* . ubuntu.orgIpa=uetesI En Egdy y Ceisty ya %iene la %ersión =.>.' en los repositorios, de modo #ue la puedes instalar fácilmente.
Método rápido La ?ltima %ersión de pgAdmin asta el momento es la =.B. la cual no compila en 6buntu pero si #ue puedes instalar una %ersión =.B.D compilada a0adiendo este repositorio a la lista deb http://ftp5.es.postgresql.org/mirror/postgresql/pgadmin3/release/ubuntu gutsy pgadmin
!ambia g-ts/ por feist/ o dapper seg
Método compilado Si as elegido el m1todo complicado, lo #ue aremos es compilar una 6buntu el pa#uete de )ebian de la ?ltima %ersión. =.3 Eliminamos la %ersión de pgAdmin III #ue tenemos instalada $ sudo aptitude purge pgadmin3
.3 A0ade el siguiente repositorio de fuentes 8la puedes eliminar al final: deb-src ftp://ftp.es.debian.org/debian unstable main
'.3 Actuali$amos la base de datos de los pa#uetes 8dará un error de %erificación de cla%e P/P #ue puedes ignorar: $ sudo aptitude update
>.3 Instalamos lo necesario para compilar $ sudo aptitude install build-essential
F.3 Instalamos las dependencias necesarias para compilar el pa#uete $ sudo apt-get build-dep pgadmin3 pgadmin3-data
G.3 /eneramos los pa#uetes compilados para instalar a partir de los fuentes 8tarda un rato: $ sudo apt-get -b source pgadmin3 pgadmin3-data
Modi,icar la contraseCa del usuario postgres de 'ostgre-/LH
!omprobar la ersin de 'ostgre-/L instaladaH
$ac%up + restore de bases de datos en 'ostgre-/LH
:ctiar el modo de compatibilidad con ersiones anteriores de 'ostgre-/LH
7nstalacin de 'ostgre-/L en un seridor con 'les%H
!one>in a 'ostgre-/L desde '9'H
:ctuali8ar el ,ormatoIes=uema de las bases de datos 'ostgre-/LH
Instalación de PostgreSQL en .ent6S Para utili$ar el ser%idor de bases de datos PostgreSQL en entOS es necesario instalar los pa#uetes postgresql y postgresqlser!er yum install postgresql-server postgresql
/rab
El pa#uete postgresqlser!er contiene los binarios del ser%idor )*+S, y postgresql las utilidades cliente para conectarnos a un ser%idor, as" como documentación en formato 4+L y las páginas JmanJ. El ser%icio no #ueda acti%ado en el arran#ue, as" #ue lo acti%aremos con la utilidad c"#con$ig # chkconfig postgresql on # /etc/init.d/postgresql start Iniciando la base de datos:
[
O
!
Iniciando servicios postgresql:
[
O
!
/rab
.one7ión a -n servidor PostgreSQL Para conectarnos al ser%idor PostgreSQL nos cambiamos al usuario postgres y utili$amos el LI psql, e(emplo # su - postgres " psql -d template -$ postgres
%elcome to psql &..' the (ostgre)*+ interactive terminal.
,ype:
copyright for distribution terms h for help ith )*+ commands for help ith psql commands
g or terminate ith semicolon to e0ecute query q to quit
template1#
/rab
Permitir cone7iones remotas a PostgreSQL Por seguridad, tras una instalación defecto de PostgreSQL en entOS, este aceptará ?nicamente cone2iones locales en elpor puerto %&3'(tcp # netstat -punta 2 grep +I),34 tcp 5 86/postmaster
5 67.5.5.:896
5.5.5.5:;
+I),34
/rab
Para modificar este comportamiento tenemos #ue editar el ficero (!ar(lib(pgsql(data(pg)"ba*con$, #ue contiene la configuración para la autenticación de clientes y a0adir el listado de las redes y5o IPs desde las #ue nos %amos a conectar # vim /var/lib/pgsql/data/pg&.5.5/69 trust host all all 5.5.5./6 trust
/rab
Además, tenemos #ue editar el ficero (!ar(lib(pgsql(data(postgresql*con$ y modificar el
parámetro listen)addresses para indicar #ue escuce en las interfaces necesarias, en este caso lo abilitaremos para todas # vim /var/lib/pgsql/data/postgresql.conf listen
/rab
El ?ltimo paso es reiniciar el ser%icio y comprobar #ue los cambios se an aplicado correctamente # /etc/init.d/postgresql restart (arando el servicio
En este e(emplo, permitimos el acceso a la red =K.=GB.D.D5> y a la IP =D.=D.D.=, #uedando el ser%icio postmaster escucando en todas las interfaces . Para mas información consultar el cap"tulo !lient :utBenticationQ de la gu"a de :dministracin de 'ostgre-/LQ.
3odificar la contrasea del -s-ario postgres de PostgreSQL Para cambiar la contrase0a de un usuario de PostgreSQL tenemos #ue utili$ar la sentencia SQL AL+,- .S,- usuario /0+1 PASS/2-D # su - postgres " psql -d template -$ postgres
.omprobar la versión de PostgreSQL instalada La forma mas cómoda es e(ecutando la sentencia SQL S,L,+ 4,-S02567, e(emplo template1# )3+3G, H3A)IO4JF
version
---------------------------------------------------------------------------------------------------------(ostgre)*+ &.. on 0&><>9-redhat-linu0-gnu' compiled by KGG gcc KGGJ 9..6 65575>6> Aed Bat 9..6-9J filaJ
/rab
8ac9-p / restore de bases de datos en PostgreSQL En PostgreSQL tenemos el comando pg)dump para reali$ar copias de seguridad de **)), su uso es muy similar al mysqldump de +ySQL. En este e(emplo obtenemos un listado de todas las **)) e2istentes y reali$amos el bac7up de una de ellas " +@4K1en<$) psql -l +ist of databases 4ame
2
Oner
2 3ncoding
--------------L----------L---------postgres
2 postgres 2 $,E&
template5
2 postgres 2 $,E&
template
2 postgres 2 $,E&
oop
" pg
/rab
El resultado es un ficero ASII con todas las sentencias SQL necesarias para restaurar la **)). Para restaurar una **)) desde un ficero utili$aremos el comando " psql -d oop
/rab
Para acer un bac7up de todas las **)) podemos utili$ar el comando pg)dumpall o reali$ar un pe#ue0o script en *AS, e(emplo #/bin/bash CIA1/var/lib/pgsql/backups +@4K1en<$) +I),1"psql -l 2 ak ?P print "Q? 2 grep -v3 ?R-2R+ist2R4ame2template[52!2R?J for db in "+I), do pg
/rab
"CIA/"db.gD
1ctivar el modo de compatibilidad con versiones anteriores de PostgreSQL Para abilitar la compatibilidad con %ersiones anteriores de PostgreSQL tenemos #ue editar el ficero (!ar(lib(pgsql(data(postgresql*con$ y a0adir las siguientes %ariables 8mas información en el cap"tulo ;ersion and 'lat,orm !ompatibilit+ Q: add
/rab
addmissingfrom Men on, tables tat are referenced by a #uery ill be automatically added to te C-O+ clause if not already present. 4is bea%ior does not comply it te SQL standard and many people disli7e it because it can mas7 mista7es 8suc as referencing a table ere you sould a%e referenced its alias:. 4e default is off. 4is %ariable can be enabled for compatibility it releases of PostgreSQL prior to B.=, ere tis bea%ior as alloed by default.
arraynulls 4is controls eter te array input parser recogni$es un#uoted N6LL as specifying a null array element. *y default, tis is on, alloing array %alues containing null %alues to be entered. oe%er, PostgreSQL %ersions before B. did not support null %alues in arrays, and terefore ould treat N6LL as specifying a normal array element it te string %alue JN6LLJ. Cor bac7ards compatibility it applications tat re#uire te old bea%ior, tis %ariable can be turned off.
bac7slas#uote 4is controls eter a #uote mar7 can be represented by in
adoubling string literal. 4ePostgreSQL preferred, SQL3standard represent.a oe%er, #uote mar7 it 8: but as istoricallyay alsotoaccepted useisofby creates security ris7s because in some client caracter set encodings, tere are multibyte caracters in ic te last byte is numerically e#ui%alent to ASII . If client3side code does escaping incorrectly ten a SQL3in(ection attac7 is possible. 4is ris7 can be pre%ented by ma7ing te ser%er re(ect #ueries in ic a #uote mar7 appears to be escaped by a bac7slas. 4e alloed %alues of bac7slas#uote are on 8allo alays:, off 8re(ect alays:, and safeencoding 8allo only if client encoding does not allo ASII itin a multibyte caracter:. safeencoding is te default setting.
defaultitoids 4is controls eter -EA4E 4A*LE and -EA4E 4A*LE AS include an OI) column in nely3created tables, if neiter MI4 OI)S nor MI4O64 OI)S is specified. It also determines eter OI)s ill be included in tables created by SELE4 IN4O. In PostgreSQL B.= defaultitoids is off by default in prior %ersions of PostgreSQL, it as on by default.
escapestringarning Men on, a arning is issued if a bac7slas 8: appears in an ordinary string literal 8... synta2: and standardconformingstrings is off. 4e
default is on. Applications tat is to usete bac7slas as escapeofsould be modified to use escape string synta2 8E...:, because default bea%ior ordinary strings ill cange in a future release for SQL compatibility. 4is %ariable can be enabled to elp detect applications tat ill brea7. standardconformingstrings 4is controls eter ordinary string literals 8...: treat bac7slases literally, as specified in te SQL standard. 4e default is currently off, causing PostgreSQL to a%e its istorical bea%ior of treating bac7slases as escape caracters. 4e default ill cange to on in a future release to impro%e compatibility it te standard. Applications can cec7 tis parameter to determine o string literals ill be processed. 4e presence of tis parameter can also be ta7en as an indication tat te escape string synta2 8E...: is supported. Escape string synta2 sould be used if an application desires bac7slases to be treated as escape caracters.
rege2fla%or 4e regular e2pression Jfla%orJ can be set to ad%anced, e2tended, or basic. 4e default is ad%anced. 4e e2tended setting migt be useful for e2act bac7ards compatibility it pre3&.> releases of PostgreSQL.
s#lineritance 4is controls te ineritance semantics. If turned off, subtables are not included by %arious commands by default basically an implied ONLR 7ey ord. 4is as added for compatibility it releases prior to &.=.
Podemos comprobar #ue el cambio de dicas %ariables de configuración se a reali$ado correctamente con la siguiente consulta # su - postgres -bash-.6" psql -d template -$ postgres template1# )3+3G, name' setting EAON pg
/rab
Si al a0adir y5o modificar cual#uier %ariable PostgreSQL no arranca tendremos #ue re%isar el ficero de log (!ar(lib(pgsql(pgstartup*log para encontrar cual#uier arning5error del tipo
Instalación de PostgreSQL en -n servidor con Ples9 52+A8 Para poder gestionar bases de datos 'ostgre-/L desde Ples7 se necesita comprar el addon 'oer 'ac%Q
6na %e$ comprado el addon, el panel de control Ples7 permite la gestión de bases de datos 'ostgre-/L.
Podemos instalar 'ostgre-/L en Ples7 de dos formas =: desde el interfa$ eb 8ome 3@ 6pdates 3@ 'ostgre-/L: y : desde una sell con el JautoinstallerJ # autoinstaller --select-release-current --install-component postgresql
/rab
El siguiente paso es acti%arlo usuario administrador postgres Q
en el inicio del ser%idor, arrancar el ser%icio y asignar una contraseCa al
)epu1s tenemos #ue entrar al interfa$ eb 8ome 3@ )atabase Ser%ers: y configurar el usuario administrador JpostgresJ con su contrase0a, a partir de a#u" podremos gestionar 'ostgre-/L desde el Ples7. Además, se instala la erramienta de adminstración eb ppPgAdmin para los clientes (unto con una utilidad muy básica pg)manage #ue permite parar, arrancar e reinciar el ser%icio 'ostgre-/L.
.one7ión a PostgreSQL desde P:P Para conectarnos a PostgreSQL desde P1P necesitamos instalar el pa#uete p"ppgsql, #ue propociona las e2tensiones pdo)pgsql*so y pgsql*so # yum install php-pgsql # /etc/init.d/httpd restart
/rab
En una instalación de 'ostgre-/L sobre entOS, el m1todo de autenticación configurado por defecto es JidentJ 8ser%icio #ue no está abilitado por defecto:, por lo #ue al conectarnos desde PP obtendremos el siguiente error +OK:
could not connect to Ident server at address S67.5.5.S' port : Gonnection refused
E@,@+:
Ident authentication failed for user SrecoverS
/rab
La solución pasa por editar el ficero (!ar(lib(pgsql(data(pg)"ba*con$ y cambiar el m1todo de autenticación # vim /var/lib/pgsql/data/pg
all
all
67.5.5./6
ident sameuser
host
all
all
67.5.5./6
md8
/rab
1ct-ali;ar el formato
# /etc/init.d/postgresql stop # su - postgres " pg
/rab
Si tras actuali$ar una instacia de PostgreSQL no actuali$amos el formato de las bases de datos al arrancar nos encontrar"amos con este error @n old version of the database format as found. Tou need to upgrade the data format before using (ostgre)*+. )ee /usr/share/doc/postgresql-&.9.7/[email protected] for more information.
1.
Introducción 2. Funcionamiento de la Arquitectura 3. Instalación 4. Configuración 5. Creación y Manejo de ase de !atos "ostgre#$% &. "#$% '. "(Admin III ). #eguridad *. #$% 1+. ,es-aldos y ,ecu-eración 11. Monitoreo y stad/sticas 12. ,utinas de Mantenimiento 13. "oint0in ime ,ecoery
7ntroduccin PostgreSQL es un sistema de gestión de bases de datos ob(eto3relacional, distribuido ba(o licencia *S) y con su código fuente disponible libremente. Es el sistema de gestión de bases de datos de código abierto más potente del mercado y en sus ?ltimas %ersiones no tiene nada #ue en%idiarle a otras bases de datos comerciales.
PostgreSQL utili$a un modelo cliente5ser%idor y usa multiprocesos en %e$ de multihilos para garanti$ar la estabilidad del sistema. 6n fallo en uno de los procesos no afectará el resto y el sistema continuará funcionando. A continuación teneis un gráfico #ue ilustra de manera general los componentes más importantes en un sistema PostgreSQL.
Aplicación cliente Esta es la aplicación cliente #ue utili$a PostgreSQL como administrador de bases de datos. La cone2ión puede ocurrir %ia 4P5IP ó soc7ets locales. )emonio postmaster Este es el proceso principal de PostgreSQL. Es el encargado de escucar por un puerto5soc7et por cone2iones entrantes de clientes. 4ambien es el encargado de crear los procesos i(os #ue se encargaran de autentificar estas peticiones, gestionar las consultas y mandar los resultados a las aplicaciones clientes Ciceros de configuracion Los ' ficeros principales de configuración utili$ados por PostgreSQL, postgres#l.conf, pgba.conf y pgident.conf
Procesos i(os postgres Procesos i(os #ue se encargan de autentificar a los clientes, de gestionar las consultas y mandar los resultados a las aplicaciones clientes PostgreSQL sare buffer cace +emoria compartida usada por POstgreSQL para almacenar datos en cac1. Mrite3Aead Log 8MAL: omponente del sistema encargado de asegurar la integridad de los datos 8recuperación de tipo -E)O: Uernel dis7 buffer cace ac1 de disco del sistema operati%o )isco )isco f"sico donde se almacenan los datos y toda la información necesaria para #ue PostgreSQL funcione
!aractersticas La ?ltima serie de producción es la K.'. Sus caracter"sticas t1cnicas la acen una de las bases de datos más potentes y robustas del mercado. Su desarrollo comen$o ace más de =G a0os, y durante este tiempo, estabilidad, potencia, robustez, facilidad de administración e implementación de estándares an sido las caracter"sticas #ue más se an tenido en cuenta durante su desarrollo. PostgreSQL funciona muy bien con grandes cantidades de datos y una alta concurrencia de usuarios accediendo a la %e$ a el sistema. A continuación teneis algunas de las caracter"sticas más importantes y soportadas por PostgreSQL
/enerales
Es una base de datos =DDV :!7D Integridad referencial 4ablespaces Nested transactions 8sa%epoints: -eplicación asincrónica5sincrónica 5 Streaming replication 3 ot Standby 4o3pase commit PI4- 3 point in time reco%ery opias de seguridad en caliente 8Online5ot bac7ups: 6nicode Wuegos de caracteres internacionales -egionali$ación por columna +ulti3Xersion oncurrency ontrol 8+X: +ultiples m1todos de autentificación Acceso encriptado %ia SSL Actuali$ación in3situ integrada 8pgupgrade: SE3postgres ompleta documentación Licencia *S) )isponible para Linu2 y 6NIY en todas sus %ariantes 8AIY, *S), P36Y, S/I I-IY, +ac OS Y, Solaris, 4ruG>: y Mindos '5G>bit.
Programación 5 )esarrollo
Cunciones5procedimientos almacenados 8stored procedures: en numerosos lengua(es de programacion, entre otros PL5pgSQL 8similar al PL5SQL de oracle:, PL5Perl, PL5Pyton y PL54cl *lo#ues anónimos de código de procedimientos 8sentencias )O:
Numerosos tipos de datos y posibilidad de definir nue%os tipos. Además de los tipos estándares en cual#uier base de datos, tenemos disponibles, entre otros, tipos geom1tricos, de direcciones de red, de cadenas binarias, 66I), Y+L, matrices, etc Soporta el almacenamiento de ob(etos binarios grandes 8gráficos, %ideos, sonido, ...: APIs para programar en 5!!, Wa%a, .Net, Perl, Pyton, -uby, 4cl, O)*, PP, Lisp, Sceme, Qt y mucos otros.
SQL
SQLK,SQLKK,SQLDD',SQLDDB Lla%es primarias 8primary 7eys: y foráneas 8foreign 7eys:
ec7, 6ni#uedey unicidad Not null constraints -estricciones postergables 8deferrable constraints: olumnas auto3incrementales Indices compuestos, ?nicos, parciales y funcionales en cual#uiera de los metodos de almacenamiento disponibles, *3tree, -3tree, as ó /iS4 Sub3selects onsultas recursi%as Cunciones Mindos Woins Xistas 8%ies: )isparadores 8triggers: comunes, por columna, condicionales. -eglas 8-ules: erencia de tablas 8Ineritance: E%entos LIS4EN5NO4ICR
Podeis consultar la lista completa en ingles de caracter"sticas disponibles en todas las %ersiones en la dirección BttpHII.postgres=l.orgIaboutI,eaturematri> Algunos de los limites de PostgreSQL son
L>mite
?alor
MP>imo tamaCo base de dato 7limitado 0Depende de tu sistema de almacenamiento MP>imotamaCodetabla 32($ MP>imotamaCode,ila 1.6($ MP>imotamaCodecampo 1#$ MP>imo numero de ,ilas por tabla 7limitado MP>imo num ero de columnas por tabla 25) * 16)) 0dependien do del tipo MP>imo numero de indices por tabla 7limitado
9istoria El proyecto PostgreSQL tal y como lo conocemos oy en dia empe$ó en =KKG, aun#ue las bases y el traba(o en la #ue se asienta tienen sus comien$os en la decada de los &D. A continuación teneis una corta descripción de la istoria de PostgreSQL.
Ingres =K&&3=KBF 3 "El comienzo" La d1cada de los &D fue una d1cada de desarrollos y pruebas de nue%os conceptos en el nue%o mundo de los gestores de bases de datos.
I*+ abia estado traba(ando desde =K&' con los primeros conceptos, ideas y teorias sobre bases de datos relacionales. Su proyecto JSystem -J fue entre otras cosas la primera implementación del lengua(e SQL 8Structured Query Language:. Este proyecto, sus decisiones de dise0o y mucos de los algoritmos usados, influenciaron mucos de los sistemas de bases de datos relacionales #ue aparecieron posteriormente. Por a#uel entonces un profesor de la 6ni%ersidad de *er7eley, +icael Stonebra7er, leyo unos art"culos publicados por I*+ sobre JSystem -J #ue le icieron interesarse en el tema. 6tili$ando el dinero de otro proyecto #ue ya tenia asignado, Ingres 8INteracti%e /rapics -Etrie%al System:, Stonebra7er empe$o a desarrollar sus ideas sobre bases de datos relacionales. )urante estos a0os Ingres mantu%o su código fuente abierto y permanecio en gran medida similar en conceptos a JSystem -J. A principio de los BD, Ingres estu%o compitiendo con Oracle por el lidera$go en el mundo de bases de datos relacionales y su código e implementación e%olucionaron y fueron el srcen de otras bases de datos relacionales, entre ellas podemos citar a Informi2, NonStop SQL y Sybase 8+icrosoft SQL Ser%er fue una %ersión licenciada de Sybase asta su %ersion G.D:. +icael Stonebra7er de(o la 6ni%ersidad de *er7eley en =KB para comerciali$ar Ingres pero %ol%io a la misma en =KBF con nue%as ideas.
Postgres =KBG3=KK> 3 Despues post! de ingres )espues de su %uelta a *er7eley en =KBF, +icael Stonebra7er lideró un nue%o proyecto llamado Postgres 8despues de Ingres: patrocinado por la Defense d#anced $esearch Pro%ects gency D$P! , la rmy $esearch &ffice $&!, la 'ational Science (oundation 'S(! , y ESL, )nc. on este proyecto y basandose en la e2periencia obtenida con Ingres, Stonebra7er tenia como meta me(orar lo #ue abian conseguido y aprendido en el desarrollo de Ingres. R aun#ue se baso en mucas ideas de Ingres, no se baso en el código fuente del mismo. Los ob(eti%os iniciales de este proyecto fueron
Proporcionar un me(or soporte para ob(etos comple(os Proporcionar a los usuarios la posibilidad de e2tender los tipos de datos, operadores y m1todos de acceso. Proporcionar los mecanismos necesarios para crear bases de datos acti%as 8triggers, etc: Simplificar el código encargado de la recuperación del sistema despues de una ca"da del mismo acer cambios m"nimos 8preferiblemente ninguno: en el modelo relacional. +e(orar el lengua(e de consulta Q6EL eredado de Ingres 8POS4Q6EL:.
Para los interesados en el tema, teneis disponibles una serie de art"culos srcinales y completos en ingles relacionados con el proyecto Postgres
"The design of POSTGRES"
"The POSTGRES data model"H Al mdelo de datos de 'ostgres
El dise0o de Postgres
"The design of the POSTGRES storage system" El dise0o del sistema de almacenamiento de Postgres Presentación de la %ersión = de Postgres en la conferencia A+3 "The implementation of POSTGRES"
omentarios "A commentary on the POSTGRES rules system"
Sobre "On Rules Procedures !aching and iews in #ata$ase Systems"
SI/+O) de =KBB sobre el sistema de reglas de Postgres reglas, procedimientos, cace y %istas
en sistemas de bases de datos La ?ltima %ersión de Postgres en este pro(ecto fue la %ersión >..
PostgresKF =KK>3=KKF 3 'ue#a #ida en el mundo opensource En =KK>, dos estudiantes de *er7eley, Andre Ru y Wolly en, empe$aron a traba(ar con el código de Postgres 8%ersión >.: y llamaron al proyecto PostgresKF. icieron una limpie$a general del código, arreglaron errores en el mismo, e implementaron otras me(oras, entre las #ue destacan
Sustitución de POS4Q6EL por un interprete del lengua(e SQL -eimplementación de las funciones agregadas ps#l fue creado para e(ecutar consultas SQL El interface de ob(etos grandes 8large3ob(ect: fue re%isado 6n pe#ue0o tutorial sobre Postgres fue creado
Postgres se pudo empe$ar a compilar con /N6 ma7e y / sin parcear La %ersión =.D de PostgreKF %io la lu$ en =KKF, el código era =DDV ANSI , un FV más corto en relación con la %ersión >. y un 'D3FDV más rápido. El código fue publicado en la eb y liberado ba(o una licencia *S), y más y más personas empe$aron a utili$ar y a colaborar en el proyecto.
PostgreSQL =KKG3actualidad 3 Proyecto PostgreSQL En =KKG, Andre Ru y Wolly en ya no tenian tanto tiempo para dirigir y desarrollar PostgresKF. Algunos de los usuarios abituales de las listas de correo del proyecto decidieron acerse cargo del mismo y crearon el llamado "PostgreSQL *lobal De#elopment +eam". En un principio este e#uipo de desarrolladores al cargo de la organi$ación del proyecto estu%o formado por +arc Cournier en Ontario, anada, 4omas Loc7art en Pasadena, alifornia, Xadim +i7ee% en Urasnoyars7, -usia y *ruce +om(ian in Piladelpia, Pennsyl%ania. El nombre fue cambiado de PostgresKF a PostgreSQL y lan$aron la %ersión G.D en enero de =KK&. oy en dia el grupo central 8core team: de desarrolladores está formado por G personas, e2isten 'B desarrolladores principales y más = desarrolladores abituales. En total alrededor de GF personas acti%as, contribuyendo con el desarrollo de PostgreSQL. Podeis encontrar más información sobre este e#uipo de desarrolladores en BttpHII.postgres=l.orgIcommunit+IcontributorsI E2iste tambien una gran comunidad de usuarios, programadores y administradores #ue colaboran act"%amente en numerosos aspectos y acti%idades relacionadas con el proyecto. Informes y soluciones de problemas, tests, comprobación del funcionamiento, aportaciones de nue%as ideas, discusiones sobre caracter"sticas y problemas, documentación y fomento de PostgreSQL son solo algunas de las acti%idades #ue la comunidad de usuarios reali$a. No tenemos #ue ol%idar tampoco #ue e2isten mucas empresas #ue tambien colaboran con dinero y5ó con tiempo5personas en me(orar PostgreSQL. +ucos desarrolladores y nue%as caracter"sticas están mucas %eces patrocinadas por empresas pri%adas. En los ?ltimos a0os los traba(os de desarrollo se an concentrado muco en la %elocidad de proceso y en caracter"sticas demandadas en el mundo empresarial. En este gráfico podeis %er cuando las diferentes %ersiones de PostgreSQL an %isto la lu$ y las principales caracteristicas en las #ue se a centrado el desarrollo.
)urante los a0os de e2istencia del Proyecto PostgreSQL, el tama0o del mismo, tanto en n?mero de desarrolladores, como en n?meros de linea de código, funciones y comple(idad del mismo a ido aumentando a0o a a0o. En el siguiente gráfico teneis una gráfica con la e%olución del n?mero de lineas de código en cada %ersión de PostgreSQL.
Los datos de este gráfico estan generados con L&- ontabilizamos como lineas de código a todas las lineas de código en diferentes lengua%e, más comentarios, menos lineas en blanco- Los ficheros .+/L y SS no se cuentan como código-
6sando el modelo de estimación de costes de softare "&&/&))" onstructi#e &st /&del! podemos obtener unos datos meramente orientati%os pero #ue nos pueden ayudar a entender la comple(idad del proyecto PostgreSQL y los recursos #ue se necesitarian para desarrollar un producto similar desde cero. Seg?n OO+OII, obtendriamos estos n?meros para PostgreSQL K.D.D
Descripción
?alor
6.562 )S6
!ompleidad del proecto 0alta 'recioIBora 0T1)).)))IaCo * 1."5BorasIaCo
1S24 T53S3
'rogramadores*aCo 61"S1 'recioporlineadecdigo T65S3) 'recio(otal T63.316.6 Lineas de cdigo por personaIdia (iempo de desarrollo del pro+ecto 0aCos 3.6
!iclo de ida 0AL + soporte El Proyecto PostgreSQL tiene como ob(eti%o mantener y soportar cada %ersión de PostgreSQL durante F a0os desde el momento de su lan$amiento. A continuación teneis un resumen del ciclo de %ida de las diferentes %ersiones de PostgreSQL
?ersión ?ersión menor Soportada Lan;amiento Soporte .2 .1 .) ".4
on$iguración básica de PostgreSQL )om, K5D'5DDK 3 =FG Z rafaelma PostgreSQL se puede empe$ar a utili$ar nada más terminar de instalarlo y despues de iniciali$ar nuestro JclusterJ, sin necesidad de configurar nada. Pero si %amos a utili$ar PostgreSQL para algo importante y con cierto %olumen de datos y usuarios es imprescindible #ue lo configuremos para dico traba(o. No es la primera %e$ #ue algun asuario protesta o esta super preocupado de lo mal y lo lento #ue funciona su cluster de base de datos PostgreSQL en un ser%idor ultimo modelo con mucisima memoria. Normalmente el problema es #ue PostgreSQL no a sido configurado para traba(ar con el %olumen de datos y usuarios con el #ue lo estamos usando. No es una gran ayuda tener un ser%idor con %arios /*ytes de memoria -A+ si le emos dico a PostgreSQL, por e(emplo, #ue no utilice más de '+*ytes. 4ambien tenemos #ue decir #ue cual#uier base de datos #ue se este usando acti%amente, no solo PostgreSQL, es un elemento dinamico y %i%o en el #ue estamos cambiando los datos constantemente y donde el tama0o de los datos almacenados suele ir creciendo con el tiempo. Esto significa #ue una configuracion #ue funcione bien con ciertos %alores oy, puede #ue no funcione tan bien despues de unos meses de uso y #ue necesite a(ustarse para #ue funcione optimalmente. El comportamiento de PostgreSQL en nuestro sistema se puede controlar con tres ficeros de configuración #ue se encuentran en el directorio de datos donde iniciali$amos nuestro cluster PostgreSQL 5%ar5pgs#l5data
8En nuestro caso
:. Estos tres ficeros son Este ficero se utili$a para definir los diferentes tipos de accesos #ue un usuario tiene en el cluster. pg)ident*con$ Este ficero se utili$a para definir la información necesaria en el caso #ue utilicemos un acceso del tipo ident en pgba.conf . postgresql*con$ En este ficero podemos cambiar todos los parametros de configuracion #ue afectan al funcionamiento y al comportamiento de PostgreSQL en nuestra ma#uina. pg)"ba*con$
Pasamos a continuación a e2plicar los cambios mas importantes #ue podemos acer en algunos de estos ficeros.
pgba.conf Este ficero se utili$a para definir como, donde y desde #ue sitio un usuario puede utili$ar nuestro cluster PostgreSQL. 4odas las lineas #ue empie$en con el caracter[ se interpretan como comentarios. El resto debe de tener el siguiente formato ;4ipo de cone2ion<;database<;usuario<;IP<;Netmas7<;4ipo de autentificacion<;opciones<
)ependiendo del tipo de cone2ion y del tipo de autentificacion, ;IP<,;Netmas7< y ;opciones
testDD= test =D.D.D.=DD FF.FF.FF.FF mdF
Esta misma entrada se podria escribir tambien con la mascara de red en notacion I)- ost
testDD= test =D.D.D.=DD5' mdF
E(emplo .3 Acceso por tcp5ip 8red: a la base de datostestDD=, como usuario test desde todos los ordenadores de la red =D.D.D.D, con mascara de red FF.FF.FF.D 8F> ordenadores en total: y metodo de autentificacion mdF ost
testDD= test =D.D.D.D FF.FF.FF.D mdF
Esta misma entrada se podria escribir tambien con la mascara de red en notacion I)- ost
testDD= test =D.D.D.D5> mdF
E(emplo ' .3 Acceso por tcp5ip 8red:, encriptado, a todas las bases de datos de nuestro cluster, como usuario test desde el ordenador con IP =D.D.D.=DD, y el ordenador =D.=.=.=DD y metodo de autentificacion mdF 8necesitamos dos entradas en nuestro ficero pgba.conf ostssl
all test =D.D.D.=DD FF.FF.FF.FF mdF
ostssl
all test =D.=.=.=DD FF.FF.FF.FF mdF
E(emplo >.3 )enegar el acceso a todos las bases de datos de nuestro cluster al usuario test, desde todos los ordenadores de la red =D.D.D.D5> y dar accesso al resto del mundo con el metodo mdF ost
all test =D.D.D.D5> re(ect
ost
all all D.D.D.D5D
mdF
Asi podriamos seguir (ugando con todas las posibilidades #ue nos brinda este ficero de configuracion. Por supuesto #ue las bases de datos y usuarios usados en este ficero tienen #ue e2istir en nuestro cluster para #ue todo funcione y algunos de los parametros solo se pueden usar si emos compilado con las opciones pertinentes en el proceso de instalacion 8por e(emplo, ostssl, pam, 7rbF: Para poder en produccion los cambios en este ficero tendremos #ue decirle a PostgreSQL #ue %uel%a a leerlo. *asta con un simple 0reload0 85usr5local5bin5pgctl 3) 5%ar5pgs#l5data reload: desde la linea de comandos o con la funcion pgreloadconf8: como usuario postgres desde ps#l, el cliente PostgreSQL. ;postgres\ser%idor<[ 5usr5local5bin5ps#l
Melcome to ps#l B..>, te PostgreSQL interacti%e terminal.
4ype copyrigt for distribution terms for elp it SQL commands ] for elp it ps#l commands g or terminate it semicolon to e2ecute #uery # to #uit
postgres^[ SELE4 pgreloadconf8:
pgreloadconf 3333333333333333 t 8= ro:
postgres^[
Para una documentacion detallada sobre el ficero pgba.con, pasaros por la seccion !Bapter 2). !lient la documentacion oficial de PostgreSQL.
:utBenticationde
postgres#l.conf Los cambios #ue realicemos en este ficero afectaran a todas las bases de datos #ue tengamos definidas en nuestro cluster PostgreSQL. La mayoria de los cambios se pueden poner en produccion con un simple 0reload0 85usr5local5bin5pgctl 3) 5%ar5pgs#l5data reload:, otros cambios necesitan #ue arran#uemos de nue%o nuestro cluster 85usr5local5bin5pgctl 3) 5%ar5pgs#l5data restart:. +as informacion sobre todos los parametros #ue podemos cambiar en este ficero, #ue afectan y como se pueden poner en produccion se puede encontrar en la seccion 1. -erer !on,iguration de la documentacion oficial de PostgreSQL. A continuacion %amos a %er los parametros mas importantes #ue deberiamos cambiar si empe$amos a usar PostgreSQL para un uso serio y si #ueremos sacarle el ma2imo partido a nuestra ma#uina. E2isten mucos mas parametros #ue se pueden y con el tiempo se deberan de a(ustar, a#ui nos %amos a centrar en los mas importantes y los cuales deberiamos cambiar antes de empe$ar a utili$ar PostgreSQL de una manera seria. ma2connections
Numero ma2imo de clientes conectados a la %e$ a nuestras bases de datos. )eberiamos
de incrementar este %alor en proporcion al numero de clientes concurrentes en nuestro cluster PostgreSQL. 6n buen %alor para empe$ar es el =DD ma2connections ^ =DD
saredbuffers
Este parametro es importantisimo y define el tama0o del buffer de memoria utili$ado por PostgreSQL. No por aumentar este %alor muco tendremos me(or respuesta. En un ser%idor dedicado podemos empe$ar con un FV del total de nuestra memoria. Nunca mas de =5' 8''V: del total. Por e(emplo, en un ser%idor con >/bytes de memoria, podemos usar =D>+* como %alor inicial. saredbuffers ^ =D>+*
or7mem
6sada en operaciones #ue contengan O-)E- *R, )IS4IN4, (oins, .... En un ser%idor dedicado podemos usar un 3>V del total de nuestra memoria si tenemos solamente unas pocas sesiones 8clientes: grandes. omo %alor inicial podemos usar B +bytes. or7mem ^ B+*
maintenanceor7mem
6sada en operaciones del tipo XA66+, ANALR_E, -EA4E IN)EY, AL4E- 4A*LE, A)) CO-EI/N UER. Su %alor dependera muco del tama0o de nuestras bases de datos. Por e(emplo, en un ser%idor con >/bytes de memoria, podemos usar FG+* como %alor inicial. maintenanceor7mem ^ FG+*
effecti%ecacesi$e
Parametro usado por el #uery planner de nuestro motor de bases de datos para optimi$ar la lectura de datos. En un ser%idor dedicado podemos empe$ar con un FDV del total de nuestra memoria. omo ma2imo unos 5' 8GGV: del total. Por e(emplo, en un ser%idor con >/bytes de memoria, podemos usar D>B+* como %alor inicial. effecti%ecacesi$e ^ D>B+*
cec7pointsegments
Este parametro es muy importante en bases de datos con numerosas operaciones de escritura 8insert,update,delete:. Para empe$ar podemos empe$ar con un %alor de G>. En grandes databases con mucos /bytes de datos escritos podemos aumentar este %alor asta =B3FG. cec7pointsegments ^ G>
Es muy importante tener en cuenta #ue al aumentar los %alores por defecto de mucos de estos parametros, tendremos #ue aumentar los %alores por defecto de algunos parametros del 7ernel de nuestro sistema. Informacion detallada de como acer esto se encuentra en la seccion 16.4. Managing Uernel Resourcesde la documentacion oficial de PostgreSQL. En fin, esto es solo un aperiti%o de lo #ue podemos acer. on la practica y la e2periencia podremos y tendremos #ue a(ustar otros mucos parametros. Pero esto sera materia de un pro2imo articulo.
Primeros pasos Lo necesario para comen$ar a utili$ar PostgreSQL dependerá muco de ciertos factores. Estos factores se podrian resumir de la siguiente manera
E2periencia `4enemos alguna e2periencia con otras bases de datos relacionales] `Estamos acostumbrados a la terminologia utili$ada ó conocemos algo de teoria de bases de datos relacionales] 4ipo de uso `ómo %amos a utili$arla, en sistemas de producción, para desarrollar otros sistemas, para (ugar y aprender SQL con ella] 4ama0o del sistema `ual es el tama0o de las bases de datos #ue #uereis administrar, las medis en +*, /*, 4*] arga del sistema `uantos usuarios %an a utili$ar el sistema y #ue concurrencia podemos esperar] )isponibilidad `uales son los re#uisitos de disponibilidad 8uptime: de nuestro sistema]
omo podeis %er, son %arios los factores a tener en cuenta para a%eriguar lo #ue necesitamos si #ueremos utili$ar PostgreSQL como nuestro sistema de gestion de bases de datos. )ependiendo de nuestra e2periencia, el tipo de uso, el tama0o de los datos a gestionar, el numero de usuarios y re#uisitos de disponibilidad, podremos tardar de solo unos cuantos minutos a %arios dias5semanas en instalar un sistema PostgreSQL #ue cubra nuestras necesidades. Si simplemente #uereis probar y "%ugar" un poco con PostgreSQL, e2isten distribuciones binarias en casi todas las distribuciones de Linu2 e2istentes y para sistemas Mindos. on cual#uiera de estos pa#uetes binarios podeis tener una instalación básica y lista para utili$ar en cuestión de pocos minutos. 4ambien teneis por supuesto el código fuente disponible y listo para ser compilado5instalado, si preferis este tipo de instalación. Pasaros por la seccin de descargaspara obtener más información sobre los productos disponibles. Si #uereis utili$ar PostgreSQL de una manera profesional y con sistemas en producción deberiais planificar %uestro sistema con más detalle y aprender como podeis configurar PostgreSQL para sacarle el má2imo pro%eco. Es importante decir #ue una de las caracteristicas principales de PostgreSQL es su facilidad de administración comparada con mucos otros sistemas de gestión de bases de datos. Probablemente tengais mucas preguntas, os aconse(o consultar -obre 'ostgre-/L , 1) ra8ones para utili8ar la sección de documentacindel ser%idor. Si teneis alguna pregunta podeis utili$ar los ,oros del seridor ó utili$ar cual#uiera de los ser%icios disponibles 8listas de correos 5 irc5 etc: en la sección !omunidad 'ostgre-/Ly I soporte
8nstalacin de ser&idor de PostgreSQL y configuracin
V
Truco Métodos El sitio de 'ostgre-/L lista el método de instalación disponible. Escoge la que mejor te provea.
$jemplo en >buntu Usa los siguientes comandos en tu terminal para instalar el paquete de postgresql: sudo apt-get install postgresql
Por ejemplo: openerpopenerp-desktop:/! sudo apt-get install postgresql
Para una interfaz gráfica de postgresql, usa el siguiente comando: sudo apt-get install pgadmin3
Por ejemplo: openerpopenerp-desktop:/! sudo apt-get install pgadmin3
Puedes encontrar el nuevo elemento de pgAdmin III del menú en tu sistema Ubuntu desde Aplicaciones ‣ Programación ‣ pgAdmin III .
Configura un usuario en PostgreSQL para @pen$BP Cuando la instalación del software requerido este terminado, deberás crear un usuario de PostgreSQL. Este usuario deberá ser el mismo que tu sistema de usuario. OpenERP usará este usuario para conectarse a PostgreSQL.
Ilustración demostrando como OpenERP hace uso del usuario de PostgreSQL e interactua con este
Truco Base de datos Como se explico antes, sin crear y configurar usuario de PostgreSQL para OpenERP, no podrá crear una base de datos usando el cliente OpenERP.
Primer m0todo El super usuario predeterminado de PostgreSQL se llama postgres. Deberá ingresar con este usuario la primera vez. openerpopenerp-desktop:/! sudo su postgres password: """"""""""
Ahora crea el usuario de PostgreSQL openerp usando el siguiente comando: postgresopenerp-desktop:/! createuser openerp #hall the new role be a superuser$ %y/n& y
Make this new user a superuser. Only then you can create a database using OpenERP Client. In short, openerp is the new user created in PostgreSQL for OpenERP. This user is the owner of all the tables created by OpenERP Client. Ahora checa la lista de tablas creadas en PostgreSQL usando los siguientes comandos: postgresopenerp-desktop:/! psql -l
Puede encontrar la tabla tempalte1, ejecuta el siguiente comando usando esta tabla: postgresopenerp-desktop:/! psql template'
Usa el siguiente comando para aplicar los permisos de acceso al rol openerp para que la base de datos la cual será creada desde el cliente de OpenERP:
template'() alter role openerp with password *postgres*+ ,0 01
Segundo método Otra opción para crear y configurar un usuario en PostgreSQL para el OpenERP es mostrado a continuación: postgresopenerp-desktop:/! createuser --createdb --username postgres --nocreaterole --pwprompt openerp nter password for new role: """""""""" nter it again: """""""""" #hall the new role be a superuser$ %y/n& y 20, 01
Nota Contraseña Nota que la contraseña espostgres. Explicación de opciones:
--createdb
: el nuevo usuario será capaz de crear una nueva base de
datos : createuser usará el usuario postgres (superuser) : el nuevo usuario no será capaz de crear nuevos
--username postgres
--no-createrole
--pwprompt
openerp
usuarios : createuser requerirá la nueva contraseña del usuario : el nuevo nombre del usuario
Deberá configurar las conexiones de la siguiente forma para poder tener acceso vía pgAdmin III:
MANUAL DE INSTALACIÓN DE PostgreSQL
PARA INSTALAR POSTGRESQL 9.2.3-1 EN WINDOWSSE DEER! CUMPLIR CON EL SIGUIENTE PROCEDIMIENTO" 1.- ACCEDER A UN E#PLORADOR DE INTERNET E INGRESAR LA SIGUIENTE DIRECCIÓN $$$.%ostgres&'.org()o$*'o+)($,*)o$s
2. PARA EL SIGUIENTE PASO ACER CLIC SORE DOWNLOAD. ESTO SER! PARA DESCARGAR EL INSTALADOR DEL PROGRAMA POSTGRESQL.
3.-SELECCIONAMOS EL MODO DE INSTALACIÓN.
.- UNA /E0 DESCARGADO EL INSTALADOR ACEMOS DOLE CLIC SORE EL ICONO EMPE0AMOS LAS INSTALACIÓN.
.- SALDR! UNA IMAGEN PARECIDA A ESTA"
4.- LUEGO APARECER! LA SIGUIENTE /ENTANA PRESIONAMOS SORE SIGUIENTE.
5.- NUE/AMENTE SE MOSTRARA UNA /ENTANA EN DONDE PONDREMOS LA DIRECCIÓN O EL DIRECTORIO DE INSTALACIÓN EN DONDE /AMOS A GUARDAR EL PROGRAMA.
6.- AORA APARECER! UNA NUE/A /ENTANA AQU7 PONDREMOS LA DIRECCIÓN DE DONDE /AMOS A GUARDAR LOS DATOS.
9.- PULSAMOS NUE/AMENTE SIGUIENTE A7 TE APARECER! UNA /ENTANA EN LA QUE NOS PEDIR! UNA CONTRASE8A DE USUARIO DE POSTGRESQL INGRESAREMOS NUESTRA CONTRASE8A.
1.- ENSEGUIDA APARECER! UNA /ENTANA EN LA QUE PEDIR! EL PUERTO POR DONDE SE COMUNICARA EL PROGRAMA ESTE APARECER! POR DE:AULT ES EL PUERTO 32 DE;AMOS EL MISMO N
11.- AORA TE PEDIR! SI DESEAS CAMIAR LA CON:IGURACIÓN REGIONAL DE;AREMOS LA QUE DA POR DE:AULT AREMOS CLIC EN SIGUIENTE"
12.- AORA APARECER! UNA /ENTANA EN LA CUAL INDICAR! QUE EL PROGRAMA EST! LISTO PARA INSTALARSE. POSTERIOR A ESTO AREMOS CLIC EN SIGUIENTE.
13.- NOS APARECER! UNA /ENTANA EN LA CUAL OSER/AREMOS QUE SE EST! INSTALANDO POSTRESQL.
1.- :INALMENTE :INIQUITAMOS LA INSTALACIÓN ACIENDO CLIC EN TERMINAR.
1.-PODEMOS IR AL PROGRAMA ACIENDO CLIC EN INICIO TODOS LOS PROGRAMAS USCAMOS POSTRESQL POR ULTIMO ACEMOS CLIC EN PGADMINIII.
14.- EL PROGRAMA EST! LISTO PARA USARSE.
15.- PARA PODER USAR Postgres&' =CONECTAR CON EL SER/IDOR> DEEMOS INTRODUCIR LA CONTRASE8A QUE NOSOTROS COMO USUARIOS ELEGIMOS DURANTE EL PROCESO DE LA INSTALACIÓN.
Ahora podrá iniciar el servidor de OpenERP. Quizas deberá modificar el archivo de configuración de ~/.openerprc OpenERP para sus necesidades las cuales estan normalmente ubicadas en el directorio
Instalación de PostgreSQL en Debian GNULinu! "#ee$% 4is entry as posted on D=5D'5D=', in $ase de datos, Distros #@ILinu>, #@LMAR, Linu>, Migracin, -o,tare libreand tagged aptitude, Debian, gnu linu>, #@LMAR, Linu>, Migracin, 'ostgre-/L, -o,tare libre, WBee8+. *oo7mar7 te permalin%. 46 comentarios Este articulo explica como instalar el servidor y un cliente de lineas de comandos de la base de datos PostgreSQL en Debian Wheezy.
Introducción
PostgreSQL
'ostgre-/L es un gestor de base de datos relacional la primera versi!n del c!digo "ue p#blico el $ de agosto de $%%& liberado ba'o la licencia (SD y desarrollado porPostgreSQL ) Global Development Group”.
Debian *+,-Linux
Debian #@ILinu> es un sistema operativo liberado ba'o la licencia *PL y desarrollado por )Proyecto Debian una comunidad de desarrolladores y usuarios.
Instalación Para este caso se instalara el servidor y un cliente de lineas de comandos PostgreSQL de la versi!n %.$ e'ecutando el siguiente comando/ ) aptitude install postgresql-.'
Con&iguración Lo primero 0ue se tiene 0ue hacer es cambiarle la contrase1a al usuariopostgres’ 2 0ue se crea luego de haber instalado el pa0uete/ ) passwd postgres 3cceda a la consola de administraci!n de PostgreSQL para cambiar la contrase1a del usuario 2postgres’ con los siguientes comandos/ ) su postgres
postgresnombre_maquina:/directorio! psql postgres postgres() ,0 01 postgres 4,##106 *2170,#7,_6_8#8,091*+ Donde 2postgres’ es el nombre del usuario al cual debe cambiar la contrase1a 2CONTRASENA_DEL_USUARIO’ por la 0ue estableci! previamente y luego salga de la sesi!n e'ecutando los siguientes comandos/ postgres() q
postgresnombre_maquina:/directorio! e;it
Con&iguración de acceso local Para dar acceso local es decir dar accesos a clientes PostgreSQL 0ue est4n en el mismo servidor donde esta instalando el servidor PostgreSQL puede aplicar las siguientes con"iguraciones b4sicas/ Debe 0ue cambiar el archivo de configuración del servidor PostgreSQL con el siguiente comando/
) vim /etc/postgresql/.'/main/postgres0l.con" (us0ue la linea listen_addresses y veri"i0ue 0ue su valor sea el siguiente/ listen_addresses ( *localhost* *uarde el archivo y salga del editor. 5ambi6n debe modi"icar elarchivo de configuración del cliente PostgreSQL con el siguiente comando/
) vim /etc/postgresql/.'/main/pg7hba.con" En este archivo puede con"igurar los modos de autenticaci!n del cliente PostgreSQL y con 0ue usuario puede acceder a los datos almacenados en el servidor PostgreSQL. Para este caso de con"iguraci!n usted esta conect4ndose localmente en el mismo servidor donde esta instalado PostgreSQL por lo cual la 8P local es127.0.0.1 entonces agregue deba'o de la linea ) I"#$ lo%al %onne%tions&' la siguiente instrucci!n/ host nombre_base_datos usuario_postgresql
'<=.>.>.'/3<
password
Donde 2no()re_)ase_datos’ y 2*s*ario_postgres+l’ es el nombre de la base de datos y el usuario de PostgreSQL a crear respectivamente mas adelante en este articulo. 9on estas con"iguraciones hechas debe reiniciar el servicio de PostgreSQL con el siguiente comando/ ) service postgresql restart
Con&iguración de acceso remoto Para dar acceso remoto a clientes PostgreSQL desde otro ma0uina o mascara de red distinta a la de donde esta instalado servidor PostgreSQL puede aplicar las siguientes con"iguraciones b4sicas/
Debe 0ue cambiar el archivo de configuración del servidor PostgreSQL con el siguiente comando/
) vim /etc/postgresql/.'/main/postgres0l.con" (us0ue la linea listen_addresses , -lo%alost’ y la cambia por el siguiente/ listen_addresses ( *?* :pcionalmente usted puede simplemente unir las direcciones 8P especi"icas a la cual da acceso de la siguiente "orma/ listen_addresses(*'<.'@A.3.<<> '<.'@A.3.<<'* *uarde el archivo y salga de la edici!n. 5ambi6n debe modi"icar elarchivo de configuración del cliente PostgreSQL con el siguiente comando/
) vim /etc/postgresql/.'/main/pg7hba.con" En este archivo puede con"igurar desde 0ue ma0uina o mascara de red puede acceder a los datos almacenados en el servidor PostgreSQL y con 0ue usuario se puede acceder. Para e'emplo practico 0ue se suponga 0ue esta en una red1/2.1.1.11 as; 0ue 0uiere darle acceso a la 8P 1/2.1.3.220 agregue deba'o de la linea ) I"#$ lo%al %onne%tions&' la siguiente instrucci!n/ host nombre_base_datos usuario_postgresql '<.'@A.<.3/3< md5 Donde 2no()re_)ase_datos’ y 2*s*ario_postgres+l’ es el nombre de la base de datos y el usuario de PostgreSQL a crear respectivamente mas adelante en este articulo. El 2(d4’ es el m6todo de envi! de la contrase1a del usuario PostgreSQL por la red a comparaci!n de la Configuración de acceso local 0ue se de"ine en 2pass5ord’ la cual env;a la contrase1a en texto plano
por la red en la Configuración de acceso remota se con"igura 2(d4’ ya 0ue env;a contrase1as ci"radas. 9on estas con"iguraciones hechas debe reiniciar el servicio del servidor PostgreSQL con el siguiente comando/ ) service postgresql restart
Creando usuarios Para crear usuarios vuelve a entrar como root de PostgreSQL para crear usuarios para conectarse a la base de datos en este caso usuario *s*ario_no(ina’ 2 con su contrase1a 2123$4’ con el siguiente comando/ ) su postgres
postgresnombre_maquina:/directorio! createuser -6 -# -0 -l usuario_nomina Este usuario 2*s*ario_no(ina’ tiene permiso para no %rear )ase de datos no ser s*per *s*ario no %rear roles de usuario se le per(ite ini%iar sesi6n respectivamente.
Para asignar la contrase1a debe conectarse al servidor PostgreSQL con el siguiente comando/ postgresnombre_maquina:/directorio! psql postgres Esta la sesi!n conectado altere el usuario asignando una contrase1a ci"rada con el siguiente comando/ postgres() ,0 8#0 usuario_nomina 9B 720C46 4,##106 *'<3D5@*+
,0 01 Para comprobar 0ue el usuario se creo con 6xito e'ecute los siguientes comandos/ postgres() #2 usenameE passwd F01G pg_shadow+
usuario_nomina H md5bad=D3>5>fa@bA''3>A55f@cbb35=ee %< filas& Luego salga de la sesi!n de base de datos e'ecutando el siguiente comando/ postgres() q
Creando base de datos Primero tiene 0ue iniciar sesi!n como usuario )root de PostgreSQL con el siguiente comando/ ) su postgres Luego de iniciar sesi!n en el servidor como )root ahora usted puede crear una base de datos con el siguiente comando/ postgresnombre_maquina:/directorio! createdb -template> -1 usuario_nomina
-8F-A sistema_nomina Esta base de datos 2siste(a_no(ina’ se basa en la plantilla de base de datos llamadate(plate0’ 2 con la cual es construida el usuario due1o de la base de datos es el usuario*s*ario_no(ina’ 2 previamente creado usando el es0uema de codi"icaci!n de caracteresUT8’ 2 soportado a ser usado en esta base de datos respectivamente. Para los privilegios del usuario *s*ario_no(ina’ 2 en la base de datos 2siste(a_no(ina’ debe conectarse al servidor PostgreSQL e'ecute el siguiente comando/ postgresnombre_maquina:/directorio! psql postgres 3l estar en la sesi!n conectado otorgue todos los privilegios al usuario 2 *s*ario_no(ina’ en la base de datos 2siste(a_no(ina’ con el siguiente comando/ postgres() J0,7 , 409K9J# 17 6,,L,# sistema_nomina 1 usuario_nomina+ Para comprobar 0ue la base datos esta creada e'ecute el siguiente comando/ postgres() #2 datname F01G pg_database+
datname ----------------template> postgres template' sistema_nomina %D filas& Luego salga deq la sesi!n de base de datos e'ecutando el siguiente comando/ postgres()
Cargar estructura de datos % registros 3 continuaci!n se crear4 una base de datos basado en un script 0ue importa toda las sintaxis en lenguaje de definición de datos (DDL) y lenguaje de manipulación de datos (DML) en SQL para construirla e'ecute el siguiente comando/
Luego salga de la sesi!n de usuariopostgres e'ecutando el siguiente comando/ postgresnombre_maquina:/directorio! e;it
'ccediendo a la base de datos ,na ves realizado los pasos anteriormente descritos ahora puede conectarse con el usuario 2*s*ario_no(ina2 a la base de datos s2 iste(a_no(ina’ y para estoy existe varias "ormas de acceso 0ue se describen a continuaci!n/
'cceso local a la base de datos Se utiliza este "orma de acceso a la base de datos cuando tiene hecha una %on9ig*ra%i6n de a%%eso lo%al y para esto se e'ecuta el siguiente comando/ postgresnombre_maquina:/directorio! psql -d sistema_nomina -8 usuario_nomina
2ontraseMa para usuario usuario_nomina: psql %.'.A& 6igite NhelpO para obtener ayuda.
sistema_nomina(P help stQ usando psqlE la interfaR de lSnea de Trdenes de 4ostgre#U. 6igite: copyright para ver los tVrminos de distribuciTn h para ayuda de Trdenes #U $ para ayuda de Trdenes psql g o punto y coma %N+O& para eWecutar la consulta q para salir sistema_nomina(P
'cceso remoto a la base de datos Se utiliza este "orma de acceso a la base de datos cuando tiene hecha una %on9ig*ra%i6n de a%%eso re(oto a di"erencia del a%%eso lo%al a la )ase de datos en este caso tiene 0ue indicar el ost’ 2 al cual
se desea conectar para hacer esto se e'ecuta el siguiente comando/ postgresnombre_maquina:/directorio! psql -h '>.'>.<.5> -8 usuario_nomina -d
sistema_nomina 2ontraseMa para usuario usuario_nomina: psql %.'.A& 6igite NhelpO para obtener ayuda.
sistema_nomina(P help stQ usando psqlE la interfaR de lSnea de Trdenes de 4ostgre#U. 6igite: copyright para ver los tVrminos de distribuciTn h para ayuda de Trdenes #U $ para ayuda de Trdenes psql g o punto y coma %N+O& para eWecutar la consulta q para salir sistema_nomina(P < as; de esta "orma =esta listo para traba'ar con la base de datos>
Seg-ridad La seguridad de la base de datos esta implementada en arios nielesH 'roteccin de los ,icBeros de la base de datos. (odos los ,icBeros almacenados en la base de datos estan protegidos contra escritura por cual=uier cuenta =ue •
no sea la del superusuario de 'ostgres. Las cone>iones de los clientes al seridor de la base de datos estan permitidasS por de,ectoS locales + no mendiante soc%ets (!'I7'. 9a de arrancarse el demonio con la opcion *i para permitir la cone>ion de clientes no locales. •
Las cone>iones de los clientes se pueden restringir por direccin 7' +Io por nombre de usuario mediante el ,icBero pgKBba.con, situado en '#KD:(:. •
Las cone>iones de los clientes pueden ser autenti,icadas mediante otros pa=uetes e>ternos. •
: cada usuario de 'ostgres se le asigna un nombre de usuario + 0opcionalmente una contraseCa. 'or de,ectoS los usarios no tienen permiso de escritura a bases de datos =ue no Ba+an creado. •
Los usuarios pueden ser incluidos engruposS + el acceso a las tablas puede restringirse en base a esos grupos. •
:utenti,icacion de @suarios Autentificacion es el proceso mediante el cual el seridor de la base de datos + el postmaster se aseguran de =ue el usario =ue estP solicitando acceso a la base de datos es en realidad =uien dice ser. (odos los usarios =ue =uieren utili8ar 'ostgres se comprueban en la tabla pgKuser para asegurarse =ue estPn autori8ados a Bacerlo. :ctualmenteS la eri,icacin de la identidad del usuario se reali8a de distintas ,ormasH
Desde la sBell del usuario @n demonio =ue se lan8a desde la sBell del usuario anota el id srcinal del postgres. Al id srcinal del usuario antes de reali8ar un setuid al idtipo del usuario usuario se emplea como base para todo de comprobaciones.
Desde la red -i 'ostgres se instala como distribuidoS el acceso al puerto (!' del postmaster estP disponible para todo el mundo. Al :$D con,igura el ,icBero pgKBba.con, situado en el directorio '#KD:(: especi,icando el sistema de autenti,icacion a utili8ar en base al e=uipo =ue reali8a la cone>in + la base de datos a la =ue se
conecta. ;er pg%h$a.conf&'( para obtener una descripcin de los sistemas de autenti,icacin disponibles. 'or supuesto la autenti,icacin basada en e=uipos no es per,ecta incluso en los sistemas @ni>. As posibleS para determinados intrusosS enmascarar el e=uipo de srcen. Astos temas de seguridad estPn ,uera del alcance de 'ostgres.
@ombres de -s-ario / gr-pos 'ara crear un nueo usuarioS eecute el programa createuser. 'ara aCadir un usario o un grupo de usarios a un nueo grupo uno de los usuarios debe crear el grupo + aCadir al resto a ese grupo. An 'ostgres estos pasos no pueden reali8arse actualmente mendiante el comando create gro-p. Los grupos se de,inen aCadiendo los alores a la tabla pgKgroupS + usando el comandogrant para asignar priilegios al grupo. !rear @suarios !rear #rupos :ctualmente no Ba+ una ,orma ,acil de crear grupos de usuarios. 9a+ =ue aCadirlosIactuali8arlos uno a uno en la tabla pgKgroup table. 'or eemploH oll+X insert into pgKgroup 0gronameS gros+sidS grolist oll+X alues 0YpostBac%ersYS Y1234YS YZ5443S "261[Y\ 7-AR( 54"224 oll+X grant insert on ,oo to group postBac%ers\ !9:#A oll+X Los campos de pgKgroup sonH ] gronameH Al nombre del grupo. Aste campo debe de ser unicamente al,anumGrico. o aCadas subra+ados u otros signos de puntuacin. ] gros+sidH Al id del grupo. Al tipo del campo es int4 + debe de ser
.ontrol de 1cceso 'ostgres proporciona mecanismos para permitir a los usuarios limitar el acceso =ue otros usuarios tendrPn a sus datos. -uper@suarios de la $ase de Datos Los -uper@suarios de la base de datos 0a=uellos =ue tienen el campo pgKuser.usesuper actiado ignoran todos los controles de acceso descritos anteriormente con dos e>cepcionesH las actuali8aciones del catPlogo del sistema no estPn permitidas si el usuario no tiene el campo pgKuser.usecatupd actiadoS + nunca se permite la destruccin del catPlogo del sistema 0o la modi,icacin de sus estructuras.
'riilegios de acceso Al uso de los priilegios de acceso para limitar la lecturaS escritura + la puesta de reglas a las clases se trata en grant)re*o+e&l(. $orrado de clases + modi,icacin de estructuras. Los comandos =ue borran o modi,ican la estructura de una claseS comoalterS drop tableS + drop inde7S solo ,uncionan con el propietario de la clase. !omo Bemos dicBo antesS estas operaciones no estPn permitidas nunca en los catPlogos del s+stema.
-iguiente
Funciones + Reglas Las ,unciones + las reglas permiten a los usuarios insertar cdigo en el seridor de la base de datos =ue otros usuarios pueden eecutar sin saberlo. :mbos mecanismos permiten a los usuarios aloar ca$allos de troya con relatia impunidad. La cepto -/L se eecutan por el seridor de la base de datos con el mismo permiso =ue el usuariopostgres 0el seridor de la base de datos ,unciona con el user*id de postgres. As posible cambiar las estructuras de datos internas del seridor por los usuariosS desde dentro de ,unciones de con,ian8a. As por ello =ue este tipo de ,unciones puedenS entre otras cosasS eitar cual=uier sistema de control de acceso. Aste es un problema inBerente a las ,unciones de,inidas por los usuarios en !. Reglas !omo en las ,unciones -/LS las reglas tamben se eecutan con la identidad + los permisos del usuario =ue llam al seridor de la base de datos. !aeats (Bere are no plans to e>plicitl+ support encr+pted data inside o, 'ostgres 0tBougB tBere is notBing to preent users ,rom encr+pting data itBin user*de,ined ,unctions. (Bere are no plans to e>plicitl+ support encr+pted netor% connectionsS eitBerS pending a total rerite o, tBe ,rontendIbac%end protocol.
@ser namesS group names and associated s+stem identi,iers 0e.g.S tBe contents o, pgKuser.uses+sid are assumed to be uni=ue tBrougBout a database. @npredictable results ma+ occur i, tBe+ are not.
-iguiente
:gregar + Aliminar @suarios createuser permite =ue usuarios espec,icos accedan a 'ostgres. dropuser elimina usuarios + preiene =ue Gstos accedan a 'ostgres. Astas rdenes slo a,ectan a los usuarios con respecto a 'ostgres\ no tienen e,ecto en otros priilegios del usuario o en su estado con respecto al sistema operatio sub+acente.
Gestión de Disco Locali8aciones :lternatias -e puede crear una base de datos en una locali8acin di,erente a la establecida por de,ecto durante la instalacin. Recuerde =ue todos los accesos a base de datos ocurren realmente a traes del proceso en segundo planoS as =ue Gste debe poder acceder a cual=uier especi,icacin. -e crean locali8acines alternatias + re,erencias mediante una ariable de entorno =ue da el patB absoluto Basta la situacin de al macenamiento deseada. Asta ariable de entorno debe estar de,inida antes de =ue el proceso en segundo plano sea arrancado + debe ser modi,icable mediante la cuenta del administrador de postgres. !ual=uier ariable de entorno puede ser utili8ada para re,erirse a una locali8acin alternatiaS si bien se recomienda la utili8acin de un nombre de ariable con pre,io '#D:(: para eitar con,usin + con,licto con otras ariables. An ersiones preias de 'ostgresS tambiGn estaba permitido utili8ar un nombre de patB absoluto para especi,icar una local i8acin de almacenamiento alternatia. -e pre,iere el mGtodo de es peci,icacin de ar iables de entornoS pues to =ue concede al administrador del sistema mPs ,le>ibilidad en la gestin del almacenamiento en disco. -i pre,iere utili8ar patBs absolutosS puede Bacerlo de,iniendo :LLWK:$-L@(AKD$':(9- + rec ompilando 'ostgres. 'ara Bacer esto S aCada cual=uiera de estas lneas )define ,1_,L#18_6L4,B# '
al arcBio src/include/config.hS o especi,i=ue 2F,J#I( -6,1_,L#18_6L4,B#
en su Gakefile.custom.
Recuerde =ue la creacin de una base de datos la eecuta realmente un proceso de la base de datos en segundo plano. 'or lo tantoS cual=uier ariable de entorno =ue especi,i=ue una locali8acin alternatia debe ser de,inida antes de =ue el proceso en segundo plano sea arrancado. 'ara de,inir una locali8acin alternatia apuntando a '#D:(:2 IBomeIpostgresIdataS primero escriba X setenv 4J6,,< /home/postgres/data
para de,inir la ariable de entorno =ue serP utili8ada con las rdenes siguientes. ormalmenteS =uerrP de,inir esta ariable en el ,icBero de iniciali8acin del super usuario de 'ostgresS .pro,ile o .csBrc para asegurar =ue estP de,inido al arrancar el sistema. -e puede utili8ar cual=uier ariable de entorno para re,erirse a una locali8acin alternatiaS aun=ue se pre,iere =ue las ariables estGn pre,iadas con '#D:(: para eliminar con,usiones + la posibilidad de con,lictos con otras ariablesS o su reescritura. 'ara crear un area de almacenamiento de datos en '#D:(:2S asegiste + puede ser escrito por el administrador de postgres. DespuGs desde la linea de rdenesS escriba X setenv 4J6,,< /home/postgres/data X initlocation !4J6,,< 2reating 4ostgres database system directory /home/postgres/data 2reating 4ostgres database system directory /home/postgres/data/base
'ara comprobar la nuea locali8acinS cree una base de datos test escribiendo X createdb -6 4J6,,< test X dropdb test
Gestión de -na base de datos -i el programa postmaster de 'ostgres estP cargado + en eecucinS podemos crear algunas bases de datos con las =ue e>perimentar. An este documento describiremos las rdenes bPsicos para gestionar una base de datos. !reacin de una base de datos -upongamos =ue =uiere crear una base de datos llamada mibase. 'uede Bacerlo con el siguiente ordenH X createdb nombredb
'ostgres le permite crear cual=uier n
-iguiente
:cceso a la base de datos @na e8 =ue Ba construido la base de datosS puede acceder a ella por los siguientes mediosH •
•
Aecutando el programa monitor de terminal de 'ostgres 0ps=l =ue le permite introducirS editar + eecutar rdenes -/L de un modo interactio. Ascribiendo un programa en ! =ue use la biblioteca de rutinas libp=. Asto le permite eniar rdenes -/L desde ! + obtener las respuestas + mensaes de estado en su programa. Asta inter,a8 se discute en el documento Gu,a de programaci-n en PostgreS/.
'uede =ue =uiera eecutar el programa ps=lS para probar los eemplos de este manual. 'uede actiarlo para la base de datos nom$red$ escribiendo la ordenH X psql nombredb
RecibirP como respuesta el siguiente mensaeH elcome to the 4ostgres interactive sql monitor: type $ for help on slash commands type q to quit type g or terminate with semicolon to e;ecute query Cou are currently connected to the database: nombredb nombredb (P
Aste indicatio le in,orma de =ue el monitor de terminal se encuentra dispuesto + =ue puede escribir consultas -/L en el espacio de trabao creado por el citado monitor de terminal. Al programa ps=lresponde a cdigos de escape =ue comien8an con la barra inertidaS ^. 'or eemploS puede obtener a+uda sobre la sinta>is de arias rdenes -/L de 'ostgres escribiendoH nombredb (P h
@na e8 =ue Ba terminado de introducir sus consultas en el espacio de trabaoS puede pasar el contenido de Gste al seridor de 'ostgres escribiendoH nombredb (P g
Asto le dice al seridor =ue procese la consulta. -i termina su consulta con punto + comaS no es necesario =ue introdu8ca la secuencia ^g. ps=l procesarP automPticamente consultas terminadas en punto + coma. 'ara leer las consultas de un ,icBeroS en lugar de introducirlas interactiamenteS escribaH nombredb (P i fichero
'ara salir de ps=l + oler a @ni>S escribaH nombredb (P q
+ ps=l terminarP + le deolerP el intGrprete de rdenes. 0'ara conocer mPs rdenes de escapeS escriba ^B en la entrada del monitor. Los espacios en blanco 0espaciosS tabuladores + saltos de lnea pueden usarse libremente en las consultas -/L. Los comentarios en una sola lnea se indican mediante dos guiones 0**. (odo lo =ue a+a desde los guiones Basta el ,in de la lnea serP ignorado. Los comentarios =ue abarcan m
'ostgres proporciona dos utilidades para reali8ar las copias de seguridad de su sistemaH pgKdump para copias de seguridad de bases de datos indiiduales + pgKdumpall para reali8ar copias de seguridad de toda la instalacin de una sola e8. La copia de seguridad de una sola base de datos puede reali8arse usando la siguiente ordenH X pg_dump nombredb P nombredb .pgdump
+ puede ser restaurada usando cat nombredb .pgdump H psql nombredb
Asta tGcnica puede usarse para moer bases de datos a una nuea locali8acin + para renombrar bases de datos e>istentes..
$ases de datos grandes 1-tor Ascrito por 9annu Urosing on 1*)6*1.
Dado =ue 'ostgres permite tablas de ma+or tamaCo =ue el permitido por el sistema de ,icBerosS puede resultar problemPtico el olcado de una tabla a un ,icBeroS +a =ue el ,icBero resultante seguramente superarP el tamaCo mP>imo permitido. !omo pgKdump escribe en stdoutS puede usar las Berramientas ]ni> para sortear estos posibles problemasH •
@so de olcados comprimidosH X pg_dump nombredb H gRip P nombrefichero .dump.gR
la recuperamos conH X createdb nombredb X gunRip -c nombrefichero .dump.gR H psql nombredb
o X cat nombrefichero .dump.gR H gunRip H psql nombredb
•
@se splitH X pg_dump nombredb H split -b 'm - nombrefichero .dump.
+ lo recuperamos conH X createdb nombredb X cat nombrefichero .dump.? H pgsql nombredb
'or supuestoS el nombre del ,icBero 0nom$refichero + el contenido de la salida de pgKdump no tiene por =uG coincidir con el nombre de la base de datos. :demPsS la base de datos restaurada puede tener un nombre distintoS por lo =ue este mecanismo tambiGn es e,ectio para renombrar bases de datos.
(ratamiento de problemas Fallos de inicio de 'ostmaster 9a+ arias posibles ra8ones para =ue postmaster no pueda iniciali8arse. !ompruebe el ,icBero de registro de postmasterS o incielo manualmente 0sin redirigir la salida estPndar o la de errores para er los mensaes =ue aparecen. :lguno de los posibles mensaes de error son autoe>plicatiosS pero los Ba+ =ue pueden no serlos tantoH
F,,: #tream#erver4ort: bind%& failed: ,ddress already in use 9s another postmaster already running on that port$
Asto normalmente signi,ica lo =ue sugiereH accidentalmente Ba iniciado una segunda instancia de postmaster en el mismo puerto en el =ue +a se estP eecutando uno. -in embargoS si el mensae de error del n
9pcGemory2reate: shmget failed %9nvalid argument& key(5DD>>>'E siRe(A3'A@'
@n mensae como Gste posiblemente indica =ue el limite impuesto al tamaCo de las 8onas de memoria compartidas es menor =ue Prea de _bu,,er` =ue 'ostgres estP intentando crear. 0 puede signi,icar =ue no dispone de soporte para la memoria compartida de tipo -+s; con,igurado en su ncede el lmite impuesto por el n><@E num('@E permissi
@n mensae como Gste no signi,ica =ue se Ba+a =uedado sin espacio en el disco\ signi,ica =ue la cantidad mP>ima de semP,oros permitidos por el n
'roblemas con la cone>in del !liente @na e8 =ue tiene el postmaster en eecucinS al tratar de conectar con Gl mediante una aplicacin cliente puede producirse un ,allo por arias ra8ones. Los eemplos de mensaes de error mostrados a=u son para clientes basados en las ersiones recientes de libp=\ los clientes basados en otras bibliotecas de inter,a8 pueden producir otros mensaesS con mPs o menos in,ormacin. connect6L%& -- connect%& failed: 2onnection refused 9s the postmaster running %with -i& at *server.Woe.com* and accepting connections on 24/
Aste el es ,allo genGrico de Yo puedo encontrar un postmaster con el =ue comunicarmeY. 'uede ocurrir algo as cuando se intenta una comunicacin (!'I7' o mediante soc%et @ni> con un postmaster localH connect6L%& -- connect%& failed: 7o such file or directory 9s the postmaster running at *localhost* and accepting connections on 8ni; socket *5D3<*$
La in reBusadaY o de Yo e>iste el ,icBero o directorioYS como los anteriores. 0As particularmente importante tener en cuenta =ue Y!one>in reBusadaY en este conte>to no no signi,ica =ue el postmaster Ba+a recibido la peticin de cone>in + la Ba+a recBa8ado\ en este caso se produce un mensae di,erenteS como se erP. tros mensaes de errorS como el de !onnection timed out s indican problemas mPs importantesS como la ,alta de conectiidad en la red. 7o pg_hba.conf entry for host '<3.'<3.'<3.'<3E user WoeblowE database testdb
Asto es lo mPs probable =ue obtenga si consigue contactar con un postmasterS pero Gste no =uiere Bablar con usted. !omo sugiere el mensaeS el postmaster reBin por=ue no encuentra un rengln de autori8acin en su ,icBero de con,iguracin pgKBba.con, 4assword authentication failed for user *Woeblow*
Los mensaes como Gste indican =ue Ba contactado con el postmasterS + Gste estP dispuesto a Bablar con ustedS pero no lo BarP Basta =ue supere el mGtodo de autori8acin especi,icado en el ,icBero pgKBba.con,. !ompruebe la clae =ue estP eniandoS o su programa 7DA( o UerberosS si el mensae de error menciona alguno de esos tipos de autenticacin. F,, ':
#et8ser9d: user *Woeblow* is not in *pg_shadow*
Asta es otra ariante de ,allo de autenticacinH no se Ba eecutado la orden de 'ostgres YcreateKuserY para el nombre de usuario indicado. F,, ':
6atabase testdb does not e;ist in pg_database
o Ba+ base de datos con ese nombre bao el control de ese postmaster. tese =ue si no especi,ica el nombre de la base de datosS se aplica por de,ecto su nombre de usuario en 'ostgresS lo =ue puede no ser lo correcto.
epuracin de mensaes
Al postmaster presenta ocasionalmente mensaes =ue pueden ser de a+uda en la solucin de problemas. -i desea er mensaes de depuracin de postmasterS puede iniciarlo con la opcin *d + redirigir la salida a un ,icBero de registroH X postmaster -d P pm.log
-i no desea er estos mensaesS puede escribir X postmaster -#
+ el postmaster entrarP en modo Y-Yilencioso. tese =ue no se inclu+e el simbolo Y&Y en el
Al ,icBero opcional dataIpgKoptions contiene opciones de eecucin usadas por el bac%end para controlar mensaes de eecucin + otros parPmetros austables. Lo =ue Bace interesante a este ,icBero es el BecBo de =ue es reledo por el bac%end cuando recibe una seCal -7#9@'S Baciendo as posible cambiar opciones de eecucin sin tener =ue reiniciar 'ostgres. Las opciones especi,icadas en este ,icBero pueden incluir puntos de depuracin usados por el pa=uete trace 0bac%endIutilsImiscItrace.c o parPmetro numGricos =ue puede usar el bac%end para controlar su comportamiento. -e pueden de,inir nueas opciones + parPmetros en bac%endIutilsImiscItrace.c + en bac%endIincludeIutilsItrace.B. Las opciones de pgKoption pueden especi,icarse con el parPmetro *( de 'ostgresH postgres opciones - Zverbose(
Las ,unciones usadas para imprimir errores + mensaes de depuracin pueden aBora usar la utilidad syslog&0(. Los mensaes impresos en stdout o stderr son precedidos por una eti=ueta in,ormatia =ue inclu+e la ,ecBa + Bora + el pid del bac%endH )timestamp A>'<=.'=:5<:'D.'=3 A>'<=.'=:5<:'D.'=D A>'<=.'=:5<:'D.'A@ A>'<=.'=:5<:'D.'A@ A>'<=.'=:5<:'D.'A@ A>'<=.':5<:'D.<< A>'<=.':5<:'D.D'3 A>'<=.':5<:'D.D@@