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/. > > > > > > > > > > > >