Instalar una Base de Datos (Servicio)
Postgres es una base de datos avanzada que cumple con el Test ACID. Es gratuita y con licencia BSD. Es una base de datos con toda la funcionalidad necesaria para cualquier tipo de aplicación desde la más sencilla a la más compleja por eso la hemos escogido como motor de base de datos.
Objetivos
- Conocer su Arquitectura y Funcionamiento
- Instalación, Configuración y Mantenimiento de Postgres
- Funciones y Trabajo de DBA
Clases
- Introducción e Instalación Básica
- Postgres SQL: ¿Qué es?, Historia, Características, Ventajas/Inconvenientes
- Versiones Postgres (diferentes ramas principales):
- Plan de Trabajo para Instalación desde Código Fuente: qué necesito, versión del software, módulos y documentación
- Instalación del Programa
- Instalación: configuración (./configure), compilación (make), instalación (make install)
- Creación de usuario y directorio de la base de datos. (data y configurar permisos)
- Jerarquía de directorios: bin, doc, include, man, share, lib y DATOS
- Inicializar el directorio de Datos (initdb -D el_directorio_que_escoja)
- Arrancar/Parar el SGBDR (postmaster y/o script pg_ctl). Poner SIEMPRE el directorio de la BD
- Principales Problemas:
- ¿Existe un directorio para los datos? ¿lo he especificado?
- ¿Hay ya un servidor funcionando?
- ¿Tengo los permisos necesarios?
- Trabajo Post-Instalación: configurar PATH, Librerías
- Probar la instalación básica:
- Creación de Bases de Datos (comandos createdb/dropdb). P. ej: $PG_HOME/bin/createdb test
- Creación de Usuarios (comandos createuser/dropuser). P.ej: $PG_HOME/bin/createuser usuario
- Usuario DBA: puede crear/borrar bases de datos y puede crear/borrar usuarios/
- Conectarse a la BD, ejecutar algunos comandos SQL, desconectarse y borrar la BD
- Revisar el Funcionamiento. Archivos de Log:
- Archivo de Log (típico $PGDATA/server.log): redireccionando la salida del comando o con opciones en el script. Diferentes niveles de log.
- Niveles de Aviso: DEBUG, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, PANIC
- Revisar el archivo: comandos unix more, tail, head, cat, grep, etc
- Ejemplos de líneas de log:
NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index "pa_photo_pk" for table "pa_photos" LOG: received smart shutdown request LOG: shutting down ERROR: duplicate key violates unique constraint "cr_extlinks_pk" ERROR: -20000: Inserts are not allowed into cr_text. FATAL: database "ejemplo" does not exist
- Configuración Servidor / Postgresql Server Configuration
- Archivo de Configuración: postgresql.conf (en $PGDATA).
- Se usan parámetros (Sintaxis name = value). Por ejemplo: Parámetros para Conexión como listen_addreses , port, max_connections
- Control de Acceso ( Authentication)
- Control Basado en Host (Host-Based Access). Archivo pg_hba.conf
- Quién, desde dónde y a qué
- Tipos de conexión localhost y vía host (TCP/IP)
- Estructura pg_hba.conf:
- Tipo de Conexión: local | host | hostssl
- database (all | sameuser | name)
- user
- ip_addr netmask
- authentication_method (password, crypt, ident, trust, md5, reject )
- Ejemplos de Archivos de Configuración
- Gestión de usuarios y Bases de Datos
- Tipos de usuarios: DBA y usuarios (normal, desarrollador, programador, etc)
- Gestión de Usuarios ( y Grupos)
- Tablas del Sistema sobre usuarios:
- pg_user: Tabla con información de usuarios
- pg_shadow: Tabla con información sobre la clave de usuarios
- Gestionar Usuarios
- Lenguaje DCL: Data Control Language. Sentencias SQL: CREATE USER, DROP USER Y ALTER USER
- Utilizando comandos: createuser, dropuser
- Tablas del Sistema sobre usuarios:
- Gestión de Bases de Datos
- Utilizar Lenguaje DCL: Data Control Language. Sentencias SQL: CREATE DATABASE, DROP DATABASE y ALTER DATABASE
- Utilizando comandos: createdb, dropdb
- Tabla del Sistema: pg_database
- Gestión de Permisos y Copias de Seguridad
- Gestión de Permisos sobre Objetos
- Tipos de permisos (y letra simbólica): SELECT (r), INSERT (a), UPDATE (w), DELETE (d), REFERENCES (x), CREATE (C) y ALL
- La palabra PUBLIC especifica cualquier usuario y ALL especifica todos los permisos
- Se pueden otorgar (GRANT) o quitar permisos (REVOKE)
- Para ver los permisos de un objeto: \z tabla_ejemplo
Schema | Table | Access privileges --------+--------------------+------------------------------------------------ public | tabla_ejemplo | {usuario_ejemplo=a*r*w*d*R*x*t*/usuario_ejemplo}
- Ejemplos
GRANT UPDATE ON tabla_ejemplo TO usuario_ejemplo; REVOKE ALL ON tabla_ejemplo FROM PUBLIC;
- Tablas del Sistema: pg_class. Ejemplo: select relname, relacl from pg_class;
- Gestión de Copias de Seguridad
- Utilizando comandos (El que hay que utilizar): pg_dump (para cada bd) y pg_dumpall (todas). Revisar las opciones (modelo de datos, contenido, comprimir, etc)
- Copiar el Sistema de Archivos (PGDATA)
- Otras funciones del mantenimiento:
- Sobre la actividad de la BD (tablas del Sistema)
- Sobre el Rendimiento del Sistema: Procesador, Memoria y Sistemas de Archivos)
- Sobre la Documentación de los Modelos de Datos y Atención a los desarrolladores
- Gestión de Permisos sobre Objetos
Actividades
- Instalación de Postgres (dos días):
- Descargar el servidor
- Instalar (en vuestro HOME), arrancar y parar (comando y scripts)
- Conocer los diferentes archivos que hay en el directorio de instalación
- Configuración del Servidor y Logs:
- Arrancar/Parar Servidor con logs (creados por mí, y a través del script "pg_ctl")
- Añadir configuración en postgres.conf para activar conexión TCP y detallar el archivo de log
- Configurar Acceso vía Host (modificando base de datos, usuarios y mecanismo de envío de la clave)
- Acceso desde cualquier parte
- Acceso desde una sola máquina
- Gestión de Autenticación
- Gestión de Usuarios: Añadir, Borrar y Modificar parámetros de usuarios
- Gestión del Acceso vía host y usuario a las bases de datos
- Revisar Tablas del sistema: pg_user, pg_shadow
- Gestión de Permisos
- Crear un usuario "invitado" que sólo pueda leer la tabla
- Crear un usuario "web" que pueda añadir, leer, actualizar y borrar datos
- Comprobar los permisos a través de la tabla pg_class o el comando \z
- Administracion y Mantenimiento
- Repaso a la situación interna: VACUUM y vacuumdb
- Hacer copia de seguridad: pg_dump y pg_dumpall (¿cuando?, ¿cómo?, hot backup)
- Recuperar la base de datos: pg_restore. Crear la BD , los usuarios, y los características de la BD
- Copiar el sistema de archivos directamente
Duración del Curso
El esfuerzo estimado del curso es de 1 crédito ECTS. Unas 30 horas de dedicación.
Recursos a Utilizar
- Comunidad Postgres (español, inglés)
- Documentación on-line Postgres
- Documentación Local Instalada ($PREFIX/doc/html/index.html)
- Domentacion en Sección Apuntes
- Diferencias entre mySQL y Postgres. Artículo avanzado en inglés