Dba-PostgreSQL

Academia De Software Libre

__________________________________________________________

www.codigolibre.org

PostgreSql

________________________________________ 2010 Manual De Administración de PostgreSql 1

Academia De Software Libre
__________________________________________________________

www.codigolibre.org

Clase de Administración PostgreSql

Documentación Realizada Por: Ing. Jose Paredes DBA-Senior Meidy Alvarez DBA-Junior

________________________________________ 2010 Manual De Administración de PostgreSql 2

Academia De Software Libre
__________________________________________________________

www.codigolibre.org

ÍNDICE
• • • • • • • • • • • • • • • • • • • •

• • •

• • • • • • • • • • • • • • • • • •

Dedicatoria..........................................................................................................5 Copyright.............................................................................................................6 Prefacio.................................................................................................................6 ¿Qué se espera de un SGBD?...............................................................................7 ¿Qué exigiremos a un SGBD?..............................................................................7 Gestión de los Recursos del kernel.......................................................................7 psql.......................................................................................................................8 Aplicaciones servidor...........................................................................................8 Arquitectura .........................................................................................................8 El proceso Postmaster..........................................................................................9 La memoria compartida.......................................................................................9 Almacenamiento físico.........................................................................................9 Ficheros................................................................................................................9 Otros ficheros.......................................................................................................9 Directorios..........................................................................................................10 Creación del cluster de bases de datos: initdb....................................................10 Creación del cluster............................................................................................11 Modificación de template1 + añadir extensiones-contrib..................................12 Puesta en marcha y parada del servidor.............................................................12 Internacionalización y localización....................................................................13 • Ventajas..................................................................................................13 Para ver cómo está configurado en el SO ejecutar.............................................13 Procesamiento de instrucciones.........................................................................14 Gestión de transacciones....................................................................................15 • Atomicidad (atomicity)...........................................................................15 • Consistencia (consistency)......................................................................15 • Aislamiento (isolation)............................................................................16 • Persistencia (durability)..........................................................................16 Seguridad en PostgreSQL..................................................................................17 Seguridad en la manipulación de los ficheros....................................................17 Respecto a las conexiones locales vía sockets...................................................17 Seguridad en el acceso de los clientes................................................................18 Conexión local: usando los sockets del dominio Unix......................................18 Conexión remota sin encriptar usando TCP/IP (SSL y no SSL)........................19 Conexión remota encriptada SSL usando TCP/IP (solo SSL)...........................19 Esquema lógico..................................................................................................23 Creación de roles (usuarios)...............................................................................24 Listando Usuarios..............................................................................................27 Modificando Usuarios.......................................................................................27 Permitir Usuario crear BD.................................................................................29 Cambiando Nombre a un Usuario......................................................................29 Cambiar contraseña...........................................................................................29 Eliminando Usuario............................................................................................29 Creando Grupo...................................................................................................29 Agregando o eliminando un Usuario de Grupo..................................................30 Viendo los Grupos..............................................................................................30
________________________________________ 2010 Manual De Administración de PostgreSql

3

............ comando crontab.....................................................................................................................................................................35 Cambiando EL propietario de una tabla............................................................................................................................................45 Esquemas especiales................................................62 Crontab...........70 Monitorizacion.............................................................................................................................................................................................................................31 Creación de tablespaces................................................66 Fallos en memoria secundaria (disco)...........................................................................................................................................46 Administrar privilegios de copia de seguridad........................34 Asignando Privilegios...............................55 Copias de seguridad de ficheros del SO............................56 Volcado SQL....................................................................50 Acceso a la base de datos.......................71 ________________________________________ 2010 Manual De Administración de PostgreSql 4 ...........................................................................................................................................................................58 Recuperación con pg_restore.............................................31 Creación de bases de datos.............67 Tareas administrativas: Vacuum …..............70 Reindex.....................................................................................................................................................................................codigolibre.............Academia De Software Libre __________________________________________________________ www....................................................................64 • Controlando el acceso a cron..................35 Quitando Privilegios.................................................................43 Listar los Objetos en Schema Public.....................32 Esquemas............................................58 Scripts Basico de hacer Backup.............................................................................................48 Iniciando postmaster..........................................................................................................................................................................................50 Creación de una base de datos......62 • Usando cron..................................................53 Mantenimiento del fichero de seguimiento..........................................................................56 Recuperación con psql..........................................................................69 AUTOVACUUM............................................................................................................................................................55 Copias de seguridad.....................53 Copy.........................56 Desventajas de este método..........................................30 Eliminando Grupo...................................67 Volcado en línea y recuperación PITR.....................................................45 Eliminando Schema.............................................45 Funciones de Schema...............................................................................................................................46 Limitaciones..........................63 • Ejecutando Cron con múltiples usuarios....................................................................................................................................................................................................................44 Permisos y Seguridad en Schema........................................33 Permisos.....................................................................................................................................................................................................................................................62 • ¿Qué es cron?.........................................53 Tareas administrativas: Copias de seguridad y recuperación..............................52 Tratamiento de problemas....................................................................................................org • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • Re-Nombrando Grupo..........................................................................................46 Administrando desde GNU/Linux....................................................................................................................................................51 Bases de datos grandes..................................49 Autentificación de Usuarios........................65 COMANDO chkconfig.62 • Iniciar cron......................................................................................................................................................................................

persona de grandes principios y vastos conocimientos. por eso sea siempre bendecido por su calidez y gran visión. Alvarez Guerrero ________________________________________ 2010 Manual De Administración de PostgreSql 5 . Meidy E.org Dedicatoria Una mención de forma especial para Antonio Perpiñán.codigolibre. No todo hombre tiene el valor de aprender y mucho menos de enseñar. Fundador del Movimiento de Software Libre en República Dominicana y en América Latina.Academia De Software Libre __________________________________________________________ www. “El objeto más noble que puede ocupar el hombre es ilustrar a sus semejantes”.

codigolibre. distribuir y redistribuir esta documentación. y aplicarlos a este y otros motores libres.org Copyright Esta documentación es regida por los reglamentos de la GNU Free Documentation License y la GNU General Public License v3. aprender.Academia De Software Libre __________________________________________________________ www. siéntase libre de copiar. Prefacio En estas paginas se plasma de manera Teorico/Practico los conocimientos necesarios para convertirse en un Administrador de Base de Datos. ________________________________________ 2010 Manual De Administración de PostgreSql 6 . modificar. usando Postgresql. la finalidad es instruir de manera interactiva todo lo que se debe saber para un manejo eficiente de Postgresql. haga uso de su derecho como si fuere su deber. Esta es una etapa de varias en este camino hacia la carrera profesional de la administración de base de datos y análisis de estructuras de almacenamiento de registros de datos.

Estos recusos afectan a la memoria compartida y a los semáforos. Normalmente. Parámetros de PostgreSQL que afectan a la memoria compartida: Corresponden con una órden de SQL ejecutadas dentro de la base de datos. Gestion de los Recursos del kernel: La instalación de PostgreSQL requiere la comprobación de que el servidor será capaz de soportarlo. • createlang: define un nuevo lenguaje procedural en una base de datos. etc. los valores por defecto son más que suficientes. usando para ello un lenguaje de consulta y manipulación. Ofrezca a los usuarios la capacidad de consultar los datos y modificarlos. Portabilidad: Exportación e importación de datos de una plataforma a otra.Academia De Software Libre __________________________________________________________ www. concurrencia. Rendimiento: Recuperación. • createdb:crea una base de datos. protegiéndolo contra accidentes o utilización no autorizada. de una manera eficiente. reorganiza cluster de tablas. para saber más detalles. actualización. Aplicaciones clientes. consultar el manual de cada programa tal como se hace en Linux / Unix: • clusterdb: equivalente al comando CLUSTER de SQL. Brinde soporte al almacenamiento de cantidades voluminosas de datos durante un largo período. Si el sistema no puede proporcionar los recursos que requiere el servidor. Será tarea del administrador de sistemas cambiar los valores de los parámetros si es necesario. los valores por defecto son suficientes.org ¿Qué se espera de un SGBD? De un Sistema de Gestión de Bases de Datos esperamos: Permita a los usuarios crear otras bases de datos y especificar su esquema por medio de algún lenguaje de definición. Controle el acceso concurrente. • createuser: creación de usuarios.codigolibre. Para una instalación normal. Disponibilidad: 7x24. ________________________________________ 2010 Manual De Administración de PostgreSql 7 . ¿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. éste no se puede poner en marcha y devuelve un error. Universalidad: Múltiples tipos de datos (multimedia).

Lanza procesos de atencion de demanda.org • • • • • • • dropdb: borrar una base de datos. dropuser: borrar un usuario. reindexdb: reindexa una base de datos. • postmaster: servidor de base de datos PostgreSQL multiusuario. realizando las operaciones sobre la base de datos a solicitud de los clientes. pg_config: recupera información sobre la versión instalada de PostgreSQL. el proceso postmaster crea un proceso postgres. El método de ingreso puede ser mediante la inserción directa del código en la consola. Es una herramienta de tipo frontend que permite describir sentencias SQL. droplang: borrar un lenguaje procedural. Provee de diversos meta-comandos para la ejecución de las sentencias. Es la herramienta canónica para la ejecución de sentencias SQL a través del shell del SO. pg_ctl: inicia. • • • • ipcclean: libera la memoria compartida y los semáforos de un servidor PostgreSQL. ________________________________________ 2010 Manual De Administración de PostgreSql 8 . Levanta la memoria compartida. normalmente por el puerto 5432.codigolibre. para o reinicia un servidor PostgreSQL. La comunicacion entre BackEnd/FrontEnd se realiza mediante TCP/IP. Por cada una de estas aplicaciones cliente. pg_dump: extrae una base de datos en un fichero script o en otros formatos.Academia De Software Libre __________________________________________________________ www. Esta al tanto de solicitudes de nuevas conexiones. gestionando estos ficheros. El proceso Postmaster: Es el proceso inicial. Arquitectura PostgreSQL funciona con una arquitectura Cliente/Servidor. • pg_restore: restaura una base de datos desde un fichero creado con pg_dump. Aplicaciones servidor: • initdb: crea un cluster de base de datos. ejecutarlas y visualizar sus resultados. vacuumdb: reorganiza y analiza una base de datos. pg_dumpall: extrae un cluster de base de datos en un fichero script. donde los ficheros pueden pertenecer a varias bases de datos. pg_resetxlog: reinicia el write-ahead log y otras informaciones de control de un cluster de base de datos. pg_controldata: muestra información de control de un cluster de base de datos. un proceso servidor (postmaster) y una serie de aplicaciones cliente que realizan solicitudes de acciones contra la base de datos a su proceso servidor.5432).PGSQL. así como diversas opciones tipo shell propias de la herramienta. Realiza el enlazado con los archivos de datos. • postgres: corre un servidor PostgreSQL en modo "single-user". o la ejecución de sentencias dentro de un archivo de texto.s. ecpg: SQL C preprocesador embebido. psql: Terminal interactivo de PostgreSQL. Gestiona los accesos multiusuario y multiconexion. creando un socket (/tmp/.

y cada postmaster escuchara por un puerto diferente. cada uno tendra su postmaster.done: si se quiere o se ha hecho una recuperacion. maneja otras estructuras internas. recovery. que puede gestionar varias bases de datos. 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¡š.Academia De Software Libre __________________________________________________________ www. • pg_hba.conf. Gestiona la cache del disco. • 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.codigolibre.conf: fichero accesorio al anterior. PGDATA que apunte al directorio donde se crea el cluster. El cluster se crea en un directorio data dentro del directorio donde se ha instalado postgres.conf: fichero de configuracion de la autenticacion de los clientes y usuarios y del acceso a las bases de datos del cluster. apt-get. La estructura fisica del cluster se crea con el programa initdb. determina como se realiza la autenticacion ident que contiene la correspondencia entre usuarios del Sistema Operativo y de PostgreSQL. template0. Almacenamiento fisico: En un servidor se crean uno o varios clusters de bases de datos. • pg_ident. template1 y postgres. • postmaster. • recovery. donde se lanza un proceso postmaster.org La memoria compartida: Gestiona los recursos entre procesos backend. Ficheros: • postgresql. En un servidor.conf: fichero de configuracion principal. se define una variable de entorno. De esta manera podemos definir el concepto de CLUSTER DE BASE DE DATOS. Normalmente. contiene la asignacion a los parametros que configuran el funcionamiento del servidor. En las instalaciones automáticas a partir de paquetes (rpm. contiene el PID del proceso postmaster. como una instancia de PostgreSQL. con este programa se determina la ubicacion fisica y el juego de caracteres. ________________________________________ 2010 Manual De Administración de PostgreSql 9 . etc) o en Windows. pueden haber varios cluster.opts: contiene las opciones con las que se ha iniciado el postmaster. se crea un cluster automáticamente con tres bases de datos.

se debe indicar al arrancar el postmaster en qué fichero se hace el seguimiento. algunos inmutables (establecidos en la creación del cluster) y otros variables (establecidos en la puesta en marcha). Se implementan como un conjunto de segmentos (ficheros) de un tamaño de 16Mb y divididos en páginas de 8Kb. • pgstat. dentro hay un fichero por cada tabla o indice de una base de datos.org Directorios: • base: las plantillas y las bases de datos. Contiene los diarios de escritura adelantada. • template0 (1): contiene las definiciones de las tablas del sistema. Nunca se debe modificar ni intentar conectarse a ella.stat: fichero usado por el monitor de estadísticas. • pg_tblspc: información sobre los tablespaces. ________________________________________ 2010 Manual De Administración de PostgreSql 10 . que estén correctos. ya que esta por si template1 se corrompe. funciones y tipos estandar. • pg_clog: ficheros de diario para las transacciones (estado de cada transacción). los numeros corresponden a los OIDs de las tablas o indices. en progreso o abortada. se puede modificar su estructura. usado para los bloqueos compartidos de filas. contiene un directorio por cada base de datos. Un diario de confirmación refleja el estado de cada transacción: confirmada. para usarlos en las recuperaciones. etc. • pg_control: fichero con parámetros del cluster. etc. • pg_log: ficheros de seguimiento del servidor.codigolibre. lo primero que hay que realizar es la creación de un cluster. Se crea en la versión de Windows. • pg_xlog: ficheros de diario del servidor (WAL).Academia De Software Libre __________________________________________________________ www. indices. pg_database. • global: tablas e indices del catálogo comunes a todas las bases de datos. vistas. • pg_twophase: ficheros de estado para las transacciones preparadas. en caso de cambios de ficheros. en la de Linux. Creación del cluster de bases de datos: initdb Después de instalar PostgreSQL. teniendo en cuenta que en un servidor. anadiendo tablas. Contiene los ficheros de confirmacion. Cuidado porque en linux/unix contiene enlaces a los directorios donde se crean los tablespaces y hay que controlar. se pueden crear todos los cluster que se quieran. • pg_multixact: contiene datos sobre el estado multi-transaccional. funciones. • template1 (N): base de datos plantilla para crear nuevas bases de datos. • pg_subtrans: para realizar los “savepoints “ en medio de transacciones. Es la que se usara como plantilla para crear otras bases de datos. catalogo compartido: pg_shadow (usuarios).

ahora. por ejemplo. template1 y postgres.codigolibre. una vez arrancada la instancia.org Creacion del cluster: Ya vimos en un punto anterior cómo se crea un cluster de base de datos. Al terminar de crear el cluster nos responde que ya podemos iniciar el postmaster de este cluster de dos modos: $ postmaster -D $PGDATA o pg_ctl -D $PGDATA -l $PGLOG start Lo hacemos del segundo modo. podemos conectarnos desde nuestro servidor a la base de datos usando el psql: Si queremos parar el servidor: $ pg_ctl stop --Siqueremos ver la informacion inicializada por initdb: [postgres@jp ~]$pg_controldata data/ pg_control version number: Catalog version number: Database system identifier: Database cluster state: pg_control last modified: Latest checkpoint location: Prior checkpoint location: Latest checkpoint's REDO location: Latest checkpoint's TimeLineID: Latest checkpoint's NextXID: Latest checkpoint's NextOID: Latest checkpoint's NextMultiXactId: Latest checkpoint's NextMultiOffset: Time of latest checkpoint: Minimum recovery ending location: Maximum data alignment: Database block size: Blocks per segment of large relation: WAL block size: Bytes per WAL segment: Maximum length of identifiers: Maximum columns in an index: Maximum size of a TOAST chunk: Date/time type storage: 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 Administración de PostgreSql 11 .Academia De Software Libre __________________________________________________________ www. en este curso. vamos a crear el siguiente cluster: initdb --pgdata=$PGDATA --encoding=LATIN1 --locale=es_ES Con este proceso se han creado tres bases de datos: template0 (que ya se ha dicho que no se debe modificar ni debemos conectarnos a ella).

por ejemplo. template1 es una plantilla para crear otras bases de datos.org Float4 argument passing: Float8 argument passing: by value by reference Modificacion de template1 + añadir extensiones-contrib: Hay que tener en cuenta ciertos aspectos antes de empezar a trabajar con nuestras bases de datos. lenguajes. la completemos con todos aquellos elementos que consideremos que deben estar en todas las bases de datos que creemos. no existe el plpgsql. Estos módulos los hemos añadido. Por ejemplo. conviene que. ¿va a ser postgres nuestra base de datos o la reservamos para pruebas o como plantilla y no usamos template1?. para instalarlo. dblink. para poder instalarlos hay que ir al directorio $PGSRC/contrib. ¿vamos a crear más bases de datos? Para modificar template1 no hay más que conectarse a ella y ejecutar los scripts de base de datos que hagan falta. Pero además. las bases de datos se suelen crear sin lenguajes. módulos opcionales (tsearch2. Ejemplos de opciones que se tienen que instalar según los requerimientos de las aplicaciones: tsearch2: soporte para indexación usando GiST lo: mantenimiento de tipos de datos LOB vacuumlo: vacuum para objetos LOB dblink: poder ejecutar sentencias en otras bases de datos Puesta en marcha y parada del servidor: La puesta en marcha del servidor se puede hacer de forma manual con dos comandos: pg_ctl: facilidad para la puesta en marcha. ejecutamos desde el sistema operativo: $ createlang plpgsql template1 $ createlang plpgsql postgres Lo ejecutamos también en postgres para que tenga las mismas opciones. parada y reconfiguración del servidor. Más adelante veremos cómo se instalan estas opciones. antes de crear nuevas bases de datos. en la instalación de PostgreSQL en Windows.Academia De Software Libre __________________________________________________________ www. Hace uso ________________________________________ 2010 Manual De Administración de PostgreSql 12 . lo. etc). pero no en la de Linux. tablas comunes.codigolibre. etc. en el mundo del software libre se crea código para añadir nuevas funcionalidades. En $PGSRC/contrib hay un fichero README que indica el uso de cada una de estas opciones.

Academia De Software Libre __________________________________________________________ www. Internacionalización y localización: Internacionalización: proceso de desarrollo de software de forma que pueda ser usado en distintas ubicaciones. Operaciones: • • • • start: puesta en marcha del servidor. Clasificacion de caracteres: mayusculas. etc. para ver cuáles están disponibles: $ locale -a En cuanto a los juegos de caracteres: Soporta distintos tipos: byte simple o multibyte. stop: parada del servidor.codigolibre. Mensajes en varios juegos de caracteres. postmaster: proceso servidor de base de datos. que provoca que recargue toda la informacion de configuracion. Diversos tipos de ordenaciones. • kill. ________________________________________ 2010 Manual De Administración de PostgreSql 13 . puntuacion. registrar como servicio o eliminar el servicio. unregister: opciones para la version de Windows para matar.org de la instrucción que actúa sobre el servidor postgres. El comando pg_ctl es el que se usa normalmente. Ventajas: 1 2 3 4 5 Mensajes en varios idiomas. Visualizacion de datos de usuario en diversos juegos de caracteres. porque permite controlar más aspectos que el comando postmaster. acentos. • status: comprueba si hay un postmaster en marcha y muestra el PID y sus opciones de puesta en marcha. register. Para ver cómo está configurado en el SO ejecutar: $ locale Que nos mostrará la configuración activa. reload: envia al postmaster una senal SIGHUP. restart: parada del servidor seguida de puesta en marcha. Algunas opciones de configuracion requieren parar el servidor. Localización: proceso de adaptación de una aplicación para que sea usada en una ubicación específica. podemos cambiar la configuración entre cualquiera de las que estén instaladas en el sistema operativo.

Mirar si los datos están en los buffers compartidos y recuperar el valor antiguo.Se realiza la modiciación y se escribe en los shared buffers. ¡todavía no se han escrito los datos en disco! ________________________________________ 2010 Manual De Administración de PostgreSql 14 . colección de buffers de 8Kb en la memoria compartida y que sirven como caché de las páginas de los ficheros y sentencias que se han usado recientemente. Los bloques de buffers modificados se llaman "sucios" y se colocan en una lista sucia. Procesamiento de instrucciones: Se produce un diálogo básico entre el proceso front-end (aplicación) y el proceso back-end (postgres). Para el procesamiento de instrucciones PostgreSQL usa la caché de la base de datos (shared buffers). El servidor realiza en análisis y el proceso postgres responde OK o devuelve error.codigolibre. Por último la aplicación solicita la recuperación de los datos y el servidor responde con los resultados de la instrucción.Si no están recuperalos de los ficheros de datos y ponerlos en los shared buffers. La lista sucia se vacía. 4. Por ejemplo. en caso contrario. Esta memoria se reserva cuando se pone en marcha el servidor. devolviendo Ok o error. Se produce una conversión automática entre servidor / cliente (en la tabla pg_conversion están las conversiones por defecto.Academia De Software Libre __________________________________________________________ www.Se escribe el valor nuevo en el buffer WAL. por ejemplo. al ejecutar un Update de una fila: 1. 2. Si la instrucción es una consulta. La lista sucia controla todas las modificaciones de datos que se hacen en la caché y que no se han vaciado al disco. 4. 3. La aplicación envía una instrucción al proceso postgres. La aplicación solicita la ejecución y el servidor la realiza. 3. 2. realizando esta operación tantas veces como sea necesario para ejecutar una instrucción. Si la instrucción es una actualización de datos entran en juego también los ficheros de diario (WAL) y los buffers de diario (buffers WAL). que consta básicamente de los siguientes pasos: 1. el servidor siempre lee primero si tiene estos bloques de datos en la caché.org el cluster puede estar en un conjunto de caracteres y la base de datos en otro: $ initdb -E unicode $ createdb -E latin1 base1 SQL# create database base2 with encoding “win “. cuando se produce un punto de control (checkpoint) o simplemente se llena la lista. los lee del disco y los copia a la cache.

si culmina con éxito. los resultados producidos por la transacción se guardan en la base de datos. Si alguna operación falla. con lo que solo se puede resolver deshaciendo la transacción. existen restricciones diferidas (ser verifican al final de la transacción) o inmediatas (se verifican en cada operación). En realidad. Solución En PostgreSQL podemos hacer que un grupo de sentencias SQL se ejecuten dentro de una transacción. la transacción queda en estado latente. en lugar de COMMIT. Aislamiento (isolation). la transacción no se llegaría a completar. Si todas las operaciones se realizan con éxito. se incumpliera alguna de estas reglas.codigolibre. Consistencia: Una base de datos es una herramienta para modelar y registrar una realidad cambiante. De esta forma aseguramos que se ejecutan todas o ninguna. algunas consultas no se pueden realizar y las actualizaciones no tendrán efecto. consistente con las reglas. Esto garantiza que una base de datos siempre permanezca en un estado válido. lo importante aquí. Durante las transacciones. es decir. que significa indivisible. Persistencia (durability). La realidad modelada así. ________________________________________ 2010 Manual De Administración de PostgreSql 15 . Sin embargo. en este caso. todas las operaciones son deshechas (rollback). a otro en el que también las cumple. Si al ejecutar una transacción. aunque no usemos BEGIN. Si llegados a algún punto dentro de la transacción necesitamos deshacerla completamente. PostgreSQL trata cualquier sentencia aislada como si ésta se ejecutara dentro de una pequeña transacción.org Gestión de transacciones: PostgreSQL cumple las reglas ACID: 1 2 3 4 Atomicidad (atomicity). un COMMIT. encerrándolas entre las sentencias BEGIN y COMMIT. Atomicidad: La palabra se deriva de átomo. cada sentencia incorpora implícitamente un BEGIN y. puede ir cambiando al pasar de un estado en el que cumple las reglas. y todos los cambios son deshechos. Consistencia (consistency). como indivisibles son cada una de las operaciones contenidas dentro de una transacción.Academia De Software Libre __________________________________________________________ www. si alguna condición no se cumple. debe hacerlo consistentemente de acuerdo con unas reglas determinadas o restricciones de integridad definidas. es que se cumpla la regla de todo o nada. incluso aunque alguna operación haya sido realizada con éxito. por el motivo que sea. Una transacción es un bloque de operaciones o instrucciones dirigido a modificar una base de datos en una determinada dirección. a este modo se le conoce como "modo autoconfirmación". Por otro lado. utilizamos ROLLBACK.

permanecen en la base de datos para siempre. y un escritor no necesita esperar a un lector. una vez reiniciado el servidor. 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. sino que ante un fallo de la máquina. son invisibles a cualquier otra transacción hasta que la primera no haya sido completada con éxito.codigolibre. Este mecanismo evita que una transacción pueda ver datos inconsistentes modificados por otra. una vez ha sido completada con éxito.org Solucion: A partir de la version 7. al consultar la BD. Aislamiento: Los resultados de una transacción que está siendo ejecutada. o escritura anticipada de registros) para controlar tanto la consistencia como la durabilidad de las transacciones. si durante una transacción se produce un apagado del servidor. Solución: Frente a otro modelos tradicionales que controlan el acceso concurrente a los datos a través de bloqueos. finalizándola correctamente. un sistema que lleve un registro de transacciones realizadas.0 se anadio gestion de integridad en PostgreSQL. consiste en que los cambios en los ficheros de datos (tablas e índices) sólo se materializan cuando existe previamente en el disco un registro en el que están anotados dichos cambios. incluso cuando se puedan producir posteriormente fallos de cualquier clase. será posible recuperar la BD a partir de ese registro: cualquier cambio no aplicado a las páginas de datos en el disco será ________________________________________ 2010 Manual De Administración de PostgreSql 16 . Solución: PostgreSQL utiliza una técnica estándar denominada WAL (Write-ahead logging. PostgreSQL utiliza un modelo denominado Multiversion Concurrency Control (MVCC). cada transacción ve una instantánea de la BD tal como era hace un cierto tiempo (una versión de la BD) y no el estado actual de la BD. advertiría rápidamente que existe una sin completar. Por ejemplo. Siguiendo este procedimiento. La ejecución no perturba a otras transacciones que se ejecuten concurrentemente. Persistencia o Durabilidad: La durabilidad garantiza que los efectos resultantes de una transacción. un lector no necesita esperar a un escritor. Esta técnica no sólo mejora el rendimiento del servidor.Academia De Software Libre __________________________________________________________ www. según el cual. Brevemente explicada. las restricciones soportadas son: not null check unique primary key foreign key. no es necesario enviar páginas al disco cada vez que una transacción se completa. el resto son inmediatas. Aislando las transacciones que operan concurrentemente en distintas sesiones.

Además hay un . 3. Siguiendo con la instrucción (update de una fila). el sistema crea uno inicialmente y va creando más según las necesidades. Se escriben los datos del buffer WAL en los ficheros de diario WAL.org nuevamente hecho desde el log (roll-forward recovery.s. Entonces.s. Todos los ficheros deben pertenecer al usuario postgres. los permisos de este fichero son 777.PGSQL.Academia De Software Libre __________________________________________________________ www.codigolibre. Se puede restringir el uso para algunos usuarios del SO. podrán ser deshechos manteniendo la integridad y la consistencia de los datos (roll-backward recovery. Se retorna el control a la aplicación. ________________________________________ 2010 Manual De Administración de PostgreSql 17 . los datos de los buffers no se han escrito en disco todavía. pero los del diario si. El usuario postgres debe ser el único que pueda: Leer. o REDO) mientras que los posibles cambios realizados en páginas de disco por transacciones incompletas. al ejecutar un COMMIT se produce: 1. Seguridad en PostgreSQL: La seguridad en PostgreSQL se materializa en tres aspectos: Seguridad en la manipulación de los ficheros de PostgreSQL. divididos en páginas de 8Kb.5432. rotando de manera cíclica según marquen los parámetros de sistema que gestionan este funcionamiento (checkpoint_segments y archive_command). o UNDO). son ficheros de 16Mb.5432 que se crea cuando arranca el postmaster. Ver el directorio /tmp. Estos ficheros de diario están en $PGDATA/pg_xlog. Seguridad en los accesos de los clientes. cualquier usuario del SO se puede conectar.PGSQL.lock que sólo puede leer postgres. Se pueden refrescar las copias multiversión en los shared buffers. 2. donde existe un fichero . Definición de los privilegios para acceder a los objetos de la base de datos a los usuarios PostgreSQL. escribir y ejecutar sobre los directorios en los ficheros leer y escribir en los ficheros Respecto a las conexiones locales vía sockets: Todos los usuarios usan la misma. Seguridad en la manipulación de los ficheros: La información más crítica está en $PGDATA. así los datos de la transacción nunca se pierden.

conf. La configuración de este nivel de seguridad se realiza en los ficheros pg_hba. REJECT: conexión rechazada sin condiciones. Conexión local: usando los sockets del dominio Unix: base_datos: ALL: se permite la conexión a cualquier base de datos.2). que debe estar en el mismo directorio que pg_hba.org Los permisos de este socket se pueden configurar en postgresql.codigolibre. 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. unix_socket_group y unix_socket_permission. nombd1. : se permite la conexión a cualquiera de las bases de datos de la lista.conf con los parámetros unix_socket_directory. role1. Se trata de editar una serie de reglas que se irán procesando de arriba abajo. se ejecutará lo que ponga en el método. Método-Autenticación: TRUST: conexión aceptada sin condiciones. CRYPT: palabra de paso encriptada (versiones previas a la 7.conf. SAMEROLE: solo a bases de datos que su nombre sea el mismo que el role que se conecta. nombd2. cuando se encuentre una regla que cumpla la conexión. ________________________________________ 2010 Manual De Administración de PostgreSql 18 . que debe estar en el mismo directorio que pg_hba. @fichero: se permite la conexión a las bases de datos incluidas en el fichero. usuario: ALL: se permite la conexión de cualquier role.conf (hba = host based authentication) y pg_ident. @fichero: se permite la conexión de los roles incluidos en el fichero.Academia De Software Libre __________________________________________________________ www. PASSWORD: se solicita palabra de paso sin encriptar. SAMEUSER: solo a bases de datos que su nombre sea el mismo que el usuario que se conecta. las palabras de paso se almacenan en la tabla pg_authid y pueden estar cifradas o no según como se creara el role. : se permite la conexión de los roles de la lista y además se permite la conexión de cualquier role que sea miembro de role2. [+]role2.conf.

0. SAMEUSER: el usuario del sistema operativo es el mismo que se conecta a la BD.0. Se debe compilar el servidor con esta opción. IDENT correspondencia: a partir del usuario de la conexión cliente (se fía de la autenticación del cliente) y de la correspondencia indicada en la opción.0/24 ó 192.168. Conexión remota sin encriptar usando TCP/IP (SSL y no SSL): Permite conexiones SSL y no SSL.0. el cliente solicita una semilla al servidor y así se obtiene un segundo cifrado que es envíado al servidor. generalmente basta con incluir la definición del un nuevo método en el directorio /etc/pam.0: todos las IPs de la red 192. en el servidor se utiliza la palabra de paso almacenada.0 255. se ha de habilitar en la instalación del servidor.0. Se deben configurar los métodos PAM del SO. y busca una fila donde esté la correspondencia llamada “cambio-usuario“ y se corresponda con el usuario conectado al SO.0 0.255.168.Academia De Software Libre __________________________________________________________ www. Las correspondencias se obtienen del fichero pg_ident.168.0.0/0 ó 0.168.200.0/16 ó 192.0. La palabra de paso se transmite en texto plano si es no SSL.168.200.conf.0 255.255. se obtiene un role de PostgreSQL para realizar la conexión. PAM servicio-pam: autenticación usando Pluggable Authentication Method proporcionado por el servicio PAM indicado en opción.org MD5: palabra de paso con el método de encriptación md5.200 192. Se obtiene un cifrado a partir de la ID de usuario y la palabra de paso.255.85/32: solo esa IP 0.0. Es el método recomendado por PostgreSQL.d.0: se pueden conectar todas las IPs de la red 192. KRB5: se usa Kerberos v5 para autenticar el cliente. Los registros HOSTSSL sólo se utilizarán para conexiones remotas SSL.200. Cambio-usuario: el sistema mira el fichero pg_ident.0.conf. El PAM por defecto es postgresql.168 192. Requiere instalar PostgreSQL con la opción SSL.codigolibre. Este método es proporcionado por el SO. el ID del usuario (la obtiene de la conexión) y la semilla para obtener un cifrado similar y los compara.0. haciendo la conexión a la BD con el usuario con el usuario de la columna usuario-pg.: cualquier IP Conexión remota encriptada SSL usando TCP/IP (solo SSL): La transmisión cliente-servidor es encriptada. y se almacena también con este método.0. crear los ficheros de firmas y claves y ________________________________________ 2010 Manual De Administración de PostgreSql 19 . direccionCIDR ó direcccionIP máscara IP: especifica un rango de direcciones IP 192. Los registros HOST se utilizarán para conexiones remotas no-SSL y SSL.168.

Hay otro fichero server.org ubicarlos en el lugar correspondiente.key (clave privada del servidor. /*****Ejemplos de conexiones remotas*****/ (18:25:48)][postgres:data]$ vim postgresql.conf --Ahora configuraremos el archivo ‘pg_hba.conf’ la especificacion ya sea de: base de datos. El servidor busca en $PGDATA los ficheros server. PostgreSQL Client Authentication Configuration File # =================================================== # # Refer to the "Client Authentication" section in the # PostgreSQL documentation for a complete description ________________________________________ 2010 Manual De Administración de PostgreSql 20 . que si está protegida en el arranque.conf (hba = host based authentication)****/ (19:00:20)][postgres:data]$ vim pg_hba.Academia De Software Libre __________________________________________________________ www. Se usa el comando OpenSSL. para que acepte todas las direcciones y tambien descomentaremos el puerto(port) #-----------------------------------------------------------------------------# CONNECTIONS AND AUTHENTICATION #-----------------------------------------------------------------------------# . # comma-separated list of addresses. PostgreSQL debe estar compilado con la opción SSL. '*' = all # (change requires restart) port = 5432 max_connections = 100 # (change requires restart) # (change requires restart) --Luego de realizar los cambios se debe de reiniciar el sistema -bash-4. # defaults to 'localhost'.codigolibre. Para configurar el servidor para estas opciones: SSL tiene que estar instalado en el servidor y en los clientes que se conecten. usuario.0$ pg_ctl restart /****AHORA CON EL pg_hba. IP-address y/o metodo de autenticacion de la cual se le va a permitir conectarce al servidor.Connection Settings listen_addresses = '*' # what IP address(es) to listen on.crt.conf --Para poder aceptar conecciones de otras direcciones debemos descomentar ‘listen_address’ y cambiar su IP address(‘localhost’) a que sea igual a '*’.

3) Type "help" for help. which PostgreSQL user names they can use.0.0$ psql -U mexy -h 168. /***Queremos que acepte coneccion desde cualquier IP y cualquier usuario pero solo para la DB ‘sacademico’***/ # TYPE DATABASE USER CIDR-ADDRESS METHOD all 0.0.100.1/32 trust # IPv6 local connections: host all all ::1/128 trust --Configuraremos la conexion local IPv4 --Nota: siempre que se realice algun cambio en este archivo hay que ejecutar “pg_ctl restart”. [192:5432/jparedes@sacademico][]> --Si no cumplimos los parametros nos dira lo siguiente: -bash-4.168. how clients # are authenticated. database "HR".Academia De Software Libre __________________________________________________________ www.100. user "jparedes". psql (8. [168:5432/mexy@sacademico][]# --Otra prueba con diferente IP y usuario -bash-4.codigolibre.0.100.100.4.0/0 password # IPv4 local connections: host sacademico --Comprobemos la coneccion -bash-4.org # of this file.168. which # databases they can access.4. SSL off ________________________________________ 2010 Manual De Administración de PostgreSql 21 .2".0.2 sacademico Password for user mexy: Timing is on.2 sacademico Password for user jparedes: Timing is on. psql (8.2 HR psql: FATAL: no pg_hba. A short synopsis follows. Records take one of these forms: # # local DATABASE USER METHOD [OPTIONS] # host DATABASE USER CIDR-ADDRESS METHOD [OPTIONS] # hostssl DATABASE USER CIDR-ADDRESS METHOD [OPTIONS] # hostnossl DATABASE USER CIDR-ADDRESS METHOD [OPTIONS] # # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0. # # This file controls: which hosts are allowed to connect.0$ psql -U jparedes -h 192.3) Type "help" for help.0$ psql -U jparedes -h 192.conf entry for host "192.168.

psql (8.0$ psql -U mexy -h 192. [10:5432/mexy@sacademico][]> --Nitido! /*** Practica***/ --Realiza una conexion remota desde tu maquina.***/ # TYPE DATABASE USER CIDR-ADDRESS METHOD # IPv4 local connections: host all all 0.0/0 password --Probemos -bash-4.Academia De Software Libre __________________________________________________________ www.0.0. IP especifico y el metodo password. user "jparedes".4.0. database "HR".0.168. psql (8. -bash-4. psql (8.2 HR psql: FATAL: no pg_hba.0. ________________________________________ 2010 Manual De Administración de PostgreSql 22 .1 sacademico Password for user mexy: Timing is on.3) Type "help" for help. [168:5432/mexy@HR][]# --Pero siempre con el usuario mexy porque si no nos dara el siguiente: -bash-4. [192:5432/mexy@sacademico][]# --Chevere --Lo mismo pero con diferente IP y DB.2 sacademico Password for user mexy: Timing is on.100.100. con un usuario.2 HR Password for user mexy: Timing is on.0/0 md5 --Hagamos la coneccion -bash-4.3) Type "help" for help.100.conf entry for host "168.100.0$ psql -U jparedes -h 168.codigolibre.0$ psql -U mexy -h 168.4.0.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$ psql -U mexy -h 10.0.0.0.3) Type "help" for help. SSL off /***Ahora especificaremos una sola IP(en este caso cualquier IP) con cualquier DB y/o usuario pero con metodo password.2".4.

En los esquemas es donde se crean los objetos (tablas. Tablespaces: ubicaciones alternativas a la que por defecto tiene el cluster. que contienen objetos que se pueden guardar en distintos tablespaces y un conjunto de usuarios que se conectan al cluster. excepto si se usan dblinks. Por defecto. no se pueden ver objetos de una base de datos desde otra base de datos. Hasta la versión 8 de Postgres no se podían anidar roles.org Esquema lógico: Concepto de Cluster de bases de datos en PostgreSQL: Repositorio que engloba un conjunto de bases de datos.psql_history ________________________________________ 2010 Manual De Administración de PostgreSql 23 . las bases de datos se comportan como esquemas de Oracle. los cuales tienen un usuario propietario. etc. vistas. Con lo que tenemos aquí los tres elementos principales a nivel lógico en un cluster: Bases de datos: agrupaciones de esquemas.codigolibre. Si es un servidor de proyectos con recursos comunes: una única base de datos y distintos esquemas para cada proyecto.). Esto marca cómo se deben crear las bases de datos: Si es un servidor que acoge proyectos separados y no se han de interrelacionar: separación en bases de datos distintas. Por defecto. se pueden conectar con cualquiera de las bases de datos. /****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 . En este punto. Roles: engloba el concepto de usuarios (roles de login) y grupos de permisos (roles de grupo). ahora si. estos últimos son lo mismo que los roles de Oracle. siempre hay tres bases de datos creadas.Academia De Software Libre __________________________________________________________ www. template0. si al crear el cluster no se ha indicado otro usuario. Una sesión se abre contra una base de datos. procedimientos. Una base de datos engloba un conjunto de esquemas. se crea el usuario postgres como superusuario. template1 y postgres. Por defecto no se crea ninguno. Todos los usuarios son comunes a las bases de datos del cluster. índices. Las bases de datos son independientes entre ellas.

org --Si queremos modificar el numero de comando en el History: [[local]:5432/acolon@HR] [] > \set HISTSIZE 50000 --Para ponerlo permanente la colocamos en el archivo oculto . Creación de roles (usuarios): En PostgreSQL los usuarios son tipos de roles.codigolibre.psqlrc --Verificamos el mismo: [postgres@jp ~]$cat . el role es el concepto general.2-46).psqlrc: [postgres@jp ~]$echo "\set HISTSIZE 7000" >> .4.2 20080704 (Red Hat 4. ________________________________________ 2010 Manual De Administración de PostgreSql 24 .psqlrc \set PROMPT1 '[%m:%>/%n@%/] [%x] %# ': \set HISTSIZE 5000 --Siqueremos agregar que cada consulta nos revuelva el tiempo en ejecucion en una session: [[local]:5432/postgres@sacademico] [] # \timing --Si queremos que sea permanente: [postgres@jp ~]$echo "\timing on" >> . se almacenan en la tabla del catálogo pg_authid y se pueden consultar en las vistas pg_user y pg_roles. Los roles son globales al cluster.1. 32-bit' DBNAME = 'sacademico' USER = 'postgres' PORT = '5432' ENCODING = 'UTF8' HISTSIZE = '5000' --Ya podemos hacer uso de COMMIT Y ROLLBACK.1. compiled by GCC gcc (GCC) 4.4 on i686-redhat-linux-gnu.psqlrc --Desactivar el AUTOCOMMIT: [postgres@jp ~]$echo "\set AUTOCOMMIT off" >> .Academia De Software Libre __________________________________________________________ www.psqlrc --Verificar: [[local]:5432/postgres@sacademico] [] # \set AUTOCOMMIT = 'off' PROMPT1 = '[%m:%>/%n@%/] [%x] %# ' PROMPT2 = '%/%R%# ' PROMPT3 = '>> ' VERBOSITY = 'default' VERSION = 'PostgreSQL 8.

se preguntará interactivamente. --no-superuser el rol no será un superusuario -d. pero con la opción LOGIN por defecto. --login el rol podrá conectarse (predeterminado) -L. El comando CREATE USER es ahora un alias de CREATE ROLE. -D. --echo mostrar los comandos a medida que se ejecutan -q. /***Practica***/ --Explique las opciones utilizadas anteriores y luego cree un usuario que no pueda --crear usuario. --createrole el rol podrá crear otros roles -R. -r. --port=PUERTO puerto del servidor -U. --connection-limit=N lÍmite de conexiones para el rol (predeterminado: sin lÍmite) -P. --no-createrole el rol no podrá crear otros roles -l. --password pedir contraseña para conectarse Si no se especifican -s. --no-login el rol no podrá conectarse -i. --host=ANFITRIÓN nombre del servidor o directorio del socket -p. --superuser el rol será un superusuario -S. --encrypted almacenar la constraseña cifrada -N. --unencrypted almacenar la contraseña sin cifrar -e.Academia De Software Libre __________________________________________________________ www. --no-createdb el rol no podrá crear bases de datos -r. --pwprompt asignar una contraseña al nuevo rol -E.codigolibre. --quiet no escribir ningún mensaje --help desplegar esta ayuda y salir --version desplegar información de versión y salir Opciones de conexión: -h. --inherit el rol heredará los privilegios de los roles de los cuales es miembro (predeterminado) -I. --no-inherit rol no heredará privilegios -c. --createdb el rol podrá crear bases de datos -D. [ROL] Opciones: -s. y que tenga un limite de 5 conexiones ? ________________________________________ 2010 Manual De Administración de PostgreSql 25 . -S. /****Ejemplo****/ --Primero creamos un usuario: --Creando Usuario Primero desde el Shell: [postgres@jp ~]$createuser -W -S -d -r -e pomavid Password: CREATE ROLE pomavid NOSUPERUSER CREATEDB CREATEROLE INHERIT LOGIN. --username=NOMBRE nombre de usuario con el cual conectarse (no el usuario a crear) -W.org Desde el sistema operativo: createuser [OPCIÓN]... -d. -R o el ROL.

Academia De Software Libre
__________________________________________________________

www.codigolibre.org

--Creando usuario desde otro usuario con su -: [postgres@jp ~]$su - postgres -c "createuser --no-superuser --createrole --no-createdb nitido2 --echo" Password: CREATE ROLE nitido2 NOSUPERUSER NOCREATEDB CREATEROLE INHERIT LOGIN; /***Practica***/ --Explique la opcion -c y --echo? CREATE USER: Tambien puede utilizar el comando CREATE USER SQL, que tiene varias opciones disponibles con el comando createuser. CREATE USER username [ [ WITH ] SYSID uid | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | CREATEDB | NOCREATEDB | CREATEUSER | NOCREATEUSER | IN GROUP groupname [, ...] | VALID UNTIL 'abstime' ] Forma Simple: CREATE USER user; Creara un usuario con ninguna contraseña ni privilegios adicionales. Tambien puede agregar un usuario a un grupo ya existente y especificar una fecha en la que la contraseña del usuario expirara. El sysid es como el numero uid de UNIX y postgres tomara un valor predeterminado adecuado. template1=# CREATE USER alice WITH PASSWORD 'pAssw0rd'; CREATE USER template1=# CREATE USER bob VALID UNTIL 'Jan 31 2030'; CREATE USER Desde el Shell: CREATEUSER jp /****Ejemplo****/ --Creado Usuario desde el PSQL: [[local]:5432/postgres@postgres] [] # CREATE USER pomavid WITH PASSWORD 'plsql' CREATEDB NOCREATEUSER; CREATE ROLE

________________________________________ 2010 Manual De Administración de PostgreSql 26

Academia De Software Libre
__________________________________________________________

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 contraseña como estrellas. --Vista donde tenemos todos los usuarios almacenados: [[local]:5432/postgres@postgres] [] # SELECT * from pg_user; --Vamos a mostrar donde se almancenan las contraseñas: [[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 contraseña 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 Administración de PostgreSql 27

Academia De Software Libre
__________________________________________________________

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 Nuñez 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 Administración de PostgreSql 28

Academia De Software Libre __________________________________________________________ www. ALTER USER Cambiar contraseña: template1=# ALTER USER colin WITH PASSWORD 'letmein'. En la línea de comandos usariamos: Desde el Shell $ dropuser alice DROP USER Desde SQL template1=# DROP USER colin. A diferencia de la creacion de usuarios.org --Validamos los objetos creados: [[local]:5432/postgres@postgres] [] # SELECT * from pg_roles . [[local]:5432/postgres@postgres] [] # SELECT * from pg_user . [[local]:5432/postgres@postgres] [] # \du [[local]:5432/postgres@postgres] [] # \dg Permitir Usuario crear BD: template1=# ALTER USER alice CREATEDB. [[local]:5432/postgres@postgres] [] # SELECT * from pg_group . template1=# ALTER USER bob RENAME TO colin. ALTER USER Comprobamos los Cambios y vemos los cambios: En la tabla pg_user Eliminando Usuario: Al igual que la creacion de usuarios. y los usuarios no tienen que ser un miembro de ningun grupo. El comando es: ________________________________________ 2010 Manual De Administración de PostgreSql 29 . existen dos formas de eliminar los usuarios. Solo se usan para simplificar la concesion y revocacion de privilegios para el administrador db. DROP USER Creando Grupo: Los grupos son totalmente opcionales en postgresql. solo se pueden crear grupos utilizando SQL. ALTER USER Cambiando Nombre a un Usuario: ALTER USER name RENAME TO newname.codigolibre. utilizando la línea de comandos o SQL.

. (select grolist from pg_group w Re-Nombrando Grupo: ALTER GROUP groupname RENAME TO newname template1=# ALTER GROUP sales RENAME TO presales. se puede utilizar: template1=# CREATE GROUP sales WITH USER alice. --Creando grupo incluyendo un usuario: [[local]:5432/postgres@postgres] [] # CREATE GROUP contabilidad user pepe.codigolibre.]] Si quisieramos crear un grupo con alice como miembro inicial.. . ________________________________________ 2010 Manual De Administración de PostgreSql 30 .. ALTER GROUP template1=# ALTER GROUP sales DROP USER alice. . Si desea ver los nombres de usuario en un grupo en particular se puede utilizar: template1=# select usename from pg_user.Academia De Software Libre __________________________________________________________ www. ALTER GROUP /****Ejemplo****/ --Agregando usuario al grupo creado: [[local]:5432/postgres@postgres] [] # ALTER GROUP contabilidad ADD USER pomavid . La columna grolist muestra una lista de identificadores de usuario que estan en el grupo.org CREATE GROUP name [ [ WITH ] SYSID gid | USER username [. ] template1=# ALTER GROUP sales ADD USER bob. En este ejemplo he añadido alice nuevamente en el grupo de ventas. template1=# select * from pg_group . Viendo los Grupos: Podemos ver la pertenencia al grupo al ver la tabla de sistema pg_group. --Eliminando usuario de un grupo: [[local]:5432/postgres@postgres] [] # ALTER GROUP contabilidad DROP USER pepe . CREATE GROUP /****Ejemplo****/ --Creando Grupos: [[local]:5432/postgres@postgres] [] # CREATE GROUP contabilidad. Agregando o eliminando un Usuario de Grupo: ALTER GROUP groupname [ADD|DROP] USER username [..

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.Academia De Software Libre __________________________________________________________ www. que servía para indicar ubicaciones alternativas para las bases de datos. queremos que ciertas tablas estén en otros discos distintos a los que se encuentran por defecto. y que exigía que se definiese una variable de entorno similar a PGDATA para cada base de datos.0000_0} ________________________________________ 2010 Manual De Administración de PostgreSql 31 . esto es importante tenerlo en cuenta en procesos como el cambio de ubicaciones o en la restauración de ficheros desde una copia de seguridad. En versiones anteriores de PostgreSQL. existía el comando initlocation.org /****Ejemplo****/ --Vamos a renombrar un grupo: [[local]:5432/postgres@postgres] [] # ALTER GROUP contabilidad RENAME TO dba.2}. Directory: se deben indicar trayectorias absolutas y el propietario del directorio debe ser el usuario con el que se ha instalado PostgreSQL.2}.2010_1. en $PGDATA/pg_tblspc se crean enlaces simbólicos a los directorios físicos donde se encuentran. /****Ejemplo****/ --Eliminando Grupo: [[local]:5432/postgres@postgres] [] # DROP GROUP dba . por ejemplo. /***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. /****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. Nota: cuando se crean tablespaces. debemos crear tablespaces. Eliminando Grupo: template1=# DROP GROUP presales.codigolibre.2009_{1.

spcname | spclocation | Tamaño MB ---------+-------------+----------(0 rows) Creación de bases de datos: Una base de datos se puede crear desde la línea de comandos del sistema operativo (con el usuario de sistema) o desde una conexión a una base de datos.org ò.. --Para saber el tamaño de que ocupa los TableSpace: [[local]:5432/postgres@postgres] [] # SELECT spcname.pg_tablespace_size(spcname)/1024 "Tamaño MB" FROM pg_tablespace WHERE spclocation LIKE '/var/lib/pgsql/data/tablespace/tablespaces_datos%'.(con un usuario que tenga privilegios para crear bases de datos)..spclocation. --Queremos dos simplemente. -T.. --Si queremos poner unos de los TableSpace por defecto: SET default_tablespace=TS_Pomavid_Datos. [NOMBRE] [DESCRIPCIÓN] --tablespace=TBLSPC tablespace por omisión de la base de datos --encoding=CODIFICACIÓN codificación para la base de datos --owner=DUEÑO usuario que será dueño de la base de datos --template=PATRÓN base de datos patrón a copiar --echo m ostrar los comandos enviados al servidor --quiet no desplegar mensajes mostrar esta ayuda y salir mostrar el numero de versión y salir ________________________________________ 2010 Manual De Administración de PostgreSql 32 . -e. -q.. Desde el sistema operativo: $ createdb Opciones: -D.Academia De Software Libre __________________________________________________________ www. --help --version [OPCIÓN].codigolibre. -O. 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'. -E.

!!! ________________________________________ 2010 Manual De Administración de PostgreSql 33 . • Permiten que se puedan instalar aplicaciones realizadas por terceros si que existan colisiones en los nombres de los objetos. se creará una base de datos con el mismo nombre que el usuario actual.objeto ya que en PostgreSQL no existe el concepto de sinónimos como en Oracle.Academia De Software Libre __________________________________________________________ www. • Para poder ver objetos de un esquema. debe usarse la notación esquema. Esquemas: Las bases de datos se organizan mediante esquemas. procedimientos. --username=USUARIO nombre de usuario para la conexión -W. --password preguntar la contraseña Si no se especifica. básicamente son un espacio de nombres. --host=ANFITRIÓN nombre del servidor o directorio del socket -p. etc. --Desde PsqL: [[local]:5432/postgres@postgres] [] # CREATE DATABASE poma OWNER pepe tablespace ts_pomavid_datos.). • Permiten el uso de la base de datos por multiples usuarios sin interferencias. contenedores lógicos de objetos de base de datos (tablas.org Opciones de conexión: -h. 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.codigolibre. vistas. Es característico de los esquemas: • Tienen un propietario. Mas delante seguiremos hablando de Schema. --port=PUERTO puerto del servidor -U. 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 .

Estos derechos descritos en la tabla de abajo. Puede crear una regla sobre la tablas. puede establecer permisos en el objeto.org /****Ejemplo****/ --Una vez creada la Base Datos procedemos a crear el Schema: [[local]:5432/postgres@postgres] [] # CREATE SCHEMA cole authorization pepe.Academia De Software Libre __________________________________________________________ www. esto equivale a arwdRxt ________________________________________ 2010 Manual De Administración de PostgreSql 34 . CREATE SCHEMA --Para crear un Objeto dentro del Schema creado es y en el TableSpace : [[local]:5432/postgres@postgres] [] # CREATE TABLE cole.Objeto************** [[local]:5432/postgres@postgres] [] # SELECT * from cole. search_path ------------cole (1 row) --Una vez creado el Schema todo objeto debe ser creado asi: --**************Schema. Para las tablas.¿Necesita esto en ambos lados de la llave. --Podemos setear el search_path a nivel de base de datos y Schema. SET [[local]:5432/postgres@postgres] [] # SHOW search_path . Los permisos se compone de un nombre de usuario o grupo y un conjunto de derechos.codigolibre. Se puede ejecutar la funcion. Puede cambiar los datos en el objeto. que es la persona que lo creo. Por defecto : [[local]:5432/postgres@postgres] [] # SET search_path TO cole. Se puede crear una clave externa a una tabla. Se puede crear una tabla temporal.Bbella (Nombre Varchar(30)) tablespace ts_pomavid_datos. Se puede crear un desencadenador en la tabla.TAB TAB . privilegios adecuados. vistas y secuencias) tienen un propietario. El propietario o un superusuario. Puede insertar datos en el objeto. Puede eliminar los datos del objeto. --Listar los Schema: [[local]:5432/postgres@pomavid] [] # \dn+ Permisos Todos los objetos (tablas. 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 usar la lengua del procedimiento.

.] TO { username | GROUP groupname | PUBLIC } [.. UPDATE. ALTER TABLE [[local]:5432/postgres@HR] [] # \d List of relations Schema | Name | Type | Owner --------+-----------------------+----------+---------public | countries | table | jparedes ________________________________________ 2010 Manual De Administración de PostgreSql 35 . de esta manera usted puede tener todos los privilegios sobre un objeto: [[local]:5432/postgres@HR] [] # ALTER TABLE countries owner to jparedes .org Viendo los privilegios: sales=# \dp Asignando Privilegios: GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [. 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..] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [..... .Academia De Software Libre __________________________________________________________ www. DELETE ON TABLE suppliers TO bob.] [ WITH GRANT OPTI GRANT INSERT. .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 dueño de una tabla.codigolibre.

REVOKE --Hacer pruebas: [[local]:5432/jparedes@HR] [] > SELECT * from employees .4. ERROR: permission denied for relation employees --Tenenos un ROLE llamado General y el mismo estan agregados varios usuarios --Vamos darle privilegios de SELECT a ese ROLE completo: [[local]:5432/postgres@HR] [] # GRANT SELECT ON employees TO general . salary from employees limit 1. GRANT --Listo ya el usuario jparedes puede hacer SELECT sobre la tabla employees: [[local]:5432/jparedes@HR] [] > SELECT first_name.org --Ahora nos logueamos con el usuario jparedes en la Bases Datos HR: [postgres@jp ~]$psql -U jparedes HR psql (8. --Tenemos que hacer login con el dueño del objeto o el DBA: [postgres@jp ~]$psql -U postgres HR --Ortogamos privilegios de SELECT al usuario jparedes: [[local]:5432/postgres@HR] [] # GRANT SELECT ON employees TO jparedes. --Ahora cualquira de los usuarios que estan en ese ROLE puede hacer SELECT sobre las tablas del Schema HR: ________________________________________ 2010 Manual De Administración de PostgreSql 36 . --como hicimos login con jparedes que no es el dueño ni tiene privilegios sobre la Bases Datos HR. [[local]:5432/jparedes@HR] [] > --Ahora tratamos de consultar una de las tablas de la Base Datos HR: [[local]:5432/jparedes@HR] [] > SELECT * from employees .codigolibre.Academia De Software Libre __________________________________________________________ www. first_name | salary ------------+-------John | 14000 (1 row) --Le revocamos los privilegios de SELECT al usuario jparedes: [[local]:5432/postgres@HR] [] # REVOKE SELECT ON employees FROM jparedes. ERROR: permission denied for relation employees --Vamos otorgar privilegios al usuario jparedes para hacer SELECT sobre la tabla employees.4) Type "help" for help.

________________________________________ 2010 Manual De Administración de PostgreSql 37 . 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. --Hacemos una consulta a la tabla cursos del Schema sacademicoschema: [[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.Academia De Software Libre __________________________________________________________ www. [[local]:5432/orange@HR] [] > SELECT first_name.cursos. GRANT --Prueba: [[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.4) Type "help" for help.4.cursos.curso" does not exist LINE 1: SELECT * from sacademicoschema.4) Type "help" for help. 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.4. ERROR: permission denied for relation cursos --Otorgamos privilegios al objeto dentro del Schema: [[local]:5432/postgres@sacademico] [] # GRANT ALL ON sacademicoschema. ^ sacademico --Otorga los permisos en el Schema SacademicoSchema: [[local]:5432/postgres@sacademico] [] # GRANT ALL ON SCHEMA sacademicoschema to hterrero. salary from employees limit 1. salary from employees limit 1.org --Hacer pruebas: [postgres@jp ~]$psql -U orange HR psql (8.codigolibre. ERROR: relation "sacademicoschema.cursos.cursos to hterrero.

SET --Resultado: ________________________________________ 2010 Manual De Administración de PostgreSql 38 .cursos limit 1. 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.Academia De Software Libre __________________________________________________________ www. --Prueba: [[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema. GRANT --Prueba: [[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema. current_user.codigolibre. session_user | current_user ---------------+-------------orange | orange (1 row) --Cambiamos de session: [[local]:5432/jparedes@sacademico] [] # SET session AUTHORIZATION hterrero . --Acceso a los requerimientos previamente solicitados: [[local]:5432/postgres@sacademico] [] # GRANT USAGE ON SCHEMA sacademicoschema to hterrero.org GRANT --Prueba: [[local]:5432/hterrero@sacademico] [] > SELECT * from sacademicoschema.cursos limit 3. ERROR: permission denied for schema sacademicoschema LINE 1: SELECT * from sacademicoschema. 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.cursos limit 1.cursos limit 2.

RESET --Verifico: [[local]:5432/jparedes@sacademico] [] # SELECT session_user.4.4) Type "help" for help. current_user.org [[local]:5432/hterrero@sacademico] [] > SELECT session_user. current_user. SET --Resultado: [[local]:5432/jparedes@sacademico] [] > SELECT session_user.Academia De Software Libre __________________________________________________________ www. session_user | current_user ----------------+-------------hterrero | hterrero (1 row) --Para cambiar solo de usuario en una session: --Primero vemos nuestra session y usuario: [[local]:5432/jparedes@sacademico] [] # SELECT session_user.codigolibre. session_user | current_user ----------------+-------------jparedes | lmerlin (1 row) --Para resetiar la session: [[local]:5432/jparedes@sacademico] [] > RESET session AUTHORIZATION . current_user. session_user | current_user ----------------+-------------jparedes | jparedes (1 row) --Ver los permisos de los objetos existentes: --Hacemos login en la Bases Datos HR: [postgres@jp ~]$psql -U falmonte HR psql (8. session_user | current_user ----------------+-------------jparedes | jparedes (1 row) --Cambio de ROLE: [[local]:5432/jparedes@sacademico] [] # SET role hterrero . --Luego vemos informacion sobre los permisos de los objetos exists. current_user. no tenemos: [[local]:5432/falmonte@HR] [] > \z ________________________________________ 2010 Manual De Administración de PostgreSql 39 .

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 Administración de PostgreSql 40 .codigolibre. GRANT [[local]:5432/postgres@HR] [] # GRANT DELETE ON countries TO arodriguez . GRANT [[local]:5432/postgres@HR] [] # GRANT ALL ON countries TO general .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 .Academia De Software Libre __________________________________________________________ www. en el cual se encuentra el usuario falmonte: [[local]:5432/postgres@HR] [] # GRANT SELECT ON countries TO coronel . ERROR: permission denied for relation countries --No tenemos ningunos vamos a otorgar algunos privilegios al ROLE coronel. GRANT [[local]:5432/postgres@HR] [] # GRANT UPDATE ON countries TO cnunez . GRANT --Prueba: [[local]:5432/falmonte@HR] [] > SELECT * from countries limit 3.

codigolibre. --Verificamos: [[local]:5432/falmonte@HR] [] > \z Access privileges Schema | Name | Type | | 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.Academia De Software Libre __________________________________________________________ www. Access privileges --Otorgue el permiso de escritura y actualizacion a falmonte --*****Restableciendo y Eliminando Obejtos--*****: --Nota: Si queremos eliminar algunos objetos o Bases Datos no debe existir ningun ROLE asociado al mismo: ________________________________________ 2010 Manual De Administración de PostgreSql 41 .Si queremos Permitir conceder el mismo privilegios a otro: [[local]:5432/postgres@HR] [] # GRANT ALL ON locations TO coronel with grant option.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) | | | | | | | | | | | | | | | | -.

GRANT --Prueba: [[local]:5432/acolon@HR] [] > SELECT name from countries limit 3. --Prueba: [[local]:5432/acolon@HR] [] > SELECT region_id from countries . RESET SESSION AUTHORIZATION. ERROR: permission denied for relation countries --Actualmente no tenemos privilegios sobre ninguna columna de la tabla countries. ERROR: permission denied for relation countries --De igualmenare solo tenemos privilegios de hacer consulta sobre esa columna --si tratamos de actualizar nos dira: [[local]:5432/acolon@HR] [] > UPDATE countries SET name = 'R. name ----------Argentina Australia Belgium (3 rows) --Intentamos hacer SELECT a otra columna de la misma tabla: [[local]:5432/acolon@HR] [] > SELECT country_id from countries .Academia De Software Libre __________________________________________________________ www. ERROR: permission denied for relation countries [[local]:5432/acolon@HR] [] > SELECT * from countries . ERROR: permission denied for relation countries [[local]:5432/acolon@HR] [] > SELECT name from countries . --Ahora vamos a otorgar y rebocar privilegios a nivel de columnas: --Revocamos todos los privilegios al usuario acolon sobre la tabla countries de la Bases Datos HR: [[local]:5432/postgres@HR] [] # REVOKE ALL ON countries FROM acolon . --Procedemos a Otorgar privilegios a una columna de la tabla countries: [[local]:5432/postgres@HR] [] # GRANT SELECT (name) on countries to acolon. ERROR: permission denied for relation countries ________________________________________ 2010 Manual De Administración de PostgreSql 42 . ERROR: permission denied for relation countries [[local]:5432/acolon@HR] [] > SELECT country_id from countries .org --Regresamos a la sesión principal por defecto.codigolibre.D' where name='Belgium'.

--Prueba: [[local]:5432/acolon@HR] [] > UPDATE countries SET name = 'San Juam' where name='Argentina'. REVOKE --Prueba: [[local]:5432/acolon@HR] [] > SELECT name from countries limit 3.org --Vamos Otorgar privilegios de Actualización sobre la columna name de la tabla countries: [[local]:5432/postgres@HR] [] # GRANT UPDATE (name) on countries to acolon.codigolibre. UPDATE 1 --Si queremos ver los privilegios de la columna name de la tabla countries: [[local]:5432/postgres@HR] [] # \dp Access privileges Schema | Name | Type | | 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. Trabajando con Schema: test=# CREATE SCHEMA foo. 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. CREATE SCHEMA ________________________________________ 2010 Manual De Administración de PostgreSql 43 Access privileges .Academia De Software Libre __________________________________________________________ www.

INSERT 23069 1 test=# SELECT foo. info_view fue creado en el esquema publico porque el publico es siempre por defecto que figuran en la ruta de busqueda.id=bar.txt.info.info.org test=# CREATE TABLE foo.info. CREATE SCHEMA test=# CREATE TABLE bar. para cambiar la ruta de busqueda uso search_path SET . el uso: ALTER USER test SET search_path TO bar. test=# \d info ________________________________________ 2010 Manual De Administración de PostgreSql 44 . bar. PostgreSQL se refiere a la ruta de busqueda ". INSERT 23062 1 test=# CREATE SCHEMA bar.foo. foo. Para continuar con los ejemplos anteriores. En el ejemplo anterior. bar. Listar los Objetos en Schema Public: test=# \dv Cuando el nombre de esquema no esta previsto en un objeto de base de datos. Este cambio solo tendra efecto despues de volver a conectarse a la base de datos. txt TEXT).info (id INT. foo significa ahora info bar mesa seran seleccionados por defecto: test=# SET search_path TO bar.: test=# SET search_path TO foo.info. 'This is schema foo'). el establecimiento de la ruta de busqueda a la barra.txt FROM foo.Academia De Software Libre __________________________________________________________ www.info (id INT. CREATE TABLE test=# INSERT INTO bar.info WHERE foo..info. test=# \dt Para alterar permanentemente la ruta de busqueda establecidos en cada conexion.codigolibre.id..info VALUES(1. La configuracion actual de la ruta de busqueda se puede ver con SHOW search_path: test=# SHOW search_path. Una ruta de busqueda se mantiene para cada conexion de base de datos. test=# SELECT txt FROM info. CREATE TABLE test=# INSERT INTO foo.info VALUES(1. que define el orden en el que buscar a traves de esquemas de un nombre de objeto no calificados. 'This is schema bar'). txt TEXT).

Tenga en cuenta que se resolveran en el primer esquema existente en la ruta de busqueda.. Si no hay un esquema se encuentra. El gran privilegio CREATE en un esquema permite a un usuario para crear objetos en el esquema de otro usuario: GRANT CREATE ON SCHEMA tarzan TO jane. Funciones de Schema: * Current_schema () Devuelve el nombre del esquema actual (esquema por primera vez en la ruta de busqueda).. REVOKE USAGE ON SCHEMA tarzan TO jane. no necesariamente el primero. privilegios en tanto existentes como de nueva creacion. Una vez que el permiso USAGE ha sido concedida. se devuelve NULL. DROP SCHEMA tarzan CASCADE.banana_inventory FROM jane. ni objetos personales. incluidos los que el usuario tiene privilegios en adelante.banana_inventory TO jane. El permiso USAGE determina si un usuario puede realizar ninguna operacion sobre el esquema de otro usuario: GRANT USAGE ON SCHEMA tarzan TO jane. Si el uso es revocado. se puede acceder.codigolibre. * Current_schemas (boolean) Devuelve todos los esquemas en la ruta de busqueda como una matriz. ________________________________________ 2010 Manual De Administración de PostgreSql 45 . cualquier privilegios anteriores se reactiva automaticamente sobre el objeto. or CREATE SCHEMA AUTHORIZATION tarzan. REVOKE CREATE ON SCHEMA tarzan TO jane. esquemas implicitos (esquemas especiales como pg_catalog que se añaden a la ruta de busqueda de forma automatica si no se especifica explicitamente) se devuelven. REVOKE SELECT ON tarzan.Academia De Software Libre __________________________________________________________ www. Utilice el nombre de usuario reservado PUBLIC la hora de conceder o revocar privilegios de todos los usuarios: GRANT ALL ON SCHEMA tarzan TO PUBLIC. los objetos de esquema se debe conceder de forma explicita: GRANT SELECT ON tarzan.org Permisos y Seguridad en Schema: CREATE SCHEMA tarzan AUTHORIZATION tarzan. segun lo establecido por search_path SET. Si el uso se concede de nuevo. si se llama con TRUE. Eliminando Schema: Forma Simple: DROP SCHEMA tarzan.

.4 utilizando el esquema ALTER . de comandos. las funciones y puntos de vista explotacion de meta-informacion sobre la base de datos. 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. no seran relevantes para la mayoria de las aplicaciones.4. Todos comienzan con pg_. que solo tienen la copia de seguridad permanentes cuando este en funcionamiento.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.. aqui una funcion que puede administrar los privilegios para cada esquema (conceder y revocar). * Crear la tabla en el nuevo esquema con la definicion actual y el uso INSERT INTO new_schema.Academia De Software Libre __________________________________________________________ www. Cambiar el nombre de los esquemas se introducira en PostgreSQL 7.mytable SELECT * FROM old_schema.codigolibre. Administrar privilegios de copia de seguridad: Supongamos que usted quiere tener un 'backup' de usuario. para rellenar la tabla. ________________________________________ 2010 Manual De Administración de PostgreSql 46 . Desde PostgreSQL 7. indices. etc secuencias manualmente. El INFORMATION_SCHEMA es para propositos de compatibilidad y probables. tambien habra un INFORMATION_SCHEMA compuesto de puntos de vista predefinidos que contienen informacion descriptiva sobre la base de datos actual.mytable.. Los esquemas especiales son: * Pg_catalog: Contiene las tablas del sistema. * 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.mytable para transferir los datos y recrear todas las restricciones asociadas. Tenga en cuenta que los nombres de esquema a partir de pg_ no estan permitidos. Limitaciones Actualmente no es posible la "transferencia" objetos entre esquemas. Asi pues. RENOMBRAR CON . soluciones posibles: * Uso CREATE TABLE AS new_schema.mytable SELECT * FROM old_schema.

BEGIN FOR objeto IN SELECT tablename FROM pg_tables WHERE schemaname = p_schema UNION SELECT relname FROM pg_statio_all_sequences WHERE schemaname = p_schema LOOP IF action = true THEN RAISE NOTICE 'Asignando todos los privilegios a % sobre %.%'.p_schema. objeto. es muy simple.tables WHERE table_schema = 'public'. END. EXECUTE 'GRANT ALL PRIVILEGES ON ' || p_schema || '.%'.' || objeto || ' TO ' || p_user . false)./pgaccess $database $username tables=$(psql $1 -A -t -c "SELECT table_name FROM information_schema. p_user. $BODY$ LANGUAGE 'plpgsql' VOLATILE. ELSE RAISE NOTICE 'Quitando todos los privilegios a % sobre %.org CREATE OR REPLACE FUNCTION manage_backup_privileges(p_user text.'esquema'. p_schema text.'esquema'. EXECUTE 'REVOKE ALL PRIVILEGES ON ' || p_schema || '. END LOOP. Si desea que las Revocar los Privilegios: SELECT manage_backup_privileges('usuario'.Academia De Software Libre __________________________________________________________ www.p_schema. action BOOLEAN) RETURNS void AS $BODY$ DECLARE objeto text." ________________________________________ 2010 Manual De Administración de PostgreSql 47 . END IF.codigolibre. p_user.") for table in $tables do echo "Proporcionar select to $2 on $table" psql $1 -c "GRANT SELECT ON $table to $2. Si desea activa los privilegios de uso de este formulario: SELECT manage_backup_privileges('usuario'. objeto. true).' || objeto || ' FROM ' || p_user . Ejecutalo. Script Bash Para Proporcionar acceso de solo lectura para cada tabla en la base de datos PostgreSQL: #!/bin/sh # # Proporcionar acceso de solo lectura en base de datos PostgreSQL # Use: .

mate ahora el servidor de la base de datos. se deberia encontrar que $ /etc/rc. del T. probablemente se encontrara un fichero startup que cumplira el mismo cometido. El script anterior debe ejecutarse en el siguiente formato. y relance de nuevo postmaster.) (N.codigolibre.d/postgres. Si esta usted actualizando un sistema existente.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. edite los permisos del fichero /usr/local/pgsql/data/pg_hba.d/init.init stop funcione correctamente para parar la base./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. Leer usuario solo sintaxis de secuencias de comandos: .sh eso es lo que se utiliza en el ejemplo siguiente. (No utilice el id del proceso "grep postmaster". pare el postmaster. Si es necesario. Por ejemplo.Academia De Software Libre __________________________________________________________ www. El nombre de la secuencia de comandos para pgaccess.) $ kill pid Sugerencia: En sistemas que arrancan PostgreSQL en el durante la secuencia de arranque de la maquina. Teclee: $ ps ax | grep postmaster Esto deberia listar los numeros de proceso para una serie de procesos. en un sistema Linux RedHat. reemplazando pid con el identificador (id) del proceso postmaster (263 en el caso anterior). tambien puede hacerlo con la línea $ ps ax | grep postmaster |grep -v grep que le dara la misma salida. de un modo similar a: 263 777 ? SW p1 S 0:00 (postmaster) 0:00 grep postmaster Teclee la siguiente línea. Fin de la N. del T.conf para permitirle a usted solo su uso. ________________________________________ 2010 Manual De Administración de PostgreSql 48 . pero sin incluir la línea correspondiente al mismo proceso "grep".

la posibilidad de crear/destruir bases de datos y la posibilidad de actualizar los catalogos del sistema.org Administrando desde GNU/Linux Todas las ordenes de Postgres que se ejecutan directamente desde un shell de Unix se encuentran en el directorio †œ . por defecto. Las conexiones de los clientes al servidor de la base de datos estan permitidas. Todos los ficheros almacenados en la base de datos estan protegidos contra escritura por cualquier cuenta que no sea la del superusuario de Postgres./bin†œ Incluir este directorio en su variable de entorno . hay una serie de cosas que debe recordar antes de iniciar postmaster. Existe una coleccion de catalogos del sistema en cada servidor.. Vea las secciones de instalacion y configuracion en este mismo manual. si ha unstalado Postgres siguiendo las instrucciones de instalacion al pie de la letra.log 2>&1 & Si no desea ver los mensajes. inicielo de la forma % postmaster -S y postmaster sera "S"ilencioso..Academia De Software Libre __________________________________________________________ www. Un usuario de Unix no puede hacer nada con Postgres hasta que se instale una instancia apropiada en dicha clase. De todos modos. unicamente mediante sockets Unix locales y no mendiante sockets TCP/IP. path facilitara mucho la ejecucion de los mismos. Iniciando postmaster No le puede suceder nada a una base de datos a menos que este corriendo el proceso postmaster. La instancia especifica un conjunto de privilegios sobre Postgres. Las conexiones de los clientes se pueden restringir por direccion IP y/o por nombre de ________________________________________ 2010 Manual De Administración de PostgreSql 49 . no se ejecuta como proceso de fondo. Observe que al no haber el signo ampersand ("&") al final del ultimo ejemplo. puede iniciarlo con la opcion -d y redirigir la salida al archivo de registro: % postmaster -d > pm. La misma incluye una clase (pg_user) que contiene una instancia para cada usuario valido en Postgres. Ha de arrancarse el demonio con la opcion -i para permitir la conexion de clientes no locales. postmaster escribe mensajes que le seran de ayuda para resolver problemas. Puede encontrarse mas informacion sobre los catalogos del sistema ejecutando consultas sobre las clases apropiadas. Como administrador.codigolibre. lo unico que tendra que hacer para iniciar el proceso postmaster es introducir esta simple orden: % postmaster Ocasionalmente. Si desea ver los mensajes de diagnostico de postmaster. Seguridad: La seguridad de la base de datos esta implementada en varios niveles: Proteccion de los ficheros de la base de datos. como la posibilidad de actuar como superusuario en Postgres.

Puede hacerlo con el siguiente orden: % createdb nombredb Postgres le permite crear cualquier numero de bases de datos en una maquina dada.org usuario mediante el fichero pg_hba. Por supuesto la autentificacion basada en equipos no es perfecta incluso en los sistemas Unix. Desde la red Si Postgres se instala como distribuido. el acceso al puerto TCP del postmaster esta disponible para todo el mundo. es que necesita que el administrador del sistema le garantice derechos para crear las bases de datos. Actualmente. Por defecto. Los usuarios pueden ser incluidos en grupos. El ABD configura el fichero pg_hba. 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.Academia De Software Libre __________________________________________________________ www. enmascarar el equipo de origen. y su longitud esta limitada a 31 caracteres.conf situado en PG_DATA. Todos los usarios que quieren utilizar Postgres se comprueban en la tabla pg_user para asegurarse que estan autorizados a hacerlo.conf(5) para obtener una descripcion de los sistemas de autentificacion disponibles.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. ________________________________________ 2010 Manual De Administración de PostgreSql 50 . Consulte a su administrador de sistemas si le ocurre eso. Creacion de una base de datos: Supongamos que quiere crear una base de datos llamada mibase. 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. Los nombres de las bases de datos han de comenzar por un caracter alfabetico. y usted se convierte automaticamente en el administrador de la base de datos que acaba de crear. El id original del usuario se emplea como base para todo tipo de comprobaciones. Las conexiones de los clientes pueden ser autentificadas mediante otros paquetes externos. para determinados intrusos. Ver pg_hba. y el acceso a las tablas puede restringirse en base a esos grupos. los usarios no tienen permiso de escritura a bases de datos que no hayan creado. Estos temas de seguridad estan fuera del alcance de Postgres. No todos los usuarios estan autorizados para convertirse en administradores de bases de datos. A cada usuario de Postgres se le asigna un nombre de usuario y (opcionalmente) una contraseña.codigolibre. Es posible. Si Postgres rechaza la orden de crear bases de datos.

Puede que quiera ejecutar el programa psql.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 Acceso a la base de datos: Una vez que ha construido la base de datos. editar y ejecutar ordenes SQL de un modo interactivo.Academia De Software Libre __________________________________________________________ www. Puede activarlo para la base de datos nombredb escribiendo la orden: % psql nombredb Recibira como respuesta el siguiente mensaje: Welcome to the Postgres interactive sql monitor: type \? for help on slash commands type \q to quit type \g or terminate with semicolon to execute query You are currently connected to the database: nombredb nombredb=> Copia de seguridad y restauracion: ________________________________________ 2010 Manual De Administración de PostgreSql 51 .codigolibre. Esta interfaz se discute en el documento Guia de programacion en PostgreSQL. para probar los ejemplos de este manual. puede acceder a ella por los siguientes medios: Ejecutando el programa monitor de terminal de Postgres (psql) que le permite introducir. Esto le permite enviar ordenes SQL desde C y obtener las respuestas y mensajes de estado en su programa. Escribiendo un programa en C que use la biblioteca de rutinas libpq.

Como pg_dump escribe en stdout. Dado que Postgres gestiona sus propios ficheros en el sistema. no hay garantia de que los ficheros esten en un estado consistente que permita su uso despues de la restauracion.dump.org Atencion Deben realizarse copias de seguridad de las bases de datos regularmente.pgdump y puede ser restaurada usando cat nombredb.gz | psql nombredb o % cat nombrefichero.nombrefichero. La copia de seguridad de una sola base de datos puede realizarse usando la siguiente orden: % pg_dump nombredb > nombredb. y lo recuperamos con: ________________________________________ 2010 Manual De Administración de PostgreSql 52 .Academia De Software Libre __________________________________________________________ www.dump.dump. no se recomienda confiar en los sistemas de copia de seguridad del sistema para las copias de respaldo de las bases de datos. puede resultar problematico el volcado de una tabla a un fichero.gz | gunzip | psql nombredb Use split: % pg_dump nombredb | split -b 1m . ya que el fichero resultante seguramente superara el tamaño maximo permitido.codigolibre.dump. puede usar las herramientas *nix para sortear estos posibles problemas: Uso de volcados comprimidos: % pg_dump nombredb | gzip > nombrefichero.gz la recuperamos con: % createdb nombredb % gunzip -c nombrefichero.pgdump | psql nombredb Esta tecnica puede usarse para mover bases de datos a una nueva localizacion y para renombrar bases de datos existentes. 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. Bases de datos grandes: Dado que Postgres permite tablas de mayor tamaño que el permitido por el sistema de ficheros.

.] ) ] | ( query ) } ________________________________________ 2010 Manual De Administración de PostgreSql 53 . 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. puede iniciarlo con la opción -d y redirigir la salida a un fichero de registro: % postmaster -d > pm...codigolibre.log 2>&1 & Si no desea ver estos mensajes. Tratamiento de problemas : El postmaster presenta ocasionalmente mensajes que pueden ser de ayuda en la solución de problemas.dump.* | pgsql nombredb Por supuesto. . Tareas administrativas: Copias de seguridad y recuperación: Una vez el sistema está en marcha.org % createdb nombredb % cat nombrefichero. Nótese que no se incluye el simbolo “& “ en el último ejemplo.. . Ademas.Academia De Software Libre __________________________________________________________ www.. . ya que el postmaster se ejecutará en segundo plano. el administrador de base de datos debe establecer una serie de tareas rutinarias para mantener el servidor en buenas condiciones. puede escribir % postmaster -S y el postmaster entrará en modo “S “ilencioso. Si desea ver mensajes de depuración de postmaster.] ) ] 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 [.. la base de datos restaurada puede tener un nombre distinto. estas tareas se pueden resumir en las siguientes: Copias de seguridad ( y pruebas de restauración de vez en cuando) Tarea de limpieza: VACUUM Tarea de reindexar: REINDEX Copy [[local]:5432/postgres@postgres][]# \h COPY Command: COPY Description: copy data between a file and a table Syntax: COPY tablename [ ( column [. por lo que este mecanismo tambien es efectivo para renombrar bases de datos.

.] ] /****Ejemplo****/ --creemos una tabla de prueba [[local]:5432/postgres@postgres][]# CREATE TABLE prueba (nombre varchar. nombre | apellidos --------+----------Jose | Mexy | Bianca | Joel | Jorge | (5 rows) Time: 0.Academia De Software Libre __________________________________________________________ www. apellidos varchar).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.cop Jose Mexy Bianca Joel Jorge --Vamos a esto..023 ms ________________________________________ 2010 Manual De Administración de PostgreSql 54 .212 ms --Veamos nuestra tabla [[local]:5432/postgres@postgres][]# select * from prueba . COPY 5 Time: 32. nombre | apellidos ---------+----------(0 rows) Time: 1.codigolibre. --Creamos el archivo con las informaciones que queramos -bash-4..cop'.. DELETE 5 Time: 28..648 ms [[local]:5432/postgres@postgres][]# SELECT * from prueba .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 [. --Realicemos el copy para la tabla prueba en la columna nombre [[local]:5432/postgres@postgres][]# COPY prueba (nombre) from '/var/lib/pgsql/prueba. .0$ cat > prueba.

Paredes Mexy.'.org --Okay esta vasia. [[local]:5432/postgres@postgres][]# COPY prueba (nombre. rotatelogs. apellidos) from '/var/lib/pgsql/prueba.cop Jose.codigolibre. ________________________________________ 2010 Manual De Administración de PostgreSql 55 .718 ms --Tendra el mismo resultado.. asi especificamos que informacion va para cada columna. SAntana Joel. que será función del tamaño de los datos y de la frecuencia con que son modificados.Academia De Software Libre __________________________________________________________ www. Santos Jorge. lo cual marcará la estrategia de copias de seguridad. Algunas herramientas usadas para las copias de seguridad nos permitirán además poder trasladar datos de unas bases de datos a otras. --Todo Ready. COPY 5 Time: 31. apellidos) from '/var/lib/pgsql/ prueba. Alvarez Bianca. Se deben realizar rutinariamente.' Time: 25. nombre | apellidos --------+----------Jose | Paredes Mexy | Alvarez Bianca | SAntana Joel | Santos Jorge | Almonte (5 rows) Time: 0. Mantenimiento del fichero de seguimiento Conviene automatizar estas tareas mediante el uso de herramientas del SO (como el cron.0$ cat > prueba. Almonte --Ahora haremos el copy con un delimiter. --Cambiamos el contenido de nuestro archivo -bash-4. se deben determinar las frecuencia conveniente..cop' with delimiter '. Copias de seguridad: Las copias de seguridad son esenciales para las recuperaciones frente a fallos.330 ms --Tambien podemos realizarlo con \copy de la misma manera asi [[local]:5432/postgres@postgres][]# \copy prueba (nombre. etc) y/o scripts.cop' with delimiter '.355 ms [[local]:5432/postgres@postgres][]# select * from prueba . se debe fijar la frecuencia adecuada para cada una de ellas y comprobar su correcta ejecución.

etc.Academia De Software Libre __________________________________________________________ www. Se puede recuperar cualquier objeto que esté en el fichero aisladamente. esquemas. Además. ________________________________________ 2010 Manual De Administración de PostgreSql 56 . se trata de realizar una copia de todos los ficheros de un cluster. 3-Volcado en línea y recuperación en el punto (PITR) Hay que tener claro que lo que estamos tratando aquí es la copia de seguridad de las bases de datos. del cual. pero el más ineficaz. 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. El servidor debe estar en marcha. bien en texto plano o en un formato propio de PostgreSQL. pg_dumpall: vuelca un cluster completo pg_restore: recupera los objetos volcados en una copia de seguridad que no se realizón en texto plano sino en un formato propio de PostgreSQL.org Además hemos de asegurarnos de que los logs. y luego. o hacer copias más frecuentes de estos logs ya que en la versión 8 ya se pueden copiar automáticamente y usar en la recuperación. nos permitirán restaurar lo que queramos. tablas. estén en otro disco.codigolibre. nos permitirán hacer copias de seguridad de toda la base de datos o de partes de ella. de los clusters. Volcado SQL: Los volcados de este tipo se realizan usando las herramientas que nos proporciona PostgreSQL. no estamos haciendo copia de seguridad del software instalado. estas herramientas sirven para la transmisión de datos entre bases de datos.postgres $ cd /tmp/backup $ tar cvfz copia. ficheros WAL. con lo que se pierden los datos que se hayan modificado desde la última copia de la base de datos. Estos volcados son muy flexibles y de gran utilidad. conviene de vez en cuando hacer una copia de seguridad de los ficheros del SO. Copias de seguridad de ficheros del SO: Es el método más sencillo. por ejemplo: $ su . dada una copia de seguridad.tar.gz $PGDATA Desventajas de este método: La base de datos debe estar parada No se pueden recuperar partes del cluster (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.) La recuperación consiste en borrar todo el cluster y descomprimir el fichero de copia de seguridad.

No tiene la opción de formatos de fichero de salida. este comando es similar a pg_dump. incluyendo roles de grupo y roles de login. redireccionando la salida $ pg_dump -n nominas2004 > esq_nominas2004. usando œ man pg_dump œse pueden ver detalles de esas opciones.Volcar una base de datos llamada mibd en un fichero tar: $ pg_dump -Ft mibd > bd.Exportar una base de datos: $ pg_dump -f bdnominas. pero tiene algunas diferencias: No permite la opción de indicar el fichero de salida.sql -h otro host -p 6432 bdnominas -. usando œ$man pg_dumpallœse pueden ver detalles de esas opciones. Es portable a servidores SQL. debido a que con pg_restore se pueden crear ficheros SQL en texto plano).Exportar un esquema. pg_dump: Con este comando. Podemos usar psql para restaurar. con lo que podemos generar un script que contenga la creación de usuarios y roles. Como se ve. ________________________________________ 2010 Manual De Administración de PostgreSql 57 . y lo mismo con PGUSER. Si no se especifica un nombre de base de datos entonces el valor de la variable de ambiente PGDATABASE es usado. Tiene una opción muy interesante que es "-g" que permite exportar únicamente los objetos globales. Tiene más opciones. PGHOST y PGPORT.Academia De Software Libre __________________________________________________________ www.sql -. podemos volcar una base de datos o parte de ella a un fichero script en texto plano o en un formato propio de PostgreSQL. Si lo hacemos en un formato propio de PostgreSQL: Debemos usar pg_restore para restaurar Es más flexible Sólo es portable entre servidores PostgreSQL (aunque esto no es del todo cierto.tar pg_dumpall: Con pg_dumpall se realizan volcados del cluster completo.codigolibre. la salida es siempre un fichero de texto plano. $ Ejemplos de uso: -.org psql: se usa para recuperar los volcados en texto plano. con lo cual hay que redireccionar la salida a un fichero. Tiene más opciones. Si lo hacemos en un fichero de texto plano: Tendremos un fichero de texto con instrucciones SQL.

para recuperarlos hacemos: $ pg_restore -Fc -f empleados.œ d Volcando en otro fichero que actua de conversor.Academia De Software Libre __________________________________________________________ www. Si lo que se quiere recuperar es un cluster completo o la parte global (roles/usuarios). Recuperación con pg_restore: Con pg_restore se pueden restaurar a partir de ficheros en formato distinto a texto plano (tar o uno propio de PostgreSQL comprimido). $ psql [bd_destino] < fichero.sql ________________________________________ 2010 Manual De Administración de PostgreSql 58 .dump $ pgsql bdorigen œ œ c drop table empleados œ $ psql bdorigen < empleados. Por ejemplo. supongamos que hemos hecho una copia de seguridad de nuestra base de datos en formato comprimido y se han perdido datos de una tabla de empleados. siempre se debe restaurar en la base de datos template1.sql -.Exportar solo los esquemas $ pg_dumpall -s > misesquemas.sql Recuperación con psql: La recuperación con psql se puede hacer cuando los ficheros de volcado son texto plano con sentencias SQL. tiene otro superusuario $ pg_dump_all -g -h otroservidor -U otrosuperusuario -p 6432 > misusuarios.sql -. Se puede seleccionar y reordenar la selección.sql -t empleados bd. es la opción por defecto œ.sql El fichero se puede modificar antes de cargarlo. porque hay algunos que realizan conversiones de codificación de caracteres o formatos y esto puede producir efectos indeseados.que además.codigolibre. Hacemos uso de la posibilidad que tiene psql de ejecutar código que le viene redireccionado de entrada desde un fichero.Exportar solo los roles / usuarios de una base de datos en otro servidor -.sql -. Se crea asi un script en texto plano que podemos modificar antes de ejecutarlo.Exportar solo los datos $ pg_dumpall -a > misdatos. Hay dos modos de hacerlo: Directamente a una base de datos.Exportar un cluster: $ pg_dumpall > micluster.org Ejemplos de uso: -. pero hay que llevar mucho cuidado con los editores que gastemos.

cuelgues.UTF-8 | postgres | postgres | UTF8 | en_US. aunque también se requiere más espacio en disco y las recuperaciones requeriran más tiempo.org Recuperación ante fallos: Fallos en la memoria principal PostgreSQL se recupera bien en fallos de la memoria primaria (cortes de luz .UTF-8 | pomavid | postgres | UTF8 | en_US. cuanto mayor sea el sistema aguantará más tiempo sin llevar los búferes sucios a disco y será más eficiente. /***Ejemplo****/ /****************** Backups******************/ --Vamos iniciar la parte de los Backups: /*********PG_DUMP***************/ --Listamos todas las Bases Datos: [postgres@jp ~]$psql -l List of databases Name | Owner | Encoding | Collation | Ctype | Access privileges --------------+---------------+-----------+-----------------+-------------+-------------HR | fcld | UTF8 | en_US. El trabajo y el tiempo de recuperación dependen del número de checkpoint_segments. el sistema se recupera usando los ficheros de log (WAL) y nunca se pierde una transacción confirmada.UTF-8 | =c/postgres : postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.el sistema hace un sync y avisa de que hacen falta más logs.sql ________________________________________ 2010 Manual De Administración de PostgreSql 59 . la base de datos no tenga que estar completamente actualizada (sync) para mantener los datos ante fallos en la memoria principal (pérdida de valores en los bufferes compartidos).UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US. Hay un número máximo de logs: 2*CHECKPOINT_SEGMENTS+1 Si se llenan sin que se haya hecho sync.UTF-8 | en_US. Los ficheros de log permiten que además.UTF-8 | en_US. etc.UTF-8 | en_US.UTF-8 | =T/postgres : postgres=CTc/postgres sacademico | sacademico | UTF8 | en_US.UTF-8 | =c/postgres : postgres=CTc/postgres (7 rows) --Haciendo Backup de la Bases Datos HR: [postgres@jp ~]$pg_dump -v HR > HR_Backup.UTF-8 | en_US.Academia De Software Libre __________________________________________________________ www.).codigolibre.UTF-8 | =Tc/fcld : fcld=CTc/fcld poma | pepe | UTF8 | en_US.UTF-8 | en_US.

4. psql (8.sql K total --Si queremos restaurar el Backup: --Borramos la Bases Datos: [postgres@jp ~]$dropdb HR --Creamos la Bases Datos: [postgres@jp ~]$createdb HR --Hacemos login en ella y verificamos q esta vacia: [postgres@jp ~]$psql -U jparedes HR Timing is on.Academia De Software Libre __________________________________________________________ www.sql ________________________________________ 2010 Manual De Administración de PostgreSql 60 . [[local]:5432/jparedes@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) --Tambien podemos restaurar el Backup de esta manera: [postgres@jp ~]$psql HR < HR_Backup.4) Type "help" for help.sql --Hacemos login en ella y verificamos: [postgres@jp ~]$psql -U jparedes HR Timing is on.sql K HR_Backup. --Ahora procedemos a restautar el Backup: [postgres@jp ~]$psql -d HR -f HR_Backup. psql (8.codigolibre.4.org --Si queremos ver el tamaño del Backup: [postgres@jp ~]$du -sch HR_Backup.4) Type "help" for help. [[local]:5432/jparedes@HR] [] # \d No relations found.

gz: gzip compressed data.13 -U postgres > remote_sacademico.sql con cat) /*********PG_DUMPALL***************/ --Vamos Extraer toda las Bases Datos: [postgres@jp ~]$pg_dumpall > Full_Backup.sql.sql Password: pepe /***Practica***/ --Realice un backup de la DB HR utilizando la opcion -a --Haga lo mismo pero con la opcion -v --Explique la diferencia.gz sacademico_Backup.168.gz --Restauramos el Backup descomprimido: [postgres@jp ~]$psql < sacademico_Backup.100.sql.gz --Verificamos el archivo: [postgres@jp ~]$file sacademico_Backup.sql. last modified: Wed Jun 2 08:49:50 2010 --Restaurando un Backup comprimido: [postgres@jp ~]$gunzip sacademico_Backup.codigolibre.Academia De Software Libre __________________________________________________________ www.dmp --Volvemos a restaurar el Backup: [postgres@jp ~]$psql -e template1 < Full_Backup. from Unix.sql.sql.sql --Realizando Backup de una maquina remota: [postgres@jp ~]$pg_dump sacademico -h 192.gz |xargs psql -d sacademico -f sacademico_Backup.sql |psql HR --Ahora vamos hacer un Backup Comprimido de la Bases Datos Sacademico: [postgres@jp ~]$pg_dump sacademico |gzip -c > sacademico_Backup. Segun su resultado (verificar cada archivo.org --Tambien con cat volcamos el backup: [postgres@jp backups]$cat caro_hr_backup.dmp ________________________________________ 2010 Manual De Administración de PostgreSql 61 .cursos sacademico > sacademico_Tcurso.sql /*^o^*/ --Podemos hacerlo paso a paso: --Primero descomprimimos el Backup: [postgres@jp ~]$gunzip -v sacademico_Backup.sql --Ahora vamos hacer un Backups de una tabla especifica: [postgres@jp ~]$pg_dump -t sacademicoschema.

para no estar haciéndolas a mano.d/crond status crond (pid 1320) is running. El servicio de cron se llama crond. Como se define en las páginas del manual de cron (#> man cron) es un demonio que ejecuta programas agendados.org --Backup de una sola Bases Datos: /*********PG_RESTORE***************/ --Primeros Hacemos un Backup del usuarios HR: [postgres@jp ~]$pg_dump -Ft HR > hr.codigolibre. o borrar ciertos archivos periódicamente.tar /***Practica***/ --Restaura los backups ya realizados dela DB HR Scripts Basico de hacer Backup: #!/bin/bash DIR=/backup/psql [ ! $DIR ] && mkdir -p $DIR || : LIST=$(psql -l | awk '{ print $1}' | grep -vE '^-|^List|^Name|template[0|1]') for d in $LIST do pg_dump $d | gzip -c > $DIR/$d. En la mayoría de las distribuciones el servicio se instala automáticamente y queda iniciado desde el arranque del sistema. digamos que podemos automatizar las tareas. se puede comprobar de varias maneras: /***Ejemplo****/ [root@guerrero ~]# /etc/init.out. pero puede ser usado para ejecutar cualquier cosa.. Iniciar cron Cron es un demonio (servicio). es un archivo en donde podemos configurar tareas para que se ejecuten automáticamente en nuestro sistema. lo que significa que solo requiere ser iniciado una vez. como respaldos. generalmente con el mismo arranque del sistema. ¿Qué es cron? Cron es el nombre del programa que permite a usuarios Linux/Unix ejecutar automáticamente comandos o scripts (grupos de comandos) a una hora o fecha específica. ejecutar un script que haga algo. digamos por ejemplo descargar un archivo de respaldo diariamente.Academia De Software Libre __________________________________________________________ www. Es usado normalmente para comandos de tareas administrativas.. etc. ________________________________________ 2010 Manual De Administración de PostgreSql 62 .tar --Ahora vamos a restaurarlo en una Bases Datos ya Existente: [postgres@jp ~]$pg_restore -d poma hr.gz Crontab El crontab.

Nótese que la primera línea empieza con #!.sh y también debemos cambiarle los permisos correspondientes para que pueda ser ejecutado. cada día. por ejemplo: #> chmod 700 respaldo. entonces el script se ejecutará cada hora.daily cron.sh -rwx-----.sh #> ls -l respaldo.d/init. las demás líneas son los comandos que deseamos ejecute el script.Academia De Software Libre __________________________________________________________ www. en un momento se entenderá el porque. dependiendo del directorio.monthly Si se coloca un archivo tipo script en cualquiera de estos directorios.hourly cron.hourly.weekly cron.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.. Este script podría nombrarse por ejemplo respaldo. cada semana o cada mes.org --Tambien con /etc/rc. --se puede también revisar a través 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 razón. 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/.. cron no esta funcionando: [root@guerrero ~]# /etc/init.sh La "x" en el grupo de permisos del propietario (rwx) indica que puede ser ejecutado.codigolibre. entonces se ejecutará cada hora con un minuto de todos los días. ________________________________________ 2010 Manual De Administración de PostgreSql 63 .1 root root 0 Jul 20 09:30 respaldo. que indica que se trata de un script shell de bash. Si este script lo dejamos en cron. bastaría 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.d/crond start Starting crond: [ OK ] --Si el servicio no estuviera configurado para arrancar desde un principio. donde muy seguramente encontrarás los siguientes directorios: • • • • cron.

indicará inicio-fin del campo. entonces cron enviará el correo al usuario propietario del comando que se ejecuta.tue. aunque no hay problema que se incluyan otros usuarios. MAIL TO es a quien se le envía la salida del comando (si es que este tiene alguna salida). Los comentarios se indican con # al inicio de la línea.day of month (1 . de hecho el /etc/crontab se asume que es el archivo crontab del usuario root.sat #||||| # * * * * * command to be executed Las primeras cuatro líneas son variables que indican lo siguiente: SHELL es el 'shell' bajo el cual se ejecuta el cron.thu. se tomará por defecto el indicado en la línea /etc/passwd correspondiente al usuario que este ejecutando cron.12) OR jan. es decir todo. Después de lo anterior vienen las líneas que ejecutan las tareas programadas propiamente. este archivo aunque es de texto.minute (0 . Ejecutando Cron con múltiples usuarios. debe ser un usuario válido del sistema o de algún otro sistema. la raíz será la que se indique en el archivo /etc/passwd correspondiente al usuario que ejecuta cron. Cron enviará un correo a quien se especifique en este variable.mar.Academia De Software Libre __________________________________________________________ www.org Como segundo modo de ejecutar o usar cron es a través de manipular directamente el archivo /etc/crontab. Los campos (son 7) que forman estas líneas están formados de la siguiente manera: Minuto Hora DiaDelMes Mes DiaDeLaSemana Usuario Comando Un asterisco * como valor en los primeros cinco campos. 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: # .---.month (1 .wed.------.. si no se indica entonces.59) # | . HOME es el directorio raíz o principal del comando cron. comando crontab Linux es un sistema multiusuario y cron es de las aplicaciones que soporta el trabajo con varios usuarios a la vez. # | | | | .23) # | | .codigolibre. Pero cuando los usuarios normales (e incluso root) desean generar su propio archivo de crontab..---------. no debe editarse directamente.31) # | | | . es decir. Si no se especifica. Este path es distinto al path global del sistema o del usuario.---------------. y de ahí el sexto campo que indica precisamente quien es el usuario que ejecuta la tarea y es obligatorio en /etc/crontab. PATH contiene o indica la ruta a los directorios en los cuales cron buscará el comando a ejecutar.fri. Si no se especifica.hour (0 .6) (Sunday=0 or 7) OR sun. se genera un archivo cron para cada usuario. En el directorio /var/spool/cron (puede variar según la distribución). En la instalación por defecto de varias distribuciones Linux.apr .feb. Cada usuario puede tener su propio archivo crontab. Un * en el campo de minuto indicará todos los minutos. una por renglón.mon. ________________________________________ 2010 Manual De Administración de PostgreSql 64 . entonces utilizaremos el comando crontab.day of week (0 . No hay límites de cuantas tareas pueda haber.------------.

Academia De Software Libre __________________________________________________________ www. entonces se puede escribir la palabra ALL al inicio de cron. 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!! Controlando el acceso a cron Cron permite controlar que usuarios pueden o no pueden usar los servicios de cron. 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á automáticamente como /var/spool/cron/usuario. /****Ejemplos****/ --Le impediremos al Usuario Brouli que utilice cron [root@guerrero ~]# echo Brouli >>/etc/cron. Esto se logra de una manera muy sencilla a través de los siguientes archivos: /etc/cron. basta con agregar su nombre de usuario al archivo /etc/cron. para permitirle su uso entonces sería agregar su nombre de usuario en /etc/cron. si por alguna razón se desea negar el uso de cron a todos los usuarios.allow.deny Brouli --Ahora comprovemoslo [Brouli@guerrero ~]$ crontab -e You (Brouli) are not allowed to use this program (crontab) See crontab(1) for more information ________________________________________ 2010 Manual De Administración de PostgreSql 65 .codigolibre.allow /etc/cron.deny.org Se tiene entonces. dos situaciones.deny --Revisemos el archivo [root@guerrero ~]# cat /etc/cron.deny Para impedir que un usuario utilice cron o mejor dicho el comando crontab.deny y con eso bastaría.

deny. chkconfig es un comando de administrador. tendrá el mismo efecto que haberlo creado con la palabra ALL. es decir.Academia De Software Libre __________________________________________________________ www. veamos.allow Si no existe el archivo cron. en este archivo. Iptables es la herramienta estándar de todas las distribuciones modernas de GNU/Linux --Ahora estableceremos el estado de iptables Podemos utilizar <on | off| reset| resetpriorities>.deny o para agregar un usuario mas a cron. pueden ser intercambiadas hacia memoria virtual cuando sea necesario) a través de la cual los administradores crean reglas para cada filtrado de paquetes y módulos de NAT.codigolibre.allow con un solo usuario. sin crear un archivo cron. [root@guerrero ~]# chkconfig iptables off --El estado del servicio iptables es totalmente inactivo. siempre se tendrán que especificar los demás usuarios que se quiere usen cron..org --Si negao y pico jeje!! Sigamos --Impidiendo el uso para todos [root@guerrero ~]# echo ALL >>/etc/cron. COMANDO chkconfig: El comando chkconfig se usa para cambiar. área de memoria donde todas las aplicaciones.allow. Si se añaden nombres de usuarios en cron. [root@guerrero ~]# chkconfig --list iptables iptables 0:off 1:off 2:off 3:off 4:off --Tambien podemos definirlo por levels asi: [root@guerrero ~]# chkconfig --level 345 iptables on 5:off 6:off ________________________________________ 2010 Manual De Administración de PostgreSql 66 . en este caso sera off. en modo de usuario. Esto quiere decir que una vez creado cron. actualizar y consultar información de runlevel para los servicios del sistema. en teoría el uso de cron esta entonces sin restricciones de usuario.deny. SINTAXIS: La sintaxis es chkconfig [opciones] /****Ejemplo****/ --Nos lista los niveles de ejecucion y el estado del servicio (si esta activo o no)..allow [root@guerrero ~]# echo Brouli >>/etc/cron. [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 Iptables: es el nombre de la herramienta de espacio de usuario (User Space.allow ni el archivo cron.

ejecutamos: select pg_stop_backup(). Para activar el archivado. ________________________________________ 2010 Manual De Administración de PostgreSql 67 .0. El sistema recicla los ficheros de log que no van a ser necesitados renombrándolos a números superiores dentro de la secuencia. Para poder utilizar esta opción tiene que estar habilitado el archivado WAL y en funcionamiento. desde la consola SQL. haciendo. con el servidor en marcha.conf debemos indicar el comando de copia para preservar los ficheros de log. por ejemplo: $ tar cvf backup_nombre_copia.0. PostgreSQL permite actualizar la copia de seguridad con los cambios que proporcionan en los ficheros de log que hayan sobrevivido. Los ficheros WAL son segmentos de 16Mb que se nombran secuencialmente en el cual el sistema va copiando los cambios en la base de datos. Para realizar copias de seguridad en línea se siguen los siguientes pasos: 1. cuando acaba. hacemos la copia desde el sistema operativo. si se producía una pérdida dentro del $PGDATA. en el fichero postgresql.codigolibre. por ejemplo: archive_command = cp -i %p /mnt/server/archivedir/%f < /dev/null donde %p representa el nombre del fichero con la ruta absoluta y %f sin la ruta. había que recurrir a la copia de seguridad física más reciente y desde ese momento las actualizaciones se perdían.X se incorpora el volcado en línea y la recuperación PITR. no hace falta parar el servidor. 3.org --Ahora los levels 3. activar el archivado WAL 2.tar $PGDATA 4. Volcado en línea y recuperación PITR: A partir de la versión 8. aunque tuviéramos los ficheros de log.X no había recuperación total. marcamos el final. verifiquemos [root@guerrero ~]# chkconfig --list iptables iptables --Chevere! 0:off 1:off 2:off 3:on 4:on 5:on 6:off Fallos en memoria secundaria (disco): Hasta la versión 7. Aquí es donde. parámetro archive_command.4 y 5 estan ON. antes de empezar y desde una consola SQL hay que ejecutar: select pg_start_backup(nombre_copia). en la versión 8.Academia De Software Libre __________________________________________________________ www.

Se copia con el nombre recovery.org 5. si todo ha ido correcto. parar el postmaster 2.conf se renombra a recovery. tal como hemos hecho en el paso 2. si existen ficheros WAL sin archivar.done. si se quiere recuperar todo y los logs están en su sitio. recovery. Para realizar una recuperación se siguen los siguientes pasos: 1. si tenemos espacio. en el directorio $HOME/pgsql/share.conf en $PGDATA y se edita. los datos estarán recuperados hasta la última transacción confirmada y el fichero recovery. Por ejemplo: $ mkdir /disco2/pg/ $ cd $PGDATA $ mv pg_xlog /disco2/pg $ ln s /disco2/pg/pg_xlog pg_xlog Además. inspeccionar la base de datos. borrar los ficheros WAL en $PGDATA/pg_xlog porque probablemente estarán obsoletos. recovery. copiarlos a pg_xlog 7. 9. Para ello. debemos mover el directorio pg_xlog a otro disco y crear un enlace simbólico.conf en el directorio $PGDATA. no hay que tocar nada. Existe una plantilla.conf. borrar todos los ficheros que hay dentro del cluster asi como los correspondientes a los tablespaces 4. se arranca PostgreSQL que entra en modo de recuperación y procede a leer la información de los WAL que necesite. crear un fichero de comandos de recuperación. copiar el cluster dañado y los tablespaces a otra ubicación 3. se crea así un fichero de marca en el directorio $PGDATA/pg_xlog/archive_status y copia los logs que se reciclan en donde se haya indicado en archive_command. podemos hacer un cron que copie los archivos que no están llenos en una ubicación distinta. para asegurarnos que no se nos pierden archivos de log. En el fichero recovery_conf hay una serie de parámetros que pueden ayudar a recuperar hasta el momento o la transacción que queramos (lo que se conoce como recuperación Point-in-time): restore_command: lo que ejecuta esta variable es lo que PostgreSQL ejecutará antes de empezar la recuperación. Conviene tener los ficheros log en un disco distinto al que está el cluster. con el cluster parado. En principio. para que la recuperación sea mejor.sample. recuperar la copia de seguridad (comprobando los tablespaces en pg_tblspc) $ tar xvf backup_nombre_copia 5. siendo necesario evitar que se conecten usuarios normales durante la recuperación. 6.codigolibre. 8. ________________________________________ 2010 Manual De Administración de PostgreSql 68 .Academia De Software Libre __________________________________________________________ www.

________________________________________ 2010 Manual De Administración de PostgreSql 69 . Dentro del VACUUM. así proporciona: 1 1 1 información usada por el optimizador no es muy pesado el proceso porque se realiza sobre una muestra al azar. Ejecutar VACUUM diariamente en todas las bases de datos Hacerlo con más frecuencia sobre tablas con mucha carga de actualización. Recomendaciones: Usar VACUUM FULL si alguna tabla ha cambiado mucho y no va a crecer en el futuro.org Por ejemplo: restore_command = cp /mnt/server/archivedir/%f %p recovery_target_time: hasta qué momento recovery_target_xid: hasta una transacción determinada recovery_target_inclusive: si los dos casos anteriores son inclusive o no.codigolibre. Determinar las tablas grandes con pocas actualizaciones para eliminarlas del VACUUM. Tareas administrativas: Vacuum: Vacuum es un proceso de limpieza que se encarga de: • • • Recuperar el espacio de disco ocupado por filas modificadas o borradas. Actualizar las estadísticas usadas por el planificador / optimizador evitar la pérdida de datos muy antiguos debido al reuso del identificador de transacción /****Ejemplo****/ /*********VACUUMDB***************/ --Vamos a limpiar y analizar la Bases Datos HR: [postgres@jp ~]$vacuumdb HR -v [postgres@jp ~]$vacuumdb -ze pomavid VACUUM ANALYZE. necesario si la distribución de los datos cambia mucho El problema del XID (identificador de transacción): Otro problema que resuelve VACUUM es el evitar la pérdida de datos muy antiguos. se pueden actualizar las estadísticas con la opción ANALYZE.Academia De Software Libre __________________________________________________________ www. haciendo lo mismo que hace el comando ANALYZE. porque MVCC introduce el concepto de marca de tiempo XID identificador de transacción.

pg_group. es decir cuando llega a 232 se reinicializa. Ejemplos: -.conf para modificar el comportamiento de este proceso.reparar los índices del catálogo compartido (pg_database. -. para esto -.reparar los índices del catálogo de base de datos.Academia De Software Libre __________________________________________________________ www. si se ejecuta poco el vacuum. se deben limpiar las tablas una vez cada mil millones de transacciones. age(datfrozenxid) from pg_database. Reindex: Otras tareas importantes son las reindexaciones.reparar todos los índices de una tabla: reindex table nomtabla.autónomo: $ 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 añadimos estas líneas: 0 3 * * * psql -c 'VACUUM FULL. si esto llega a ocurrir. Así. No se debe levantar postmaster si no que hay que arrancar un proceso -. a partir de la versión 8. Cada vez que se ejecuta VACUUM se guarda información que se puede consultar: select datname.etc.' test ________________________________________ 2010 Manual De Administración de PostgreSql 70 . El caso es que se recomienda hacer VACUUM diario.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. ya que pueden haber índices incorrectos por problemas en el software o hardware o porque haya que optimizar el índice debido a que tiene páginas muertas que hay que eliminar. la base de datos avisa al administrador. Existen además dos XID especiales: BootstrapXID y FrozenXID.org XID está limitado a 32 bits. Hay una serie de parámetros en postgresql. tiene un funcionamiento circular. PostgreSQL incorpora un proceso de fondo AUTOVACUUM que se ejecuta periódicamente cuando está habilitado y él mismo comprueba las tablas con alta carga de actualizaciones. se perderían datos. -.). pg_shadow. AUTOVACUUM: Para evitar los problemas con la ejecución de VACUUM.codigolibre. -. -.reparar un indice: reindex index nomindice.

podemos filtrar las filas en las que salga "postmaster:" -. vmstat. también muestra la memoria caché y de buffer consumida por el Kernel. pg_top) ps Usando el comando ps.Academia De Software Libre __________________________________________________________ www. se rehacen muchos ficheros. Monitorizacion: La monitorización de la actividad del servidor PostgreSQL se puede hacer con herramientas del SO o con herramientas propias de la base de datos.ver los procesos backend $ ps -ef |grep "postgres:" | grep -v grep supongamos que tenemos una salida como la siguiente: $ ps -ef | grep postmaster | grep –v grep /****Ejemplo****/ /*********PROCESOS***************/ --Vamos a ver los procesos generados por el Usuario PostgreSQL: ________________________________________ 2010 Manual De Administración de PostgreSql 71 .ver el proceso servidor: $ ps -ef |grep "postmaster" | grep -v grep -. Comandos del Sistema Operativo (Linux / Unix): La monitorización se debe fijar sobre todo en: Uso de swap (free. etc.codigolibre.) ● Free muestra la cantidad de memoria libre y usada que tiene el sistema.) ● iostat informa repetidamente de las estadísticas de E/S para cada disco activo del sistema. pues una reindexación de toda la base de datos implica que se puede duplicar el tamaño de los ficheros de la base de datos. ya que el sistema de WAL crea archivos de log para cada cambio. etc. problema entre Reindex y Archivado WAL: Hay que tener presente que cuando reindexamos. con lo que hay que llevar especial cuidado si el archivado WAL está activado. htop. Monitoreo interactivo (top. ps. para que esta herramienta se vuelva dinámica se deben especificar los argumentos: vmstat -n <numero de segundos por actualizacion > ● Uso del disco (iostat.org 0 3 * * * vacuumdb -a -f 0 30 * * * reindexdb bd ¡ATENCIÓN!. Por una parte muestra la memoria física y por otra la swap. vmstat : Es muy similar a top ya que es un condensado de los procesos del sistema.

0. 3.Academia De Software Libre __________________________________________________________ www. load avg: 0. 0.00% 0.74.33. 86. 2365M free.00% postgres: postgres pomavid 127.0. htop: --Si queremos monitoriar nuesto server con una herramienta nativa: [postgres@jp ~]$pg_top last pid: 14812.org [postgres@jp ~]$ps -Upostgres PID TTY TIME CMD 5668 ? 00:00:01 postmaster 5970 ? 00:00:00 postmaster 5972 ? 00:00:00 postmaster 5973 ? 00:00:00 postmaster 5974 ? 00:00:00 postmaster 5975 ? 00:00:01 postmaster 7830 ? 00:00:00 postmaster 7831 ? 00:00:00 postmaster 7850 ? 00:00:00 postmaster 8090 pts/1 00:00:01 bash 8160 pts/2 00:00:00 bash --Tambien podemos utilizar herramientas como top.1(13687) idle 7830 postgres 24 0 53M 5600K sleep 0:00 0. /******Para monitorear la memoria virtual******/ [postgres@jp ~]$vmstat 2 procs -----------memory---------.0.-----cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 2421036 105964 880432 0 0 37 36 558 826 8 2 89 2 0 0 0 0 2421036 105972 880432 0 0 0 6 1088 1249 6 1 89 4 0 --Siqueremos monitorizar la actividad de los dispositivos.1(13686) idle 14813 postgres 20 0 53M 4228K sleep 0:00 0.43.-----io---. 103M buffers.0% iowait Memory: 1613M used.00% postgres: postgres pomavid 127. 0.00% 0. up 0+02:55:34 12:07:28 4 processes: 4 sleeping CPU states: 10. ________________________________________ 2010 Manual De Administración de PostgreSql 72 .3% user.00% 0.0.7% idle.00% 0. 860M cached Swap: 8000M free PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 7831 postgres 25 0 54M 6964K sleep 0:00 0.00% postgres: postgres postgres [local] idle 7850 postgres 17 0 53M 4340K sleep 0:00 0.--system-.0. 0.1(13705) idle /***Pratica***/ --Utiliza las opciones -p y -d --Explique su resultado.---swap-. 0.0% nice. particiones y sistemas en red (NFS) del sistema.0.codigolibre.00% postgres: postgres postgres 127.0% system.

42 118465 455896 0.3.59 1557037 1532508 0.codigolibre.01 0.04 1.00 9474 2 0.0G 0 2.18-194.31 0.0G 0% /dev/shm /dev/sdb1 149G 149G 77M 100% /media/disk --Si queremos ver el tamaño ocupado por el server de PostgreSQL: [postgres@jp ~]$du -sch data/ 108M data/ 108M total ________________________________________ 2010 Manual De Administración de PostgreSql 73 .65 142.00 88.05 0.00 2742 17 --Para ver el tamaño completo disponible en nuestro FileSystem: [postgres@jp ~]$df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VGOracle-VLBarra 38G 1.26 0.04 0.fcld.el5PAE (jp.00 9018 2 6.01 3282 56 4.09 75.6.88 0.02 42.52 144.60 0.72 0.local) 06/05/2010 avg-cpu: %user %nice %system %iowait %steal %idle 7.5G 44G 4% /var /dev/mapper/luks-e42c95a5-a0d9-47ad-a57f-53dc36e13592 142G 121G 14G 90% /home /dev/sda1 99M 75M 20M 80% /boot tmpfs 2.42 117514 455896 0.04 0.52 808794 134520 11.org --además también muestra una media en % del uso de CPU en la máquina.26 0.87 142.38 35.Academia De Software Libre __________________________________________________________ www.19 0.29 386026 819944 6.04 0.12 22.11 10.03 2.03 0.00 576 0 0.53 144.1G 35G 3% / /dev/mapper/VGOracle-VLOpt 141G 98G 37G 74% /opt /dev/mapper/VGOracle-VLUsr 76G 42G 31G 58% /usr /dev/mapper/VGOracle-VLVar 48G 1.36 237146 122088 0.01 0.00 2814 17 0. [postgres@jp ~]$iostat 2 Linux 2.03 0.93 42.59 1554721 1532504 2.92 76.61 Device: sda sda1 sda2 dm-0 dm-1 dm-2 dm-3 dm-4 dm-5 sdb sdb1 dm-6 sdc sdc1 tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn 10.25 12.84 0.15 11.06 11.1.00 2012 4 10.

Sign up to vote on this title
UsefulNot useful