República Bolivariana de Venezuela

Universidad Yacambú

Vicerrectorado de Estudios Virtuales

Materia: Análisis y Diseño de Sistemas

Trabajo 2. Postgres SQL

Profesor: Yaros Pérez

Alumnas: Brígida Contreras

Denis Iraida Avellaneda J.

 

 

Historia de Postgres SQL

PostgreSQL Es un motor de base de datos y servidor de base de datos relacional libre, liberado bajo la licencia BSD, además es orientado a objetos (ORDBMS) de gran escalabilidad y admite, SQL92 Y SQL99. También llamado Postgres95, derivado del paquete Postgres escrito en Berkeley, es considerado como  el gestor de bases de datos de código abierto más avanzado, ofrece control de concurrencia multi-versión, soportando casi toda la sintaxis SQL (incluyendo subconsultas, transacciones, y tipos y funciones definidas por el usuario), contando también con un amplio conjunto de enlaces con lenguajes de programación (incluyendo C, C++, Java, perl, tcl y python).

Postgres SQL es un sistema de gestión de base de datos objeto-relacionales, (ORDBMS), que ha sido desarrollado de varias formas desde 1977, comenzó con un proyecto denominado Ingres en la Universidad Berkeley de California. Ingres fue mas tarde desarrollado comercialmente por la Relational Technologies/ Ingres Corporation.

La implementación del DBMS Postgres comenzó en 1986. En ese momento se presento  el diseño de Postgres y la definición del modelo de datos inicial, el diseño del sistema de reglas y la lógica y arquitectura del gestor de almacenamiento. Postgres ha pasado por varias revisiones importantes desde entonces. El primer sistema de pruebas fue operacional en 1987 y fue mostrado en la Conferencia ACM-SIGMOD de 1988. Lanzamos la Versión 1a unos pocos usuarios externos en Junio de 1989. En respuesta a una crítica del primer sistema de reglas, éste fue rediseñado y la Versión 2, que salió en Junio de 1990. La Versión 3 apareció en 1991 y añadió una implementación para múltiples gestores de almacenamiento, un ejecutor de consultas mejorado y un sistema de reescritura de reglas nuevo. El tamaño de la comunidad de usuarios externos casi se duplicó durante 1993. Pronto se hizo obvio que el mantenimiento del código y las tareas de soporte estaban ocupando tiempo que debía dedicarse a la investigación. En un esfuerzo por reducir esta carga, el proyecto terminó oficialmente con la Versión 4.2.

A pesar de que el proyecto Postgres hubiese finalizado oficialmente, la licencia BSD bajo la cual Postgres había sido liberado permitió a desarrolladores de código abierto el obtener una copia del código para continuar su desarrollo. En 1994, Andrew Yu y Jolly Chen añadieron un intérprete de lenguaje SQL, el cual fue publicado en la Web  Postgres95  como un descendiente de dominio público y código abierto del código original Postgres de Berkeley.  El código de Postgres95 fue adaptado a ANSI C y su tamaño reducido en un 25%. Muchos cambios internos mejoraron el rendimiento y la facilidad de mantenimiento. Postgres95 v1.0.x se ejecutaba en torno a un 30-50% más rápido en el Wisconsin Benchmark comparado con Postgres v4.2.

En 1996, le dieron un  nuevo nombre, PostgreSQL, para reflejar la relación entre el Postgres original y las versiones más recientes con capacidades SQL. Al mismo tiempo, durante el desarrollo de Postgres95 se hizo hincapié en identificar y entender los problemas en el código del motor de datos. Con PostgreSQL, el énfasis ha pasado a aumentar características y capacidades, aunque el trabajo continúa en todas las áreas.

El 8 de enero del 2007 se libero la versión 8.2.1 de Postgres con unas mejoras de rendimiento en alrededor de un 20% en pruebas de sistemas de Procesamiento en Línea de Transacciones de gran escala. Se espera que la versión 8.2 conduzca  aún más migraciones hacia PostgreSQL. Agrega sintaxis extendida y compatible, e interfaces que han sido solicitadas por nuestra comunidad, haciendo más fácil para nuevos administradores de bases de datos el uso de todas las características avanzadas de PostgreSQL

Sus principales características son:

·         Alta concurrencia Mediante un sistema denominado MVCC (Acceso concurrente multiversión) PostgreSQL permite que mientras un proceso escribe en una tabla, otros accedan a la misma tabla sin necesidad de bloqueos. Cada usuario obtiene una visión consistente de lo último a lo que se le hizo commit. Esta estrategia es superior al uso de bloqueos por tabla o por filas común en otras bases, eliminando la necesidad del uso de bloqueos explícitos.

·         Amplia variedad de tipos nativos PostgreSQL provee nativamente soporte para: Números de precisión arbitraria, Texto de largo ilimitado, Figuras geométricas (con una variedad de funciones asociadas), Direcciones IP (IPv4 e IPv6), Bloques de direcciones estilo CIDR, Direcciones MAC. Arrays.  Adicionalmente los usuarios pueden crear sus propios tipos de datos, los que pueden ser por completo indexables gracias a la infraestructura GiST de PostgreSQL. Algunos ejemplos son los tipos de datos GIS creados por el proyecto PostGIS.

·         Recuperación a un punto en el tiempo característica introducida en la versión 8.0, que permite a los administradores crear fácilmente una copia para recuperación inmediata (failover) de su cluster de bases de datos,  actualmente en la versión 8.2.1 se introduce una mejora  o extensión a esta característica con Warm Standby.  

·         Índices Invertidos Generalizados una forma más escalable y programable de indexar datos semi-estructurados y texto.

·         Bloqueos consultivos («advisory locks») permiten el control de objetos de bases de datos a nivel de aplicación usando el eficiente motor de bloqueos de PostgreSQL.

·         Criptografía el módulo pgcrypto, soportando criptografía dentro de la base de datos, fue actualizado.

·         Roles PostgreSQL soporta roles de bases de datos, los que simplifican el manejo de grandes cantidades de usuarios con esquemas complejos de privilegios superpuestos

·         (Two-Phase Commit, 2PC) esta característica, muy necesaria para aplicaciones WAN y centros de cómputo heterogéneos, permite transacciones conformes con ACID a través de servidores distribuidos

·         Particionamiento de Tablas El optimizador de consultas es capaz de evitar recorrer secciones completas de tablas grandes, a través de una técnica conocida como Exclusión por Restricciones. Similar a las características de Particionado de Tablas de otros sistemas gestores de datos, esta característica mejora tanto el rendimiento como la gestión de datos para tablas de varios gigabytes.

·         Bloqueos Compartidos de Registros El modelo de bloqueos «mejor que a nivel de registro» de PostgreSQL soporta niveles de concurrencia aún mayores, a través de la adición de candados compartidos a nivel de registro para llaves foráneas. Estos candados compartidos mejorarán el rendimiento de inserción y actualización para muchas aplicaciones OLTP de gran concurrencia.

·         Compatibilidad las funciones lastval(), greatest() y least(), facilitan  el porte de aplicaciones desde MySQL y Oracle.

Otras características  que aportan potencia y flexibilidad adicional

·         Claves ajenas también denominadas Llaves ajenas o Llaves Foráneas (foreign keys).

·         Disparadores (triggers).

·         Vistas.

·         Integridad transaccional.

·         Herencia de tablas.

·         Tipos de datos y operaciones geométricas.

·         Reglas (rules)

·         Restricciones (Constraints)

Funcionamiento de Postgre SQL.

·       PostgreSQL soporta funciones que retornan "filas", donde la salida puede tratarse como un conjunto de valores que pueden ser tratados igual a una fila retornada por una consulta (query).

·       Las funciones pueden ser definidas para ejecutarse con los derechos del usuario ejecutor o con los derechos de un usuario previamente definido. El concepto de funciones, en otros DBMS, son muchas veces referidas como "procedimientos almacenados" (stored procedures).

·       Se han añadido funcionalidades en línea con el estándar SQL92, incluyendo claves primarias, identificadores entrecomillados, forzado de tipos cadenas literales, conversión de tipos y entrada de enteros binarios y hexadecimales.

·       Los tipos internos han sido mejorados, incluyendo nuevos tipos de fecha/hora de rango amplio y soporte para tipos geométricos adicionales.

·       La velocidad del código del motor de datos ha sido incrementada aproximadamente en un 20-40%, y su tiempo de arranque ha bajado el 80% desde que la versión 6.0 fue lanzada.

·       Bloques de código que se ejecutan en el servidor. Pueden ser escritos en varios lenguajes, con la potencia que cada uno de ellos da desde las operaciones básicas de programación, tales como bifurcaciones y bucles, hasta las complejidades de la programación orientación a objetos o la programación funcional.

·       Los disparadores (triggers son funciones enlazadas a operaciones sobre los datos.

Deficiencias de Postgre SQL

·         PostgreSQL no mantiene automáticamente estadísticas. Cada uno debe hacer explícitamente una llamada a VACUUM para actualizar las estadísticas. Después de que éstas se hayan actualizado, el optimizador conoce cuántas filas hay en la tabla y puede decidir mejor si debería utilizar índices. Tenga en cuenta que el optimizador no usa índices en los casos en que la tabla es pequeña, debido a que una búsqueda secuencial es más rápida.

·         PostgreSQL es un magnífico gestor de bases de datos. Tiene prácticamente todo lo que tienen los gestores comerciales, haciendo de él una muy buena alternativa GPL. A pesar de ello, el primer encuentro con este gestor es un poco "duro", ya que la sintaxis de algunos de sus comandos no es nada intuitiva. También resulta engorroso las pequeñas variaciones que presenta este gestor en algunos de los tipos de datos que maneja, siendo el problema más comentado el referente al tipo "serial".

·         Consume gran cantidad de recursos.

·         Tiene un límite de 8K por fila, aunque se puede aumentar a 32K, con una disminución considerable del rendimiento.

·         Es de 2 a 3 veces más lento que MySQL

Seguridad

Seguridad de Bases de Datos

Hoy en día, las bases de datos son componentes cardinales de cualquier aplicación basada en Web, permitiendo que los sitios Web provean contenido dinámico, debido a que información considerablemente sensible o secreta puede ser almacenada en tales bases de datos. Para recuperar o almacenar cualquier información necesita conectarse a la base de datos, enviar una consulta válida, recoger el resultado y cerrar la conexión, hoy en día, el lenguaje de consultas usado comúnmente en estas interacciones es el lenguaje de Consultas Estructurado (SQL por sus siglas en Inglés),

Entre más acciones se  tomen para incrementar la protección de su base de datos, menor será la probabilidad de que un atacante tenga éxito, y exponga o abuse de cualquier información secreta que estuviera almacenada, un buen diseño del esquema de la base de datos y de la aplicación basta para lidiar con sus mayores temores. Deben realizarse copias de seguridad de las bases de datos regularmente. Dado que Postgres gestiona sus propios ficheros en el sistema, no se recomienda confiar en los sistemas de copia de seguridad del sistema para las copias de respaldo de las bases de datos; no hay garantía de que los ficheros estén en un estado consistente que permita su uso después de la restauración.

            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 instalación de una sola vez. La copia de seguridad de una sola base de datos puede realizarse usando la siguiente orden: % pg_dump nombredb > nombredb.pgdump y puede ser restaurada usando cat nombredb.pgdump | psql nombredb

 

Modelo de Almacenamiento Encriptado

SSL/SSH protege los datos que viajan desde el cliente al servidor, SSL/SSH no protege los datos persistentes almacenados en la base de datos SSL es un protocolo sobre el cable.  Una vez el atacante adquiere acceso directo a su base de datos (evitando el paso por el servidor Web), los datos críticos almacenados pueden estar expuestos o mal utilizados, a menos que la información esté protegida en la base de datos misma, la encriptación de datos es una buena forma de mitigar esta amenaza, pero muy pocas bases de datos ofrecen este tipo de mecanismo de encriptación de datos. La forma más sencilla de evitar este problema es crear primero su propio paquete de encriptación, y luego utilizarlo desde sus scripts de PHP_ PHP puede ayudarle en este caso con sus varias extensiones, como Mcrypt y Mhash, las cuales cubren una amplia variedad de algoritmos de encriptación, el script entonces debe encriptar los datos a ser almacenados primero, y luego la decripta cuando la recupera.

En el caso de datos realmente escondidos, si su representación original no se necesita es decir, no debe ser desplegada, los resúmenes criptográficos pueden llegar a considerarse, un ejemplo clásico de gestión de resúmenes criptográficos es el almacenamiento de secuencias MD5 de una contraseña en una base de datos, en lugar de la contraseña misma.

Inyección de SQL

Muchos desarrolladores Web no son conscientes de cómo pueden manipularse las consultas SQL, y asumen que una consulta SQL es un comando confiable, esto representa que las consultas SQL pueden burlar los controles de acceso, y de este modo evitar los chequeos estándares de autenticación y autorización, y a veces las consultas SQL pueden incluso permitir acceso a comandos al nivel del sistema operativo de la máquina huésped. La Inyección Directa de Comandos SQL es una técnica en la cual un atacante crea o altera comandos SQL existentes para exponer datos escondidos, o sobrescribir datos críticos, o incluso ejecutar comandos del sistema peligrosos en la máquina en donde se encuentra la base de datos esto se consigue cuando la aplicación toma información de entrada del usuario y la combina con parámetros estáticos para construir una consulta SQL.

Técnicas de protección

Para argumentar con justa razón que el atacante, debe poseer cierta cantidad de información sobre el esquema de la base de datos, nunca se sabe cuándo y cómo puede filtrarse esta información, y si ocurre, la base de datos estará expuesta, si se esta usando un paquete de gestión de bases de datos de código abierto, o cuyo código fuente está disponible públicamente, puede pertenecer a algún sistema de administración de contenido o foro, los intrusos pueden producir fácilmente una copia de un trozo de su código, también puede ser un riesgo de seguridad si es un segmento de código pobremente diseñado. Estos ataques se basan principalmente en la explotación del código que no ha sido escrito pensando en la seguridad,

·         No  abra ningún tipo de información de entrada, especialmente si proviene del lado del cliente, aun si lo hace desde una caja de selección, un campo de entrada hidden o una cookie.

·         No se conecte a la base de datos como un súper usuario o como el dueño de la base de datos. Use siempre usuarios personalizados con privilegios muy limitados.

·         Revise si la entrada recibida es del tipo apropiado, PHP posee un amplio rango de funciones de validación de datos, desde los más simples encontrados en funciones sobre variables y en funciones de tipo carácter.

·         Ubicar  cada entrada del usuario no numérica que sea pasada a la base de datos entre comillas con addslashes() o addcslashes().

·         No imprimir ninguna información específica sobre la base de datos, especialmente sobre su esquema, ya sea por razones justas o por equivocaciones.

·         Puede usar procedimientos almacenados y cursores previamente definidos para abstraer el acceso a las bases de datos, de modo que los usuarios no tengan acceso directo a las tablas o vistas, aunque esta solución tiene otros impactos.

 

Comparación entre Postgre y Oracle
 
 
 
ORACLE
POSTGRESQL
El soporte inicial es costoso.
El soporte inicial es gratuito.
La plataforma utilizada puede ser RHE o Windows.
La plataforma utilizada  es bsd.
Es una base de datos Relacional.
Es una base de datos objeto relacional.
No tiene posibilidad de escribir tus propias rutinas.
Tiene la posibilidad de escribir tus propias rutinas para construcción de índices
Tiene un solo lenguaje.
Tiene cinco  lenguajes de programación procedurales.
Sólo permite usarlas como procedimiento. Simula parcialmente el
comportamiento proveyendo paquetes
Amplía el concepto de programación procedural para soportar funciones en cualquier parte como procedimiento, como tabla, como operador, como selector, como filtro.
Requiere comprar software adicional y no puedes desarrollar tus propios tipos.
 
Soporta nativamente tipos de datos no escalares, con sus operadores, y ofrece la posibilidad de crear tus propios tipos de datos y operadores.
Es privado y caro.
Es software libre
 
 
·                Ambos tienen soporte para las mismas cosas SQL, métodos de conexión desde el cliente.
·                Son capaces de manipular bases de datos de dimensiones enormes y tienen excelente robustez y escalabilidad transaccional ya que ambas aplican mecanismos que no están basados en locks.
 
 

Principales comandos de Postgre SQL

  • Comando INSERT= Insertar,  (Crea nuevas filas en una tabla)

 

Syntax:

INSERT INTO table [ ( column [, ...] ) ]  

{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) |

SELECT query }

 

  • Comando UPDATE = Actualización, (Actualizar filas en una tabla)

Syntax:

 

UPDATE [ ONLY ] table SET col = expression [, ...]

[ FROM fromlist ]

[ WHERE condition ]

 

  • Comando DELETE  = Cancelación o eliminar (Eliminación  de filas de una tabla)

 

Syntax:

 

DELETE FROM [ ONLY ] table [ WHERE condition ]

 

  • Comando CREATE VIEW= definir nueva vista (crear una nueva opinión)

Syntax:

CREATE [ OR REPLACE ] VIEW view [ ( column name list ) ] AS SELECT query

 

 

Como se hace el análisis y diseño de un sistema utilizando Postgre SQL

 

Análisis del Sistema

 

  • Identificación y descripción  del problema del Problema. En esta etapa el analista se involucra en la identificación de los problemas observando de forma objetiva lo que ocurre en una empresa e identificando los problemas en conjunto con los miembros de la organización. Las oportunidades son aquella situaciones que el analista considera que pueden perfeccionarse mediante el uso de los sistemas de información computarizados.

 

  • Determinación de los Requerimientos de Información. Esto se hace mediante el uso de distintas herramientas: Muestreo, el estudio de los datos y formas usadas por la organización, entrevistas, cuestionarios, la observación de la conducta de quien toma las decisiones, así como de su ambiente. Esta parte también comprende la identificación los sistemas existentes  y de los usuarios participantes en el proyecto.

 

  • Análisis de las necesidades del sistema. Incluyen el uso de diagramas de flujo de datos para representar en forma gráfica la entrada de datos de la empresa, los procesos y la salida de la información. El analista las examina de acuerdo con el grado de complejidad del problema y con el número de criterios considerados al llevar a cabo las decisiones. El análisis de criterio múltiple (donde numerosos factores tienen que equilibrarse) también es parte de esta etapa, una de las técnicas es el proceso de intercambio y aplicación de métodos de ponderado. El analista prepara una propuesta del sistema que resume todo lo que ha encontrado, presenta un análisis costo/beneficio de las alternativas y plantea las recomendaciones (si existen) de lo que deberá realizarse. 

 

  • Análisis de requerimientos. En esta parte  se describen  e identifican  los casos de uso del Sistema, los  diagrama de casos de usos, las  clases (Atributos, Operaciones, Relaciones, Cardinalidad) y se validan los modelos ( con el cliente : clases, atributos, operaciones y crear diagrama de secuencia o de colaboración )

 

Diseño del Sistema

 

 Aquí se  define una subdivisión en aplicaciones del sistema y la forma de comunicación con los sistemas existentes con los que debe interactuar.

 

·         Diseño lógico del sistema de información usando la información recolectada se diseñan procedimientos precisos de captura de datos, interfaz (puede ser el teclado, uso de menús, uso de Mouse, etc.) que conecta al usuario con el sistema, el diseño de los archivos o bases de datos fundamentalmente, y el diseño de salidas hacia el usuario. También se debe definir la arquitectura del sistema, el diseño de clases, el diseño del modelo corporativo de datos, elaborar el modelo de datos, especificar el entorno tecnológico, especificar los requisitos de operación y seguridad, identificar los perfiles de usuario y elaborar el diseño de casos de uso de interacción con el sistema.

 

  • Diseño detallado: En esta etapa se adecua el análisis a las características específicas de ambiente de implementación. Se  agregar los detalles de implementación del modelo, se completa los detalles de la clase (diagrama de clases), subdividir en paquetes (diagrama de paquetes).

 

  • Desarrollo  y Documentación del Software: Se debe trasmitir los requerimientos al programador utilizando técnicas estructuradas como el método HIPO, los diagramas de flujo, los diagramas Nassi-Schneiderman, los diagramas Warnier-Orr y el Pseudocódigo. Desarrollar el modelo de interfaz, conocer el ambiente de base, enlazar las clases de interfaz con el modelo, crear diagrama de interacción, especificación de estándares y normas de construcción, especificación de componentes y requisitos de seguridad. Se codifican los programas desarrollando la documentación indispensable, incluyendo los manuales de procedimientos. La documentación le dirá al usuario como operar el software y qué hacer en caso de presentarse algún problema.

 

  • Pruebas y Mantenimiento del Sistema: El costo es menor si se detectan los problemas antes de la entrega del sistema, para ello se hacen pruebas con datos tipo y luego utilizando los datos del sistema real. El mantenimiento del sistema y de su documentación empieza en esta etapa y esta función se realizará de forma rutinaria a lo largo de toda la vida del sistema.

 

  • Implantación y Evaluación de Sistema: Incluye el adiestramiento al usuario planificando la suave transición que trae consigo un cambio de sistemas. Respecto a la evaluación, toma parte de cada una de las etapas, aunque se plantea como parte integrante de la última etapa del SDLC

 

Glosario

Base de Datos Relacional: Es un conjunto de dos o mas tablas estructuradas en registros (líneas) y campos (columnas), que se vinculan entre si por un campo en común, en ambos casos posee las mismas características como por ejemplo el nombre de campo, tipo y longitud; a este campo generalmente de le denomina ID, identificador o clave. A esta manera de construir bases de datos se le denomina modelo relacional.

PostgreSQL: El Sistema Gestor de Bases de Datos Relaciónales Orientadas a Objetos

Diagrama de casos de uso: Los casos de uso es una técnica para capturar de información de cómo un sistema o negocio trabaja, o de cómo se desea que trabaje, describen bajo la forma de acciones y reacciones el comportamiento de un sistema desde el punto de vista del usuario.

Diagrama de clases: Son los dispositivos de control de datos e información, correspondientes a las clases del sistema, con sus relaciones estructurales y de herencia. El modelo de casos de uso aporta información para establecer las clases, objetos, atributos y operaciones.

Diagrama de estados: Es usado para describir el comportamiento de las instancias y elementos de un modelo. Específicamente describen las posibles secuencias de estados y acciones a través de las cuales las instancias puedes proceder durante su ciclo de vida, como resultado de eventos discretos, tales como señales externas y, mensajes.

Diagrama de actividad: Es un caso especial del diagrama de estados, este puede especificar, el comportamiento de los objetos de una clase, la lógica de una operación (método), y parte o toda la descripción de un caso de uso.

Diagrama de secuencia: Presenta una interacción, la cual es un conjunto de mensajes entre un conjunto de instancias interactuando, estas son un grupo de estímulos entre instancias con el efecto de determinar el funcionamiento deseado de un proceso o un resultado.

Diagrama de colaboración: Modela la interacción entre los objetos de un Caso de Uso, estos están conectados por enlaces en los cuales se representan los mensajes enviados acompañados de una flecha que indica su dirección, el diagrama ofrece una mejor visión del escenario cuando el analista está intentando comprender la participación de un objeto en el sistema.

Diagrama de paquetes: Ofrecen un mecanismo general para la organización de los modelos/subsistemas agrupando elementos de modelado, esta agrupación se realiza por operaciones comunes o por divisiones de la organización.

Diagrama de componentes: Muestra las dependencias entre los diferentes componentes de software, incluyendo las clasificaciones que se puedan realizar, estas implementaciones son de diferentes tipos entre ellas se encuentra archivos de código fuente, archivos binarios, archivos ejecutables, scripts, entre otros.

Diagrama de despliegue: Modela la distribución en tiempo de ejecución de los elementos de procesamiento y componentes de software, junto a los procesos y objetos asociados. Muestra las relaciones físicas entre los componentes software y hardware asociados, en el desempeño del sistema.

 

Infografía

http://www.postgresql.org/about/press/presskit82.html.es

http://es.wikipedia.org/wiki/PostgreSQL

http://www.postgresql.org/about/press/presskit81.html.es

http://es.tldp.org/Postgresql-es/web/navegable/tutorial/biblio.html

http://www.sobl.org/traducciones/postgresql-develdoc/node51.html

http://www.hospedajeydominios.com/mambo/documentacion-manual_php-pagina-security_database.html

http://www.velug.org.ve/archivo/l-linux-2005-August/055197.html

http://www.pgaccess.org/index.php?page=PostgreSQL+vs.+Oracle

http://www.netpecos.org/docs/mysql_postgres/x108.html

http://web.syr.edu/~iguzmand/SPdss2.htm

 

Hosted by www.Geocities.ws

1