Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Vista para insertar

Estas en el tema de Vista para insertar en el foro de PostgreSQL en Foros del Web. Hola a todos. Tengo una tabla personas y otra clientes se relacionan uno a uno y clientes es una extension de personas. Quiero hacer una ...
  #1 (permalink)  
Antiguo 24/05/2007, 13:14
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Mensaje Vista para insertar

Hola a todos.

Tengo una tabla personas y otra clientes se relacionan uno a uno y clientes es una extension de personas.

Quiero hacer una vista que incluya a ambas pero la idea es que pueda mantener esa vista, es decir que quiero podes insertar, actualizar y borrar.

Tengo entendido que tengo que crear la vista y asignarle una regla para insertar por ejemplo y dentro de esa regla tendria los dos inserts que realiza. por ejemplo

INSERT INTO personas(nombre, ...)
VALUES(new.nombre, ...)


INSERT INTO clientes(id, ruc, direccion, ...)
VALUES(ID, new.ruc, new.direccion, ...)

Mi problema es en el ID. como puedo recuperar el ID de personas, que lo acabo de crear. No me permite hacer un SELECT MAX() y meter dentro de una variable y usarla para clientes.

Mi columna ID en personas es serial por eso ya no lo pongo en personas(nombre, ...).

Alguien tiene alguna idea?
  #2 (permalink)  
Antiguo 25/05/2007, 06:16
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: Vista para insertar

Al revisar la documentación, y quizás en en el histórico del foro, te darás cuenta que las vistas son sólo eso, vistas, y no puedes insertar/modificar/eliminar en ella.

Alguna idea? sí, leer cualquier documentación de SQL Estándar
__________________
Gracias de todas todas
-----
Linux!
  #3 (permalink)  
Antiguo 25/05/2007, 12:38
Avatar de edwinandlozano  
Fecha de Ingreso: octubre-2003
Mensajes: 272
Antigüedad: 20 años, 6 meses
Puntos: 0
Re: Vista para insertar

se puede hacer ese tipo de operaciones (INSERT/UPDATE/DELETE) sobre la vista siempre y cuando en la vista le tengas las reglas necesarias para eso
http://www.postgresql.org/docs/curre...tic/rules.html
Alvaro Herrera realizo un pdf donde explica como hacer algunas cosas con vistas actualizables
http://alvherre.atentus.cl/charlas/1...ualizables.pdf

Ahora el ID de personas es una secuencia?? porque de ser asi puedes acceder a su valor con la funcion currval()
http://www.postgresql.org/docs/curre...-sequence.html

nos vemos.
  #4 (permalink)  
Antiguo 25/05/2007, 13:45
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Vista para insertar

cacr como menciona edwinandlozano si se puede hacer lo que pregunto más arriba creando reglas sobre las vistas. Es más ya tengo vistas que tienen asignadas reglas para las tres acciones (insert, update, delete) y funciona perfectamente.

Mi consulta iba a tener esa estructura y en especial a como recuperar el ID. Pero gracias de todas maneras por tu respuesta.

Muchas gracias edwinandlozano, hice una prueba con currval() y no me estaba funcionando. Voy a leer los links que me dejas y si no funciona vuelvo por aquí

Un abrazo
  #5 (permalink)  
Antiguo 25/05/2007, 14:08
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: Vista para insertar

Hasta el documento de Alvaro aparece "escribir"... ¿por qué será?
__________________
Gracias de todas todas
-----
Linux!
  #6 (permalink)  
Antiguo 25/05/2007, 14:09
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: Vista para insertar

Por cierto, edwinandlozano, gracias por los enlaces! no tenía ese de Alvaro
__________________
Gracias de todas todas
-----
Linux!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:55.