Tienes razón Alvaro ... confundí lo rápido (velocidad) con lo fácil (sentencia).
Thanks por la observación ;-) Slds, Javier. On Mon, 2012-07-09 at 23:06 -0400, Alvaro Herrera wrote: > Excerpts from Javier Aquino's message of lun jul 09 21:48:50 -0400 2012: > > OK, > > > > No había caído en cuenta de ello. > > > > Entonces te quedaría 2 opciones: > > > > 1. Crear un campo position_id en tu tabla "maestra" gps, este campo se > > actualizaría cada vez que realices un insert nuevo a tu tabla positions. > > > > Pros: > > - Actualización muy rápida ya que solo actualizas un campo int. > > Esto no es tal. Al hacer un UPDATE en Postgres, tiene que crearse una > versión completa nueva del registro, que es idéntica al anterior y sólo > difiere en el campo int que cambiaste. Así que no es para nada tan > rápido como sugieres. > > > 2. crear una tabla nueva exactamente igual a positions llamado > > last_positions, pero con dos cambios ( id integer y no serial, gps_id > > primary key) y este se actualizaría cada vez que ingrese un dato nuevo a > > tu tabla positions. > > Esta idea es mucho mejor. > > > BEGIN > > update last_positions > > set (id, gps_id, position, velocidad, altura, fecha, grados, > > satelites) = ( new.id, gps_id, new.position, new.velocidad, > > new.altura, new.fecha, new.grados, new.satelites) > > where gps_id = new.gps_id; > > if not found then > > insert into last_positions > > values ( new.* ); > > end if; > > Buena suerte consiguiendo que esto funcione bien cuando haya dos > procesos insertando registros nuevos para un mismo gps_id. > Creo que es más sano tomar un SELECT FOR UPDATE. >