PostgreSQL - I

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 86

POSTGRESQL ADMINISTRATION AND DEVELOPMENT

TEMA I – QUE ES POSTGRESQL


Que es PostgreSQL

Es un Sistema Gestor de Base de Datos (SGBD) de modelo relacional open-source. Una


característica interesante de PostgreSQL es el control de concurrencias multiversión; o MVCC
por sus siglas en inglés. Este método agrega una imagen del estado de la base de datos a cada
transacción. Esto nos permite hacer transacciones eventualmente consistentes, ofreciéndonos
grandes ventajas en el rendimiento. (Dicho de otra forma, la transacción de cada usuario no la
ven los demás hasta que se haya completado). No se requiere usar bloqueos de lectura al
realizar una transacción lo que nos brinda una mayor escalabilidad.

PostgreSQL usa Hot Standby: Capacidad de conectarse al servidor y ejecutar consultas de solo
lectura mientras el servidor está en modo de recuperación de archivos o en espera. Esto es útil
tanto para fines de replicación como para restaurar una copia de seguridad al estado deseado
con gran precisión.
Breve historia de PostgreSQL

PostgreSQL nació en la Universidad de California en Berkeley, en el


año 1986 como un proyecto que daba continuidad a su predecesor
Ingres.

En 1996, cuando era llamado Postgres95, se liberó al mundo


opensource y recibió aportes de una gran cantidad de
desarrolladores.

PostgreSQL puede ser ejecutado en los principales sistemas


operativos, incluyendo Linux, UNIX AIX, BSD, HP-UX, SGIIRIX,
MacOSX, Solaris, Tru64 y por supuesto, Windows. Este soporta
textos, imágenes, sonidos y video e incluye interfaces para C / C++,
Java, Perl, Python, Ruby, Tcl y ODBC.
Breve historia de PostgreSQL

A su vez soporta una gran parte del estándar SQL y ofrece muchas características modernas
como:

 Querys complejos
 Sub-querys
 Foreign keys
 Esquemas
 Trigger
 Vistas
 Transacciones
 MVCC (Multiversion Concurrency Control)
 Streaming Replication
 Hot Standby
Breve historia de PostgreSQL

Además de lo anterior, PostgreSQL soporta cuatro estándares de stored procedures, los cuales
permiten que el usuario construya sus propios scripts en cualquiera de los siguientes lenguajes:
PL/pgSQL, PL/Tcl, PL/Perl y PL/Python. En adición, otros lenguajes no estándar como PL/PHP,
PL/V8, PL/Ruby, PL/Java.

De forma particular podría decir que su característica principal a la fecha es la portabilidad. Ya


que este gestor de bases de datos puede ser instalado en casi cualquier sistema operativo, sin
que esto sacrifique su potencia y cualquier otra característica requerida en un RDBMS moderno.
Porque usar PostgreSQL

PostgreSQL viene con muchas características destinadas a ayudar a los desarrolladores a crear
aplicaciones, a los administradores a proteger la integridad de los datos y a crear entornos
tolerantes a fallas, y a ayudarlo a administrar sus datos sin importar cuán grande o pequeño sea
el conjunto de datos. Además de ser gratuito y de código abierto, PostgreSQL es altamente
extensible. Por ejemplo, puede definir sus propios tipos de datos, crear funciones
personalizadas, o escribir código desde diferentes lenguajes de programación sin recompilar su
base de datos

PostgreSQL intenta cumplir con el estándar SQL. Se admiten muchas de las características
requeridas por el estándar SQL, aunque a veces con una sintaxis o función ligeramente
diferente. A partir del lanzamiento de la versión 11 en octubre de 2018, PostgreSQL cumple con
al menos 160 de las 179 características obligatorias para SQL.
Porque usar PostgreSQL

PostgreSQL cumple con todo lo que requiere un manejador de bases de datos relacionales, e
incluso algunas características adicionales, es decir:

 Manejo de diversos data tipos (Primitivos, estructurados, documentales, geométricos,


personalizados)
 Manejo de integridad (Llaves primarias, foráneas, exclusiones, bloqueos)
 Concurrencia y performance (Indexamiento, tuneo de consultas, particionamiento de
tablas, transacciones)
 Recuperación de desastres (Replicación, espacios de tablas)
 Seguridad (Autenticaciones: GSSAPI, SSPI, LDAP, SCRAM-SHA-256, MD5, Control de
acceso robusto, seguridad en filas y columnas)
 Extensibilidad (Procedimientos almacenados y funciones, lenguajes procesales:
PL/PGSQL, Perl, Python)
 Data Wrappers Foraneos (Conexiones a otras bases de datos bajo el estándar SQL)
Tabla comparativa

CARACTERÍSTICA

MULTIPLATAFORMA SI* SI SI SI

RAPIDEZ NATIVA EN DEVOLUCION DE CONSULTAS SI SI NO NO

DATA WAREHOUSE SI SI NO SI

REPLICACION NATIVA SI SI SI NO

VISTAS MATERIALIZADAS SI SI NO SI*


SOPORTE OFICIAL SI SI NO NO
SINTAXIS INTUITIVA SQL SI SI SI NO
Quien en el mundo lo utiliza

Servidores de escaneo de datos de


correo electrónico

Servidor de aplicaciones y base de datos


de fotos y videos

Servidores de videollamadas, chat y


conmutador virtual
Convenciones de lenguaje

Las siguientes convenciones se utilizan en la sinopsis de un comando:

 Los corchetes ([y]) indican opcional. (En la sinopsis de un comando Tcl, se utilizan
signos de interrogación (?))
 Las llaves ({y}) y las líneas verticales (|) indican que debe elegir una alternativa.
 Puntos suspensivos (...) significan que el elemento anterior se puede repetir.
 Los comandos SQL son precedidos por el prompt => y los comandos de Shell están
precedidos por el prompt $.
Convenciones de nomenclatura

General:

 Se emplearán siempre caracteres en minúscula para cualquier identificador.


 Los nombres se escriben normalmente en singular inclusive las tablas. Puede haber
excepciones para columnas multivaluadas. (Ej. Telefonos)
 Como separador se empleará el símbolo “_”, no se utilizarán otras preposiciones. También se
empleará como separador de palabras de nombres compuestos. Ejemplos:
• Tiponormativa: tipo_normativa
• Tipodenormativa: tipo_normativa
Convenciones de nomenclatura

Tablas:

 Las tablas las crea el sistema/módulo que primero las precisa


 Para el nombre de la misma se adopta la convención de emplear: xxx_tabla donde xxx
identifica al sistema/módulo que la creó.
 En relaciones m x n entre tabla1 y tabla2, el nombre adoptado para la tabla que representa a
la relación es yyy_tabla1_x_[zzz_]tabla2. Donde zzz es el prefijo de un sistema si es distinto
a yyy, en caso de ser iguales se omite. Siempre, tabla1 es la del sistema sobre el cual se
está trabajando, para que los prefijos coincidan.
Convenciones de nomenclatura

Tablas:

 Codificación en la descripción:
• Salida (S) : Son las tablas utilizadas para emitir información fuera del sistema en
diversos formatos (DBF, TXT, etc.)
• Temporal (T) : Son las tablas utilizadas para cálculos intermedios y que se crean y
borran a tal efecto (DM11, etc.)
• Codificación (C) : Son las tablas que se proveen en función de necesidades del sistema
y que no son actualizables por el usuario (pampacfg, etc.)
• Datos (D) : Son las tablas que pueden ser actualizadas por los usuarios del sistema
(DH01, DH30, etc.)
Convenciones de nomenclatura

Tablas:

 Creación de tablas de Tipologías: Para el caso de Tablas que solamente contengan


Descripciones (por ejemplo Tabla de Motivos) se deberá agregar un campo Autonumérico
para identificar el registro. Normalmente las descripciones son también únicas. Para el
actualizador de estas Tablas no se deberá actualizar ni mostrar el campo identificador. Para
la exportación a texto de esta Tabla se deberá exportar el campo identificador para tener la
referencia a las Tablas que usen estos datos de descripción. Las excepciones
implementadas en el Pampa son: Tabla Tipos de Norma (DL09) y Tabla de Quien Emite
Norma (DL10) NO tienen campo identificador.
Convenciones de nomenclatura

Campos:

 Los tipos no se incluyen en los nombres de los campos


 En el caso de que la clave sea un único campo y es autonumérico, creado expresamente
para ser clave; este será denominado id_tabla (tabla es sin el prefijo que identifica al
sistema).
 Toda clave primaria no autonumérica, con semántica dentro del dominio (por ejemplo no
CUIT), será denominada cod_tabla.
Convenciones de nomenclatura

Campos:

 Los siguientes campos tienen nombres predefinidos:


• id_tabla
• cod_tabla
• nom_tabla o desc_tabla
• obs_tabla
 Los campos restantes no deberían incorporar el nombre de la tabla en su definición.
 Los nombres de los campos de las claves extranjeras se propagan.
Convenciones de nomenclatura

Campos:

 Cada vez que se quiera crear un tipo fecha, cantidad, importe o porcentaje se empleará el
siguiente prefijo:
• fec_
• cant_
• imp_
• porc_
Convenciones de nomenclatura

Restricciones:

 Claves Primarias: pk_nombre_tabla (el nombre de la tabla con prefijo)


 Claves Extranjeras: fk_origen_destino (origen con prefijo, si destino pertenece al mismo
módulo, obviamos el prefijo). En la creación se debe incluir la cláusula MATCH FULL para
comprobar que todas las columnas tengan valor distinto de nulo o ninguna de ellas.
 Índices: PostgreSQL crea automáticamente para cada clave primaria un índice denominado
igual que dicha primary key. PostgreSQL crea automáticamente para cada columna
declarada como UNIQUE, un índice único llamado nombre_tabla_nombre_columna_key
Convenciones de nomenclatura

Restricciones:

 Check: En el Standard SQL99 existe la sentencia CREATE ASSERTIONS que sirve para
crear restricciones a nivel base de datos pero Postgres no lo implementa. En Postgres se
pueden especificar estas restricciones usando RULES o TRIGGERS.
• Checks a nivel columna: chk_nombre_tabla_nombre_de_check
• Checks a nivel tabla: Se pueden definir chequeos a nivel tabla cuando se crea la tabla o
se edita. (Excepto Case Studio)
• Checks a nivel base de datos
Convenciones de nomenclatura

Stored Procedures:

 Para definir stored procedures en PostgreSQL hay que definirlos como funciones. Nombre
sugerido: modulo_nombre_del_storedprocedure
Convenciones de nomenclatura

Vistas:

 El nombre de una vista debe comenzar con los tres caracteres correspondientes al módulo,
seguido de ‘_vista_’, seguido del nombre de la vista propiamente dicho.
 Si se van a utilizar vistas para realizar inserciones y/o actualizaciones sobre tablas base,
debe tenerse en cuenta en su definición la cláusula WITH CHECK OPTION que controla que
la fila insertada o actualizada permanezca en la vista.
Resumen

Cuando se trata de nombres de tablas


 Debes elegir nombres de entidades singulares (esto facilita la documentación)
 Sugerible usar Pascal Case

Cuando se trata de nombres de campo


 Use Camel Case en sus nombres de campo
 Use nombres singulares cortos a menos que la definición definitivamente tenga sentido
como un plural (casi nunca lo hace)
Resumen

Cuando se trata de su propia función o nombres de procedimientos almacenados


 Usar subrayado_separación (Snake Case)
 Use el nombre de campo para la parametrización

Cuando se trata de funciones de base de datos incorporadas o nombres de idiomas (por


ejemplo, SELECT)
 A menos que haya un requisito para que se capitalice de cierta manera, use TODAS
LAS MAYÚSCULAS
 Conozca las API de su lenguaje de programación para saber qué es razonable o
necesario
Resumen

Cuando se trata de espaciado


 Se usa la alineación de columnas para palabras clave y sangría para cosas que no son
palabras clave
 Se usan comas al comienzo de la fila cuando los campos se separan en cada línea
(esto hace que sea más fácil comentar un campo específico de una lista de selección)
 Nunca use espacios como parte de los nombres de las cosas.

Cuando se trata de puntuación


 Paréntesis
 Punto y coma
 Retorno de carro: Hacen que su código sea legible.
Informes de errores

Identificar errores:

 Un programa termina con una señal fatal o un mensaje de error del sistema operativo
que apunte a un problema en el programa. (Mensaje de "disco lleno", que tu debas
corregir)
 Un programa produce la salida incorrecta para cualquier entrada dada.
 Un programa se niega a aceptar entradas válidas (como se define en la
documentación).
 Un programa acepta entradas no válidas sin un aviso o mensaje de error.
 No pueda compilar, construir o instalar de acuerdo con las instrucciones en las
plataformas compatibles.
 Fallas de seguridad en el control de acceso a bases de datos, tablas, etc.
Informes de errores

Cómo reportarlos:

 Los bugs generales se reportan enviando un correo a: [email protected]


 Los reportes de fallas en la seguridad se reportan al correo: [email protected]
 Nunca se debe reportar un bug al correo: [email protected] Ya que este es
para discusiones sobre el desarrollo de la plataforma PostgreSQL
 No envíe informes de errores a ninguna de las listas de correo como pgsql-
[email protected] o [email protected]. Estas listas de correo son para
responder preguntas de los usuarios.
 Si tiene un problema con la documentación, infórmelo a [email protected]
TEMA II – INTRODUCCION A POSTGRESQL
Instalación de PostgreSQL

Se puede descargar PostgreSQL desde su sitio web: https://www.postgresql.org/download/ y se


encuentra disponible para los siguientes sistemas operativos:

 BSD
 FreeBSD
 OpenBSD
 Linux
 Red Hat family Linux (CentOS/Fedora/Scientific/Oracle variantes)
 Debian GNU/Linux y derivados
 Ubuntu Linux y derivados
 SuSE and OpenSuSE
 Otros
 macOS
 Solaris
 Windows
Instalación de PostgreSQL

Dependiendo el SO, es
la forma en que se
descargue PostgreSQL.

Se visualizan las
opciones de instalación
y configuración de la
plataforma para habilitar
el inicio automático.
Instalación de PostgreSQL

Las distribuciones de Linux contienen ya PostgreSQL, sin embargo no es la última versión. La


tabla de versiones es la siguiente:
Instalación de PostgreSQL

Los instaladores fueron probados por EnterpriseDB en las siguientes plataformas. También
pueden funcionar en otras variaciones o versiones:
Instalación de PostgreSQL

La instalación debe crear un usuario llamado postgres. Para ingresar al servidor de Postgres
deberemos seguir los siguientes pasos desde la consola de Linux y logueados como root (El
tratar de acceder a postgres sin estar como administradores no tendrá éxito):

a) Ingresar como root, b) loguearse como usuario postgres, c) ingresar a la consola de PSQL.

Si recibe algún error desde el paso b, su instalación no fue exitosa. Deberá repetir los pasos
Arquitectura

PostgreSQL está basado en una arquitectura cliente-


servidor.

Un proceso servidor postgres puede atender


exclusivamente a un solo cliente. El proceso postmaster
es el encargado de ejecutar un nuevo servidor para cada
cliente que solicite una conexión.

Se llama sitio al equipo anfitrión (host) que almacena un


conjunto de bases de datos PostgreSQL. En un sitio se
ejecuta solamente un proceso postmaster y múltiples
procesos postgres. Los clientes pueden ejecutarse en el
mismo sitio o en equipos remotos conectados por TCP/IP.
Crear bases de datos

La primera prueba para ver si puede acceder al servidor de bases de datos es intentar crear una
base de datos. Un servidor PostgreSQL puede administrar muchas bases de datos.
Normalmente, se utiliza una base de datos separada para cada proyecto o para cada usuario.

Para crear una nueva base de datos, en este ejemplo llamado base_curso, utilice el siguiente
comando: $ createdb base_curso

Si recibe un mensaje similar a: createdb: command not found

Entonces PostgreSQL no se instaló adecuadamente. Intente desde la ruta del programa: $


/usr/local/pgsql/bin/createdb base_curso

Si la ruta es correcta entonces PostgreSQL no esta instalado adecuadamente.


Crear bases de datos

Un servidor PostgreSQL puede administrar muchas bases de datos. Normalmente, se utiliza una
base de datos separada para cada proyecto o para cada usuario.

Para crear una nueva base de datos, en este ejemplo llamado base_curso, utilice el comando
CREATE DATABASE

Se pueden agregar parámetros adicionales para especificar determinadas características de la


base de datos creada.
Crear bases de datos

Un servidor PostgreSQL puede administrar muchas bases de datos. Normalmente, se utiliza una
base de datos separada para cada proyecto o para cada usuario.

Para crear una nueva base de datos, en este ejemplo llamado base_curso, utilice el comando
CREATE DATABASE

Se pueden agregar parámetros adicionales para especificar determinadas características de la


base de datos creada.
Crear bases de datos

Ejemplo:

CREATE DATABASE nombre


WITH OWNER usuario
TEMPLATE plantilla_a_usar
ENCODING codificacion
LC_COLLATE orden_de_strings
TABLESPACE tablespace
CONNECTION LIMIT concurrencia;
Crear bases de datos

Acceder a una base de datos:


Crear bases de datos

Listar todas las bases de datos:


Crear bases de datos

Ruta y visualización de bases de datos físicas:


TEMA III – LENGUAJE SQL
Sintaxis

La sintaxis SQL consiste en una secuencia de comandos. Un comando se compone de una


secuencia de tokens, terminado por un punto y coma (";"). El final de la secuencia también
termina en un comando. Los tokens son válidos depende de la sintaxis del comando en
particular. Un token puede ser una palabra clave, un identificador, un identificador entre comillas,
una literal (o constante) o un símbolo especial. Los tokens normalmente están separados por
espacios en blanco (espacio, tabulación, nueva línea). Por ejemplo, lo siguiente es
(sintácticamente) una entrada SQL válida:

SELECT * FROM MiTabla;


UPDATE MiTabla SET Campo1 = 5;

Adicionalmente se pueden agregar comentarios, los cuales no son tokens, pero son equivalentes
a espacios en blanco.
Sintaxis

Los tokens como SELECT, UPDATE son ejemplos de palabras clave, es decir, palabras que
tienen un significado fijo en el lenguaje SQL. Los tokens MiTabla y Campo1 son ejemplos de
identificadores. Identifican nombres de tablas, columnas u otros objetos de base de datos,
dependiendo de el comando en el que se usan. Por lo tanto, a veces simplemente se les llama
"nombres". Las palabras clave y los identificadores tienen la misma estructura léxica, lo que
significa que no se puede saber si un token es un identificador o una palabra clave sin conocer el
idioma.

Los identificadores SQL y las palabras clave deben comenzar con una letra o un guion bajo. Los
caracteres posteriores en un identificador o palabra clave pueden ser letras, guiones bajos,
dígitos (0-9) o signos de dólar ($). Tenga en cuenta que los signos de dólar no están permitidos
en los identificadores de acuerdo con la letra del estándar SQL, por lo que su uso podría hacer
que las aplicaciones sean menos portátiles.
Sintaxis

El estándar SQL no definirá una palabra clave que contenga dígitos o comience o termine con un
guion bajo, por lo que los identificadores formados de esa manera están seguros contra posibles
conflictos con futuras extensiones del estándar.

El sistema no usa más de NAMEDATALEN-1 bytes de un identificador; se pueden escribir


nombres más largos en comandos, pero se truncarán. Por defecto, NAMEDATALEN es 64, por lo
que el identificador máximo la longitud es de 63 bytes. Si este límite es problemático, puede
elevarse cambiando la constante NAMEDATALEN en src / include / pg_config_manual.h.
Sintaxis

CREATE Utilizado para crear nuevas tablas, campos e índices


DROP Empleado para eliminar tablas e índices
ALTER Utilizado para modificar las tablas agregando campos o cambiando la definición de los
campos.
SELECT Utilizado para consultar registros de la base de datos que satisfagan un criterio
determinado
INSERT Utilizado para cargar lotes de datos en la base de datos en una única operación.
UPDATE Utilizado para modificar los valores de los campos y registros especificados
DELETE Utilizado para eliminar registros de una tabla de una base de datos
Sintaxis

Las palabras clave y los identificadores sin comillas no distinguen entre mayúsculas y
minúsculas. Por lo tanto:

UPDATE MI_TABLA SET CAMPO1 = 5;

se puede escribir de manera equivalente como:

uPDaTE mi_TabLA SeT campo1 = 5;

Una convención que se usa con frecuencia es escribir palabras clave en mayúsculas y nombres
en minúsculas, por ejemplo:

UPDATE mi_tabla SET campo1 = 5;


Sintaxis

Hay un segundo tipo de identificador: el identificador delimitado o el identificador entre comillas.


Se forma encerrando una secuencia arbitraria de caracteres entre comillas dobles ("). Un
identificador delimitado es siempre un identificador, nunca una palabra clave. Entonces "select"
podría usarse para referirse a una columna o tabla llamada "select", mientras que un select sin
comillas se tomaría como una palabra clave y, por lo tanto, provocaría un análisis error cuando
se usa donde se espera un nombre de tabla o columna:

UPDATE “select” SET “order” = 5;


Sintaxis

Hay tres tipos de constantes escritas implícitamente en PostgreSQL: cadenas, cadenas de bits y
números. Las constantes también se pueden especificar con tipos explícitos, lo que puede
permitir una representación más precisa y manejo más eficiente por parte del sistema.

IVA CONSTANT NUMERIC := 0.16;


precio_total  NUMERIC := 500;
net_price * ( 1 + IVA );

*Resultado = 580
Tipos de datos

PostgreSQL admite los tipos SQL estándar int, smallint, real, double precision, char(N),
varchar(N), date, time, timestamp, e interval, así como otros tipos generales y un conjunto de
tipos geométricos. PostgreSQL se puede personalizar con un número arbitrario de tipos de datos
definidos por el usuario.
Definición y manipulación de datos

Crear tablas:

create table NOMBRETABLA(


NOMBRECAMPO1 TIPODEDATO,
...
NOMBRECAMPON TIPODEDATO
);

Para nombres de tablas, se puede utilizar cualquier caracter alfabético o numérico, el primero
debe ser un caracter alfabético y no puede contener espacios en blanco.
Definición y manipulación de datos

Modificar tablas:

Cambiar el nombre a una columna:

ALTER TABLE empleados RENAME COLUMN nombre_actual TO nombre_nuevo

Borrar una columna

ALTER TABLE empleados DROP COLUMN nombre_columna

Agregar columna

ALTER TABLE empleados ADD COLUMN nombre_columna BOOLEAN DEFAULT true


Definición y manipulación de datos

Modificar tablas:

Eliminarle a una columna la restriccion de no aceptar valores nulos

ALTER TABLE empleados ALTER COLUMN nombre_columna DROP NOT NULL

Modificar la columna para que apartir de ahora no acepte valores nulos

ALTER TABLE empledos ALTER COLUMN nombre_columna SET NOT NULL

Modificar el tipo de dato a una columna

ALTER TABLE empleados ALTER COLUMN nombre_columna TYPE smallint


Definición y manipulación de datos

Para ver la estructura de una tabla consultaremos una tabla propia del PostgreSQL:

SELECT table_name,column_name,udt_name,character_maximum_length
FROM information_schema.columns WHERE table_name = 'usuarios’;

Para eliminar una tabla usamos "drop table" junto al nombre de la tabla a eliminar:

drop table usuarios;

Si intentamos eliminar una tabla que no existe, aparece un mensaje de error indicando tal
situación y la sentencia no se ejecuta, podemos escribir una variante de drop table verificando si
existe la tabla:

drop table if exists usuarios;


Definición y manipulación de datos

En SQL si queremos disponer un comentario debemos anteceder los caracteres --

-- Esto es un comentario y PostgreSQL lo ignora

Insertar registros:

INSERT INTO nombre_tabla (columna1, columna2, columna3) VALUES (valor1, valor2, valor3);

INSERT INTO nombre_tabla (columna1, columna2, columna3) VALUES (valor1, valor2, valor3),
(otroValor1, otroValor2, otroValor3), (otroValorMas1, otroValorMas2, otroValorMas3);

COPY nombre_tabla (columna1, columna2, columna3) FROM ’/home/user/ archivo.txt’;


Consultas

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]


* | expression [ [ AS ] output_name ] [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ ORDER BY expression [ ASC | DESC | USING operator ]
Consultas

Predicados para las consultas:

ALL(*): Devuelve todos los campos de la tabla


TOP: Devuelve un determinado número de registros de la tabla
DISTINCT: Omite los registros cuyos campos seleccionados coincidan totalmente
DISTINCTROW: Omite los registros duplicados basándose en la totalidad del registro y no sólo
en los campos seleccionados.
Consultas

Clausulas:

FROM Utilizada para especificar la tabla de la cual se van a seleccionar los registros
WHERE Utilizada para especificar las condiciones que deben reunir los registros que se van a
seleccionar
GROUP BY Utilizada para clasificar los registros seleccionados en grupos específicos
HAVING Utilizada para expresar la condición que debe satisfacer cada grupo
ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo con un orden
específico
Consultas

Operadores lógicos:

AND Evalúa dos condiciones y devuelve un valor de verdad sólo si ambas son ciertas.
OR Evalúa dos condiciones y devuelve un valor de verdad si alguna de las dos es cierta.
NOT Devuelve el valor contrario de la expresión
IN Devuelve aquellos registros cuyo campo indicado coincide con alguno de los en una lista.
Consultas

Operadores de comparación

< Menor que


> Mayor que
<> Distinto de
<= Menor ó Igual que
>= Mayor ó Igual que
= Igual que
!= ó <> Diferente de
Consultas

Operadores aritméticos y de cadena

+ Suma
- Resta
* Multiplicación
/ División
|| Concatenar
: Exponenciación Natural
^ Exponenciación
! Factorial
Consultas

Operadores de intervalo de tiempo

#< Intervalo menor que?


#<= Intervalo menor o igual que?
#<> Intervalo no igual que?
#= Intervalo igual que?
#> Intervalo mayor que?
#>= Intervalo mayor o igual que?
<#> Convertir a un intervalo de = tiempo
<< Intervalo menor que?
| Comienzo de intervalo
~= Parecido a
<?> Tiempo dentro del intervalo?
Consultas

Funciones de agregación:

AVG Utilizada para calcular el promedio de los valores de un campo determinado


COUNT Utilizada para devolver el número de registros de la selección
SUM Utilizada para devolver la suma de todos los valores de un campo determinado
MAX Utilizada para devolver el valor más alto de un campo especificado
MIN Utilizada para devolver el valor más bajo de un campo especificado

SELECT COUNT(*) AS TotalFilas, COUNT(ShipRegion) AS FilasNoNulas,


MIN(ShippedDate) AS FechaMin, MAX(ShippedDate) AS FechaMax,
SUM(Freight) AS PesoTotal, AVG(Freight) PesoPromedio
FROM Orders
Consultas

Agrupamiento:

La cláusula GROUP BY unida a un SELECT permite agrupar filas según las columnas que se
indiquen como parámetros, y se suele utilizar en conjunto con las funciones de agrupación, para
obtener datos resumidos y agrupados por las columnas que se necesiten.

SELECT EmployeeID, COUNT(*) AS TotalPedidos, COUNT(ShipRegion) AS FilasNoNulas,


MIN(ShippedDate) AS FechaMin, MAX(ShippedDate) AS FechaMax,
SUM(Freight) PesoTotal, AVG(Freight) PesoPromedio
FROM Orders
GROUP BY EmployeeID
Consultas

INNER JOIN (Combinación interna)


Con esta operación se combina los registros de ambas tablas según lo que se especifique en el
predicado del JOIN, es el más utilizado.

Los registros que vamos a obtener son todos aquellos en los que el campo común (id_producto)
exista en las dos tablas. Los registros de la tabla producto que su id_producto no coincida con el
id_producto de la tabla provincia y viceversa, los omite.

SELECT * FROM producto INNER JOIN origen ON producto.id_producto = origen.id_producto;


Consultas

OUTER JOIN (Combinación externa)


Mediante esta operación no es necesario que una fila de una tabla tenga relación con la otra
tabla que se combina. Existen tres tipos de combinaciones externas, el LEFT JOIN, RIGHT JOIN
y el FULL JOIN.

LEFT OUTER JOIN


El resultado de esta combinación contiene todos los registro de la tabla izquierda (la primera
tabla que se menciona en la consulta) junto a todos los registros que coincida con la segunda
tabla que se especifica en la sentencia.

SELECT * FROM producto LEFT JOIN origen ON producto.id_producto = origen.id_producto;


Consultas

RIGTH OUTER JOIN


Éste funciona igual que el anterior con la diferencia que los registros que te devuelve son los que
coincidan en la tabla izquierda junto a todas las filas de la tabla de la derecha. Es el caso
contrario.

SELECT * FROM producto RIGHT JOIN origen ON producto.id_producto = origen.id_producto;


Consultas

FULL OUTER JOIN


Con éste tipo de combinación externa, vamos a retornar todos los registros que cumplan la
condición más los registros de la primera tabla y la segunda tabla.

SELECT * FROM producto FULL JOIN origen ON producto.id_producto = origen.id_producto;


Consultas

CROSS JOIN (Cruzada)


Éste tipo de JOIN se suele utilizar poco, lo que realiza es un producto cartesiano de los registros
de las dos tablas. El resultado que obtenemos son todos los registros de la tabla izquierda
(productos) combinados con cada uno de los registros de la tabla de la derecha (provincias). No
se incluye ningún predicado que filtre el resultado.

SELECT * FROM producto CROSS JOIN origen;


Consultas

Transacciones y concurrencia

Una de las grandes ventajas de emplear bases de datos y más específicamente de emplear un
DBMS es que se procure un buen manejo de la información, garantizando que todas las
operaciones sean "ácidas", es decir, que cumplan con

Atomicity: que las transacciones sean atómicas, se vean como una sola unidad
Consistency: que los datos realmente estén bien relacionados y que no existan problemas de
falta de información o falta de confiabilidad en los datos
Isolation: aislamiento, separar las operaciones de distintas conexiones/usuarios unos de otros
Durability: que se garantice la persistencia de los datos.
Consultas

Transacciones

Una transacción es una unidad de programa que accesa y posiblemente actualiza varios
elementos de datos.

Estados de una transacción

 Active, el estado inicial y permanece durante toda la ejecución


 Partially committed, después de que se ha ejecutado el último statement
 Failed, después de algun error, no se puede continuar
 Aborted, se hace un "rollback" hacia un estado anterior consistente
 Committed, después del éxito
Consultas

Crear Conexión
            Abrir Conexión 
            (Openconnection)
                    Iniciar Transacción 
                    (Begin Transaction) setAutoCommit(0/false)
                       Queries... 
                        (Insert, Select, Update, Delete...)
                        -Error 
                             (Abort Transaction) rollback
                       Procesar resultados 
                        (Print,   a= ,   b= )
                  Asegurar Transacción 
                    (End Transaction) commit
        Cerrar Conexión 
        (Closeconnection)
Consultas

Concurrencias

El control de accesos concurrentes y específicamente de transacciones concurrentes es


manejado por un módulo del dbms llamado "scheduler".

Es importante recordar que muchos de los datos de la base no se encuentran nada más en
disco, sino también en los buffers de memoria, de ahí que el scheduler interactúa con ellos y
en su defecto solicita la lectura de los datos del disco.
Consultas
Consultas

El calendarizador crea agendas, secuencias ordenadas de las acciones tomadas por una o más
transacciones.

El siguiente ejemplo muestra 2 transacciones cuya única característica de consistencia es que


A=B ya que ambas operaciones son iguales para ambos elementos. Por otro lado sabemos que
si las transacciones son ejecutadas aisladamente la consistencia se preservará.
Consultas

Transacciones en SQL

El control de concurrencia es el que asegura que muchos usuarios puedan acceder a la data al
mismo tiempo.

Sin embargo al mismo tiempo se producen muchas operaciones de R/W, estas operaciones se
conocen como transacciones.

Ninguna transacción debe ver el resultado de otras transacciones inconclusas, si esto no fuera
así estaríamos leyendo datos inconsistentes.

Una transacción puede incluir dentro de si muchas operaciones en la base de datos.


Consultas

● PostgreSQL implementa el modelo MVCC (Multiversion Concurrency Control) desde la 8.3.


● Bajo MVCC las transacciones ven una imagen de la data al momento de iniciarla (para ello la
data se versiona con un timestamp), esto protege la transacción de inconsistencia de data
cuando llegan 2 operaciones de R/W sobre la misma.
● En simple el MVCC nunca modifica ó elimina la data, nuevas filas de información de van
añadiendo conforme se crea o actualiza la data y se marca la anterior como “no visible”, cuando
se desea eliminar un dato igualmente se añade una fila de data y se marca como “no visible” al
mismo tiempo.
● La data nunca es “visible” por otros usuarios hasta que no sea “commiteada”.
● La principal ventaja es que las operaciones de R nunca bloquean a las de W, y viceversa,
podemos obtener backups en caliente sin bloquear la db.
● Como desventaja: consumimos mas disco duro.
Consultas
Consultas

Cuando 2 transacciones trabajan sobre el mismo objeto y al menos uno de ellos incluye
operaciones de escritura entonces se produce un “conflicto”.

Cuando 2 transacciones hacen exactamente lo mismo puede que sean “serializadas” para
optimizar el acceso a la data.
Consultas

Este bloqueo puede ser Compartido (Share) o Exclusivo (Exclusive), estos son administrador por
un “Lock Manager”. Existen varios tipos de bloqueos :
Consultas

Si un bloqueo toma mucho tiempo en ejecutarse entonces se produce un Deadlock, el sistema lo


muestra como un Timeout.

Un bloqueo puede darse a una tupla, una página o una tabla completa.

Existe una tabla de locks, antes de ejecutar uno nuevo se consulta esta tabla.
Consultas
Consultas
READ UNCOMMITTED:
Apenas transaccional, permite hacer lecturas sucias (dirty reads), donde las consultas dentro de una
transacción son afectadas por cambios no confirmados (not commited) de otras transacciones
Consultas
READ COMMITTED:
Los cambios confirmados son visibles dentro de otra transacción esto significa que dos consultas dentro de
una misma transacción pueden retornar diferentes resultados (Generalmente este es el comportamiento por
defecto en los SGBD)
Consultas
REPEATABLE READ:
Dentro de una transacción todas las lecturas son consistentes (Esto es el comportamiento por defecto en
MySQL usando tablas en InnoDB

También podría gustarte