132
Contenido Unidad 1:Introducción a PostgreSQL Historia Descripción Básica Fundamentos del Diseño de Base de Datos Relacional (BDR) Mejores prácticas para el diseño de BDR. Unidad 2: Administración básica de PostgreSQL Funcionamiento de PostgreSQL Instalación y actualizaciones Puesta en marcha de un servidor PostgreSQL. Como iniciar, detener o pausar el funcionamiento de un servidor PostgreSQL Herramientas y programas estándar: Pgadmin y psql. Crear y Borrar una Base de Datos Acceder a una base de datos. Seguridad en PostgreSQL. Roles: Usuarios y Grupos. Esquemas y Permisos. Vistas y Reglas. Seguridad de datos. Comunicaciones y Conexiones Remotas. Restricciones a través de la configuración. Métodos de Autentificación y cifrado. Unidad 3: Operaciones con tablas Creación de tablas. Tipos de campos. Modificar la estructura de una tabla: Agregar/eliminar filas Eliminar tablas. Mostrar el contenido de una tabla Modificar Filas Unidad 4: Características avanzadas de PostgreSQL Claves Foráneas Junturas (Joins) Transacciones Herencia. Tópico adicional de administración: Tablespaces

CursoCurso de PostgreSQL - Versión 1

Embed Size (px)

DESCRIPTION

Curso Básico de PostgreSQL por Crox A. Sánchez R.

Citation preview

  • Contenido

    Unidad 1:Introduccin a PostgreSQL

    Historia Descripcin Bsica Fundamentos del Diseo de Base de Datos Relacional (BDR) Mejores prcticas para el diseo de BDR.

    Unidad 2: Administracin bsica de PostgreSQL

    Funcionamiento de PostgreSQL Instalacin y actualizaciones Puesta en marcha de un servidor PostgreSQL. Como iniciar, detener o pausar el funcionamiento de un servidor

    PostgreSQL Herramientas y programas estndar: Pgadmin y psql. Crear y Borrar una Base de Datos Acceder a una base de datos. Seguridad en PostgreSQL. Roles: Usuarios y Grupos. Esquemas y Permisos. Vistas y Reglas. Seguridad de datos. Comunicaciones y Conexiones Remotas. Restricciones a travs de la configuracin. Mtodos de Autentificacin y cifrado.

    Unidad 3: Operaciones con tablas

    Creacin de tablas. Tipos de campos. Modificar la estructura de una tabla: Agregar/eliminar filas Eliminar tablas. Mostrar el contenido de una tabla Modificar Filas

    Unidad 4: Caractersticas avanzadas de PostgreSQL Claves Forneas Junturas (Joins) Transacciones Herencia. Tpico adicional de administracin: Tablespaces

  • Unidad 1:Introduccin a PostgreSQL

    Breve Historia de PostgreSQL:

    La historia de PostgreSQL comienza en el ao 1986 como un proyecto del profesor MichaelStonebraker y un equipo de desarrolladores de la Universidad Berkeley (California), cuyonombre original era POSTGRES. En su diseo se incluyeron algunos conceptos avanzadosen bases de datos y soporte parcial a la orientacin a objetos.

    Luego, POSTGRES fue comercializado por Illustra, una empresa que posteriormente formparte de Informix (que comercializaba el conocido SGBD del mismo nombre, y que fueraabsorbida por IBM y su DB/2). Lleg un momento en que mantener el proyecto requera ladedicacin de demasiado tiempo para los investigadores y acadmicos, por lo que en 1993se liber la versin 4.5 y oficialmente se dio por terminado el proyecto.

    En 1994, Andrew Yu y Jolly Chen incluyeron SQL en Postgres para posteriormente liberar sucdigo en la web con el nombre de Postgres95. El proyecto inclua mltiples cambios alcdigo original que mejoraban su rendimiento y legibilidad. A partir del ao 1996 el nombrecambi a PostgreSQL retomando la secuencia original de versiones, por lo que se liber laversin 6.0. y desde entonces ha venido evolucionando hasta la actualidad, liberando versintras versin hasta llegar a la que se estar utilizando en este curso que es la versinPostgreSQL 9.3.

    Descripcin Bsica:

    PostgreSQL es un sistema de gestin de base de datos relacional orientada a objetos y libre,publicado bajo la licencia BSD. Soporta una gran parte del estndar SQL y ofrece muchascaractersticas modernas:

    Consultas complejas Claves forneas Disparadores (triggers) Vistas Integridad transaccional Control de concurrencia en mltiples versiones

    Adems, PostgreSQL permite ser ampliado en una variedad de aspectos, tales como laagregacin de:

    Funciones Operadores Tipos de datos Agregados de funciones

  • Mtodos ndices Lenguajes procedimentales

    Tambin es importante mencionar que PostgreSQL es publicado bajo una licencia libre, loque permite el uso, modificacin y distribucin para cualquier persona, libre de pago paracualquier propsito, privado, comercial o acadmico. Los desarrolladores de proyectosbasados en software libre tienen muy en cuenta PostgreSQL cuando los requerimientos deun proyecto exigen prestaciones de alto nivel.

    PostgreSQL destaca por su amplsima lista de prestaciones que lo hacen capaz de competircon cualquier SGBD comercial:

    Est desarrollado en C, con herramientas como Yacc y Lex. La API de acceso al SGBD se encuentra disponible en C, C++, Java, Perl, PHP,

    Python y TCL, entre otros. Su administracin se basa en usuarios y privilegios. Sus opciones de conectividad abarcan TCP/IP, sockets Unix y sockets NT, adems de

    soportar completamente ODBC. Los mensajes de error pueden estar en espaol y hacer ordenaciones correctas con

    palabras acentuadas o con la letra . Es altamente confiable en cuanto a estabilidad se refiere. Puede extenderse con bibliotecas externas para soportar cifrado de datos, bsquedas

    por similitud fontica (soundex), etc. Implementacin de algunas extensiones de orientacin a objetos. En PostgreSQL es

    posible definir un nuevo tipo de tabla a partir de otra previamente definida.

    Otras de las principales caractersticas de PostgreSQL son:

    Alta concurrencia:

    Mediante MVCC (Multi-Version Concurrency Control o Control Concurrente Multi-versin, porsus siglas en ingls) PostgreSQL permite que mientras un proceso escribe datos en unatabla, otros procesos o usuarios accedan a la misma tabla sin necesidad de bloqueos. Cadausuario obtiene una visin consistente de lo ltimo a lo que se le hizo una transaccin dedatos. Esta estrategia es superior al uso de bloqueos por tabla o por filas comn en otrasbases, eliminando la necesidad del uso de bloqueos explcitos.

    Variedad de tipos nativos:

    PostgreSQL soporta los siguiente tipos nativos de datos:

    Texto de largo ilimitado. Nmeros de precisin arbitraria. Arrays. Figuras geomtricas .

  • Direcciones IP (IPv4 e IPv6). Bloques de direcciones estilo CIDR. Direcciones MAC.

    Los usuarios tienen la posibilidad de crear tipos de datos propios, que pueden ser porindexables completamente con la infraestructura GiST de PostgreSQL. Algunos ejemplosson los tipos de datos GIS creados por el proyecto PostGIS.

    Algunas otras caractersticas que se detallan a continuacin:

    Claves Forneas (foreign keys). Disparadores (triggers): Es una accin especfica que se realiza de acuerdo a

    un evento, cuando ste evento ocurra dentro de la base de datos. EnPostgreSQL esto significa la ejecucin de un procedimiento almacenadobasado en una determinada accin sobre una tabla especfica. Todos losdisparadores poseen las siguientes caractersticas:

    Nombre del disparador o trigger El momento en que el disparador debe arrancar El evento del disparador deber activarse sobre... La tabla donde el disparador se activar La frecuencia de la ejecucin La funcin que podra ser llamada

    Entonces combinando estas seis caractersticas, PostgreSQL le permitir crearuna amplia funcionalidad a travs de su sistema de activacin de disparadores(triggers).

    Vistas. Integridad transaccional. Herencia de tablas. Tipos de datos y operaciones geomtricas. Soporte para transacciones distribuidas.

    Y hay ms, PostgreSQL tambin permite la definicin de funciones, tanto disparadoras comoregulares mediante diversos lenguajes de programacin como lo son:

    El lenguaje propio PL/PgSQL (similar a PL/SQL de Oracle). Lenguaje C y C++. Java PL/Java web. PL/Perl. plPHP. PL/Python. PL/Ruby. PL/sh. PL/Tcl.

  • PL/Scheme. Lenguaje para aplicaciones estadsticas R por medio de PL/R entre otros.

    Arquitectura :

    PostgreSQL funciona con una arquitectura cliente/servidor, por lo que una sesin delprograma consta de dos procesos que cooperan entre si:

    Servidor: proceso que gestiona los archivos de la base de datos, aceptaconexiones, procesa las operaciones solicitadas por el cliente. El programaservidor se llama postgres.

    Cliente: programa que interacta con el usuario u otro proceso que deseerealizar operaciones dentro de la base de datos. Las herramientas cliente sonmuy diversas en su naturaleza y tipo, sin embargo se pueden agrupar en lassiguientes categoras: De texto (o interfaz de lnea de comandos) Grfica De acceso web De administracin de las bases de datos Geogrficas Bibliotecas especializadas

    Es tpico que en una aplicacin con arquitectura cliente/servidor, el cliente y el servidor seencuentren en computadores distintos. En este caso ellos se comunican mediante unaconexin de red TCP/IP.

    Fundamentos del Diseo de Base de Datos Relacional (BDR)

    Las Bases de datos surgieron de la necesidad que tenan las grandes empresas dealmacenar grandes cantidades de informacin de forma rpida, sencilla y fiable, y que a suvez pudieran acceder a ella en cualquier momento sin necesidad de desplazarse fsicamentea lugares destinados a almacenar documentacin, tal como era comn en esa poca.

    El nacimiento y crecimiento en uso de aplicaciones y programas informticos trajo comoprctica comn y necesaria el almacenamiento de datos en los archivos de los programas.Esto era ms cmodo, pero an as haba grandes dificultades a la hora de querer modificarregistros, estructuras o simplemente cuando se deseaba buscar informacin.

    El nacimiento de las bases de datos ocurre al final de la dcada de los sesenta. En estasbases de datos se guardan los datos utilizados por los usuarios, empresas, etc. Y losprogramas que los utilizan no se tienen que preocupar de su mantenimiento nialmacenamiento por lo que un cambio en la base de datos no tiene porqu afectar enprincipio a los programas que la utilizan.

    Una base de datos es un conjunto de datos interrelacionados y almacenados de tal manera

  • que no tienen redundancias innecesarias, los cuales sirven a las aplicaciones sin estarrelacionados de una manera directa entre ellos.

    Una base de datos puede ser utilizada por varias aplicaciones y usuarios. Toda base dedatos debe permitir insertar, modificar y borrar datos por lo que en las bases de datos seguarda informacin de dos tipos:

    Datos de usuarios (datos usados por las aplicaciones) Datos de sistema (datos que la base de datos utiliza para su gestin. Ej. Datos

    de los usuarios que tienen acceso a la base de datos)

    Organizacin de una base de datos

    Una base de datos organizada debe cumplir con los siguientes objetivos:

    Ser verstil. Dependiendo de los usuarios o las aplicaciones, se puedan hacerdiferentes cosas o se puedan tratar los datos de formas distintas.

    Velocidad de respuesta adecuada a cada aplicacin o empresa, respondiendoen lo que se la requiera.

    Mnimo ndice de redundancia. Alta capacidad de acceso para ahorrar la mayor cantidad de tiempo posible en

    la realizacin de consultas. Alto ndice de integridad, esto significa que al tener muchos usuarios

    consultando una misma base de datos no puede haber fallos en la insercin dedatos, errores por redundancia o lenta actualizacin.

    Tener un alto nivel de seguridad y privacidad ya que los datos que sealmacenan en una base de datos pueden ser muy confidenciales o importantes.

    Capacidad para una constante actualizacin, de esta manera la base de datosno se vuelve obsoleta o inservible. Un cambio en la organizacin fsica de losdatos no debe afectar a los programas por lo que tambin debe tenerindependencia fsica de los datos. Al igual, tiene que tener total independencialgica con los datos, esto quiere decir que si se hacen cambios en la estructuralgica de los datos (agregar nuevos campos a una tabla) no deben afectar a lasaplicaciones que utilicen esos datos.

    Nivel de Abstraccin de una Bases de Datos

    Los usuarios no tienen porqu conocer cmo estn organizados y almacenados los datos.Por este motivo, una base de datos debe presentar los datos de forma que un usuario puedainterpretarlos y modificarlos. Evidentemente esto se puede aplicar a un informtico quenecesite saber donde se encuentran fsicamente los datos para poder tratarlos. Se pueden establecer tres niveles principales segn la visin y la funcin que realice elusuario sobre la base de datos:

    Nivel Interno: Este esquema se especifica mediante un modelo fsico y describe todos los

  • detalles para el almacenamiento de la base de datos, as como los mtodos de acceso. Es elnivel ms cercano al almacenamiento fsico de los datos. Permite escribirlos tal y como estnalmacenados en el computador. En este nivel se disean los archivos que contienen lainformacin, la ubicacin de los mismos y su organizacin, es decir se crean los archivos deconfiguracin.

    Nivel conceptual: Este esquema oculta los detalles de las estructuras de almacenamiento yse concentra en describir entidades, atributos, relaciones, operaciones de los usuarios yrestricciones. En este nivel se representan los datos que se van a utilizar sin tener en cuentaaspectos como se representan en el nivel interno.

    Nivel externo: Se describen varios esquemas externos o vistas de usuario. Cada esquemaexterno describe la parte de la base de datos que interesa a un grupo de usuariosdeterminado y oculta a ese grupo el resto de la base de datos. Es el ms cercano al usuario.En este nivel se describen los datos o parte de los datos que ms interesan a los usuarios.

    En la siguiente figura se muestran estos niveles

    Modelo de Bases de Datos Relacional

    Modelo Entidad-Relacin

    El modelo Entidad-Relacin se utiliza para realizar el diseo lgico de la Base de Datos. Fuepropuesto por Peter Chen en el ao 1976 y desde entonces se viene utilizando de maneraglobal. Se caracteriza por utilizar una serie de smbolos y reglas para representar los datos ysus relaciones. Con este modelo se consigue representar de manera grfica la estructuralgica de una base de datos. Los principales elementos del modelo entidad-relacin son lasentidades con sus atributos y las relaciones entre entidades.

    Entidad

    Representa un elemento que contiene una informacin de inters para la base de datos. Serepresenta grficamente mediante un rectngulo. Un ejemplo sera la entidad cliente, dondese recogen los datos relativos a ese cliente, como puede ser el nombre, el nmero de cdula,la direccin, fecha de nacimiento, etc.

  • Relacin Un relacin se define como una asociacin entre dos o ms entidades. A cada relacin se leasigna un nombre para poder distinguirla de las dems y saber su funcin dentro del modeloentidad-relacin. Las relaciones se representas grficamente con rombos, y dentro de ellasse coloca el nombre de la relacin.

    Cardinalidad

    La cardinalidad entre dos relaciones se define como la manera en que una entidad serelaciona con otra en cuanto a la cantidad de entidades de un mismo tipo involucradas en larelacin, a saber:

    1:1. Cardinalidad de uno a uno, que significa que para cada ocurrencia de una entidad lecorresponde como mximo una ocurrencia de la otra entidad relacionada.

    1:N. Cardinalidad de uno a Muchos, para cada ocurrencia de la entidad A le puedencorresponder varias de la entidad B.

    N:M. Cardinalidad de muchos a muchos, cada ocurrencia de una entidad puedecorresponderse con varias de la otra entidad relacionada y viceversa.

    Atributo

    Se define como cada una de las propiedades de una entidad o relacin. Cada atributo tieneun nombre y todos los posibles valores que puede tener. Dentro de una entidad debe existirun atributo principal identificando a la entidad y su valor tiene que ser nico. Un ejemplo deatributo principal seria la cdula de identidad dentro de la entidad cliente. Un atributo serepresenta grficamente mediante una elipse conteniendo el nombre del atributo.

    A continuacin se muestra un ejemplo de un modelo entidad-relacin.

    Tablas

    En PostgreSQL la informacin se organiza en tablas, estas tablas son filas y columnas

    Fabricante Equipo HechoPor

    referencia nombre direccin

  • similares a las una hoja de clculo. Una base de datos simple puede que contener una solatabla; sin embargo, la mayora de las bases de datos utilizan varias tablas. Por ejemplo, enuna empresa que venda distintos artculos, se podra tener una tabla con informacin sobrelos artculos, otra con informacin sobre los pedidos y una tercera con informacin sobre losclientes.

    A cada fila en una tabla se le conoce con el nombre de registro y a la informacin que estubicada en cada columna se le conoce con el nombre de campo. Un registro es una formalgica y coherente de combinar informacin sobre alguna cosa. Un campo es un elementonico de informacin, un tipo de elemento que aparece en cada registro. En la tabla Artculos,por ejemplo, cada fila o registro contendra informacin sobre un producto y cada columnacontendra algn dato sobre ese producto, como su nombre o el precio.

    Relaciones

    El proceso de diseo de una Base de Datos produce como salida un conjunto de tablas. Unavez dividida al informacin en tablas se necesita un modo de reunir de nuevo la informacinde forma provechosa. Por ejemplo, el siguiente formulario incluye informacin de variastablas.

  • Tablas involucradas:

    Tabla Clientes. Tabla artculos. Tabla Pedidos. Tabla Grupos.

    PostgreSQL es un sistema de administracin de bases de datos relacionales. En una basede datos relacional, la informacin se divide en tablas distintas en funcin del tema. En losmodelos de Bases de Datos relacionales, se utilizan relaciones entre las tablas para reunir lainformacin segn se precise.

    En las dos siguientes figuras se muestran ejemplos de una relacin de muchos a uno y deuna relacin de muchos a muchos

    Normalizacin

    En un diseo de Base de Datos se aplican las reglas de normalizacin de datos(denominadas a veces simplemente reglas de normalizacin). Estas reglas sirven paracomprobar si las tablas estn estructuradas correctamente. El proceso de aplicar las reglas aldiseo de la base de datos se denomina normalizar la base de datos o, simplemente,normalizacin.

    La normalizacin es ms til una vez representados todos los elementos de informacin ydespus de haber definido un diseo preliminar. La idea es asegurarse de que se handividido los elementos de informacin en las tablas adecuadas. Lo que la normalizacin nopuede hacer es garantizar que se dispone de los elementos de datos correctos para empezara trabajar.

    Las reglas se aplican consecutivamente en cada paso para garantizar que el diseo adopta

  • lo que se conoce como "forma normal". Hay cinco formas normales ampliamente aceptadas:de la primera forma normal a la quinta forma normal. En este manual se abordan las tresprimeras, porque todas ellas son necesarias para la mayora de los diseos de base dedatos.

    Primera forma normal

    La primera forma normal establece que en cada interseccin de fila y columna de la tablaexiste un valor y nunca una lista de valores. Por ejemplo, no puede haber un campodenominado Precio en el que se incluya ms de un precio. Si considera cada interseccin defilas y columnas como una celda, cada celda slo puede contener un valor.

    Segunda forma normal

    La segunda forma normal exige que cada columna que no sea clave dependa por completode toda la clave principal y no slo de parte de la clave. Esta regla se aplica cuando existeuna clave principal formada por varias columnas. Por ejemplo, se asume existe una tabla conlas siguientes columnas, de las cuales Id. de pedido e Id. de artculo forman la claveprincipal:

    Id. de pedido (clave principal)

    Id. de artculo (clave principal)

    Nombre de artculo

    Este diseo infringe los requisitos de la segunda forma normal, porque Nombre de artculodepende de Id. de artculo, pero no de Id. de pedido, por lo que no depende de toda la claveprincipal. Se debe quitar Nombre de producto de la tabla, porque pertenece a una tabladiferente (a la tabla Artculos).

    Tercera forma normal

    La tercera forma normal exige no slo que cada columna que no sea clave dependa de todala clave principal, sino tambin que las columnas que no sean clave sean independientesunas de otras.

    Dicho de otra forma: cada columna que no sea clave debe depender de la clave principal ynada ms que de la clave principal. Por ejemplo, se asume una tabla con las siguientescolumnas:

    IdArtculo (clave principal)

    Nombre

  • PVP

    Descuento

    Si la columna Descuento depende del precio de venta al pblico (PVP) sugerido, esta tablainfringe los requisitos de la tercera forma normal porque una columna que no es clave, lacolumna Descuento, depende de otra columna que no es clave, la columna PVP. Laindependencia de las columnas implica que debe poder cambiar cualquier columna que nosea clave sin que ninguna otra columna resulte afectada. Si cambia un valor en el campoPVP, la columna Descuento cambiara en consecuencia e infringira esa regla. En este caso,la columna Descuento debe moverse a otra tabla cuya clave sea PVP.

    Claves Primarias

    Cada tabla debe incluir una columna o conjunto de columnas identificando inequvocamentecada fila almacenada en la tabla. sta suele ser un nmero de identificacin exclusivo, comoun nmero de identificador de empleado o un nmero serial. En la terminologa de bases dedatos, esta informacin recibe el nombre de clave principal o primaria de la tabla.PostgreSQL utiliza los campos de clave principal para asociar rpidamente datos de variastablas y reunir automticamente esos datos.

    Si ya se tiene un identificador exclusivo para una tabla, como un nmero de productoidentificando inequvocamente cada producto del catlogo, se puede utilizar ese identificadorcomo clave principal de la tabla, pero slo si los valores de esa columna son siemprediferentes para cada registro. No se puede tener valores duplicados en una clave principal.Por ejemplo, no se debe utilizar los nombres de las personas como clave principal, ya que losnombres no son exclusivos. Es muy fcil que dos personas tengan el mismo nombre en lamisma tabla.

    Una clave principal siempre debe tener un valor. Si el valor de una columna se puede quedarsin asignar o vaco (porque no se conoce) en algn momento, no se puede utilizar comocomponente de una clave principal.

    Se debe elegir siempre una clave principal cuyo valor no cambie. En una base de datos convarias tablas, la clave principal de una tabla se puede utilizar como referencia en las demstablas. Si la clave principal cambia, el cambio debe aplicarse tambin en todos los lugaresdonde se hace referencia a la clave. Usar una clave principal que no cambie reduce laposibilidad de que se pierda su sincronizacin con las otras tablas en las que se hacereferencia a ella.

    A menudo, se utiliza como clave principal un nmero nico arbitrario. Por ejemplo, puedeasignar a cada pedido un nmero de pedido distinto. La nica finalidad de este nmero depedido es identificar el pedido. Una vez asignado, nunca cambia.

    Claves Forneas

  • Una clave fornea establece una condicin o limitacin de referencia entre dos tablas. Laclave fornea identifica una columna o grupo de columnas en una tabla (tabla hija oreferente) que se refiere a una columna o grupo de columnas en otra tabla (tabla maestra oreferida). Las columnas en la tabla referente deben ser la clave primaria u otra clavecandidata en la tabla referida.

    Los valores en una fila de las columnas referentes deben existir solo en una fila en la tablareferida. As, una fila en la tabla referente no puede contener valores que no existen en latabla referida. De esta forma, las referencias pueden ser creadas para vincular o relacionarinformacin. Esto es una parte esencial de la normalizacin de base de datos. Mltiples filasen la tabla referente pueden hacer referencia, vincularse o relacionarse a la misma fila en latabla referida. Mayormente esto se ve reflejado en una relacin uno (tabla maestra o referida)a muchos (tabla hija o referente).

    Por ejemplo, existen dos tablas, una tabla CONSUMIDOR incluyendo todos los datos de losconsumidores, y otra que es la tabla de ORDENES. La intencin es que todas las rdenesestn asociadas a la informacin del consumidor y que viven en su propia tabla. Para lograresto se debe colocar una clave fornea en la tabla ORDENES con relacin a la claveprimaria de la tabla CONSUMIDOR.

    La clave fornea identifica una(s) columna(s) en una TABLA REFERENTE a una(s)columna(s) en la TABLA REFERENCIADA.

    ndices

    El ndice de una base de datos es una estructura de datos que mejora la velocidad de lasoperaciones, permitiendo un rpido acceso a los registros de una tabla en una base dedatos. Al aumentar drsticamente la velocidad de acceso, se suelen usar sobre aquelloscampos sobre los cuales se hacen frecuentes bsquedas.

    El ndice tiene un funcionamiento similar al ndice de un libro, guardando parejas deelementos: el elemento que se desea indexar y su posicin en la base de datos. Para buscarun elemento que est indexado, slo hay que buscar en el ndice dicho elemento para, unavez encontrado, devolver el registro que se encuentre en la posicin marcada por el ndice.

    Los ndices pueden ser creados usando una o ms columnas, proporcionando la base tantopara bsquedas rpidas al azar como de un ordenado acceso a registros eficiente.

    El espacio en disco requerido para almacenar el ndice es tpicamente menor que el espaciode almacenamiento de la tabla (puesto que los ndices generalmente contienen solamentelos campos clave de acuerdo con los que la tabla ser ordenada, y excluyen el resto de losdetalles de la tabla), lo que da la posibilidad de almacenar en memoria los ndices de tablasque no cabran en ella. En una base de datos relacional un ndice es una copia de una partede la tabla.

  • Bases de Datos Orientadas por Objetos

    Las Bases de datos orientados por objetos se propusieron con la idea de satisfacer lasnecesidades de las aplicaciones ms complejas. El enfoque orientado por objetos ofrece laflexibilidad para cumplir con algunos de estos requerimientos sin estar limitado por los tiposde datos y los lenguajes de consulta disponibles en los sistemas de bases de datostradicionales.

    Como cualquier Bases de Datos programable, una Base de Datos Orientada por Objetos(BDOO) proporciona un ambiente para el desarrollo de aplicaciones y un depsito persistentelisto para su explotacin. Una BDOO almacena y manipula informacin que puede serdigitalizada (presentada) como objetos, adems proporciona un acceso gil y permite unagran capacidad de manipulacin.

    Los principales conceptos que se utilizan en las Bases de Datos Orientada a Objetos(BDOO) son los siguientes:

    Identidad de objetos Constructores de tipos Encapsulamiento Compatibilidad con los lenguajes de programacin Jerarquas de tipos y herencia Manejo de objetos complejos Polimorfismo y sobrecarga de operadores Creacin de versiones

    Conceptos

    BDOO Est diseada para simplificar la POO almacena objetos directamente en la base de datosempleando las mismas estructuras que los lenguajes de programacin.

    SGBDOO (Sistema de Gestin de Base de datos Orientada por Objetos) Es un sistema de objetos y un sistema de base de datos que almacena objetos permitiendola concurrencia y recuperacin. Pueden tratar directamente con los objetos sin hacer latraduccin a tablas registros, para los programadores de aplicacin (general o especfica) losobjetos se conservan en su forma y tamao pueden compartirse con mltiples usuarios.

    Niveles de abstraccin Interno.- Como se van a guardar los objetos (disco duro) Conceptual.- Como guardar la estructura Externo.- Lo que se va a mostrar al usuario (interfaz) Se considera el problema de guardar un carro en el estacionamiento en un

    sistema de objetos, el carro es un objeto, el estacionamiento es un objeto yexiste una operacin simple almacenar el carro en el estacionamiento. En elsistema relacional todos los datos se traducen en tablas, entonces el carro debede ser desarmado, las ruedas se colocan en un lugar, la carrocera en otro

  • lugar, por la maana antes de salir hay que componer el carro antes demanejar.

    Aplicaciones de la BDOO

    Fabricacin asistida por computadora CAM Diseo asistido por computadora CAD Ingeniera de software asistido por computadora CASE Sistemas de gestin de red Sistemas de informacin de oficina y sistemas multimedia OIS Sistema autoedicin digital Sistemas de informacin geogrfica GIS Sistemas Web interactivos dinmicos

    Propiedades de un sistema gestor orientado a objetos SGBDOO

    Persistencia: Es una propiedad muy importante en un Sistema Operativo (SO) moderno aleliminar la dualidad de tratamiento del almacenamiento a corto y a largo plazo con lainclusin de la persistencia dentro del SO. Puede servir como base para un desarrollo msfcil e integrado de otras herramientas como sistemas de gestin de BDOO.

    Dependiendo del nmero de operaciones debe de estar actualizndose a los objetos,propiedad por la cual puede sobrevivir durante el tiempo que sea requerida. En lapersistencia completa todos los objetos son persistentes siempre, no es necesario indicar demanera especfica cuales son los objetos persistentes.

    Concurrencia: Donde los objetos llevan acciones que pueden comportarse como servidoresante la peticin de otros que asumen el papel de clientes, se intenta alcanzar la mximaconcurrencia garantizando siempre las correcciones de las operaciones que se efecten ycon ello la consistencia en el estado del objeto.

    Control de acceso: Cada objeto individualmente decide quin puede acceder a l y quin no,adems el acceso se permite en funcin de la clasificacin del objeto y del tipo de sujeto quequiere acceder al mismo.

    Procesamiento de consultas Ad Hoc: Utilizando el propio lenguaje (LPOO) para consultar a laBDOO, permite al usuario realizar consultas sencillas a la BD, este tipo de consultas tienecomo objetivo proporcionar la informacin solicitada por el usuario de una forma correcta yrpida.

    Mejores prcticas para el diseo de BDR

    Para el mejor diseo de una BDR (Base de Datos Relacional) se recomienda seguir

  • disciplinadamente una serie de pasos y tcnicas, conocidas como mejores prcticas, queaplicadas de manera sistemtica siempre conducirn a obtener un modelo Entidad-Relacinptimo o bastante cercano al ptimo.

    Los pasos a seguir para el diseo consisten en lo siguiente:

    1. Encontrar entidades (conjuntos de entidades) 2. Identificar atributos de las entidades 3. Buscar identificadores 4. Especificar las relaciones y cardinalidades 5. Identificar entidades dbiles 6. Especializar y generalizar entidades donde sea posible

    Entonces, aplicando los pasos mencionados, surgen preguntas.

    Usar conjuntos de entidades o atributos?

    Cundo y por qu un determinado objeto es un conjunto de entidades y cundo y por ques un atributo?

    La respuesta no es simple. Depende, principalmente, de la estructura de la porcin de mundoreal que se est modelando y de la semntica asociada al objeto particular .

    Por ejemplo, si se desea modelar un Empleado con atributos nombre y telfono, seramuy distinto de si se deseara modelar al menos el telfono y al empleado como entidades (uobjetos) separadas, relacionadas entre s para obtener la relacin TelfonoDeEmpleado talcomo se puede ver en el ejemplo a continuacin:

    Empleado (nombre, telfono) Empleado (nombre) Telfono (nmero, ubicacin, color) TelfonoDeEmpleado (nombre, nmero)

    Usar conjuntos de entidades o conjuntos de relaciones?

    No siempre se tiene totalmente claro si es mejor describir un objeto mediante un conjunto deentidades o mediante un conjunto de relaciones .

    Prstamo (nmero_prstamo, importe)

    Cliente (id_cliente, nombre_cliente, direccin_cliente,) Sucursal (id_sucursal, nombre_sucursal, direccin_sucursal, activos)

  • Prstamo (id_cliente, id_sucursal, numero_prstamo, importe)

    En el ejemplo se puede ver cmo existen dos maneras de ver a Prstamo, o bien como unaentidad al igual que Cliente y Sucursal, o como una relacin Prstamo, donde las clavesprimarias de Cliente y Sucursal, en conjunto, conforman la clave principal para esarelacin.

    Regla?: Designar un conjunto de relaciones para describir una accin que ocurre entreentidades

    Relaciones binarias o n-arias?

    El mundo real parece muchas veces lleno de relaciones n-arias

    Descendencia (nombre_hijo, nombre_padre, nombre_madre)

    Siempre es posible reemplazar un conjunto de relaciones no binarias (n-arias, n>2) por unnmero de diferentes conjuntos de relaciones binarias .

    Ubicacin de los Atributos

    Dnde colocar un atributo, en el conjunto de relaciones o en el conjunto de entidades?

    La razn de cardinalidad (1-1, 1-N) de una relacin puede afectar a la situacin de losatributos .

    depositante (id_cliente, nmero_cuenta) 1-N

    fecha_acceso Cliente (id_cliente, nombre_cliente, direccin_cliente) Cuenta (nmero_cuenta, saldo)

    Entidades Dbiles

    Un conjunto entidad se dice que es dbil si para identificar sus instancias, de manera nica,es necesario considerar la llave de otra entidad. El conjunto entidad propietaria (fuerte) y laentidad dbil participan en un tipo de relacin muchos- uno. Por lo tanto, su existencia esdependiente de otra entidad .

    Pago (nmero_pago, fecha_pago, importe_pago)

  • Es igual para todos los prstamos

    Un conjunto de entidades dbil tiene sentido cuando est asociado a otro conjunto deentidades (fuerte) [conjunto de entidades identificadoras o propietarias]

    Se establece una relacin 1-N (relacin identificadora) entre el conjunto de entidadesidentificadoras y el conjunto de entidades dbiles .

    Clave Primaria: Clave primaria del conjunto de entidades fuerte ms la clave parcial delconjunto de entidades dbiles .

    Especializacin

    Un conjunto de entidades puede incluir subgrupos de entidades que se diferencien (seespecializan) de alguna forma de las otras entidades del conjunto .

    Persona (id, nombre, direccin) Cliente = Persona + atributos propios de ClienteEmpleado = Persona + atributos de Empleado

    Gerente = Empleado + atributos propios de GerenteCajero = Empleado + atributos propios de Cajero

    Generalizacin

    Varios conjuntos de entidades se sintetizan (se generalizan) en un conjunto de entidades denivel ms alto basado en caractersticas comunes

    Superclase

    Pago Prstamo PagoPrst

  • Subclase

    Herencia de Atributos

    La herencia de atributos es una propiedad crucial de las entidades de nivel alto (superclase)y de nivel bajo (subclase) creadas mediante especializacin y generalizacin .

    Los atributos de los conjuntos de entidades de nivel alto son heredados por los conjuntos deentidades de nivel bajo .

    Un conjunto de entidades de nivel bajo tambin hereda la participacin en los conjuntos de relaciones en los que participa su conjunto de entidades de nivel alto .

    Evita redundancia

    Evitar expresar informacin repetida. Sirve a la vez para ahorrar espacio y reducirinconsistencias.

    Dos representaciones de un mismo hecho se vuelven inconsistentes si se cambia una y seolvida cambiar la otra.

    Uso de entidades dbiles limitado

    En el diseo de una Base de Datos Relacional se debe reducir al mnimo la cantidad deentidades dbiles para evitar la dependencia de otras entidades y poseer una cantidadexcesiva de informacin no independiente.

  • Unidad 2: Administracin bsica de PostgreSQL

    Funcionamiento de PostgreSQL

    PostgreSQL es un sistema de administracin de bases de datos objeto-relacional, distribuidobajo licencia BSD y con su cdigo fuente disponible libremente. Es el sistema de gestin debases de datos de cdigo abierto ms potente del mercado y en sus ltimas versiones notiene nada que envidiarle a otras bases de datos comerciales.

    PostgreSQL utiliza un modelo cliente/servidor y usa multiprocesos en vez de multihilos paragarantizar la estabilidad del sistema. Un fallo en uno de los procesos no afectar el resto y elsistema continuar funcionando.

    En la siguiente pgina ver la grfica donde se ilustran de manera general los componentesms importantes en un sistema PostgreSQL.

    Aplicacin cliente: Esta es la aplicacin cliente que utiliza PostgreSQL como administrador debases de datos. La conexin puede ocurrir va TCP/IP o sockets locales.

    Demonio postmaster: Este es el proceso principal de PostgreSQL. Es el encargado deescuchar por un puerto/socket por conexiones entrantes de clientes. Tambin es elencargado de crear los procesos hijos que se encargaran de autentificar estas peticiones,gestionar las consultas y mandar los resultados a las aplicaciones clientes .

    Archivos de configuracin: Los 3 archivos principales de configuracin utilizados porPostgreSQL, postgresql.conf, pg_hba.conf y pg_ident.conf . Procesos hijos postgres: Procesos hijos que se encargan de autentificar a los clientes, degestionar las consultas y mandar los resultados a las aplicaciones clientes .

    PostgreSQL share buffer cache: Memoria compartida usada por PostgreSQL para almacenardatos en cach.

    Write-Ahead Log (WAL): Componente del sistema encargado de asegurar la integridad de losdatos (recuperacin de tipo REDO) .

    Kernel disk buffer cache: Cach de disco del sistema operativo .

    Disco: Disco fsico donde se almacenan los datos y toda la informacin necesaria para quePostgreSQL funcione .

  • Instalacin y actualizaciones

    Para la gran mayora de distribuciones del Sistema Operativo GNU/Linux, PostgreSQL estdisponible tanto en archivos binarios como en cdigo fuente. La instalacin es puede llegar aser tan fcil y sencilla como hacerla utilizando el instalador de paquetes que pertenezca auna distribucin particular, por ej. dpkg, aptitude o apt-get para Debian o rpm para Redhat.

    Cuando se trata de una instalacin para el Sistema Operativo Windows normalmente seutilizan paquetes binarios para realizar la instalacin correspondiente. En el caso de que sedesee realizar la instalacin utilizando los archivos fuente, entonces habr que tomar encuenta el compilador a utilizar.

    Siempre se debe tener en cuenta una serie de aspectos cuando se va a realizar unainstalacin. Dependiendo de la plataforma donde se va a instalar el PostgreSQL se tienen lossiguientes casos:

    Instalacin de PostgreSQL en Linux:

  • Revisar los requerimientos del sistema para instalar PostgreSQL . Descargar el cdigo fuente (cuando se realice la instalacin por fuentes). Seguir de manera correcta el procedimiento de instalacin. Aplicar proceso post instalacin: Configurar las bibliotecas compartidas (.so) y

    las variables de ambiente . Tomar en cuenta las caractersticas especficas segn la plataforma:

    Instalacin de PostgreSQL en Windows:

    La instalacin sobre Windows es fuertemente dependiente del compilador. Los puntos averificar son:

    Revisar los requerimientos . Tomar todas las consideraciones especiales para 64-bits . Proceso de construccin . Limpieza de archivos . Pruebas de rendimiento (benchmark ).

    Procedimiento de instalacin en Linux usando un gestor de paquetes

    Para la instalacin de PostgreSQL en Debian GNU/Linux se requiere la instalacin de lossiguientes paquetes:

    postgresql postgresql-9.3 postgresql-client postgresql-client-9.3 postgresql-client-common postgresql-contrib postgresql-contrib-9.3 postgresql-doc postgresql-doc-9.3 pgadmin3 pgadmin3-data

    Para ello puede utilizar el gestor de paquetes Synaptic o en su defecto se recomienda el usodel comando aptitude:

    $ su $ aptitude install postgresql postgresql-9.3 postgresql-client postgresql-client-9.3 postgresql-client-common postgresql-contrib postgresql-contrib-9.3 postgresql-doc postgresql-doc-9.3 pgadmin3 pgadmin3-data

  • Puesta en marcha de un servidor

    En este aparte seguiremos viendo cmo trabajar con el servidor de Bases de DatosPostgreSQL utilizando los dos enfoques vistos hasta ahora. Primero, continuaremos con elenfoque para una instalacin desde el gestor de paquetes y luego para la instalacin desdeel cdigo fuente.

    Procedimiento de configuracin

    Para propsito de este curso se va a configurar la base de datos sin mecanismos deseguridad. De esta manera se podr trabajar pensando ms en detalle con lasfuncionalidades del programa, para luego trabajar con las opciones de seguridad cuandocorresponda.

    Para ello, como superusuario, se debe escribir la siguiente lnea en la terminal:

    $ nano /etc/postgresql/9.3/main/pg_hba.conf

    Se debe editar el archivo (de ser necesario) para que la lnea siguiente quede como sigue:

    # Database administrative login by Unix domain socket local all postgres peer

    Configuracin del usuario postgres

    Al instalar PostgreSQL, se crea un usuario del sistema operativo llamado postgres.Adicionalmente, se crea un rol y una base de datos con el mismo nombre (postgres) en elsistema de bases de datos. En PostgreSQL, el concepto de rol puede pensarse como unusuario de bases de datos o como un grupo de usuarios de bases de datos. El rol postgrestiene cualidades de superusuario.

    Antes de poder hacer algo productivo, es necesario darle una contrasea al rol postgres.Para hacerlo, ejecute lo siguiente en un terminal:

    $ sudo -u postgres psql postgres

    La orden anterior permite al usuario postgres conectarse a la base de datos del mismonombre por medio del cliente psql (conocido como intrprete interactivo de PostgreSQL).Debera ver algo similar a esto:

    $ sudo -u postgres psql postgres

    [sudo] password for USUARIO:

    psql (9.3.5)

    Digite help para obtener ayuda.

  • postgres=#

    Ya dentro de psql, puede ponerle una contrasea a postgres ejecutando:

    postgres=# \password postgres

    Escriba la contrasea y cierre psql presionando Ctrl+D (tambin puede escribir \q y luegopresionar Enter). Debi ver algo as:

    postgres=# \password postgres

    Ingrese la nueva contrasea:

    Ingrsela nuevamente:

    postgres=# \q

    Configuracin de su propio usuario

    Los pasos de arriba son suficientes para empezar a trabajar con PostgreSQL, pero existeuna configuracin adicional que ahorra mucho tiempo y le hace las cosas ms fciles yagradables a los desarrolladores que tienen instalado el servidor localmente, en su entornode desarrollo.

    Lo que se va a hacer a continuacin es crear un rol con el mismo nombre de su nombre deusuario del sistema operativo y darle privilegios de superusuario sobre el sistema dePostgreSQL. Esto le permitir usar los programas cliente sin necesidad de proporcionar unrol y una contrasea a cada momento.Ejecute lo siguiente en un terminal:

    $ sudo -u postgres createuser --superuser $USER

    La orden anterior, ejecuta la aplicacin createuser con el usuario postgres y crea unsuperusuario con su nombre de usuario (la variable $USER se reemplaza automticamentepor su nombre de usuario). Si todo sale bien, no debera ver nada especial.

    Ahora, asgnele una contrasea al usuario que acab de crear, ejecutando lo siguiente en unterminal:

    $ sudo -u postgres psql

    En psql ejecute lo siguiente, reemplazando la palabra USUARIO por su nombre de usuarioactual. (Si no conoce su nombre de usuario, escriba en otro terminal la orden echo $USER):

    postgres=# \password USUARIO

  • Escriba una contrasea nueva cuando se la pidan y, finalmente, presione Ctrl+D para salir depsql.

    Hecho esto, ahora puede empezar a crear bases de datos, tablas, registros y hacer todo tipode consultas con SQL. Esto es lo que aprender a hacer en las siguientes secciones de estecurso.

    PostgreSQL. Como iniciar, detener o pausar el funcionamiento de unservidor PostgreSQL

    Iniciar el servidor:

    Para iniciar manualmente el servidor de PostgreSQL se puede utilizar el script llamadopostgresql que se encuentra en el directorio /etc/init.d pasndole el argumentostart tal como sigue:

    # /etc/init.d/postgresql start

    Esta tarea se ejecuta de manera automtica normalmente cuando el sistema operativo estarrancando, por lo que es poco comn ejecutarla de manera manual.

    Para reiniciar (como usuario root) el servicio de postgres que se est ejecutando se utilizael siguiente comando:

    # /etc/init.d/postgresql restart

    Esta tarea se realiza normalmente cuando se requiere reflejar cambios realizados a unaconfiguracin del servidor recin modificada.

    Por ltimo, para detener manualmente el servicio de postgres se utiliza el siguientecomando:

    # /etc/init.d/postgresql start

    Detener el servidor:

    Existen varias formas de finalizar la ejecucin del servidor de base de datos. El tipo definalizacin se controla enviando diferentes seales al proceso maestro postgres.

    SIGTERM

    Es el modo de finalizacin inteligente, Smart Shutdown. Cuando se recibe un SIGTERM, elservidor no permite nuevas conexiones, pero permite a las existentes terminar normalmente.

  • Slo se finaliza la ejecucin, cuando se finalicen todas las secciones. Si el servidor seencuentra en modo de respaldo en lnea, adicionalmente espera hasta que este modo no seencuentre activo.

    SIGINT

    Es el modo de finalizacin rpido, Fast Shutdown. El servidor no permite nuevasconexiones y enva a todos los procesos existentes del servidor SIGTERM, lo cual causar aestos abortar las transacciones concurrentes y finalizar en la brevedad posible. Luego esperaa que todos los procesos finalicen para finalizar el postmaster. Si el servidor se encuentra enmodo de respaldo en lnea, este finaliza de inmediato.

    SIGQUIT

    Es el modo de finalizacin inmediato Immediate Shutdown. El proceso maestro postgresenva un SIGQUIT a todos los procesos hijos y finaliza inmediatamente; sin la propiafinalizacin del el mismo. Del mismo modo todos los procesos hijos finalizarn. Este modoslo debe utilizarse en casos de emergencia.

    El programa pg_ctl proporciona una interfaz conveniente para enviar estas seales paradetener el servidor. Tambin se pueden detener los procesos empleando el comando kill, elPID del proceso postgres puede ser ubicado con el programa ps, o en el archivopostmaster.pid en el directorio de datos.

    Por ejemplo, para realizar una finalizacin rpida:

    $ kill -INT `head -1 /ruta_al_directorio_de_datos/postmaster.pid`

    Mediante la opcin m, del utilitario pg_ctl se especifica el modo de parada correspondiente.

    pg_ctl stop [-W] [-t seconds] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]

  • Herramientas y programas estndar: psql y Pgadmin III

    Conectarse a PostgreSQL con psql (cliente de terminal)

    En la terminologa de bases de datos, PostgreSQL usa un modelo cliente/servidor. Unasesin PostgreSQL consiste en dos procesos cooperativos:

    El proceso servidor, que cumple la funcin de supervisar los archivos de la basede datos, aceptar las conexiones de las aplicaciones clientes y las acciones derendimiento de parte de los clientes. Este programa es llamado postgres. Existen varias maneras de levantar el servidor postgres desde la lnea decomandos:

    a) Empleando el comando postmasterb) Empleando el comando pg_ctlc) Levantado postgres como un servicio

    El proceso cliente, el cual se conecta al servidor. Desde la lnea de comandos,se puede emplear el utilitario psql.

    Para conectarse a postgreSQL utilice el comando psql, observe las opciones de estacomando escribiendo lo siguiente en su terminal:

    $ psql --help psql es el terminal interactivo de PostgreSQL. Empleo: psql [OPCIONES]... [BASE-DE-DATOS [USUARIO]]

    Opciones generales: -c, --command=ORDEN ejecutar slo una orden (SQL o interna) y salir -d, --dbname=NOMBRE nombre de base de datos a conectarse (por omisin: crox) -f, --file=ARCHIVO ejecutar rdenes desde archivo, luego salir -l, --list listar bases de datos, luego salir -v, --set=, --variable=NOMBRE=VALOR definir variable de psql NOMBRE a VALOR -X, --no-psqlrc no leer archivo de configuracin (~/.psqlrc) -1 (uno), --single-transaction ejecuta archivo de rdenes en una nica transaccin --help muestra esta ayuda y termina --version muestra informacin de la versin y termina

    Opciones de entrada y salida: -a, --echo-all mostrar las rdenes del script -e, --echo-queries mostrar rdenes enviadas al servidor -E, --echo-hidden mostrar consultas generadas por rdenes internas -L, --log-file=ARCH enva el registro de la sesin a un archivo -n, --no-readline deshabilitar edicin de lnea de rdenes (readline) -o, --output=ARCHIVO enviar resultados de consultas a archivo (u |orden) -q, --quiet modo silencioso (sin mensajes, slo resultados) -s, --single-step modo paso a paso (confirmar cada consulta) -S, --single-line modo de lneas (fin de lnea termina la orden SQL)

    Opciones de formato de salida:

  • -A, --no-align modo de salida desalineado -F, --field-separator=CADENA definir separador de columnas (por omisin: |) -H, --html modo de salida en tablas HTML -P, --pset=VAR[=ARG] definir opcin de impresin VAR en ARG (ver orden\pset) -R, --record-separator=CADENA definir separador de filas (por omisin: salto delnea) -t, --tuples-only slo muestra registros -T, --table-attr=TEXTO definir atributos de marcas de tabla HTML (ancho,borde) -x, --expanded activar modo expandido de salida de tablas

    Opciones de la conexin: -h, --host=NOMBRE nombre del anfitrin o directorio de socket (por omisin: /var/run/postgresql) -p, --port=PUERTO puerto del servidor (por omisin: 5432) -U, --username=NOMBRE nombre de usuario (por omisin: crox) -w, --no-password nunca pedir contrasea -W, --password forzar peticin de contrasea (debera ser automtico)

    Para obtener ms ayuda, digite \? (para rdenes internas) o \help (para rdenes SQL) dentro de psql, o consulte la seccin de psql en la documentacin de PostgreSQL. Reporte errores a .

    El programa psql debe conectarse a una Base de Datos de postgresql, por lo tanto la basede datos debe estar creada, los comandos para manipular la base de datos desde la lnea decomandos son createdb y dropdb.

    Entonces, para crear una base de datos llamada mibasededatos se utiliza el siguientecomando:

    $ createdb -U postgres -h localhost mibasededatos

    Se puede acceder a la base datos mibasededatos escribiendo el comando:

    $ psql -U postgres -d mibasededatos -h localhost

    Si no se proporciona el nombre de la base de datos el valor por omisin es el nombre decuenta de usuario (que va en la opcin -U).

    Nota: Ms adelante se ver ms en detalle la creacin de y acceso a Bases de Datos.

    El programa psql tiene un nmero de comandos internos que no son sentencias SQL.Comienzan con un caracter de barra invertida, "\". Algunos de estos comandos fueronlistados en el mensaje de bienvenida. Por ejemplo, puede obtener ayuda sobre la sintaxis devarios comandos SQL de PostgreSQL tecleando:

    mibasededatos=> \?

  • Y obtendr la siguiente salida:

    General \copyright mostrar trminos de uso y distribucin de PostgreSQL \g [ARCH] o ; enviar bfer de consulta al servidor (y resultados a archivo u |orden) \h [NOMBRE] mostrar ayuda de sintaxis de rdenes SQL; use * para todas las rdenes \q salir de psql

    Bfer de consulta \e [ARCHIVO] [LNEA] editar el bfer de consulta (o archivo) con editorexterno \ef [NOMBRE-FUNCIN [LNEA]] editar una funcin con editor externo \p mostrar el contenido del bfer de consulta \r reiniciar (limpiar) el bfer de consulta \s [ARCHIVO] mostrar historial de rdenes o guardarlo en archivo \w ARCHIVO escribir bfer de consulta a archivo

    Entrada/Salida \copy ... ejecutar orden SQL COPY con flujo de datos al cliente \echo [CADENA] escribir cadena a salida estndar \i ARCHIVO ejecutar rdenes desde archivo \o [ARCHIVO] enviar resultados de consultas a archivo u |orden \qecho [CADENA] escribir cadena a salida de consultas (ver \o)

    Informativo (opciones: S = desplegar objectos de sistema, + = agregar ms detalle) \d[S+] listar tablas, vistas y secuencias \d[S+] NOMBRE describir tabla, ndice, secuencia o vista \da[S] [PATRN] listar funciones de agregacin \db[+] [PATRN] listar tablespaces \dc[S] [PATRN] listar conversiones \dC [PATRN] listar conversiones de tipo (casts) \dd[S] [PATRN] listar comentarios de objetos \ddp [PATRN] listar privilegios por omisin \dD[S] [PATRN] listar dominios \det[+] [PATRN] listar tablas forneas \des[+] [PATRN] listar servidores forneos \deu[+] [PATRN] listar mapeos de usuario \dew[+] [PATRN] listar conectores de datos externos \df[antw][S+] [PATRN] listar funciones [sloag./normal/trigger/ventana] \dF[+] [PATRN] listar configuraciones de bsqueda en texto \dFd[+] [PATRN] listar diccionarios de bsqueda en texto \dFp[+] [PATRN] listar analizadores (parsers) de bsq. en texto \dFt[+] [PATRN] listar plantillas de bsqueda en texto \dg[+] [PATRN] listar roles \di[S+] [PATRN] listar ndices \dl listar objetos grandes, lo mismo que \lo_list \dL[S+] [PATRN] listar lenguajes procedurales \dn[S+] [PATRN] listar esquemas \do[S] [PATRN] listar operadores \dO[S] [PATRN] listar ordenamientos (collations) \dp [PATRN] listar privilegios de acceso a tablas, vistas ysecuencias \drds [PAT1 [PAT2]] listar parmetros de rol por base de datos

  • \ds[S+] [PATRN] listar secuencias \dt[S+] [PATRN] listar tablas \dT[S+] [PATRN] listar tipos de dato \du[+] [PATRN] listar roles \dv[S+] [PATRN] listar vistas \dE[S+] [PATRN] listar tablas forneas \dx[+] [PATRN] listar extensiones \l[+] listar bases de datos \sf[+] FUNCIN mostrar la definicin de una funcin \z [PATRN] lo mismo que \dp

    Formato \a cambiar entre modo de salida alineado y sin alinear \C [CADENA] definir ttulo de tabla, o indefinir si es vaco \f [CADENA] mostrar o definir separador de campos para modo de salida sin alinear \H cambiar modo de salida HTML (actualmente desactivado) \pset NOMBRE [VALOR] define opcin de salida de tabla (NOMBRE = format,border,expanded,fieldsep,footer,null, numericlocale,recordsep,tuples_only,title,tableattr,pager}) \t [on|off] mostrar slo filas (actualmente desactivado) \T [CADENA] definir atributos HTML de , o indefinir si esvaco \x [on|off] cambiar modo expandido (actualmente desactivado)

    Conexiones \c[onnect] [BASE-DE-DATOS|- USUARIO|- ANFITRIN|- PUERTO|-] conectar a una nueva base de datos (actual:mibasededatos) \encoding [CODIFICACIN] mostrar o definir codificacin del cliente \password [USUARIO] cambiar la contrasea para un usuario en forma segura \conninfo despliega la informacin sobre la conexin actual

    Sistema Operativo \cd [DIR] cambiar el directorio de trabajo actual \timing [on|off] mostrar tiempo de ejecucin de rdenes (actualmente desactivado) \! [ORDEN] ejecutar orden en intrprete de rdenes (shell), o iniciar intrprete interactivo

    Variables \prompt [TEXTO] NOMBRE preguntar al usuario el valor de la variable \set [NOMBRE [VALOR]] definir variables internas, listar todas si no se dan parmetros \unset NOMBRE indefinir (eliminar) variable interna

    Objetos Grandes \lo_export LOBOID ARCHIVO \lo_import ARCHIVO [COMENTARIO] \lo_list \lo_unlink LOBOID operaciones con objetos grandes

    Tambin para obtener ayuda de un comando en especfico puede usar:

    mibasededatos=> \h

  • Con lo que obtendr la siguiente salida:

    Ayuda disponible: ABORT DECLARE ALTER AGGREGATE DELETE ALTER COLLATION DISCARD ALTER CONVERSION DO ALTER DATABASE DROP AGGREGATE ALTER DEFAULT PRIVILEGES DROP CAST ALTER DOMAIN DROP COLLATION ALTER EXTENSION DROP CONVERSION ALTER FOREIGN DATA WRAPPER DROP DATABASE ALTER FOREIGN TABLE DROP DOMAIN ALTER FUNCTION DROP EXTENSION ALTER GROUP DROP FOREIGN DATA WRAPPER ALTER INDEX DROP FOREIGN TABLE ALTER LANGUAGE DROP FUNCTION ALTER LARGE OBJECT DROP GROUP ALTER OPERATOR DROP INDEX ALTER OPERATOR CLASS DROP LANGUAGE ALTER OPERATOR FAMILY DROP OPERATOR ALTER ROLE DROP OPERATOR CLASS ALTER SCHEMA DROP OPERATOR FAMILY ALTER SEQUENCE DROP OWNED ALTER SERVER DROP ROLE ALTER TABLE DROP RULE ALTER TABLESPACE DROP SCHEMA ALTER TEXT SEARCH CONFIGURATION DROP SEQUENCE ALTER TEXT SEARCH DICTIONARY DROP SERVER ALTER TEXT SEARCH PARSER DROP TABLE ALTER TEXT SEARCH TEMPLATE DROP TABLESPACE ALTER TRIGGER DROP TEXT SEARCH CONFIGURATION ALTER TYPE DROP TEXT SEARCH DICTIONARY ALTER USER DROP TEXT SEARCH PARSER ALTER USER MAPPING DROP TEXT SEARCH TEMPLATE ALTER VIEW DROP TRIGGER ANALYZE DROP TYPE BEGIN DROP USER CHECKPOINT DROP USER MAPPING CLOSE DROP VIEW CLUSTER END COMMENT EXECUTE COMMIT EXPLAIN COMMIT PREPARED FETCH COPY GRANT CREATE AGGREGATE INSERT CREATE CAST LISTEN CREATE COLLATION LOAD CREATE CONVERSION LOCK CREATE DATABASE MOVE CREATE DOMAIN NOTIFY CREATE EXTENSION PREPARE CREATE FOREIGN DATA WRAPPER PREPARE TRANSACTION CREATE FOREIGN TABLE REASSIGN OWNED CREATE FUNCTION REINDEX CREATE GROUP RELEASE SAVEPOINT CREATE INDEX RESET CREATE LANGUAGE REVOKE CREATE OPERATOR ROLLBACK

  • CREATE OPERATOR CLASS ROLLBACK PREPARED CREATE OPERATOR FAMILY ROLLBACK TO SAVEPOINT CREATE ROLE SAVEPOINT CREATE RULE SECURITY LABEL CREATE SCHEMA SELECT CREATE SEQUENCE SELECT INTO CREATE SERVER SET CREATE TABLE SET CONSTRAINTS CREATE TABLE AS SET ROLE CREATE TABLESPACE SET SESSION AUTHORIZATION CREATE TEXT SEARCH CONFIGURATION SET TRANSACTION CREATE TEXT SEARCH DICTIONARY SHOW CREATE TEXT SEARCH PARSER START TRANSACTION CREATE TEXT SEARCH TEMPLATE TABLE CREATE TRIGGER TRUNCATE CREATE TYPE UNLISTEN CREATE USER UPDATE CREATE USER MAPPING VACUUM CREATE VIEW VALUES DEALLOCATE WITH

    Entonces, si se desea ver la ayuda de un comando, se puede hacer como en el siguienteejemplo:

    mibasededatos=# \h CREATE DATABASEOrden: CREATE DATABASE Descripcin: crea una nueva base de datos Sintaxis: CREATE DATABASE nombre [ [ WITH ] [ OWNER [=] nombre_de_usuario ] [ TEMPLATE [=] plantilla ] [ ENCODING [=] codificacin ] [ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] lmite_conexiones ] ]

    Para salir de psql, se escribe:

    mibasededatos=> \q

    Entonces psql saldr y regresar al intrprete de comandos del sistema operativo.

    Conectarse a PostgreSQL con pgadmin III (cliente grfico)

    El cliente grfico pgadmin III es el ms conocido y utilizado entre los distintos clientesgrficos para PostgreSQL que existen. Al abrirlo la ventana principal luce como se observa acontinuacin:

  • Se debe crear una conexin al servidor como se ve a continuacin:

    Luego de crear laconexin al servidor, sever la lista de bases de datos existentes en el servidor:

  • dentro de cada base de datos podr ver los elementos que la componen :

    Crear yBorrar Bases de Datos

    Concepto de cluster de Base de Datos en PostgreSQL

    Para poder iniciar el Servidor de Base de Datos de PostgreSQL se debe crear un rea dealmacenamiento en disco para la Base de Datos. En la terminologa de PostgreSQL estarea fsica se conoce como cluster de base de datos (SQL utiliza el trmino cluster delcatlogo) . Un cluster de base de datos es una coleccin de bases de datos administrada poruna instancia de un proceso de servidor de base de datos.

  • Despus de la inicializacin del servidor, un cluster de base de datos contendr una base dedatos llamada postgres, la cual es la base de datos por defecto y contiene los utilitarios, losusuarios, el catlogo y las aplicaciones de terceros. El servidor de base de datos no requiereque exista una base de datos postgres, pero la mayora de los utilitarios externos asume queexiste. Otra base de datos creada en el cluster en el proceso de inicializacin es template1;como su nombre lo indica esta es la plantilla utilizada para crear las otras bases de datos enel cluster.

    Desde el punto de vista del sistema de archivos, un cluster de base de datos es un directoriodonde se almacenan los datos. Este directorio es denominado el directorio de datos o el reade datos. PostgresSQL se configura para decidir cul directorio es utilizado. No existe undirectorio por defecto estndar, pero los directorios /usr/local/pgsql/data o /var/lib/pgsql/datason populares.

    Para inicializar un cluster de base de datos, se emplean los comandos descritos acontinuacin:

    $ initdb -D ruta_directorio_de_datos$ pg_ctl -D ruta_directorio_de_datos initdb

    Crear una Base de Datos

    Para crear una base de datos desde la lnea de comandos utiliza el comando createdb, paraconocer ms en profundidad el comando ejecute el comando con la opcin help para obtener laayuda y descripcin de las opciones correspondientes, como sigue:

    $ createdb --help createdb crea una base de datos PostgreSQL.

    Empleo: createdb [OPCIN]... [NOMBRE] [DESCRIPCIN]

    Opciones: -D, --tablespace=TBLSPC tablespace por omisin de la base de datos -e, --echo mostrar las rdenes enviadas al servidor -E, --encoding=CODIF codificacin para la base de datos -l, --locale=LOCALE configuracin regional para la base de datos --lc-collate=LOCALE configuracin LC_COLLATE para la base de datos --lc-ctype=LOCALE configuracin LC_CTYPE para la base de datos -O, --owner=DUEO usuario que ser dueo de la base de datos -T, --template=PATRN base de datos patrn a copiar --help mostrar esta ayuda y salir --version mostrar el nmero de versin y salir

    Opciones de conexin: -h, --host=ANFITRIN nombre del servidor o directorio del socket -p, --port=PUERTO puerto del servidor -U, --username=USUARIO nombre de usuario para la conexin -w, --no-password nunca pedir contrasea -W, --password forzar la peticin de contrasea

    Si no se especifica, se crear una base de datos con el mismo nombre que el usuario actual.

  • Reporte errores a . $

    Por lo tanto, para crear una Base de Datos, debe ejecutar el comando de manera similar acomo se muestra:

    $ createdb -E UTF-8 -U postgres -h localhost prueba

    Nota: Si se ha asignado contrasea al usuario postgres, aparecer un promptsolicitando la contrasea.

    Eliminar una Base de Datos

    De manera anloga, para borrar una base de datos se utiliza el comando dropdb, paraconocer ms en profundidad el comando ejecute el comando con la opcin help para obtener laayuda y descripcin de las opciones correspondientes, como sigue:

    $ dropdb --help dropdb elimina una base de datos de PostgreSQL.

    Empleo: dropdb [OPCIN]... BASE-DE-DATOS

    Opciones: -e, --echo mostrar las rdenes a medida que se ejecutan -i, --interactive preguntar antes de eliminar --help desplegar esta ayuda y salir --version desplegar informacin de versin y salir

    Opciones de conexin: -h, --host=ANFITRIN nombre del servidor o directorio del socket -p, --port=PUERTO puerto del servidor -U, --username=USUARIO nombre de usuario para la conexin -w, --no-password nunca pedir contrasea -W, --password forzar la peticin de contrasea

    Reporte errores a . $

    En otras palabras usted debe escribir el comando de manera similar a como sigue:

    $ dropdb -U postgres -h localhost prueba Nota: Si se ha asignado contrasea al usuario postgres, aparecer un promptsolicitando la contrasea.

    Acceder a una Base de Datos

    Una vez que se ha creado la Base de Datos, puede acceder a ella de la siguiente manera:

    Ejecutando el programa terminal interactivo de PostgreSQL, llamado psql, elcual le permite ingresar, editar y ejecutar comandos SQL de manera interactiva.

  • Utilizando una herramienta grfica de frontend como pgAdmin o una suite deoficina con soporte de ODBC o JDBC para crear y manipular una base dedatos.

    Escribiendo una aplicacin personalizada, utilizando alguno de los variosenlaces de lenguaje disponibles.

    A continuacin se arrancar psql para intentar algunos ejemplos. Puede ser activado para labase de datos mibasededatos tipeando el comando:

    $ psql mibasededatos

    Si usted no proporciona el nombre de la base de datos, entonces tomar por omisin elnombre de la cuenta de usuario que usted est usando. Usted ya ha descubierto esteesquema en la seccin previa utilizando createdb.

    En psql, recibir, de nuevo, el siguiente mensaje de saludo:

    psql (9.3.5) Type "help" for help.

    mibasededatos=>

    La anterior lnea tambin puede lucir como:

    mibasededatos=#

    Lo que, tal como se mencion ante significa que usted es el superusuario de la base dedatos.

    Si tiene problemas arrancando psql vuelva a la anterior seccin. Los diagnsticos decreatedb y psql son similares, por lo que si el anterior funcion, ste debera funcionartambin.

    La ltima lnea impresa por psql es el prompt, e indica que psql est escuchando y que sepueden tipear consultas de SQL dentro de un espacio de trabajo que es mantenida por psql.

    Intente los siguientes comandos

    mibasededatos=> SELECT version(); version ----------------------------------------------------------------------- PostgreSQL 9.3.5 on i586-pc-linux-gnu, compiled by GCC 2.96, 32-bit (1 row)

    mibasededatos=> SELECT current_date; date ------------ 2002-08-31 (1 row) mydb=> SELECT 2 + 2; ?column? ---------- 4

  • (1 row)

    Seguridad en PostgreSQL

    La seguridad en PostgreSQl se logra mediante:

    Conexiones seguras SSL Autenticacin y Autorizacin Permisologa SQL estndar GRANT y REVOKE Facilidades de cifrado de datos Seguridad conjunta con el sistema de operacin Procesos seguros con el usuario postgres

    Roles: Usuarios y Grupos

    Dentro de PostgreSQL los usuarios son manejados por perfiles (o Roles) que definen lascapacidades y permisos otorgados para que una persona acceda a los distintos espacios dela base de datos. Un rol puede verse como un usuario de la base de datos o como un grupode usuarios de la base de datos, dependiendo de como el rol es establecido. Los rolespueden ser los propietarios de los objetos de las bases de datos (por ejemplo, tablas) ypueden asignar privilegios en estos objetos a otros roles para controlar el acceso a losobjetos. Tambin es posible darle membresa en un rol a otro rol, para permitir a los rolesmiembros utilizar privilegios asignados a otros roles.

    El concepto de roles agrupa en un solo elemento los conceptos de usuarios y grupos deusuarios. Cualquier rol puede actuar como usuario, como grupo o como ambos.

    El rol propietario es el que otorga los privilegios sobre los objetos de la Base de Datos. El rolpropietario puede otorgar el privilegio de dar privilegios a otro rol. Cuando un rol pertenece aotro rol, hereda los privilegios de ese rol y toma automticamente los privilegios. De estamanera se pueden dar privilegios a grupos de roles simplificando las tareas del administradorde la Base de Datos.

    Crear y borrar usuarios

    Un usuario se crea utilizando el comando :

    $ createuser [nombre]

    y se borra con el comando

    $ dropuser [nombre]

  • El mismo resultado se puede lograr dentro de PostgreSQL utilizando las instruccionesCREATE ROLE y DROP ROLE

    Examinar usuarios en el servidor

    Para examinar los usuarios disponibles en su base de datos se logra mediante la consulta

    SELECT rolname FROM pg_roles;

    CREATE ROLE vs. CREATE USER

    Como ejercicio, examine las diferencias entre las siguientes instrucciones:

    CREATE ROLE [nombre]

    y

    CREATE USER [nombre]

    Atributos de los Roles

    Los siguientes atributos de los roles se explican a continuacin

    LOGIN | NOLOGINEstas opciones determinan si un rol tendr autorizacin a conectarse (log in); esdecir, si al rol se le puede asignar como el nombre de autorizacin para lasesin inicial durante la conexin del cliente. Un rol que tenga el atributo LOGINpuede ser pensado como un usuario. Lo roles sin este atributo son tiles paragestionar privilegios de bases de datos, pero no son usuarios en el sentidousual de la palabra. Si no est especificado, NOLOGIN se toma como el valorpor omisin, excepto cuando except CREATE ROLE sea invocado mediante sualternativa CREATE USER.

    SUPERUSER | NO SUPERUSEREstas opciones determinan si el nuevo rol es un superusuario, quien puedesobrepasar todas las restricciones de acceso que haya dentro de la base dedatos. El estatus de supersusuario es peligroso y debera ser utilizado slocuando sea estrictamente necesario. Usted debe ser superusuario para podercrear un nuevo superusuario. Si no est especificada, la opcinNOSUPERUSER se toma por omisin.

    CREATEDB | NOCREATEDBEstas opciones definen la capacidad de un rol para crear bases de datos. Siest especificada la opcin CREATEDB, el rol que est siendo definido tendrpermiso de crear nuevas bases de datos. Especificar la opcin NOCREATEDB

  • le negar a un rol la capacidad de crear bases de datos. Si no estespecificada, la opcin NOCREATEDB se toma por omisin.

    CREATEROLE | NOCREATEROLEEstas opciones determinan si a un rol se le permitir crear nuevos roles (estoes, ejecutar el comando CREATE ROLE). Un rol con el privilegio CREATEROLEtambin puede alterar (modificar) y desechar (eliminar) otros roles. Si no estespecificada, la opcin NOCREATEROLE se toma por omisin.

    PASSWORD Define la contrasea del rol. (Una contrasea es tilo slo para aquellos rolescon el atributo LOGIN, pero se puede definir indiferentemente para roles sindicho atributo.) Si usted no planea utilizar autenticacin por contrasea puedeomitir esta opcin. Si no se especifica contrasea, la contrasea ser definidacomo nula (null) y la autenticacin por contrasea siempre fallar para elusuario. Una contrasea nula puede escribirse opcionalmente explcitamentecomo PASSWORD NULL.

    Privilegios o Autorizacin en PostgreSQL

    Cuando se crea un objeto en PostgreSQL, se le asigna un dueo. por omisin, ser el mismousuario que lo ha creado. Para cambiar el dueo de una tabla, ndice, secuencia, etc., sedebe usar el comando ALTER TABLE. El dueo del objeto es el nico que puede hacercambios sobre l, si se quiere cambiar este comportamiento, se debe asignar privilegios aotros usuarios.

    Los comandos GRANT y REVOKE, sirven para definir privilegios (permitir o negar), tanto enobjetos de la base de datos (tabla, columna, vista, tabla fornea, secuencia, base de datos,envoltorio de datos forneos, servidor forneo, funcin, lenguaje procedimental, esquema, oespacio de tabla) as como en la membresa en un rol. PostgreSQL define los siguientes tiposde operaciones sobre las que se pueden dar privilegios: select, insert, update, delete, rule,references, trigger, create, temporary, execute, usage, y all privileges.

    La primera variante del comando GRANT otorga privilegios especficos en un objeto de labase de datos a uno o ms roles. Estos privilegios son aadidos a aquellos que ya han sidootorgados, si los hay.

    La segunda variante del comando GRANT otorga membresa dentro de un rol a uno o msroles. La membresa dentro de un rol es significativa porque conlleva los privilegios otorgadospara un rol a cada uno de sus miembros.

    Viendo la ayuda de GRANT

    postgres=# \h GRANT Orden: GRANT Descripcin: define privilegios de acceso Sintaxis: GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES |

  • TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] nombre_de_tabla [, ...] | ALL TABLES IN SCHEMA nombre_de_esquema [, ...] } TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ]

    GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( columna [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( columna [, ...] ) } ON [ TABLE ] nombre_de_tabla [, ...] TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ]

    GRANT { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON { SEQUENCE nombre_secuencia [, ...] | ALL SEQUENCES IN SCHEMA nombre_de_esquema [, ...] } TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ]

    GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL[ PRIVILEGES ] } ON DATABASE nombre_de_base_de_datos [, ...] TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER nombre_fdw [, ...] TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ]

    GRANT { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN SERVER nombre_de_servidor [, ...] TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ]

    GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION nombre_de_funcin ( [ [ modo_arg ] [ nombre_arg ]tipo_arg [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA nombre_de_esquema [, ...] } TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ]

    GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE nombre_lenguaje [, ...] TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ]

    GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA nombre_de_esquema [, ...] TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ]

    GRANT { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE nombre_de_tablespace [, ...] TO { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ WITH GRANT OPTION ]

  • GRANT nombre_de_rol [, ...] TO nombre_de_rol [, ...] [ WITH ADMIN OPTION ]

    El comando REVOKE revoca privilegios previamente otorgados desde uno o ms roles. Lapalabra clave PUBLIC se refiere al grupo implcitamente definido de todos los roles.

    Viendo la ayuda de REVOKE

    postgres=# \h REVOKE Orden: REVOKE Descripcin: revoca privilegios de acceso Sintaxis: REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER} [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] nombre_de_tabla [, ...] | ALL TABLES IN SCHEMA nombre_de_esquema [, ...] } FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | REFERENCES } ( columna [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( columna [, ...] ) } ON [ TABLE ] nombre_de_tabla [, ...] FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON { SEQUENCE nombre_secuencia [, ...] | ALL SEQUENCES IN SCHEMA nombre_de_esquema [, ...] } FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL[ PRIVILEGES ] } ON DATABASE nombre_de_base_de_datos [, ...] FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER nombre_fdw [, ...] FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] }

  • ON FOREIGN SERVER nombre_de_servidor [, ...] FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION nombre_de_funcin ( [ [ modo_arg ] [ nombre_arg ]tipo_arg [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA nombre_de_esquema [, ...] } FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE nombre_lenguaje [, ...] FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ]

    REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA nombre_de_esquema [, ...] FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE nombre_de_tablespace [, ...] FROM { [ GROUP ] nombre_de_rol | PUBLIC } [, ...] [ CASCADE | RESTRICT ]

    REVOKE [ ADMIN OPTION FOR ] nombre_de_rol [, ...] FROM nombre_de_rol [, ...] [ CASCADE | RESTRICT ]

    Esquemas y Permisos. Vistas y Reglas

    Los esquemas son una forma lgica de particionar la bases de datos en mini-contenedores.Usted puede dividir los esquemas por funcionalidad, por usuarios, o por cualquier otroatributo que usted guste. Aparte de particionamiento lgico, ellos proporcionan una manerasencilla para repartir derechos. Una manera comn es instalar todos los programascontribuidos y las extensiones en un esquema separado y dar derechos de uso a todos losusuarios de la base de datos.

  • Para crear una esquema denominado contrib en una base de datos, hay que conectarse a labase de datos y ejecutar el siguiente comando SQL:

    CREATE SCHEMA contrib;

    La ruta de bsqueda por omisin definida en el archivo postgresql.conf es "$user",public.Lo cual significa que si existe un esquema con el mismo nombre que el loggeado en user,entonces todos los objetos calificados no pertenecientes al esquema se verificarn primeroen el esquema con el mismo nombre que en user y luego con el esquema pblico. Ustedpuede evitar esta conducta en el nivel de usuario o en el nivel de base de datos.

    Por ejemplo, si se quisiera que todos los objetos en contrib fueran accesibles sin calificacinde esquema, se podra cambiar la base de datos como sigue:

    ALTER DATABASE mibasededatos SET search_path="$user",public,contrib;

    Los esquemas tambin se utilizan para abstraccin simple. Un nombre de tabla slo necesitaser nico dentro del esquema, de esta manera, muchas aplicaciones explotan esto creandotablas con el mismo nombre en distintos esquemas y, dependiendo de quin estingresando, obtendr su propia versin basada en cul es su esquema primario.

    Permisos

    Los permisos son una de las cosas ms complicadas de entender en PostgreSQL. Esta esuna caracterstica con la que se hace ms difcil trabajar que con otras bases de datos. Lagestin de permisos se volvi ms fcil con la publicacin de PostgreSQL 9.0+. PostgreSQL9.0 introdujo los permisos por omisin, lo que permiti definir permisos sobre todos losobjetos de un esquema en particular o base de datos, adems de permisos sobre tiposespecficos de objetos.

    Volviendo con el esquema contrib. Hacer la suposicin de que se desea que todos losusuarios de la base de datos tengan acceso a los comandos EXECUTE y SELECT paracualquier tabla o funciones que se vayan a crear en el esquem contrib. Se podran definir lospermisos como se muestra:

    GRANT USAGE ON SCHEMA contrib TO public;

    ALTER DEFAULT PRIVILEGES IN SCHEMA contrib GRANT SELECT, REFERENCES,TRIGGER ON TABLES TO public;

    ALTER DEFAULT PRIVILEGES IN SCHEMA contrib GRANT SELECT, UPDATE ONSEQUENCES TO public;

    ALTER DEFAULT PRIVILEGES IN SCHEMA contrib GRANT EXECUTE ON FUNCTIONS TO public;

    ALTER DEFAULT PRIVILEGES IN SCHEMA contrib GRANT USAGE ON TYPES TO public;

    Si usted ya tiene definido su esquema con todas las tablas y funciones, puede definir lospermisos de manera retroactiva en cada objeto por separado o hacer esto para todas las

  • tablas existentes, funciones, y secuencias con un GRANT .. ALL .. IN SCHEMA.

    GRANT USAGE ON SCHEMA contrib TO public;

    GRANT SELECT, REFERENCES, TRIGGER ON ALL TABLES IN SCHEMA contrib TOpublic;

    GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA contrib TO public;

    GRANT SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA contrib TO public;

    Si encuentra que definir permisos es abrumador, utilice pgAdmin para la gestin de permisos.pgAdmin proporciona una gran interfaz para definir permisos por omisin, adems de otorgaren masa, de manera retroactiva, permisos a objetos selectivos.

    Vistas

    Supngase que hacer un listado combinado de los registros del clima y la ubicacin deciudades es de particular inters para una aplicacin que se est desarrollando, pero que nose desea tipear la consulta cada vez que se le necesite. Se puede crear una vista sobredicha consulta, la cual le da un nombre a la consulta a la que se puede hacer referenciacomo si se tratase de una tabla cualquiera:

    CREATE VIEW mivista AS SELECT ciudad, temp_baja, temp_alta, precip, fecha, ubicacion

    FROM clima, ciudad WHERE ciudad = nombre;

    SELECT * FROM mivista;

    Hacer uso libre de las vistas es un aspecto clave de un buen diseo de de Bases de DatosSQL. Las vistas le permiten encapsular los detalles de la estructura de sus tablas, la cualpodra cambiar a medida que su aplicacin evolucione, detrs de interfaces consistentes.

    Las vistas puede ser utilizadas en casi cualquier lugar donde pueda usarse una tablaverdadera. Construir vistas a partir de otras vistas no es algo poco comn.

    Reglas

    El sistema de reglas (de manera ms precisa, el sistema de reglas de reescritura deconsultas) modifica las consultas para tomar reglas en consideracin, y luego pasar laconsulta modificada al planificador de consultas para su planificacin y ejecucin. Es muypotente, y puede utilizarse para varias cosas tales como procedimientos del lenguaje deconsultas, vistas y versiones.

    Vistas y el Sistema de Reglas

    Las vistas en PostgreSQL son implementadas utilizando el sistema de reglas. De hecho, no

  • hay una diferencia esencial entre:

    CREATE VIEW mivista AS SELECT * FROM mitabla;

    comparado con los dos comandos:

    CREATE TABLE mivista (misma lista de columnas de mitabla); CREATE RULE "_RETURN" AS ON SELECT TO mivista DO INSTEAD

    SELECT * FROM mitabla;

    porque esto es exactamente lo que el comando CREATE VIEW hace internamente. Estotiempo algunos efectos secundarios. Uno de ellos es que la informacin sobre una vista enlos catlogos del sistema PostgreSQL es exactamente la misma que es para una tabla. Porlo que para el analizador (parser), no hay en lo absoluto ninguna diferencia entre una tabla yuna vista. Son la misma cosa: relaciones.

    Seguridad de datos

    Soporte SSL

    Existen dos aspectos fundamentales e independientes en lo que respecta al tema de lasconexiones seguras, el primero es cmo cifrar el trfico entre los clientes y el servidor, y elsegundo, cmo autentificar a los clientes/usuarios mediante certificados digitales.

    Con el cifrado del trfico de datos entre los clientes y el servidor se impide que alguien puedainterceptar el trfico de red y conseguir los datos que viajan por la conexin. Con laautentificacin por medio de certificados digitales se evita que clientes/usuarios que notengan instalado el certificado correspondiente puedan conectarse al servidor, incluso si lohacen cifrando el trfico de red.

    PostgreSQL soporta nativamente el uso de conexiones SSL para cifrar las comunicaciones,el nico requerimiento es tener OpenSSL instalado en el servidor y PostgreSQL compiladocon soporte SSL. El soporte SSL durante la compilacin se consigue usando el parmetro--with-ssl con ./configure antes de compilar (En caso de que se instale por el mtodode compilacin e instalacio del cdigo fuente. Ver el anexo)

    La siguiente figura muestra los archivos que se encargan de la seguridad en PostgreSQL:

  • Criptografia

    El mdulo pgcrypto provee las siguientes funciones de criptografa para PostgreSQL:

    digest hmac crypt

    Algoritmos soportados por crypt :

    Algoritmo Mxima longitud del pasword Adaptable Nro de bitsBf 72 s 128

    md5 ilimitado no 48Xdes 8 s 24Des 8 no 12

    gen_salt

  • Autenticacin y Autorizacin

    Definiciones

    Autenticacin: Es el proceso mediante el cual se puede determinar si un usuario que intentaingresar al sistema es quien dice ser .

    Autorizacin: Es el proceso mediante el cual se determina a cuales objetos dentro delsistema tiene acceso un usuario que se ha autenticado correctamente.

    El proceso de autenticacin se realiza en la configuracin del archivo pg_hba.conf y el deautorizacin se realiza a travs de los roles y de los usuarios y empleando los comandosestndar de SQL GRANT y REVOKE .

    Comunicaciones y Conexiones Remotas

    La autenticacin en PostgreSQL se realiza a travs del archivo pg_hba.conf

    Este archivo se utiliza para definir cmo, dnde y desde qu sitio un usuario puede acceder aun cluster PostgreSQL. Todas las lneas que empiecen con el carcter # se interpretan comocomentarios. El resto debe de tener el siguiente formato:

    [Tipo de conexin][basedatos][usuario][IP][mscarared][Tipo de autenticacin][opciones]

    Dependiendo del tipo de conexin y del tipo de autenticacin, [IP],[mscarared] y [opciones]son opcionales. El tipo de conexin puede tener los siguientes valores:

    local host hostssl hostnossl.

    El mtodo de autenticacin puede ser uno de los siguientes:

    trust reject md5 crypt password krb5 ident pam

  • ldap.

    Mediante algunos ejemplos se demuestra cmo se configuran accesos diferentes a uncluster PostgreSQL.

    Ejemplo 1: Acceso va tcp/ip (por red) a la base de datos mibasededatos, como usuariousuario_db desde el equipo con IP 192.168.1.50, y mtodo de autenticacin md5:

    host mibasededatos usuario_db 192.168.1.50 255.255.255.255 md5 Esta misma entrada se puede escribir tambin con la mscara de red en notac