Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Dba PostgreSQL PDF
Dba PostgreSQL PDF
Dba PostgreSQL PDF
www.codigolibre.org
__________________________________________________________
PostgreSql
________________________________________
2010 Manual De Administracin de PostgreSql
1
www.codigolibre.org
__________________________________________________________
Clase de Administracin
PostgreSql
Meidy Alvarez
DBA-Junior
________________________________________
2010 Manual De Administracin de PostgreSql
2
www.codigolibre.org
__________________________________________________________
NDICE
Dedicatoria..........................................................................................................5
Copyright.............................................................................................................6
Prefacio.................................................................................................................6
Qu se espera de un SGBD?...............................................................................7
Qu exigiremos a un SGBD?..............................................................................7
Gestin de los Recursos del kernel.......................................................................7
psql.......................................................................................................................8
Aplicaciones servidor...........................................................................................8
Arquitectura .........................................................................................................8
El proceso Postmaster..........................................................................................9
La memoria compartida.......................................................................................9
Almacenamiento fsico.........................................................................................9
Ficheros................................................................................................................9
Otros ficheros.......................................................................................................9
Directorios..........................................................................................................10
Creacin del cluster de bases de datos: initdb....................................................10
Creacin del cluster............................................................................................11
Modificacin de template1 + aadir extensiones-contrib..................................12
Puesta en marcha y parada del servidor.............................................................12
Internacionalizacin y localizacin....................................................................13
Ventajas..................................................................................................13
Para ver cmo est configurado en el SO ejecutar.............................................13
Procesamiento de instrucciones.........................................................................14
Gestin de transacciones....................................................................................15
Atomicidad (atomicity)...........................................................................15
Consistencia (consistency)......................................................................15
Aislamiento (isolation)............................................................................16
Persistencia (durability)..........................................................................16
Seguridad en PostgreSQL..................................................................................17
Seguridad en la manipulacin de los ficheros....................................................17
Respecto a las conexiones locales va sockets...................................................17
Seguridad en el acceso de los clientes................................................................18
Conexin local: usando los sockets del dominio Unix......................................18
Conexin remota sin encriptar usando TCP/IP (SSL y no SSL)........................19
Conexin remota encriptada SSL usando TCP/IP (solo SSL)...........................19
Esquema lgico..................................................................................................23
Creacin de roles (usuarios)...............................................................................24
Listando Usuarios..............................................................................................27
Modificando Usuarios.......................................................................................27
Permitir Usuario crear BD.................................................................................29
Cambiando Nombre a un Usuario......................................................................29
Cambiar contrasea...........................................................................................29
Eliminando Usuario............................................................................................29
Creando Grupo...................................................................................................29
Agregando o eliminando un Usuario de Grupo..................................................30
Viendo los Grupos..............................................................................................30
________________________________________
2010 Manual De Administracin de PostgreSql
www.codigolibre.org
__________________________________________________________
Re-Nombrando Grupo........................................................................................30
Eliminando Grupo..............................................................................................31
Creacin de tablespaces.....................................................................................31
Creacin de bases de datos.................................................................................32
Esquemas............................................................................................................33
Permisos.............................................................................................................34
Asignando Privilegios........................................................................................35
Quitando Privilegios...........................................................................................35
Cambiando EL propietario de una tabla.............................................................43
Listar los Objetos en Schema Public..................................................................44
Permisos y Seguridad en Schema.......................................................................45
Eliminando Schema............................................................................................45
Funciones de Schema.........................................................................................45
Esquemas especiales...........................................................................................46
Limitaciones.......................................................................................................46
Administrar privilegios de copia de seguridad...................................................46
Administrando desde GNU/Linux......................................................................48
Iniciando postmaster...........................................................................................49
Autentificacin de Usuarios...............................................................................50
Creacin de una base de datos............................................................................50
Acceso a la base de datos...................................................................................51
Bases de datos grandes.......................................................................................52
Tratamiento de problemas..................................................................................53
Tareas administrativas: Copias de seguridad y recuperacin.............................53
Copy...................................................................................................................53
Mantenimiento del fichero de seguimiento........................................................55
Copias de seguridad............................................................................................55
Copias de seguridad de ficheros del SO.............................................................56
Desventajas de este mtodo................................................................................56
Volcado SQL......................................................................................................56
Recuperacin con psql........................................................................................58
Recuperacin con pg_restore.............................................................................58
Scripts Basico de hacer Backup.........................................................................62
Crontab...............................................................................................................62
Qu es cron?..........................................................................................62
Iniciar cron..............................................................................................62
Usando cron.............................................................................................63
________________________________________
2010 Manual De Administracin de PostgreSql
4
www.codigolibre.org
__________________________________________________________
Dedicatoria
Una mencin de forma especial para Antonio Perpin, Fundador del
Movimiento de Software Libre en Repblica Dominicana y en Amrica
Latina, persona de grandes principios y vastos conocimientos. No todo
hombre tiene el valor de aprender y mucho menos de ensear, por eso sea
siempre bendecido por su calidez y gran visin. El objeto ms noble que
puede ocupar el hombre es ilustrar a sus semejantes.
Meidy E. Alvarez Guerrero
________________________________________
2010 Manual De Administracin de PostgreSql
5
www.codigolibre.org
__________________________________________________________
Copyright
Esta documentacin es regida por los reglamentos de la GNU Free Documentation
License y la GNU General Public License v3, sintase libre de copiar, modificar,
aprender, distribuir y redistribuir esta documentacin; haga uso de su derecho como si
fuere su deber.
Prefacio
En estas paginas se plasma de manera Teorico/Practico los conocimientos necesarios para
convertirse en un Administrador de Base de Datos, usando Postgresql; la finalidad es instruir de
manera interactiva todo lo que se debe saber para un manejo eficiente de Postgresql, y aplicarlos a
este y otros motores libres. Esta es una etapa de varias en este camino hacia la carrera profesional
de la administracin de base de datos y anlisis de estructuras de almacenamiento de
registros de datos.
________________________________________
2010 Manual De Administracin de PostgreSql
6
www.codigolibre.org
__________________________________________________________
Qu se espera de un SGBD?
De un Sistema de Gestin de Bases de Datos esperamos:
Permita a los usuarios crear otras bases de datos y especificar su esquema por medio de
algn lenguaje de definicin.
Ofrezca a los usuarios la capacidad de consultar los datos y modificarlos, usando para ello
un lenguaje de consulta y manipulacin.
Brinde soporte al almacenamiento de cantidades voluminosas de datos durante un largo
perodo, protegindolo contra accidentes o utilizacin no autorizada.
Controle el acceso concurrente.
Qu exigiremos a un SGBD?
Para optar por un buen SGBD debe estudiar su:
Escalabilidad: Capacidad de mejorar con el incremento de los recursos invertidos.
Portabilidad: Exportacin e importacin de datos de una plataforma a otra.
Rendimiento: Recuperacin, actualizacin, concurrencia, etc. de una manera eficiente.
Universalidad: Mltiples tipos de datos (multimedia).
Disponibilidad: 7x24.
Aplicaciones clientes.
www.codigolibre.org
__________________________________________________________
psql:
Terminal interactivo de PostgreSQL. Es la herramienta cannica para la ejecucin de
sentencias SQL a travs del shell del SO. Es una herramienta de tipo frontend que permite
describir sentencias SQL, ejecutarlas y visualizar sus resultados. El mtodo de ingreso
puede ser mediante la insercin directa del cdigo en la consola, o la ejecucin de
sentencias dentro de un archivo de texto. Provee de diversos meta-comandos para la
ejecucin de las sentencias, as como diversas opciones tipo shell propias de la herramienta.
reindexdb: reindexa una base de datos.
vacuumdb: reorganiza y analiza una base de datos.
Aplicaciones servidor:
initdb: crea un cluster de base de datos.
Arquitectura
PostgreSQL funciona con una arquitectura Cliente/Servidor, un proceso servidor
(postmaster) y una serie de aplicaciones cliente que realizan solicitudes de acciones contra
la base de datos a su proceso servidor. Por cada una de estas aplicaciones cliente, el proceso
postmaster crea un proceso postgres.
El proceso Postmaster:
Es el proceso inicial. Gestiona los accesos multiusuario y multiconexion. Levanta la
memoria compartida. Esta al tanto de solicitudes de nuevas conexiones. Lanza procesos de
atencion de demanda, realizando las operaciones sobre la base de datos a solicitud de los
clientes. Realiza el enlazado con los archivos de datos, gestionando estos ficheros, donde los
ficheros
pueden pertenecer a varias bases de datos.
La comunicacion entre BackEnd/FrontEnd se realiza mediante TCP/IP, normalmente por el
puerto 5432, creando un socket (/tmp/.s.PGSQL.5432).
________________________________________
2010 Manual De Administracin de PostgreSql
8
www.codigolibre.org
__________________________________________________________
La memoria compartida:
Gestiona los recursos entre procesos backend. Gestiona la cache del disco,
maneja otras estructuras internas. De esta manera podemos definir el concepto de
CLUSTER DE BASE DE DATOS, como una instancia de PostgreSQL, donde se lanza un
proceso postmaster, que puede gestionar varias bases de datos. En un servidor, pueden haber
varios cluster, cada uno tendra su postmaster, y cada postmaster escuchara por un puerto
diferente.
Nota: no confundir este concepto de cluster con los tipicos que se manejan en bases de
datos de base de datos en cluster o tablas en cluster.
Almacenamiento fisico:
En un servidor se crean uno o varios clusters de bases de datos. La estructura fisica del
cluster se crea con el programa initdb, con este programa se determina la ubicacion fisica y
el juego de caracteres.
En las instalaciones automticas a partir de paquetes (rpm, apt-get, etc) o en Windows, se
crea un cluster automticamente con tres bases de datos, template0, template1 y postgres. El
cluster se crea en un directorio data dentro del directorio donde se ha instalado postgres.
Normalmente, se define una variable de entorno, PGDATA que apunte al directorio donde
se crea el cluster.
Ficheros:
postgresql.conf: fichero de configuracion principal, contiene la asignacion a los
parametros que configuran el funcionamiento del servidor.
pg_hba.conf: fichero de configuracion de la autenticacion de los clientes y usuarios
y del acceso a las bases de datos del cluster.
pg_ident.conf: fichero accesorio al anterior, determina como se realiza la
autenticacion ident que contiene la correspondencia entre usuarios del Sistema
Operativo y de PostgreSQL.
PG_VERSION: fichero de texto con la version de software Postgres que crea el
cluster .
Otros ficheros:
postmaster.pid: se crea cuando el postmaster arranca, contiene el PID del proceso
postmaster.
postmaster.opts: contiene las opciones con las que se ha iniciado el postmaster.
recovery.conf, recovery.done: si se quiere o se ha hecho una recuperacion.
________________________________________
2010 Manual De Administracin de PostgreSql
9
www.codigolibre.org
__________________________________________________________
Directorios:
base: las plantillas y las bases de datos. contiene un directorio por cada base de
datos, dentro hay un fichero por cada tabla o indice de una base de datos, los
numeros corresponden a los OIDs de las tablas o indices.
template0 (1): contiene las definiciones de las tablas del sistema, vistas, funciones y
tipos estandar. Nunca se debe modificar ni intentar conectarse a ella, ya que esta por
si template1 se corrompe.
template1 (N): base de datos plantilla para crear nuevas bases de datos, se puede
modificar su estructura, anadiendo tablas, indices, funciones, etc. Es la que se usara
como plantilla para crear otras bases de datos.
global: tablas e indices del catlogo comunes a todas las bases de datos.
catalogo compartido: pg_shadow (usuarios), pg_database, etc.
pgstat.stat: fichero usado por el monitor de estadsticas.
pg_control: fichero con parmetros del cluster, algunos inmutables (establecidos en
la creacin del cluster) y otros variables (establecidos en la puesta en marcha).
pg_log: ficheros de seguimiento del servidor. Se crea en la versin de Windows, en
la de Linux, se debe indicar al arrancar el postmaster en qu fichero se hace el
seguimiento.
pg_xlog: ficheros de diario del servidor (WAL).
Contiene los diarios de escritura adelantada, para usarlos en las recuperaciones. Se
implementan como un conjunto de segmentos (ficheros) de un tamao de 16Mb y
divididos en pginas de 8Kb.
pg_clog: ficheros de diario para las transacciones (estado de cada transaccin).
Contiene los ficheros de confirmacion. Un diario de confirmacin refleja el estado de
cada transaccin: confirmada, en progreso o abortada.
pg_multixact: contiene datos sobre el estado multi-transaccional, usado para los
bloqueos compartidos de filas.
pg_twophase: ficheros de estado para las transacciones preparadas.
pg_subtrans: para realizar los savepoints en medio de transacciones.
pg_tblspc: informacin sobre los tablespaces. Cuidado porque en linux/unix
contiene enlaces a los directorios donde se crean los tablespaces y hay que controlar,
en caso de cambios de ficheros, que estn correctos.
www.codigolibre.org
__________________________________________________________
843
200904091
5470533823675219895
in production
Sat 05 Jun 2010 10:59:44 AM AST
0/2E23574
0/2BBB43C
0/2E23574
1
0/3448
35751
1
0
Sat 05 Jun 2010 10:57:32 AM AST
0/0
4
8192
131072
8192
16777216
64
32
2000
64-bit integers
________________________________________
2010 Manual De Administracin de PostgreSql
11
www.codigolibre.org
__________________________________________________________
by value
by reference
www.codigolibre.org
__________________________________________________________
reload: envia al postmaster una senal SIGHUP, que provoca que recargue toda
Internacionalizacin y localizacin:
Internacionalizacin: proceso de desarrollo de software de forma que pueda ser usado en
distintas ubicaciones.
Localizacin: proceso de adaptacin de una aplicacin para que sea usada en una ubicacin
especfica.
Ventajas:
1
2
3
4
5
________________________________________
2010 Manual De Administracin de PostgreSql
13
www.codigolibre.org
__________________________________________________________
Procesamiento de instrucciones:
Se produce un dilogo bsico entre el proceso front-end (aplicacin) y el proceso back-end
(postgres), que consta bsicamente de los siguientes pasos:
1. La aplicacin enva una instruccin al proceso postgres.
2. El servidor realiza en anlisis y el proceso postgres responde OK o devuelve error.
3. La aplicacin solicita la ejecucin y el servidor la realiza, devolviendo Ok o error.
4. Por ltimo la aplicacin solicita la recuperacin de los datos y el servidor responde con
los resultados de la instruccin.
Para el procesamiento de instrucciones PostgreSQL usa la cach de la base de datos (shared
buffers), coleccin de buffers de 8Kb en la memoria compartida y que sirven como cach de
las pginas de los ficheros y sentencias que se han usado recientemente. Esta memoria se
reserva cuando se pone en marcha el servidor.
Los bloques de buffers modificados se llaman "sucios" y se colocan en una lista sucia. La
lista sucia controla todas las modificaciones de datos que se hacen en la cach y que no se
han vaciado al disco. La lista sucia se vaca, por ejemplo, cuando se produce un punto de
control (checkpoint) o simplemente se llena la lista.
Si la instruccin es una consulta, el servidor siempre lee primero si tiene estos bloques de
datos en la cach, en caso contrario, los lee del disco y los copia a la cache, realizando esta
operacin tantas veces como sea necesario para ejecutar una instruccin.
Si la instruccin es una actualizacin de datos entran en juego tambin los ficheros de diario
(WAL) y los buffers de diario (buffers WAL). Por ejemplo, al ejecutar un Update de una
fila:
1. Mirar si los datos estn en los buffers compartidos y recuperar el valor antiguo.
2.Si no estn recuperalos de los ficheros de datos y ponerlos en los shared buffers.
3.Se escribe el valor nuevo en el buffer WAL.
4.Se realiza la modiciacin y se escribe en los shared buffers.
todava no se han escrito los datos en disco!
________________________________________
2010 Manual De Administracin de PostgreSql
14
www.codigolibre.org
__________________________________________________________
Gestin de transacciones:
PostgreSQL cumple las reglas ACID:
1
2
3
4
Atomicidad (atomicity).
Consistencia (consistency).
Aislamiento (isolation).
Persistencia (durability).
Atomicidad:
La palabra se deriva de tomo, que significa indivisible; como indivisibles son cada una de
las operaciones contenidas dentro de una transaccin. Una transaccin es un bloque de
operaciones o instrucciones dirigido a modificar una base de datos en una determinada
direccin.
En realidad, lo importante aqu, es que se cumpla la regla de todo o nada. Si todas las
operaciones se realizan con xito, los resultados producidos por la transaccin se guardan en
la base de datos. Si alguna operacin falla, todas las operaciones son deshechas (rollback),
incluso aunque alguna operacin haya sido realizada con xito.
Solucin
En PostgreSQL podemos hacer que un grupo de sentencias SQL se ejecuten dentro de una
transaccin, encerrndolas entre las sentencias BEGIN y COMMIT. De esta forma
aseguramos que se ejecutan todas o ninguna. Si llegados a algn punto dentro de la
transaccin necesitamos deshacerla completamente, utilizamos ROLLBACK, en lugar de
COMMIT, y todos los cambios son deshechos.
Durante las transacciones, existen restricciones diferidas (ser verifican al final de la
transaccin) o inmediatas (se verifican en cada operacin), en este caso, si alguna condicin
no se cumple, la transaccin queda en estado latente, algunas consultas no se pueden
realizar y las actualizaciones no tendrn efecto, con lo que solo se puede resolver
deshaciendo la transaccin.
Por otro lado, PostgreSQL trata cualquier sentencia aislada como si sta se ejecutara dentro
de una pequea transaccin; aunque no usemos BEGIN, cada sentencia incorpora
implcitamente un BEGIN y, si culmina con xito, un COMMIT, a este modo se le conoce
como "modo autoconfirmacin".
Consistencia:
Una base de datos es una herramienta para modelar y registrar una realidad cambiante. Sin
embargo, debe hacerlo consistentemente de acuerdo con unas reglas determinadas o
restricciones de integridad definidas. La realidad modelada as, puede ir cambiando al pasar
de un estado en el que cumple las reglas, a otro en el que tambin las cumple.
Si al ejecutar una transaccin, por el motivo que sea, se incumpliera alguna de estas reglas,
la transaccin no se llegara a completar. Esto garantiza que una base de datos siempre
permanezca en un estado vlido, es decir, consistente con las reglas.
________________________________________
2010 Manual De Administracin de PostgreSql
15
www.codigolibre.org
__________________________________________________________
Solucion:
A partir de la version 7.0 se anadio gestion de integridad en PostgreSQL, las restricciones
soportadas son:
not null
check
unique
primary key
foreign key, con dos tipos match full (completa) y match partial (si en alguna
columna no hay valores no se comprueba la integridad, aunque esta opcion no esta
implementada)
Solo las instrucciones de clave ajena son diferibles, el resto son inmediatas.
Aislamiento:
Los resultados de una transaccin que est siendo ejecutada, son invisibles a cualquier otra
transaccin hasta que la primera no haya sido completada con xito. La ejecucin no
perturba a otras transacciones que se ejecuten concurrentemente.
Solucin:
Frente a otro modelos tradicionales que controlan el acceso concurrente a los datos a travs
de bloqueos, PostgreSQL utiliza un modelo denominado Multiversion Concurrency Control
(MVCC), segn el cual, al consultar la BD, cada transaccin ve una instantnea de la BD tal
como era hace un cierto tiempo (una versin de la BD) y no el estado actual de la BD. Este
mecanismo evita que una transaccin pueda ver datos inconsistentes modificados por otra.
Aislando las transacciones que operan concurrentemente en distintas sesiones, un lector no
necesita esperar a un escritor; y un escritor no necesita esperar a un lector.
Persistencia o Durabilidad:
La durabilidad garantiza que los efectos resultantes de una transaccin, una vez ha sido
completada con xito, permanecen en la base de datos para siempre, incluso cuando se
puedan producir posteriormente fallos de cualquier clase.
Por ejemplo, si durante una transaccin se produce un apagado del servidor, una vez
reiniciado el servidor, un sistema que lleve un registro de transacciones realizadas,
advertira rpidamente que existe una sin completar, finalizndola correctamente.
Solucin:
PostgreSQL utiliza una tcnica estndar denominada WAL (Write-ahead logging, o
escritura anticipada de registros) para controlar tanto la consistencia como la durabilidad de
las transacciones.
Brevemente explicada, consiste en que los cambios en los ficheros de datos (tablas e
ndices) slo se materializan cuando existe previamente en el disco un registro en el que
estn anotados dichos cambios. Siguiendo este procedimiento, no es necesario enviar
pginas al disco cada vez que una transaccin se completa. Esta tcnica no slo mejora el
rendimiento del servidor, sino que ante un fallo de la mquina, ser posible recuperar la BD
a partir de ese registro: cualquier cambio no aplicado a las pginas de datos en el disco ser
________________________________________
2010 Manual De Administracin de PostgreSql
16
www.codigolibre.org
__________________________________________________________
nuevamente hecho desde el log (roll-forward recovery, o REDO) mientras que los posibles
cambios realizados en pginas de disco por transacciones incompletas, podrn ser deshechos
manteniendo la integridad y la consistencia de los datos (roll-backward recovery, o UNDO).
Estos ficheros de diario estn en $PGDATA/pg_xlog, son ficheros de 16Mb, divididos en
pginas de 8Kb, el sistema crea uno inicialmente y va creando ms segn las necesidades,
rotando de manera cclica segn marquen los parmetros de sistema que gestionan este
funcionamiento (checkpoint_segments y archive_command).
Siguiendo con la instruccin (update de una fila), al ejecutar un COMMIT se produce:
1. Se escriben los datos del buffer WAL en los ficheros de diario WAL.
2. Se pueden refrescar las copias multiversin en los shared buffers.
3. Se retorna el control a la aplicacin.
Entonces, los datos de los buffers no se han escrito en disco todava, pero los del diario si,
as los datos de la transaccin nunca se pierden.
Seguridad en PostgreSQL:
La seguridad en PostgreSQL se materializa en tres aspectos:
Seguridad en la manipulacin de los ficheros de PostgreSQL.
Seguridad en los accesos de los clientes.
Definicin de los privilegios para acceder a los objetos de la base de datos a los usuarios
PostgreSQL.
Seguridad en la manipulacin de los ficheros:
La informacin ms crtica est en $PGDATA.
Todos los ficheros deben pertenecer al usuario postgres.
El usuario postgres debe ser el nico que pueda:
Leer, escribir y ejecutar sobre los directorios en los ficheros
leer y escribir en los ficheros
Respecto a las conexiones locales va sockets:
Todos los usuarios usan la misma.
Se puede restringir el uso para algunos usuarios del SO.
Ver el directorio /tmp, donde existe un fichero .s.PGSQL.5432 que se crea cuando arranca
el postmaster, los permisos de este fichero son 777, cualquier usuario del SO se puede
conectar. Adems hay un .s.PGSQL.5432.lock que slo puede leer postgres.
________________________________________
2010 Manual De Administracin de PostgreSql
17
www.codigolibre.org
__________________________________________________________
Los permisos de este socket se pueden configurar en postgresql.conf con los parmetros
unix_socket_directory, unix_socket_group y unix_socket_permission.
Seguridad en el acceso de los clientes:
Es importante poder definir desde qu equipos se pueden conectar a nuestra base de datos,
as como poder definir qu usuarios y a qu bases de datos se pueden conectar.
La configuracin de este nivel de seguridad se realiza en los ficheros pg_hba.conf (hba =
host based authentication) y pg_ident.conf.
Se trata de editar una serie de reglas que se irn procesando de arriba abajo, cuando se
encuentre una regla que cumpla la conexin, se ejecutar lo que ponga en el mtodo.
Conexin local: usando los sockets del dominio Unix:
base_datos:
ALL: se permite la conexin a cualquier base de datos.
SAMEUSER: solo a bases de datos que su nombre sea el mismo que el usuario que se
conecta.
SAMEROLE: solo a bases de datos que su nombre sea el mismo que el role que se conecta.
nombd1, nombd2, : se permite la conexin a cualquiera de las bases de datos de la lista.
@fichero: se permite la conexin a las bases de datos incluidas en el fichero, que debe estar
en el mismo directorio que pg_hba.conf.
usuario:
ALL: se permite la conexin de cualquier role.
role1, [+]role2, : se permite la conexin de los roles de la lista y adems se permite la
conexin de cualquier role que sea miembro de role2.
@fichero: se permite la conexin de los roles incluidos en el fichero, que debe estar en el
mismo directorio que pg_hba.conf.
Mtodo-Autenticacin:
TRUST: conexin aceptada sin condiciones.
REJECT: conexin rechazada sin condiciones.
PASSWORD: se solicita palabra de paso sin encriptar, las palabras de paso se almacenan
en la tabla pg_authid y pueden estar cifradas o no segn como se creara el role.
CRYPT: palabra de paso encriptada (versiones previas a la 7.2).
________________________________________
2010 Manual De Administracin de PostgreSql
18
www.codigolibre.org
__________________________________________________________
MD5: palabra de paso con el mtodo de encriptacin md5, y se almacena tambin con este
mtodo. Es el mtodo recomendado por PostgreSQL. Se obtiene un cifrado a partir de la ID
de usuario y la palabra de paso, el cliente solicita una semilla al servidor y as se obtiene un
segundo cifrado que es envado al servidor, en el servidor se utiliza la palabra de paso
almacenada, el ID del usuario (la obtiene de la conexin) y la semilla para obtener un
cifrado
similar y los compara.
KRB5: se usa Kerberos v5 para autenticar el cliente, se ha de habilitar en la instalacin del
servidor.
IDENT correspondencia: a partir del usuario de la conexin cliente (se fa de la
autenticacin del cliente) y de la correspondencia indicada en la opcin, se obtiene un role
de PostgreSQL para realizar la conexin. Las correspondencias se obtienen del fichero
pg_ident.conf.
SAMEUSER: el usuario del sistema operativo es el mismo que se conecta a la BD.
Cambio-usuario: el sistema mira el fichero pg_ident.conf, y busca una fila donde est la
correspondencia llamada cambio-usuario y se corresponda con el usuario conectado al
SO, haciendo la conexin a la BD con el usuario con el usuario de la columna usuario-pg.
PAM servicio-pam: autenticacin usando Pluggable Authentication Method proporcionado
por el servicio PAM indicado en opcin. Este mtodo es proporcionado por el SO. Se debe
compilar el servidor con esta opcin. El PAM por defecto es postgresql. Se deben
configurar los mtodos PAM del SO, generalmente basta con incluir la definicin del un
nuevo mtodo en el directorio /etc/pam.d.
www.codigolibre.org
__________________________________________________________
port = 5432
max_connections = 100
www.codigolibre.org
__________________________________________________________
all
0.0.0.0/0
password
--Comprobemos la coneccion
-bash-4.0$ psql -U mexy -h 168.100.0.2 sacademico
Password for user mexy:
Timing is on.
psql (8.4.3)
Type "help" for help.
[168:5432/mexy@sacademico][]#
--Otra prueba con diferente IP y usuario
-bash-4.0$ psql -U jparedes -h 192.168.100.2 sacademico
Password for user jparedes:
Timing is on.
psql (8.4.3)
Type "help" for help.
[192:5432/jparedes@sacademico][]>
--Si no cumplimos los parametros nos dira lo siguiente:
-bash-4.0$ psql -U jparedes -h 192.168.100.2 HR
psql: FATAL: no pg_hba.conf entry for host "192.168.100.2", user "jparedes", database "HR", SSL
off
________________________________________
2010 Manual De Administracin de PostgreSql
21
www.codigolibre.org
__________________________________________________________
/***Aqui especificamos que aceptara coneccion a cualquier DB y de cualquier ip pero siempre con
el usuario mexy'.***/
# TYPE DATABASE USER
CIDR-ADDRESS METHOD
# IPv4 local connections:
host
all
mexy 0.0.0.0/0
md5
--Hagamos la coneccion
-bash-4.0$ psql -U mexy -h 192.168.100.2 sacademico
Password for user mexy:
Timing is on.
psql (8.4.3)
Type "help" for help.
[192:5432/mexy@sacademico][]#
--Chevere
--Lo mismo pero con diferente IP y DB.
-bash-4.0$ psql -U mexy -h 168.100.0.2 HR
Password for user mexy:
Timing is on.
psql (8.4.3)
Type "help" for help.
[168:5432/mexy@HR][]#
--Pero siempre con el usuario mexy porque si no nos dara el siguiente:
-bash-4.0$ psql -U jparedes -h 168.100.0.2 HR
psql: FATAL: no pg_hba.conf entry for host "168.100.0.2", user "jparedes", database "HR", SSL
off
/***Ahora especificaremos una sola IP(en este caso cualquier IP) con cualquier DB y/o usuario
pero con metodo password.***/
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# IPv4 local connections:
host
all
all
0.0.0.0/0
password
--Probemos
-bash-4.0$ psql -U mexy -h 10.0.0.1 sacademico
Password for user mexy:
Timing is on.
psql (8.4.3)
Type "help" for help.
[10:5432/mexy@sacademico][]>
--Nitido!
/*** Practica***/
--Realiza una conexion remota desde tu maquina, con un usuario, IP especifico y el metodo
password.
________________________________________
2010 Manual De Administracin de PostgreSql
22
www.codigolibre.org
__________________________________________________________
Esquema lgico:
Concepto de Cluster de bases de datos en PostgreSQL:
Repositorio que engloba un conjunto de bases de datos, que contienen objetos que se pueden
guardar en distintos tablespaces y un conjunto de usuarios que se conectan al cluster.
Una base de datos engloba un conjunto de esquemas, los cuales tienen un usuario
propietario. En los esquemas es donde se crean los objetos (tablas, ndices, procedimientos,
vistas, etc.).
Una sesin se abre contra una base de datos.
Con lo que tenemos aqu los tres elementos principales a nivel lgico en un cluster:
Bases de datos: agrupaciones de esquemas. Por defecto, siempre hay tres bases de datos
creadas, template0, template1 y postgres.
Tablespaces: ubicaciones alternativas a la que por defecto tiene el cluster. Por defecto no se
crea ninguno.
Roles: engloba el concepto de usuarios (roles de login) y grupos de permisos (roles de
grupo), estos ltimos son lo mismo que los roles de Oracle. Hasta la versin 8 de Postgres
no se podan anidar roles, ahora si. Por defecto, si al crear el cluster no se ha indicado otro
usuario, se crea el usuario postgres como superusuario.
Todos los usuarios son comunes a las bases de datos del cluster, se pueden conectar con
cualquiera de las bases de datos. En este punto, las bases de datos se comportan como
esquemas de Oracle.
Las bases de datos son independientes entre ellas, no se pueden ver objetos de una base de
datos desde otra base de datos, excepto si se usan dblinks. Esto marca cmo se deben crear
las bases de datos:
Si es un servidor que acoge proyectos separados y no se han de interrelacionar:
separacin en bases de datos distintas.
Si es un servidor de proyectos con recursos comunes: una nica base de datos y distintos
esquemas para cada proyecto.
/****Ejemplo****/
--Viendo los Logs:
--Si queremos ver el history de todos los comandos ejecutados en el plsql:
[[local]:5432/jparedes@HR] [] # \s
o
[postgres@jp ~]$cat .psql_history
________________________________________
2010 Manual De Administracin de PostgreSql
23
www.codigolibre.org
__________________________________________________________
www.codigolibre.org
__________________________________________________________
www.codigolibre.org
__________________________________________________________
________________________________________
2010 Manual De Administracin de PostgreSql
26
www.codigolibre.org
__________________________________________________________
/***Practica***/
--Crear un usuario que expire en 3 dia y que su password este encriptado?
Listando Usuarios:
Puedes ver los usuarios en el servidor mediante la seleccion de la tabla de sistema
pg_shadow. Si usted no es un super usuario, no tendra permiso para acceder a esta tabla y
tendra que acceder a la vista pg_user lugar, que es identico, pero muestra la contrasea
como estrellas.
--Vista donde tenemos todos los usuarios almacenados:
[[local]:5432/postgres@postgres] [] # SELECT * from pg_user;
--Vamos a mostrar donde se almancenan las contraseas:
[[local]:5432/postgres@postgres] [] # SELECT * from pg_shadow ;
Modificando Usuarios:
Si desea cambiar un usuario puede utilizar el comando SQL ALTER USER, que es similar
al comando CREATE USER excepto que usted no puede cambiar el sysid.
ALTER USER name [ [ WITH ]
[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| VALID UNTIL 'abstime' ]
/****Ejemplo****/
--Cambiando contrasea de un usuario:
[[local]:5432/postgres@postgres] [] # ALTER USER pepe WITH PASSWORD 'pomavid';
--Creacion de Roles:
CREATE ROLE General ;
CREATE ROLE Coronel ;
CREATE ROLE Cabo ;
CREATE ROLE Henry ;
--Agregamos un comentario a un ROLE, igual para otro Objeto
COMMENT ON ROLE henry IS 'Este Role es el pela papa';
--Ahora vamos a crear los Usuarios a logins en sus respectivos Roles:
--Usuario de Jose Paredes
CREATE ROLE jparedes
WITH LOGIN ENCRYPTED PASSWORD 'kikla'
IN ROLE General;
________________________________________
2010 Manual De Administracin de PostgreSql
27
www.codigolibre.org
__________________________________________________________
--Usuario de Orange
CREATE ROLE orange
WITH LOGIN PASSWORD 'orange'
IN ROLE General;
--Usuario de Deivi Bolges
CREATE ROLE dbolges
WITH LOGIN PASSWORD 'venaito'
IN ROLE General;
--Usuario de Felipe Mateo
CREATE ROLE fmateo
WITH LOGIN PASSWORD 'gentoo'
IN ROLE General;
--Usuario de Amaurys Rodriguez
CREATE ROLE arodriguez
WITH LOGIN PASSWORD 'centos'
IN ROLE Coronel
VALID UNTIL '2010-05-30';
--Usuario de Felipe Cristhian Nuez
CREATE ROLE cnunez
WITH LOGIN PASSWORD 'salsa'
IN ROLE Coronel;
--Usuario de Felipe Franky Almonte
CREATE ROLE falmonte
WITH LOGIN PASSWORD 'bacula'
IN ROLE Coronel;
--Usuario de Elvyn Bolges
CREATE ROLE ebolges
WITH LOGIN PASSWORD 'bolsa'
IN ROLE Cabo
VALID UNTIL '2010-06-01';
--Usuario de Lus Merlin
CREATE ROLE lmerlin
WITH LOGIN PASSWORD 'quimica'
IN ROLE Cabo
VALID UNTIL '2010-05-31';
--Usuario de Henry Terrero
CREATE ROLE hterrero
WITH LOGIN PASSWORD 'java'
IN ROLE henry;
--Usuario de Anyelina Colon
CREATE ROLE acolon
WITH LOGIN PASSWORD 'secre'
IN ROLE henry;
________________________________________
2010 Manual De Administracin de PostgreSql
28
www.codigolibre.org
__________________________________________________________
Cambiar contrasea:
template1=# ALTER USER colin WITH PASSWORD 'letmein';
ALTER USER
Comprobamos los Cambios y vemos los cambios: En la tabla pg_user
Eliminando Usuario:
Al igual que la creacion de usuarios, existen dos formas de eliminar los usuarios, utilizando
la lnea de comandos o SQL. En la lnea de comandos usariamos:
Desde el Shell
$ dropuser alice
DROP USER
Desde SQL
template1=# DROP USER colin;
DROP USER
Creando Grupo:
Los grupos son totalmente opcionales en postgresql. Solo se usan para simplificar la
concesion y revocacion de privilegios para el administrador db, y los usuarios no tienen que
ser un miembro de ningun grupo.
A diferencia de la creacion de usuarios, solo se pueden crear grupos utilizando SQL. El
comando es:
________________________________________
2010 Manual De Administracin de PostgreSql
29
www.codigolibre.org
__________________________________________________________
Re-Nombrando Grupo:
ALTER GROUP groupname RENAME TO newname
template1=# ALTER GROUP sales RENAME TO presales;
________________________________________
2010 Manual De Administracin de PostgreSql
30
www.codigolibre.org
__________________________________________________________
/****Ejemplo****/
--Vamos a renombrar un grupo:
[[local]:5432/postgres@postgres] [] # ALTER GROUP contabilidad RENAME TO dba;
Eliminando Grupo:
template1=# DROP GROUP presales;
/****Ejemplo****/
--Eliminando Grupo:
[[local]:5432/postgres@postgres] [] # DROP GROUP dba ;
/***Practica***/
--Crear un grupo llamado fcld y agregar tres usuario al mismo:
Creacion de tablespaces:
Si queremos especificar ubicaciones alternativas para determinadas bases de datos o tablas,
por ejemplo, queremos que ciertas tablas estn en otros discos distintos a los que se
encuentran por defecto, debemos crear tablespaces.
CREATE TABLESPACE tablespacename [ OWNER username ] LOCATION 'directory'
Tablespacename: no puede empezar en pg_ porque est reservado a los tablespaces de
sistema.
Username: debe ser un superusuario del cluster.
Directory: se deben indicar trayectorias absolutas y el propietario del directorio debe ser el
usuario con el que se ha instalado PostgreSQL.
En versiones anteriores de PostgreSQL, exista el comando initlocation, que serva para
indicar ubicaciones alternativas para las bases de datos, y que exiga que se definiese una
variable de entorno similar a PGDATA para cada base de datos.
Nota: cuando se crean tablespaces, en $PGDATA/pg_tblspc se crean enlaces simblicos a
los directorios fsicos donde se encuentran, esto es importante tenerlo en cuenta en procesos
como el cambio de ubicaciones o en la restauracin de ficheros desde una copia de
seguridad.
/****Ejemplo****/
--Trabajando con TableSpace:
--Auntomaticamente creamos el directorio tablespace en data y creamos los Los directorios
donde se alojaran los TableSpace:
[postgres@jp ~]$mkdir -p data/tablespace/tbe_{2008_{1,2},2009_{1,2},2010_1,0000_0}
________________________________________
2010 Manual De Administracin de PostgreSql
31
www.codigolibre.org
__________________________________________________________
...
--Queremos dos simplemente, uno para los datos y otro para los indices:
[postgres@jp ~]$mkdir -p data/tablespace/tablespace_datos
[postgres@jp ~]$mkdir -p data/tablespace/tablespace_index
--Aqui creamos nuestros TableSpaces:
[[local]:5432/postgres@postgres] [] # CREATE TABLESPACE TS_Pomavid_Datos
OWNER pepe LOCATION '/var/lib/pgsql/data/tablespace/tablespace_datos';
[[local]:5432/postgres@postgres] [] # CREATE TABLESPACE TS_Pomavid_Indices
OWNER pepe LOCATION '/var/lib/pgsql/data/tablespace/tablespace_index';
--Si queremos poner unos de los TableSpace por defecto:
SET default_tablespace=TS_Pomavid_Datos;
--Para saber el tamao de que ocupa los TableSpace:
[[local]:5432/postgres@postgres] [] # SELECT
spcname,spclocation,pg_tablespace_size(spcname)/1024 "Tamao MB"
FROM pg_tablespace
WHERE spclocation LIKE '/var/lib/pgsql/data/tablespace/tablespaces_datos%';
spcname | spclocation | Tamao MB
---------+-------------+----------(0 rows)
________________________________________
2010 Manual De Administracin de PostgreSql
32
www.codigolibre.org
__________________________________________________________
Opciones de conexin:
-h, --host=ANFITRIN nombre del servidor o directorio del socket
-p, --port=PUERTO puerto del servidor
-U, --username=USUARIO nombre de usuario para la conexin
-W, --password preguntar la contrasea
Si no se especifica, se crear una base de datos con el mismo nombre que el
usuario actual.
Desde un cliente SQL:
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] dbowner ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ TABLESPACE [=] tablespace ]
[ CONNECTION LIMIT [=] connlimit ] ]
/****Ejemplo****/
--Ahora con el TableSpace creado ya podemos crear nuestra Bases Datos
--La misma alojara todos los objeto en el TableSpace ya creado:
--Desde el Shell:
[postgres@jp ~]$createdb poma -O pepe -D ts_pomavid_datos -e
CREATE DATABASE poma OWNER pepe TABLESPACE ts_pomavid_datos;
--Desde PsqL:
[[local]:5432/postgres@postgres] [] # CREATE DATABASE poma OWNER pepe
tablespace ts_pomavid_datos;
CREATE DATABASE
--Si queremos pasar una Base Datos ya creada a un TableSapce:
[[local]:5432/postgres@postgres] [] # ALTER DATABASE poma SET tablespace
ts_pomavid_datos ;
Esquemas:
Las bases de datos se organizan mediante esquemas, contenedores lgicos de objetos de
base de datos (tablas, vistas, procedimientos, etc.), bsicamente son un espacio de nombres.
Es caracterstico de los esquemas:
Tienen un propietario.
Permiten el uso de la base de datos por multiples usuarios sin interferencias.
Permiten que se puedan instalar aplicaciones realizadas por terceros si que existan
colisiones en los nombres de los objetos.
Para poder ver objetos de un esquema, debe usarse la notacin esquema.objeto ya
que en PostgreSQL no existe el concepto de sinnimos como en Oracle.
Mas delante seguiremos hablando de Schema.!!!
________________________________________
2010 Manual De Administracin de PostgreSql
33
www.codigolibre.org
__________________________________________________________
/****Ejemplo****/
--Una vez creada la Base Datos procedemos a crear el Schema:
[[local]:5432/postgres@postgres] [] # CREATE SCHEMA cole authorization pepe;
CREATE SCHEMA
--Para crear un Objeto dentro del Schema creado es y en el TableSpace :
[[local]:5432/postgres@postgres] [] # CREATE TABLE cole.Bbella (Nombre Varchar(30))
tablespace ts_pomavid_datos;
--Podemos setear el search_path a nivel de base de datos y Schema, Por defecto :
[[local]:5432/postgres@postgres] [] # SET search_path TO cole;
SET
[[local]:5432/postgres@postgres] [] # SHOW search_path ;
search_path
------------cole
(1 row)
--Una vez creado el Schema todo objeto debe ser creado asi:
--**************Schema.Objeto**************
[[local]:5432/postgres@postgres] [] # SELECT * from cole.TAB TAB ;
--Listar los Schema:
[[local]:5432/postgres@pomavid] [] # \dn+
Permisos
Todos los objetos (tablas, vistas y secuencias) tienen un propietario, que es la persona que lo
creo. El propietario o un superusuario, puede establecer permisos en el objeto. Los permisos
se compone de un nombre de usuario o grupo y un conjunto de derechos. Estos derechos
descritos en la tabla de abajo.
Privilege
short name
SELECT
r
INSERT
a
UPDATE
w
DELETE
d
RULE
R
REFERENCES
x
TRIGGER
TEMPORARY
EXECUTE
USAGE
ALL
t
T
X
U
All
Description
Puede leer los datos del objeto.
Puede insertar datos en el objeto.
Puede cambiar los datos en el objeto.
Puede eliminar los datos del objeto.
Puede crear una regla sobre la tablas.
Se puede crear una clave externa a una tabla.Necesita
esto en ambos lados de la llave.
Se puede crear un desencadenador en la tabla.
Se puede crear una tabla temporal.
Se puede ejecutar la funcion.
Puede usar la lengua del procedimiento.
privilegios adecuados. Para las tablas, esto equivale a
arwdRxt
________________________________________
2010 Manual De Administracin de PostgreSql
34
www.codigolibre.org
__________________________________________________________
Asignando Privilegios:
GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES |
TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTI
GRANT INSERT, UPDATE, DELETE ON TABLE suppliers TO bob;
Quitando Privilegios:
REVOKE INSERT UPDATE DELETE ON TABLE suppliers FROM bob CASCASE
/****Ejemplo****/
--Ahora vamos Asignacion de Derechos sobre Objetos:
--Utilizaremos el Scripts de hr mas otros objetos creados por los usuarios:
[postgres@jp ~]$psql < hr_Postgreql.sql
--Vemos los objetos insertados desde el Scripts hr:
[[local]:5432/postgres@HR] [] # \d
List of relations
Schema |
Name
| Type
| Owner
--------+-----------------------+----------+---------public | countries
| table
| postgres
public | departments
| table
| postgres
public | employees
| table
| postgres
public | job_history
| table
| postgres
public | jobs
| table
| postgres
public | locations
| table
| postgres
public | regions
| table
| postgres
public | regions_region_id_seq | sequence | postgres
(8 rows)
--Para cambiar el dueo de una tabla, de esta manera usted puede tener todos los privilegios
sobre un objeto:
[[local]:5432/postgres@HR] [] # ALTER TABLE countries owner to jparedes ;
ALTER TABLE
[[local]:5432/postgres@HR] [] # \d
List of relations
Schema |
Name
| Type | Owner
--------+-----------------------+----------+---------public | countries
| table | jparedes
________________________________________
2010 Manual De Administracin de PostgreSql
35
www.codigolibre.org
__________________________________________________________
www.codigolibre.org
__________________________________________________________
--Hacer pruebas:
[postgres@jp ~]$psql -U orange HR
psql (8.4.4)
Type "help" for help.
[[local]:5432/orange@HR] [] > SELECT first_name, salary from employees limit 1;
first_name | salary
-------------+-------John
| 14000
(1 row)
--Vamos REVOCAR los privilegios al ROlE General:
[[local]:5432/postgres@HR] [] # REVOKE SELECT ON employees FROM general ;
REVOKE
--Hacer pruebas:
[[local]:5432/fmateo@HR] [] > SELECT first_name, salary from employees limit 1;
ERROR: permission denied for relation employees
--Vamos a darle todos los priviegio al ROLE General sobre un Schema:?
--Primero hacemos logion con el usuario hterrero el General de los pela papa:
[postgres@jp ~]$psql -U hterrero sacademico
psql (8.4.4)
Type "help" for help.
--Hacemos una consulta a la tabla cursos del Schema sacademicoschema:
[[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos;
ERROR: relation "sacademicoschema.curso" does not exist
LINE 1: SELECT * from sacademicoschema.cursos;
^
sacademico
--Otorga los permisos en el Schema SacademicoSchema:
[[local]:5432/postgres@sacademico] [] # GRANT ALL ON SCHEMA sacademicoschema
to hterrero;
GRANT
--Prueba:
[[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos;
ERROR: permission denied for relation cursos
--Otorgamos privilegios al objeto dentro del Schema:
[[local]:5432/postgres@sacademico] [] # GRANT ALL ON sacademicoschema.cursos to
hterrero;
________________________________________
2010 Manual De Administracin de PostgreSql
37
www.codigolibre.org
__________________________________________________________
GRANT
--Prueba:
[[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos limit 2;
id_curso |
curso
| costo | fecha_registro
| quien_registro
-----------+---------------------------------+--------+--------------------------+----------1 | Diplomado GNU/Linux
| 3500 | 2009-08-05 21:57:24 | admin
2 | Unixs(Solaris*Aix*Hp-Ux) | 3500 | 2009-08-05 21:57:31 | admin
(2 rows)
--Revocando los privilegios de de un ROLE sobre un Schema:
[[local]:5432/postgres@sacademico] [] # REVOKE ALL ON SCHEMA sacademicoschema
from hterrero;
--Prueba:
[[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos limit 1;
ERROR: permission denied for schema sacademicoschema
LINE 1: SELECT * from sacademicoschema.cursos limit 1;
--Acceso a los requerimientos previamente solicitados:
[[local]:5432/postgres@sacademico] [] # GRANT USAGE ON SCHEMA
sacademicoschema to hterrero;
GRANT
--Prueba:
[[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos limit 3;
id_curso |
curso
| costo | fecha_registro
| quien_registro
-----------+-----------------------------------+---------+---------------------------+----------1 | Diplomado GNU/Linux
| 3500 | 2009-08-05 21:57:24 | admin
2 | Unixs(Solaris*Aix*Hp-Ux) | 3500 | 2009-08-05 21:57:31 | admin
3 | Asterisk-I
| 12500 | 2009-08-16 15:57:14 | root@local
host
(3 rows)
--El usuario puede cambiar la misma session:
--Primero vemos nuestra session y usuario:
[[local]:5432/orange@sacademico] [] # SELECT session_user, current_user;
session_user | current_user
---------------+-------------orange
| orange
(1 row)
--Cambiamos de session:
[[local]:5432/jparedes@sacademico] [] # SET session AUTHORIZATION hterrero ;
SET
--Resultado:
________________________________________
2010 Manual De Administracin de PostgreSql
38
www.codigolibre.org
__________________________________________________________
________________________________________
2010 Manual De Administracin de PostgreSql
39
www.codigolibre.org
__________________________________________________________
Access privileges
Schema |
Name
| Type
| Access privileges | Column access privileges
--------+----------------------------+---------------+----------------------+-------------------------public | countries
| table
|
|
public | departments
| table
|
|
public | employees
| table
|
|
public | job_history
| table
|
|
public | jobs
| table
|
|
public | locations
| table
|
|
public | pepe
| sequence |
|
public | regions
| table
|
|
public | regions_region_id_seq | sequence |
|
(9 rows)
--Verificamos si pordemos consultas algunos de esos objetos:
[[local]:5432/hterrero@HR] [] > SELECT * from countries ;
ERROR: permission denied for relation countries
--No tenemos ningunos vamos a otorgar algunos privilegios al ROLE coronel, en el cual se
encuentra el usuario falmonte:
[[local]:5432/postgres@HR] [] # GRANT SELECT ON countries TO coronel ;
GRANT
[[local]:5432/postgres@HR] [] # GRANT UPDATE ON countries TO cnunez ;
GRANT
[[local]:5432/postgres@HR] [] # GRANT DELETE ON countries TO arodriguez ;
GRANT
[[local]:5432/postgres@HR] [] # GRANT ALL ON countries TO general ;
GRANT
--Prueba:
[[local]:5432/falmonte@HR] [] > SELECT * from countries limit 3;
country_id | region_id | name
-------------+-------------+----------AR
|
2
| Argentina
AU
|
3
| Australia
BE
|
1
| Belgium
(3 rows)
--Luego vemos informacion sobre los permisos de los objetos exists ya aplicados:
[[local]:5432/falmonte@HR] [] > \z
Access privileges
Schema |
Name
| Type | Access privileges
| Column access
privileges
----------+--------------------------+---------+-------------------------------+-------------------public | countries
| table | postgres=arwdDxt/postgres |
________________________________________
2010 Manual De Administracin de PostgreSql
40
www.codigolibre.org
__________________________________________________________
: coronel=r/postgres
: cnunez=w/postgres
: arodriguez=d/postgres
: general=arwdDxt/postgres
public | departments
| table
public | employees
| table
public | job_history
| table
public | jobs
| table
public | locations
| table
public | pepe
| sequence
public | regions
| table
public | regions_region_id_seq | sequence
(9 rows)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Access privileges
| Column access
privileges
----------+---------------------------+------------+-------------------------------------+---------------public | countries
| table
| postgres=arwdDxt/postgres |
: coronel=r/postgres
: cnunez=w/postgres
: arodriguez=d/postgres
: general=arwdDxt/postgres
public | departments
| table
|
|
public | employees
| table
|
|
public | job_history
| table
|
|
public | jobs
| table
|
|
public | locations
| table
| postgres=arwdDxt/postgres |
: coronel=a*r*w*d*D*x*t*/postgres
public | pepe
| sequence |
|
public | regions
| table
|
|
public | regions_region_id_seq | sequence |
|
(9 rows)
/***Practica***/
--Explique en detalle los permisos reflejados:
--Revoque el permiso de lectura a general.
________________________________________
2010 Manual De Administracin de PostgreSql
41
www.codigolibre.org
__________________________________________________________
www.codigolibre.org
__________________________________________________________
Access privileges
| Column access
privileges
----------+----------------------------+-----------+----------------------------------+----------------public | countries
| table
| postgres=arwdDxt/postgres | name:
: acolon=rw/postgres
public | departments
| table
|
|
public | employees
| table
|
|
public | job_history
| table
|
|
public | jobs
| table
|
|
public | locations
| table
|
|
public | regions
| table
|
|
public | regions_region_id_seq | sequence |
|
(8 rows)
--Para Revocar privilegios de una columna:
[[local]:5432/jparedes@HR] [] # REVOKE SELECT (name) on countries from acolon;
REVOKE
--Prueba:
[[local]:5432/acolon@HR] [] > SELECT name from countries limit 3;
ERROR: permission denied for relation countries
--Verificamos los privilegios:
[[local]:5432/acolon@HR] [] > \dp countries
Access privileges
Schema | Name | Type | Access privileges
| Column access privileges
----------+-------------+-------+----------------------------------+----------------------public | countries | table | postgres=arwdDxt/postgres | name: acolon=w/postgres
(1 row)
Cambiando EL propietario de una tabla:
ALTER TABLE suppliers OWNER TO bob;
Trabajando con Schema:
test=# CREATE SCHEMA foo;
CREATE SCHEMA
________________________________________
2010 Manual De Administracin de PostgreSql
43
www.codigolibre.org
__________________________________________________________
www.codigolibre.org
__________________________________________________________
www.codigolibre.org
__________________________________________________________
Esquemas especiales
Cada base de datos PostgreSQL contiene una serie de esquemas especiales requeridas por el
servidor y que no puede ser suprimida o alterada. Todos comienzan con pg_. Tenga en
cuenta que los nombres de esquema a partir de pg_ no estan permitidos.
Los esquemas especiales son:
* Pg_catalog: Contiene las tablas del sistema, las funciones y puntos de vista explotacion
de meta-informacion sobre la base de datos.
* Pg_temp_x: Contiene las tablas temporales que solo son visibles para una conexion de
base de datos concreta
* Pg_toast: Contiene manteca y dulces surtidos.
Desde PostgreSQL 7.4, tambien habra un INFORMATION_SCHEMA compuesto de
puntos de vista predefinidos que contienen informacion descriptiva sobre la base de datos
actual. Esta informacion se presenta en un formato definido en el estandar SQL y
proporciona informacion consistente y estandarizada sobre la base de datos y en cierta
medida las capacidades de la base de datos. El INFORMATION_SCHEMA es para
propositos de compatibilidad y probables, no seran relevantes para la mayoria de las
aplicaciones.
Limitaciones
Actualmente no es posible la "transferencia" objetos entre esquemas. soluciones posibles:
* Uso
CREATE TABLE AS new_schema.mytable SELECT * FROM old_schema.mytable
para transferir los datos y recrear todas las restricciones asociadas, indices, etc secuencias
manualmente.
* Crear la tabla en el nuevo esquema con la definicion actual y el uso
INSERT INTO new_schema.mytable SELECT * FROM old_schema.mytable;
para rellenar la tabla.
Cambiar el nombre de los esquemas se introducira en PostgreSQL 7.4 utilizando el esquema
ALTER .. RENOMBRAR CON ... de comandos.
________________________________________
2010 Manual De Administracin de PostgreSql
46
www.codigolibre.org
__________________________________________________________
www.codigolibre.org
__________________________________________________________
done
Como se puede ver en la actualidad hay dos variables necesarias para ejecutar el script que
son base de datos y nombre de usuario. El script anterior debe ejecutarse en el siguiente
formato. El nombre de la secuencia de comandos para pgaccess.sh eso es lo que se utiliza en
el ejemplo siguiente.
Leer usuario solo sintaxis de secuencias de comandos:
./pgaccess $database $username
Basta con sustituir $ base de datos con el nombre de la base de datos que estan
proporcionando el acceso y reemplazar $ nombre de usuario con el nombre del usuario que
se facilitara el acceso SELECT a la base de datos PostgreSQL.
Atencion
Debe usted asegurarse de que su base de datos no se
actualiza durante su backup. Si es necesario, pare el
postmaster, edite los permisos del fichero
/usr/local/pgsql/data/pg_hba.conf para permitirle
a usted solo su uso, y relance de nuevo postmaster.
Si esta usted actualizando un sistema existente, mate ahora el servidor de la base de datos.
Teclee:
$ ps ax | grep postmaster
Esto deberia listar los numeros de proceso para una serie de procesos, de un modo similar a:
263
777
? SW
p1 S
0:00 (postmaster)
0:00 grep postmaster
Teclee la siguiente lnea, reemplazando pid con el identificador (id) del proceso postmaster
(263 en el caso anterior). (No utilice el id del proceso "grep
postmaster".) (N. del T. tambien puede hacerlo con la lnea
$ ps ax | grep postmaster |grep -v grep
que le dara la misma salida, pero sin incluir la lnea correspondiente al mismo proceso
"grep". Fin de la N. del T.)
$ kill pid
Sugerencia: En sistemas que arrancan PostgreSQL en el durante la
secuencia de arranque de la maquina, probablemente se encontrara un
fichero startup que cumplira el mismo cometido. Por ejemplo, en un sistema
Linux RedHat, se deberia encontrar que
$ /etc/rc.d/init.d/postgres.init stop
funcione correctamente para parar la base.
________________________________________
2010 Manual De Administracin de PostgreSql
48
www.codigolibre.org
__________________________________________________________
Iniciando postmaster
No le puede suceder nada a una base de datos a menos que este corriendo el proceso
postmaster. Como administrador, hay una serie de cosas que debe recordar antes de iniciar
postmaster. Vea las secciones de instalacion y configuracion en este mismo manual. De
todos modos, si ha unstalado Postgres siguiendo las instrucciones de instalacion al pie de la
letra, lo unico que tendra que hacer para iniciar el proceso postmaster es introducir esta
simple orden:
% postmaster
Ocasionalmente, postmaster escribe mensajes que le seran de ayuda para resolver
problemas. Si desea ver los mensajes de diagnostico de postmaster, puede iniciarlo con la
opcion -d y redirigir la salida al archivo de registro:
% postmaster -d > pm.log 2>&1 &
Si no desea ver los mensajes, inicielo de la forma
% postmaster -S
y postmaster sera "S"ilencioso. Observe que al no haber el signo ampersand ("&") al final
del ultimo ejemplo, no se ejecuta como proceso de fondo.
Seguridad:
La seguridad de la base de datos esta implementada en varios niveles:
Proteccion de los ficheros de la base de datos. Todos los ficheros almacenados en la base
de datos estan protegidos contra escritura por cualquier cuenta que no sea la del
superusuario de Postgres.
Las conexiones de los clientes al servidor de la base de datos estan permitidas, por
defecto, unicamente mediante sockets Unix locales y no mendiante sockets TCP/IP. Ha de
arrancarse el demonio con la opcion -i para permitir la conexion de clientes no locales.
Las conexiones de los clientes se pueden restringir por direccion IP y/o por nombre de
________________________________________
2010 Manual De Administracin de PostgreSql
49
www.codigolibre.org
__________________________________________________________
Autentificacion de Usuarios:
Autentificacion es el proceso mediante el cual el servidor de la base de datos y el postmaster
se aseguran de que el usario que esta solicitando acceso a la base de datos es en realidad
quien dice ser. Todos los usarios que quieren utilizar Postgres se comprueban en la tabla
pg_user para asegurarse que estan autorizados a hacerlo. Actualmente, la verificacion de la
identidad del usuario se realiza de distintas formas:
Desde la shell del usuario
Un demonio que se lanza desde la shell del usuario anota el id original del usuario antes
de realizar un setuid al id del usuario postgres. El id original del usuario se emplea como
base para todo tipo de comprobaciones.
Desde la red
Si Postgres se instala como distribuido, el acceso al puerto TCP del postmaster esta
disponible para todo el mundo. El ABD configura el fichero pg_hba.conf situado en el
directorio PG_DATA especificando el sistema de autentificacion a utilizar en base al equipo
que realiza la conexion y la base de datos a la que se conecta. Ver pg_hba.conf(5) para
obtener una descripcion de los sistemas de autentificacion disponibles. Por supuesto la
autentificacion basada en equipos no es perfecta incluso en los sistemas Unix. Es posible,
para determinados intrusos, enmascarar el equipo de origen. Estos temas de seguridad estan
fuera del alcance de Postgres.
________________________________________
2010 Manual De Administracin de PostgreSql
50
www.codigolibre.org
__________________________________________________________
/****Ejemplo****/
/*********Shell***************/
--Si entramos al directorio data/base y queremos el oids para cual Bases Datos corresponde:
[postgres@jp base]$pwd
/var/lib/pgsql/data/base
[postgres@jp base]$ls
1 11563 11564 27369 27627 pgsql_tmp
--Comando a utilizar:
[postgres@jp ~]$oid2name
All databases:
Oid Database Name
Tablespace
---------------------------------------27627
HR
pg_default
16428
poma ts_pomavid_datos
16411
pomavid ts_pomavid_datos
11564
postgres
pg_default
27369 sacademico
pg_default
11563 template0
pg_default
1 template1
pg_default
www.codigolibre.org
__________________________________________________________
Atencion
Deben realizarse copias de seguridad de las bases de datos
regularmente. Dado que Postgres gestiona sus propios ficheros
en el sistema, no se recomienda confiar en los sistemas de copia
de seguridad del sistema para las copias de respaldo de las
bases de datos; no hay garantia de que los ficheros esten en un
estado consistente que permita su uso despues de la
restauracion.
Postgres proporciona dos utilidades para realizar las copias de seguridad de su sistema:
pg_dump para copias de seguridad de bases de datos individuales y pg_dumpall para
realizar copias de seguridad de toda la instalacion de una sola vez.
La copia de seguridad de una sola base de datos puede realizarse usando la siguiente orden:
% pg_dump nombredb > nombredb.pgdump
y puede ser restaurada usando
cat nombredb.pgdump | psql nombredb
Esta tecnica puede usarse para mover bases de datos a una nueva localizacion y para
renombrar bases de datos existentes.
________________________________________
2010 Manual De Administracin de PostgreSql
52
www.codigolibre.org
__________________________________________________________
% createdb nombredb
% cat nombrefichero.dump.* | pgsql nombredb
Por supuesto, el nombre del fichero (nombrefichero) y el contenido de la salida de pg_dump
no tiene por que coincidir con el nombre de la base de datos. Ademas, la base de datos
restaurada puede tener un nombre distinto, por lo que este mecanismo tambien es efectivo
para renombrar bases de datos.
Tratamiento de problemas :
El postmaster presenta ocasionalmente mensajes que pueden ser de ayuda en la
solucin de problemas. Si desea ver mensajes de depuracin de postmaster, puede iniciarlo
con la opcin -d y redirigir la salida a un fichero de registro:
% postmaster -d > pm.log 2>&1 &
Si no desea ver estos mensajes, puede escribir
% postmaster -S
y el postmaster entrar en modo S ilencioso. Ntese que no se incluye el simbolo & en
el ltimo ejemplo, ya que el postmaster se ejecutar en segundo plano.
Copy
[[local]:5432/postgres@postgres][]# \h COPY
Command: COPY
Description: copy data between a file and a table
Syntax:
COPY tablename [ ( column [, ...] ) ]
FROM { 'filename' | STDIN }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE NOT NULL column [, ...] ]
COPY { tablename [ ( column [, ...] ) ] | ( query ) }
________________________________________
2010 Manual De Administracin de PostgreSql
53
www.codigolibre.org
__________________________________________________________
TO { 'filename' | STDOUT }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE QUOTE column [, ...] ]
/****Ejemplo****/
--creemos una tabla de prueba
[[local]:5432/postgres@postgres][]# CREATE TABLE prueba (nombre varchar, apellidos
varchar);
--Creamos el archivo con las informaciones que queramos
-bash-4.0$ cat > prueba.cop
Jose
Mexy
Bianca
Joel
Jorge
--Vamos a esto....
--Realicemos el copy para la tabla prueba en la columna nombre
[[local]:5432/postgres@postgres][]# COPY prueba (nombre) from '/var/lib/pgsql/prueba.cop';
COPY 5
Time: 32.212 ms
--Veamos nuestra tabla
[[local]:5432/postgres@postgres][]# select * from prueba ;
nombre | apellidos
--------+----------Jose |
Mexy |
Bianca |
Joel |
Jorge |
(5 rows)
Time: 0.777 ms
--Nitido se efectuo correctamente
--Ahora haremos un DELETE a al tabla para borrar los datos introducidos
[[local]:5432/postgres@postgres][]# DELETE FROM prueba where nombre is not null;
DELETE 5
Time: 28.648 ms
[[local]:5432/postgres@postgres][]# SELECT * from prueba ;
nombre | apellidos
---------+----------(0 rows)
Time: 1.023 ms
________________________________________
2010 Manual De Administracin de PostgreSql
54
www.codigolibre.org
__________________________________________________________
Copias de seguridad:
Las copias de seguridad son esenciales para las recuperaciones frente a fallos, se deben
determinar las frecuencia conveniente, que ser funcin del tamao de los datos y de la
frecuencia con que son modificados, lo cual marcar la estrategia de copias de seguridad.
Algunas herramientas usadas para las copias de seguridad nos permitirn adems poder
trasladar datos de unas bases de datos a otras.
________________________________________
2010 Manual De Administracin de PostgreSql
55
www.codigolibre.org
__________________________________________________________
Adems hemos de asegurarnos de que los logs, ficheros WAL, estn en otro disco, o hacer
copias ms frecuentes de estos logs ya que en la versin 8 ya se pueden copiar
automticamente y usar en la recuperacin.
Existen tres formas principales de realizar copias de seguridad:
1-copia de seguridad de ficheros del SO
2-Volcado SQL usando las herramientas PostgreSQL: pg_dump (pg_dumpall) y pg_restore.
3-Volcado en lnea y recuperacin en el punto (PITR)
Hay que tener claro que lo que estamos tratando aqu es la copia de seguridad de las bases
de datos, de los clusters, no estamos haciendo copia de seguridad del software instalado, del
cual, conviene de vez en cuando hacer una copia de seguridad de los ficheros del SO.
Volcado SQL:
Los volcados de este tipo se realizan usando las herramientas que nos proporciona
PostgreSQL. Estos volcados son muy flexibles y de gran utilidad, nos permitirn hacer
copias de seguridad de toda la base de datos o de partes de ella, y luego, dada una copia de
seguridad, nos permitirn restaurar lo que
queramos.
Adems, estas herramientas sirven para la transmisin de datos entre bases de datos.
Las herramientas que se van a utilizar son:
pg_dump: vuelca una base de datos o parte de ella a un fichero, bien en texto plano o en un
formato propio de PostgreSQL. Se puede recuperar cualquier objeto que est en el fichero
aisladamente. El servidor debe estar en marcha.
pg_dumpall: vuelca un cluster completo
pg_restore: recupera los objetos volcados en una copia de seguridad que no se realizn en
texto plano sino en un formato propio de PostgreSQL.
________________________________________
2010 Manual De Administracin de PostgreSql
56
www.codigolibre.org
__________________________________________________________
www.codigolibre.org
__________________________________________________________
Ejemplos de uso:
-- Exportar un cluster:
$ pg_dumpall > micluster.sql
-- Exportar solo los datos
$ pg_dumpall -a > misdatos.sql
-- Exportar solo los roles / usuarios de una base de datos en otro servidor
-- que adems, tiene otro superusuario
$ pg_dump_all -g -h otroservidor -U otrosuperusuario -p 6432 > misusuarios.sql
-- Exportar solo los esquemas
$ pg_dumpall -s > misesquemas.sql
________________________________________
2010 Manual De Administracin de PostgreSql
58
www.codigolibre.org
__________________________________________________________
________________________________________
2010 Manual De Administracin de PostgreSql
59
www.codigolibre.org
__________________________________________________________
________________________________________
2010 Manual De Administracin de PostgreSql
60
www.codigolibre.org
__________________________________________________________
www.codigolibre.org
__________________________________________________________
Crontab
El crontab, es un archivo en donde podemos configurar tareas para que se ejecuten automticamente
en nuestro sistema, digamos por ejemplo descargar un archivo de respaldo diariamente, o borrar
ciertos archivos peridicamente, ejecutar un script que haga algo, etc, digamos que podemos
automatizar las tareas, para no estar hacindolas a mano.
Qu es cron?
Cron es el nombre del programa que permite a usuarios Linux/Unix ejecutar automticamente
comandos o scripts (grupos de comandos) a una hora o fecha especfica. Es usado normalmente
para comandos de tareas administrativas, como respaldos, pero puede ser usado para ejecutar
cualquier cosa. Como se define en las pginas del manual de cron (#> man cron) es un demonio que
ejecuta programas agendados.
Iniciar cron
Cron es un demonio (servicio), lo que significa que solo requiere ser iniciado una vez, generalmente
con el mismo arranque del sistema. El servicio de cron se llama crond. En la mayora de las
distribuciones el servicio se instala automticamente y queda iniciado desde el arranque del sistema,
se puede comprobar de varias maneras:
/***Ejemplo****/
[root@guerrero ~]# /etc/init.d/crond status
crond (pid 1320) is running...
________________________________________
2010 Manual De Administracin de PostgreSql
62
www.codigolibre.org
__________________________________________________________
--Tambien con
/etc/rc.d/init.d/crond status
Usa cualquiera de los dos dependiendo de tu distro
--o si tienes el comando service instalado:
[root@guerrero ~]# service crond status
crond (pid 1320) is running...
--se puede tambin revisar a travs del comando ps:
[root@guerrero ~]# ps -ef | grep crond
root 14320 1 1 15:51 ? 00:00:00 crond
root 14328 4304 0 15:51 pts/0 00:00:00 grep crond
--si por alguna razn, cron no esta funcionando:
[root@guerrero ~]# /etc/init.d/crond start
Starting crond: [ OK ]
--Si el servicio no estuviera configurado para arrancar desde un principio, bastara con agregarlo
con el comando chkconfig:
[root@guerrero ~]# chkconfig --level 35 crond on
Usando cron
Hay al menos dos maneras distintas de usar cron: La primera es en el directorio /etc, donde muy
seguramente encontrars los siguientes directorios:
cron.hourly
cron.daily
cron.weekly
cron.monthly
Si se coloca un archivo tipo script en cualquiera de estos directorios, entonces el script se ejecutar
cada hora, cada da, cada semana o cada mes, dependiendo del directorio.
Para que el archivo pueda ser ejecutado tiene que ser algo similar a lo siguiente:
#!/bin/sh
#script que genera un respaldo
cd /usr/documentos
tar czf * respaldo
cp respaldo /otra_directorio/.
Ntese que la primera lnea empieza con #!, que indica que se trata de un script shell de bash, las
dems lneas son los comandos que deseamos ejecute el script. Este script podra nombrarse por
ejemplo respaldo.sh y tambin debemos cambiarle los permisos correspondientes para que pueda
ser ejecutado, por ejemplo:
#> chmod 700 respaldo.sh
#> ls -l respaldo.sh
-rwx------ 1 root root 0 Jul 20 09:30 respaldo.sh
La "x" en el grupo de permisos del propietario (rwx) indica que puede ser ejecutado.
Si este script lo dejamos en cron.hourly, entonces se ejecutar cada hora con un minuto de todos los
das, en un momento se entender el porque.
________________________________________
2010 Manual De Administracin de PostgreSql
63
www.codigolibre.org
__________________________________________________________
Como segundo modo de ejecutar o usar cron es a travs de manipular directamente el archivo
/etc/crontab. En la instalacin por defecto de varias distribuciones Linux, este archivo se ver a algo
como lo siguiente:
[root@guerrero ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
#|||||
# * * * * * command to be executed
Las primeras cuatro lneas son variables que indican lo siguiente:
SHELL es el 'shell' bajo el cual se ejecuta el cron. Si no se especifica, se tomar por defecto el
indicado en la lnea /etc/passwd correspondiente al usuario que este ejecutando cron.
PATH contiene o indica la ruta a los directorios en los cuales cron buscar el comando a ejecutar.
Este path es distinto al path global del sistema o del usuario.
MAIL TO es a quien se le enva la salida del comando (si es que este tiene alguna salida). Cron
enviar un correo a quien se especifique en este variable, es decir, debe ser un usuario vlido del
sistema o de algn otro sistema. Si no se especifica, entonces cron enviar el correo al usuario
propietario del comando que se ejecuta.
HOME es el directorio raz o principal del comando cron, si no se indica entonces, la raz ser la
que se indique en el archivo /etc/passwd correspondiente al usuario que ejecuta cron.
Los comentarios se indican con # al inicio de la lnea.
Despus de lo anterior vienen las lneas que ejecutan las tareas programadas propiamente. No hay
lmites de cuantas tareas pueda haber, una por rengln. Los campos (son 7) que forman estas lneas
estn formados de la siguiente manera:
Minuto Hora DiaDelMes Mes DiaDeLaSemana Usuario Comando
Un asterisco * como valor en los primeros cinco campos, indicar inicio-fin del campo, es decir
todo. Un * en el campo de minuto indicar todos los minutos.
www.codigolibre.org
__________________________________________________________
Se tiene entonces, dos situaciones, generar directamente el archivo crontab con el comando:
/***Ejemplo****/
[root@guerrero ~]# crontab -e
Con lo cual se abrira el editor por default (generalemente vi) con el archivo llamado crontab vacio y
donde el usuario ingresar su tabla de tareas y que se guardar automticamente como
/var/spool/cron/usuario.
16 8 * 1-5 ls /etc/lvm
# me listara el contenido de /lvm a las 4:20 de todos los 8 sea de lunes a viernes
crontab: installing new crontab
--Revisemos:
[root@guerrero ~]# cat /var/spool/cron/root
16 8 * 1-5 ls /etc/lvm
# me listara el contenido de /lvm a las 4:20 de todos los 8 sea de lunes a viernes
--Podemos comprobar el resultado del cron revisando:
[root@guerrero ~]# cat /var/spool/mail/root
--Super!!
________________________________________
2010 Manual De Administracin de PostgreSql
65
www.codigolibre.org
__________________________________________________________
COMANDO chkconfig:
El comando chkconfig se usa para cambiar, actualizar y consultar informacin de runlevel para los
servicios del sistema. chkconfig es un comando de administrador.
SINTAXIS:
La sintaxis es
chkconfig [opciones]
/****Ejemplo****/
--Nos lista los niveles de ejecucion y el estado del servicio (si esta activo o no).
[root@guerrero ~]# chkconfig --list
--Veamos el estado del servicio iptables
[root@guerrero ~]# chkconfig --list iptables
iptables
0:off
1:off
2:on
3:on
4:on
5:on
6:off
5:off
6:off
________________________________________
2010 Manual De Administracin de PostgreSql
66
www.codigolibre.org
__________________________________________________________
0:off
1:off
2:off
3:on
4:on
5:on
6:off
--Chevere!
________________________________________
2010 Manual De Administracin de PostgreSql
67
www.codigolibre.org
__________________________________________________________
www.codigolibre.org
__________________________________________________________
Por ejemplo:
restore_command = cp /mnt/server/archivedir/%f %p
recovery_target_time: hasta qu momento
recovery_target_xid: hasta una transaccin determinada
recovery_target_inclusive: si los dos casos anteriores son inclusive o no.
1
1
________________________________________
2010 Manual De Administracin de PostgreSql
69
www.codigolibre.org
__________________________________________________________
XID est limitado a 32 bits, es decir cuando llega a 232 se reinicializa, tiene un
funcionamiento circular, si esto llega a ocurrir, se perderan datos. Existen adems dos XID
especiales: BootstrapXID y FrozenXID. Cada vez que se ejecuta VACUUM se guarda
informacin que se puede consultar:
select datname, age(datfrozenxid) from pg_database;
As, si se ejecuta poco el vacuum, la base de datos avisa al administrador, se deben limpiar
las tablas una vez cada mil millones de transacciones. El caso es que se recomienda hacer
VACUUM diario.
AUTOVACUUM:
Para evitar los problemas con la ejecucin de VACUUM, a partir de la versin 8,
PostgreSQL incorpora un proceso de fondo AUTOVACUUM que se ejecuta
peridicamente cuando est habilitado y l mismo comprueba las tablas con alta carga de
actualizaciones. Hay una serie de parmetros en postgresql.conf para modificar el
comportamiento de este proceso.
Reindex:
Otras tareas importantes son las reindexaciones, ya que pueden haber ndices incorrectos por
problemas en el software o hardware o porque haya que optimizar el ndice debido a que
tiene pginas muertas que hay que eliminar.
Ejemplos:
-- reparar un indice:
reindex index nomindice;
-- reparar todos los ndices de una tabla:
reindex table nomtabla;
-- reparar los ndices del catlogo de base de datos, para esto
-- hay que levantar postmaster sin que use los ndices y luego reindexar
$ export PGOPTIONS="-P: // significa lo mismo que $ postmaster -P
$ psql bd
bd=# reindex database bd;
-- reparar los ndices del catlogo compartido (pg_database, pg_group, pg_shadow,
-- etc.). No se debe levantar postmaster si no que hay que arrancar un proceso
-- autnomo:
$ postgres -D $PGDATA -P prueba
backend> reindex index indice_catalogo_compartido
Se puede introducir en el cron que realice ciertas operaciones de mantenimiento:
$ crontab -e
// se abre el fichero de cron y aadimos estas lneas:
0 3 * * * psql -c 'VACUUM FULL;' test
________________________________________
2010 Manual De Administracin de PostgreSql
70
www.codigolibre.org
__________________________________________________________
0 3 * * * vacuumdb -a -f
0 30 * * * reindexdb bd
ATENCIN!, problema entre Reindex y Archivado WAL:
Hay que tener presente que cuando reindexamos, se rehacen muchos ficheros, con lo que
hay que llevar especial cuidado si el archivado WAL est activado, pues una reindexacin
de toda la base de datos implica que se puede duplicar el tamao de los ficheros de la base
de datos, ya que el sistema de WAL crea archivos de log para cada cambio.
Monitorizacion:
La monitorizacin de la actividad del servidor PostgreSQL se puede hacer con herramientas
del SO o con herramientas propias de la base de datos.
Comandos del Sistema Operativo (Linux / Unix):
La monitorizacin se debe fijar sobre todo en:
Uso de swap (free, vmstat, etc.)
Free muestra la cantidad de memoria libre y usada que tiene el sistema. Por una
parte muestra la memoria fsica y por otra la swap, tambin muestra la memoria
cach y de buffer consumida por el Kernel.
vmstat : Es muy similar a top ya que es un condensado de los procesos del sistema,
para que esta herramienta se vuelva dinmica se deben especificar los argumentos:
vmstat -n <numero de segundos por actualizacion >
iostat informa repetidamente de las estadsticas de E/S para cada disco activo del
sistema.
/*********PROCESOS***************/
--Vamos a ver los procesos generados por el Usuario PostgreSQL:
________________________________________
2010 Manual De Administracin de PostgreSql
71
www.codigolibre.org
__________________________________________________________
________________________________________
2010 Manual De Administracin de PostgreSql
72
www.codigolibre.org
__________________________________________________________
06/05/2010
________________________________________
2010 Manual De Administracin de PostgreSql
73