Actualizado el 21 de Marzo del 2018 (Publicado el 1 de Octubre del 2017)
929 visualizaciones desde el 1 de Octubre del 2017
122,3 KB
17 paginas
Creado hace 19a (03/11/2005)
Vistas Actualizables
PostgreSQL: Aplicaciones Avanzadas
Álvaro Herrera
Sexto Encuentro Nacional de Linux
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
¿Qué son las vistas actualizables?
I Vistas normales
I CREATE VIEW
I Se agregan definiciones adicionales
I Permiten que se pueda “escribir” a la vista
I Los cambios son pasados a las tablas que hay debajo
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Ejemplo
Situación: compañía de teléfonos, tiene una tabla de clientes y una
tabla de líneas telefónicas. Quiere tener una “tabla” donde se vean
todas las líneas y los campos del clientes al que pertenece, poder crear
nuevos clientes y líneas, y además poder modificar los datos tanto de
la línea como del cliente, usando esta vista.
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Ejemplo: Las Tablas
Tabla «public.clientes»
Modificadores
not null default nextval(’clientes_cliente_id_seq’)
not null
Tipo
integer
text
Columna
cliente_id
nombre
Índices:
«clientes_pkey» PRIMARY KEY, btree (cliente_id)
cliente_id
nombre
1 Armando Aguayo
2 Bernardo Borquez
3 Carmen Carmona
(3 filas)
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Ejemplo: Las Tablas (cont.)
Tabla «public.lineas»
Tipo
integer
integer
text
Modificadores
not null default nextval(’lineas_linea_id_seq’)
not null REFERENCES clientes (cliente_id)
not null
Columna
linea_id
cliente_id
numero
Índices: «lineas_pkey» PRIMARY KEY, btree (linea_id)
linea_id
1
2
3
4
numero
555-1234
567-7654
123-1234
1-800-9999
cliente_id
1
1
2
3
(4 filas)
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
La vista
CREATE VIEW clientes_lineas AS
SELECT c.cliente_id, linea_id, nombre, numero
FROM clientes c, lineas l
WHERE c.cliente_id = l.cliente_id;
SELECT * FROM clientes_lineas;
cliente_id
1
1
2
3
(4 filas)
linea_id
nombre
1 Armando Aguayo
2 Armando Aguayo
3 Bernardo Borquez
4 Carmen Carmona
numero
555-1234
567-7654
123-1234
1-800-9999
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Las Reglas de Inserción: Cliente Nuevo
CREATE RULE ins_clientes_lineas_nuevo AS
ON INSERT TO clientes_lineas
WHERE NEW.cliente_id IS NULL
DO INSTEAD
(
INSERT INTO clientes (nombre)
VALUES (NEW.nombre)
;
INSERT INTO lineas (cliente_id, numero)
VALUES (currval(’clientes_cliente_id_seq’),
);
NEW.numero)
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Las Reglas de Inserción: Cliente Existente
CREATE RULE ins_cliente_linea_existente AS
ON INSERT TO clientes_lineas
WHERE NEW.cliente_id IS NOT NULL
DO INSTEAD
INSERT INTO lineas (cliente_id, numero)
VALUES (NEW.cliente_id, NEW.numero);
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Las Reglas de Inserción: Incondicional
CREATE RULE ins_cliente_linea_nothing AS
ON INSERT TO clientes_lineas
DO INSTEAD NOTHING;
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
La Regla de Inserción: Demo
INSERT INTO clientes_lineas (nombre, numero)
VALUES (’Daniela Donoso’, ’234-4567’);
cliente_id
1
1
2
3
4
linea_id
nombre
1 Armando Aguayo
2 Armando Aguayo
3 Bernardo Borquez
4 Carmen Carmona
5 Daniela Donoso
numero
555-1234
567-7654
123-1234
1-800-9999
234-4567
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
La Regla de Inserción: Demo 2
INSERT INTO clientes_lineas (cliente_id, numero)
VALUES (3, ’987-1233’);
cliente_id
1
1
2
3
4
3
linea_id
nombre
1 Armando Aguayo
2 Armando Aguayo
3 Bernardo Borquez
4 Carmen Carmona
5 Daniela Donoso
6 Carmen Carmona
numero
555-1234
567-7654
123-1234
1-800-9999
234-4567
987-1233
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Las Reglas de Actualización
CREATE RULE upd_clientes_lineas_cliente AS
ON UPDATE TO clientes_lineas
WHERE NEW.cliente_id IS NOT NULL
DO INSTEAD
UPDATE clientes
SET nombre = NEW.nombre
WHERE cliente_id = NEW.cliente_id;
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Las Reglas de Actualización (cont.)
CREATE RULE upd_clientes_lineas_linea AS
ON UPDATE TO clientes_lineas
WHERE NEW.linea_id IS NOT NULL
DO INSTEAD
UPDATE lineas
SET numero = NEW.numero
WHERE linea_id = NEW.linea_id;
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Las Reglas de Actualización (cont.)
CREATE RULE upd_clientes_lineas_nothing AS
ON UPDATE TO clientes_lineas
DO INSTEAD NOTHING;
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Las Reglas de Actualización: Demo
UPDATE clientes_lineas
SET nombre = ’Carmen Campora’
WHERE cliente_id = 3;
cliente_id
1
1
2
3
3
4
linea_id
nombre
1 Armando Aguayo
2 Armando Aguayo
3 Bernardo Borquez
4 Carmen Campora
6 Carmen Campora
5 Daniela Donoso
numero
555-1234
567-7654
123-1234
1-800-9999
987-1233
234-4567
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Las Reglas de Actualización: Demo 2
UPDATE clientes_lineas
SET numero = ’1-800-8888’
WHERE linea_id = 4;
cliente_id
1
1
2
3
3
4
linea_id
nombre
1 Armando Aguayo
2 Armando Aguayo
3 Bernardo Borquez
4 Carmen Campora
6 Carmen Campora
5 Daniela Donoso
numero
555-1234
567-7654
123-1234
1-800-8888
987-1233
234-4567
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Vistas Actualizables
¿Qué son?
Ejemplo
Las Reglas de Inserción
Las Reglas de Actualización
Las Reglas de Actualización: Demo 3
UPDATE clientes_lineas
SET numero = ’1-800-7777’,
nombre = ’Carola Conrad’
WHERE cliente_id = 3 AND linea_id = 6;
cliente_id
1
1
2
3
3
4
linea_id
nombre
1 Armando Aguayo
2 Armando Aguayo
3 Bernardo Borquez
4 Carola Conrad
6 Carola Conrad
5 Daniela Donoso
numero
555-1234
567-7654
123-1234
1-800-8888
1-800-7777
234-4567
Álvaro Herrera
PostgreSQL: Aplicaciones Avanzadas
Comentarios de: PostgreSQL: Aplicaciones Avanzadas (0)
No hay comentarios