Present A

  • Uploaded by: caperfor
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Present A as PDF for free.

More details

  • Words: 4,624
  • Pages: 61
Implementan do soluciones Cliente/Servid or con PostgreSQL Hernán Alonso Lotero R Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Contenido PostgreSQL Antecedentes, Introducción y Caracteristicas Tecnologias de BD. Cliente/Servidor Conectividad Abierta a bases de datos Implementacion de un esquema de tres capas Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

PRIMERA PARTE

POSTGRESQL INTRODUCCION Y CARACTERISTICAS Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

PostgreSQL ¿Donde obtener información? • En el Sitio oficial www.postgresql.org/docs: – – – – –

Tutorial (información para nuevos usuarios) User’s Guide (sql, tipos de datos, funciones, tuning) Administrator’s Guide (Instalación y mantenimiento) Programer’s Guide (extensión de funciones, librerias, diseño) Reference Manual (sintaxis SQL, programas cliente y servidor)

– Developers Guide (Información para desarrolladores, PL)

• Hispalinux (Español)

• PostgreSQL: Introduction and Concepts.Bruce Momjian

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Antecedentes •



La implementación del DBMS POSTGRES empezó en 1996 en la Universidad de Berkeley en California por el profesor Michael Stonebraker PostgreSQL es código abierto descendiente del original Berkeley



La creciente comunidad de usuarios demando gran cantidad de esfuerzo en soporte y mantenimiento, que debería ser invertido en Investigación. Por lo cual Berkeley terminó oficialmente el proyecto en 1993.



En 1994 Andrew Yu and Jolly Chen le adicionaron un interprete SQL. Postgres95 fue lanzado en la Web para que encontrara su propio camino. Fue escrito en C ANSI y se le realizaron algunas mejoras (funciones agregadas, group by, libpg, psql, libpgtcl, objetos grandes).



En 1996, Se cambio el nombre a PostgreSQL y se empezó a numerar desde la versión 6.0

,

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Características • •

Proporciona soporte a SQL92/SQL99. POSTGRES fue pionero de muchos de los conceptos objeto-relacional ahora disponibles en algunos DBMS comerciales.



PostgreSQL ofrece poder adicional incorporando los siguientes conceptos que representan una manera para que los usuarios extiendan el sistema: (HERENCIA, TIPOS DE DATOS, FUNCIONES), además de (CONSTRAINS, TRIGGERS, RULES, TRANSACTIONS).



Proporciona soporte e interfaces para diversos lenguajes incluyendo C, C++, Java, Perl, Tcl, PHP and Python.



Estas características lo califican como Objeto-Relacional (Ultima versión 7.3).

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Introducción Arquitectura del sistema basada en Procesos cooperativos: • Un proceso servidor: Maneja los archivos de base de datos, acepta conecciones a la base de datos y permite acciones sobre las B.D. El proceso servidor es llamado postmaster. • Las aplicaciones de usuario final (frontEnd): Desean realizar operaciones sobre la base de datos. Pueden ser de diversa natrualeza: Una herramienta de texto o consola, una aplicación gráfica, una interface Web.

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Arquitectura Servidor Postmaster

Cliente APLICACION

DATOS

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Iniciando la Base de Datos Creación de la base de datos

$ createdb mydb Eliminación de la Base de datos

$ dropdb mydb Accesando la base de datos mediante la consola interactiva de SQL (psql)

$ psql mydb Una vez conectdo puedo ejecutar instrucciones sql. Ejemplo:

mydb=> SELECT version(); ---------------------------------version -------------------------------------------PostgreSQL 7.3devel on i586-pc-linux-gnu, compiled by GCC 2.96 (1 row)

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Iniciando la Base de Datos Operaciones Matemáticas

mydb=> SELECT 2 + 2; ?column? ---------4 (1 row) Comandos SQL

mydb=> SELECT * from city; city | temp_avg | date ---------------+----------+-----------San Francisco | 48 | 1994-11-27 San Francisco | 50 | 1994-11-29 Hayward | 45 | 1994-11-29 (3 rows)

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Otras características:Vectores Uno de los principios del modelo relacional es que los atributos de una relación son atómicos Postgres no posee esta restricción. Postgres permite que los atributos de una instancia sean definidos como vectores multidimensionales de longitud fija o variable. Ej: CREATE TABLE SAL_EMP ( nombre text, pago_trimestre int4[], agenda text[][] ); INSERT INTO SAL_EMP VALUES ('Carol', '{20000, 25000, 25000, 25000}', '{{"talk", "consult"}, {"meeting"}}'); Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Vectores SELECT SAL_EMP.pago_trimestre[3] FROM SAL_EMP; +---------------+ |pago_trimestre | +---------------+ |10000 | +---------------+ |25000 | +---------------+ SELECT name FROM SAL_EMP WHERE SAL_EMP.pago_trimestre[1] <> SAL_EMP.pago_trimestre[2]; +------+ |name | +------+ |Carol | +------+

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Otra característica: Herencia CREATE TABLE cities name population altitude );

( text, float, int

-- (in ft)

CREATE TABLE capitals ( state char(2) ) INHERITS (cities); una instancia de capitals hereda (inherits) todos los atributos (name, population, altitude) de la clase cities. Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Herencia Por ejemplo, la siguiente consulta encuentra todas las ciudades situadas a una altitud de 500 pies o más: SELECT name, altitude FROM cities WHERE altitude > 500; +----------+----------+ |name | altitude | +----------+----------+ |Las Vegas | 2174 | +----------+----------+ |Mariposa | 1953 | +----------+----------+ Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Herencia SELECT c.name, c.altitude FROM cities* c WHERE c.altitude > 500; +----------+----------+ |name | altitude | +----------+----------+ |Las Vegas | 2174 | +----------+----------+ |Mariposa | 1953 | +----------+----------+ |Madison | 845 | +----------+----------+

Aquí, el "*" después de cities indica que la consulta debe realizarse sobre cities y todas las clases que estén por debajo de ella en la jerarquía de herencia Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Control de Concurrencia • A diferencia de la mayoría de otros sistemas de bases de datos que usan bloqueos para el control de concurrencia, Postgres mantiene la consistencia de los datos un modelo multiversión. • Mientras se consulta una base de datos, cada transacción ve una imagen de los datos (una versión de la base de datos) como si fuera tiempo atrás, sin tener en cuenta el estado actual de los datos que hay por debajo. Esto evita que la transacción vea datos inconsistentes que pueden ser causados por la actualización de otra transacción concurrente en la misma fila de datos, proporcionando aislamiento transaccional para cada sesión de la base de datos. Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Aislamiento transaccional El estándar ANSI/ISO SQL define cuatro niveles de aislamiento transaccional en función de tres hechos que deben ser tenidos en cuenta entre transacciones concurrentes. Estos hechos no deseados son: •





lecturas "sucias" – Una transacción lee datos escritos por una transacción no esperada, no confirmada (commited). lecturas no repetibles – Una transacción vuelve a leer datos que previamente había leído y encuentra que han sido modificados por una transacción confirmada. lectura "fantasma" – Una transacción vuelve a ejecutar una consulta, devolviendo un conjuto de filas que satisfacen una condición de búsqueda y encuentra que otras filas que satisfacen la condición han sido insertadas por otra transacción confirmada.

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Aislamiento transaccional Niveles de aislamiento de Postgres NIVEL

Lectura "sucia" Lectura no confirm. Posible

Lectura no Lectura repetible "fantasma" Posible Posible

Lectura confirmada No posible

Posible

Posible

Lectura repetible

No posible

No posible

Posible

Serializable

No posible

No posible

No posible

Postgres ofrece lectura confirmada y niveles de aislamiento serializables.

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Aislamiento transaccional NIVEL DE LECTURA CONFIRMADA (read committed) Lectura confirmada es el nivel de aislamiento por defecto en Postgres. Cuando una transacción se ejecuta en este nivel, la consulta sólo ve datos antes de que la consulta comenzara y nunca ve datos "sucios" pero si cambios en transacciones concurrentes confirmadas durante la ejecución de la consulta Los resultados de la ejecución de SELECT o INSERT (con una consulta) no se verán afectados por transacciones concurrentes.

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Aislamiento transaccional NIVEL DE LECTURA CONFIRMADA (READ COMMITTED) test=> BEGIN WORK; BEGIN test=> SELECT COUNT(*) FROM trans_test; count ------5 (1 row) test=> -test=> -- someone commits INSERT INTO trans_test test=> -test=> SELECT COUNT(*) FROM trans_test; count ------6 (1 row) test=> COMMIT WORK; COMMIT Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Aislamiento transaccional NIVEL DE AISLAMIENTO SERIALIZABLE •

La serialización proporciona el nivel más alto de aislamiento transaccional. Cuando una transacción está en el nivel serializable, la consulta sólo ve los datos cursados antes de que la transacción comience y nunca ve ni datos sucios ni los cambios de transacciones concurrentes confirmados durante la ejecución de la transacción.



Por lo tanto, este nivel emula la ejecución de transacciones en serie, como si las transacciones fueran ejecutadas un detrás de otra, en serie, en lugar de concurrentemente



una transacción serializable no puede modificar filas cambiadas por otras transacciones después de que la transacción serializable haya empezado

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Aislamiento serializable test=> BEGIN WORK; BEGIN test=> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET VARIABLE test=> SELECT COUNT(*) FROM trans_test; count ------5 (1 row) test=> -test=> -- someone commits INSERT INTO trans_test test=> -test=> SELECT COUNT(*) FROM trans_test; count ------5 (1 row) test=> COMMIT WORK; COMMIT Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Bloqueos y Tablas Postgres ofrece varios modos de bloqueo para controlar el acceso concurrente a los datos en tablas. Algunos de estos modos de bloqueo los adquiere Postgres automáticamente antes de la ejecución de una declaración, mientras que otros son proporcionados para ser usados por las aplicaciones. Todos los modos de bloqueo (excepto para AccessShareLock) adquiridos en un transacción se mantienen hasta la duración de la transacción.

Existen dos tipos de bloqueos: • Bloqueos a nivel de tabla • Bloqueos a nivel de registro Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Bloqueos a Nivel de tabla AccessShareLock Un modo de bloqueo adquirido automáticamente sobre tablas que están siendo consultadas. Postgres libera estos bloqueos después de que se haya ejecutado una declaración. RowShareLock Adquirido por SELECT FOR UPDATE y LOCK TABLE para declaraciones IN ROW SHARE MODE. RowExclusiveLock Lo adquieren UPDATE, DELETE, INSERT y LOCK TABLE para declaraciones IN ROW EXCLUSIVE MODE. ShareLock Lo adquieren CREATE INDEX y LOCK TABLE para declaraciones IN SHARE MODE. ShareRowExclusiveLock Lo toma LOCK TABLE para declaraciones IN SHARE ROW EXCLUSIVE MODE. ExclusiveLock Lo toma LOCK TABLE para declaraciones IN EXCLUSIVE MODE. AccessExclusiveLock Lo toman ALTER TABLE, DROP TABLE, VACUUM y LOCK TABLE. Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Bloqueos a Nivel de Fila • Este tipo de bloqueos se producen cuando campos internos de una fila son actualizados (o borrados o marcados para ser actualizados). Postgres no retiene en memoria ninguna información sobre filas modificadas y de este modo no tiene límites para el número de filas bloqueadas sin incremento de bloqueo. • Sin embargo, tenga en cuenta que SELECT FOR UPDATE modificará las filas seleccionadas marcándolas, de tal modo que se escribirán en el disco. • Los bloqueos a nivel de fila no afecta a los datos consultados. Estos son usados para bloquear escrituras a la misma fila únicamente. Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Bloqueos Ejemplo de Bloqueos Transaction 1 BEGIN WORK UPDATE

Transaction 2 BEGIN WORK

row 64 UPDATE

row 64

COMMIT WORK COMMIT WORK

Description start both transactions transaction 1 exclusively locks row 64 transaction 2 must wait to see if transaction 1 commits transaction 1 commits; transaction 2 returns from UPDATE transaction 2 commits

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Deadlock (Abrazo mortal) Transaction 1 Transaction 2 BEGIN WORK

start both transactions

row 83 independent rows write-locked holds waiting for transaction 2 to release write lock UPDATE row 83 attempt to get write lock held by UPDATE row 64 transaction 1 auto-ROLLBACK deadlock detected--transaction 2 is rolled back WORK transaction 1 returns from UPDATE and commits COMMIT WORK UPDATE

row 64

BEGIN WORK

Description

UPDATE

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Chequeos de consistencia •

Ya que las lecturas en Postgres no bloquean los datos, sin tener en cuenta el nivel de aislamiento de la transacción, los datos leídos por una transacción pueden ser sobreescritos por otra. En otras palabras, si una fila es devuelta por SELECT esto no significa que esta fila realmente exista en el momento en que se devolvió (un tiempo después de que la declaración o la transacción comenzaran, por ejemplo) ni que la fila esté protegida de borrados o actualizaciones por la transacción concurrente antes de que ésta se lleve a cabo o se pare.



Para asegurarse de la existencia de una fila y protegerla contra actualizaciones concurrentes, debería usar SELECT FOR UPDATE o una declaración de tipo LOCK TABLE más apropiada. Esto debe tenerse en cuenta cuando desde otros entornos se estén portando aplicaciones hacia Postgres utilizando el modo serializable.

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Chequos de consistencia test=> BEGIN WORK; BEGIN test=> SELECT * test-> FROM lock_test test-> WHERE name = 'James'; id | name -----+-------------------------------521 | James (1 row) test=> test=> test=> test=> test-> test-> UPDATE test=> COMMIT

-- (AQUÍ SE PUDE METER OTRA TRANSACCION) -- the SELECTed row is not locked -UPDATE lock_test SET name = 'Jim' WHERE name = 'James'; 1 COMMIT WORK;

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Chequos de consistencia test=> BEGIN WORK; BEGIN test=> SELECT * test-> FROM lock_test test-> WHERE name = 'James‘ FOR UPDATE; id | name -----+-------------------------------521 | James (1 row) test=> test=> test=> test=> test-> test-> UPDATE test=> COMMIT

-- (NO SE PUDE METER OTRA TRANSACCION) -- the SELECTed row is locked -UPDATE lock_test SET name = 'Jim' WHERE name = 'James'; 1 COMMIT WORK;

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Catalogo Principal Nombre del Catalogo pg_database pg_class pg_attribute pg_index pg_proc pg_type pg_operator pg_aggregate pg_am pg_amop pg_amproc pg_opclass

Descripcion base de datos clases atributos de clases indices secundarios procedimientos (ambos C y SQL) tipos (ambos base y complejo) operadores conjunto y conjunto de funciones metodo de acceso operador de metodo de acceso soporte de operador de metodo de acceso operador de clases de metodo de acceso

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Extendiendo SQL: Funciones Es posible extender el sistema mediante la creación de funciones. PostgresSQL proporciona tres tipos de funciones: • Funciones de lenguaje de consultas (funciones escritas en SQL) • Funciones de lenguaje procedural (funciones escritas en, por ejemplo, PLTCL o PLSQL) • Funciones de lenguaje de programación (funciones escritas en un lenguaje de programación compilado tales como C). Cada clase de función puede tomar un tipo base, un tipo compuesto o alguna combinación como argumentos (parámetros). Además, cada clase de función puede devolver un tipo base o un tipo compuesto

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Funciones del Lenguaje SQL Para ilustrar una función SQL sencilla, considere lo siguiente, que se podría usar para cargar en una cuenta bancaria: create function TP1 (int4, float8) returns int4 as 'update BANK set balance = BANK.balance + $2 where BANK.acctountno = $1 select(x = 1)' language 'sql'; Un usuario podría ejecutar esta función para cargar $100.00 en la cuenta 17 de la siguiente forma: select (x = TP1( 17,100.0)); Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Funciones del Lenguaje SQL Funciones SQL sobre tipos base: La función SQL más simple posible no tiene argumentos y sencillamente devuelve un tipo base, tal como int4: CREATE FUNCTION one() RETURNS int4 AS 'SELECT 1 as RESULT' LANGUAGE 'sql'; SELECT one() AS answer; +-------+ |answer | +-------+ |1 | +-------+ Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Funciones del Lenguaje SQL En este ejemplo, note cómo nos referimos a los argumentos dentro de la función como $1 y $2: CREATE FUNCTION add_em(int4, int4) RETURNS int4 AS 'SELECT $1 + $2;' LANGUAGE 'sql'; SELECT add_em(1, 2) AS answer; +-------+ |answer | +-------+ |3 | +-------+ Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Funciones del Lenguaje Procedural PL/pgSQL: Es un lenguaje procedural cargable para el sistema de bases de datos Postgres.Este paquete fue escrito originalmente por Jan Wieck con los siguientes objetivos: •

Pueda usarse para crear funciones y procedimientos disparados por eventos,



Añada estructuras de control al lenguaje SQL,



Pueda realizar cálculos complejos,



Herede todos los tipos definidos por el usuario, las funciones y los operadores,



Pueda ser definido para ser fiable para el servidor,



Sea fácil de usar

Implementando Soluciones cliente/servidor con PostgreSQL / Hernán Alonso Lotero R

Estructura del PL-pgSQL PL/pgSQL es un lenguaje orientado a bloques. Un bloque se define como: [<

Related Documents

Present A
May 2020 17
A Present
April 2020 15
A Present A 1
November 2019 41
A Present A
October 2019 38
A Present A 1
June 2020 17
A Present A
November 2019 24

More Documents from "Alexandre"

Present A
May 2020 17