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 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
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
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:
·
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.
·
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
Seguridad
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
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.
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.
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 elcomportamiento 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
Syntax:
INSERT INTO
table [ ( column [, ...] ) ]
{
DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] )
|
SELECT query }
Syntax:
UPDATE [ ONLY ] table SET col = expression [, ...]
[
FROM fromlist ]
[
WHERE condition ]
Syntax:
DELETE FROM [ ONLY ] table [ WHERE condition ]
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
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.
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