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.

Contras: 
- La tabla maestra no debería tener un volumen alto de actualizaciones
- Solo tienes el id de positions, lo cual te obliga a consultar esta
tabla para ver los datos ( posicion, velocidad, altura, etc.)


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.

Pros:
- Tu tabla maestra no sufre actualizaciones masivas
- Tienes los datos completos de positions.

Contras:
- La actualización es un poco mas lenta (milisegundos) que la opción
anterior ya que graba todo el registro y no solo un campo.


Para el caso uno (1) ya te dieron un script, para el caso dos (2) puedes
hacer esto:


CREATE TABLE last_positions
(
  id integer NOT NULL,
  gps_id integer NOT NULL,
  "position" point,
  velocidad real,
  altura real,
  fecha timestamp(0) with time zone,
  grados real,
  satelites integer,
  CONSTRAINT last_positions_pkey PRIMARY KEY (gps_id )
);


CREATE OR REPLACE FUNCTION positions_bi_fn()
  RETURNS trigger AS
$BODY$
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;

return new;
END;
$BODY$
;



CREATE TRIGGER positions_bi
  BEFORE INSERT
  ON positionsier.
  FOR EACH ROW
  EXECUTE PROCEDURE positions_bi_fn();


Saludos y nuevamente éxitos en tu proyecto, luego nos cuentas como te
fue.

Javier.

On Mon, 2012-07-09 at 19:14 -0500, Jorge Toro wrote:

> Hola Javier, gracias por tu aporte. Pero como menciona Alejandro el
> problema radica en que esta tabla contendrá muchos
> registros rápidamente y en un futuro no muy lejano tendrá millones de
> registros.
> 
> 
> 
> Gracias a todos nuevamente,
> 
> Jorge Alonso Toro
> Ing. Teleinformático.
> 
> http://jolthgs.wordpress.com/
> www.devmicrosystem.com
> --------------------------------------------------------------
> Powered By Debian.
> Developer Bullix GNU/Linux.
> --------------------------------------------------------------
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
> 
> iD8DBQBIWWH6q7mzdgTzI5ARAkX5AJ9TR6hL2ocLMOUDRfhts8DlVl+jpwCeNw5x
> p4+4FNUHPDUx1lU9F8WSKCA=
> =zRhQ
> -----END PGP SIGNATURE-----
> Este correo esta protegido bajo los términos de la Licencia
> Atribución-Compartir Obras Derivadas Igual a 2.5 Colombia de Creative
> Commons. Observé la licencia visitando este sitio
> http://creativecommons.org/licenses/by-sa/2.5/co/. 
> 
> 
> 
> El 9 de julio de 2012 19:06, Alejandro Carrillo <faster...@yahoo.es>
> escribió:
> 
>         Creo que el tema aquí es por la velocidad de acceso a los
>         registros, ya que en esa tabla pueden haber 100 o 200 millones
>         de registros por ser un sistema de GPS con 1000 GPS's.
>         
>         
>         
>                 
>                 ______________________________________________________
>                 De: Javier Aquino <jaqu...@lexuseditores.com>
>                 Para: Jorge Toro <jolt...@gmail.com> 
>                 CC: Foro Postgres <pgsql-es-ayuda@postgresql.org> 
>                 Enviado: Lunes 9 de julio de 2012 18:57
>                 
>                 
>                 Asunto: Re: [pgsql-es-ayuda] Ayuda con inquietud
>                 
>                 
>                 
>                 
>                 Estimado Jorge, 
>                 
>                 Y no te ayudaría un sentencia select comun y corriente
>                 com esta ???
>                 
>                   SELECT *
>                     FROM positions p1
>                     JOIN (   select gps_id, max(date) date from
>                 positions group by gps_id) p2 
>                    USING ( gps_id, date )
>                 ;
>                 
>                 
>                 Esta consulta te devolvería el ultimo registro de cada
>                 gps_id.
>                 
>                 Espero te sirva.
>                 
>                 Saludos y éxitos.
>                 
>                 Javier.
>                 
>                 
>                 On Mon, 2012-07-09 at 07:56 -0500, Jorge Toro wrote: 
>                 
>                 > Hola lista hoy acudo a ustedes con la siguiente
>                 > inquietud. 
>                 > 
>                 > 
>                 > Tengo un programa servidor que captura los datos
>                 > enviados por unos dispositivos "gps" y los almacena
>                 > en una una tabla "positions". La tabla positions
>                 > tiene la siguiente estructura:
>                 > 
>                 > 
>                 >  positions 
>                 > --------------
>                 > id serial PK
>                 > gps_id integer FK ( de gps.id)
>                 > posicion point
>                 > velocidad real                         
>                 > altura real
>                 > date timestamp
>                 > grados real
>                 > satelites integer
>                 > 
>                 > 
>                 > 
>                 > 
>                 > Ya que los dispositivos GPS envían información de su
>                 > ubicación cada minuto, me es de gran importancia
>                 > almacenar de alguna forma el último dato de cada GPS
>                 > que se encuentra en la tabla "position", para poder
>                 > mostrar la última información enviada por cada uno
>                 > de los GPS en el momento que se ingrese a una página
>                 > web. 
>                 > 
>                 > 
>                 > Mi duda sinceramente es que no se cómo realizar esta
>                 > tarea de una forma eficiente. 
>                 > 
>                 > 
>                 > He pensado en hacer una vista llamada
>                 > "position_gps_actual" que me almacene el último dato
>                 > de cada GPS dentro de la tabla "position" en el
>                 > momento que se le ingrese un nuevo dato a esta
>                 > tabla. Pero no se cómo puedo hacerlo, ya que mis
>                 > comocimientos en PostgreSQL son básicos y creo que
>                 > requiero de PL/SQL (En este momento le he dado
>                 > solución realizando programación en el servidor para
>                 > que cuando un GPS envíe información además de
>                 > alamacenarla en la tabla "position" también me la
>                 > almacene en una tabla que contenga cada uno de los
>                 > GPS y con un UPDATE me ponga esa data en el
>                 > respectivo GPS.).
>                 > 
>                 > 
>                 > Me ayudaría mucho si me pueden ayudar aclarándome el
>                 > camino que debo tomar y que debo aprender (en
>                 > PostgreSQL) para lograr mi objetivo. Ya tengo poco
>                 > tiempo para entregar este proyecto y este es un tema
>                 > que quiero solucionar de la mejor manera.
>                 > 
>                 > 
>                 > 
>                 > 
>                 > A todos muchas gracias y atento a sus comentarios.
>                 > 
>                 > 
>                 > Jorge Alonso Toro
>                 > Ing. Teleinformático.
>                 > 
>                 > http://jolthgs.wordpress.com/
>                 > www.devmicrosystem.com
>                 > 
> --------------------------------------------------------------
>                 > Powered By Debian.
>                 > Developer Bullix GNU/Linux.
>                 > 
> --------------------------------------------------------------
>                 > -----BEGIN PGP SIGNATURE-----
>                 > Version: GnuPG v1.4.6 (GNU/Linux)
>                 > 
>                 > 
> iD8DBQBIWWH6q7mzdgTzI5ARAkX5AJ9TR6hL2ocLMOUDRfhts8DlVl+jpwCeNw5x
>                 > p4+4FNUHPDUx1lU9F8WSKCA=
>                 > =zRhQ
>                 > -----END PGP SIGNATURE-----
>                 > Este correo esta protegido bajo los términos de la
>                 > Licencia Atribución-Compartir Obras Derivadas Igual
>                 > a 2.5 Colombia de Creative Commons. Observé la
>                 > licencia visitando este sitio
>                 > http://creativecommons.org/licenses/by-sa/2.5/co/. 
>                 > 
>                 
>                 
>                 
>                 
>                 
>                 
>                 
> 
> 
> 

Responder a