Received: from makus.postgresql.org ([98.129.198.125]) by malur.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1TVf7Y-0004bj-TM for pgsql-performance@postgresql.org; Tue, 06 Nov 2012 09:06:57 +0000 Received: from llsa987-a03.servidoresdns.net ([82.223.190.28]) by makus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1TVf7S-00011J-G8 for pgsql-performance@postgresql.org; Tue, 06 Nov 2012 09:06:55 +0000 Received: from [192.168.100.144] (52.Red-79-159-28.staticIP.rima-tde.net [79.159.28.52]) by llsa987-a03.servidoresdns.net (Postfix) with ESMTPA id 34E495800F4 for ; Tue, 6 Nov 2012 10:06:46 +0100 (CET) Message-ID: <5098D323.40706@ismsolar.com> Date: Tue, 06 Nov 2012 10:06:43 +0100 From: =?UTF-8?B?UGVkcm8gSmltw6luZXogUMOpcmV6?= User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20121026 Thunderbird/16.0.2 MIME-Version: 1.0 To: pgsql-performance@postgresql.org Subject: Re: help with too slow query References: <5093B900.7020206@ismsolar.com> In-Reply-To: Content-Type: multipart/alternative; boundary="------------060001090208060706000909" X-Pg-Spam-Score: -1.9 (-) X-Archive-Number: 201211/49 X-Sequence-Number: 48415 This is a multi-part message in MIME format. --------------060001090208060706000909 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Ok, here we go: I'm using postgresql version 8.0 Here is my query that is too slow: http://explain.depesz.com/s/GbQ *************************************************** EXPLAIN analyze select round(CAST(sum(var_value) AS numeric),2) as var_value,=20 date_trunc('month', time_stamp) as time_stamp ,=20 date_part('month',date_trunc('month', time_stamp)) as month,=20 date_part('year',date_trunc('year', time_stamp)) as year from=20 ism_floatvalues where id_signal in ( select id_signal from ism_signal where reference =3D 'EDCA' and id_source= in ( select id_source from ism_installation where id_installation in (select id_installation from ism_groupxinstallation where id_group =3D 10= 1) ) ) and time_stamp > date_trunc('month', current_date - interval '11 months') group by date_trunc('month', time_stamp), month, year order by time_stamp *************************************************** Here are the tables: Table ism_floatvalues: Table ism_floatvalues has about 100 million records. This table is updated everyday. Everyday we delete the data stored=20 regarding yesterday, usually from 8 am to 13 pm moreless, and then we=20 insert the data for yesterday (complete data) and the data we have=20 available for today (usually from 8 am to 13pm) Then, tomorrow, we start=20 over again.... so about 30% of records are deleted at least one time. *************************************************** CREATE TABLE ism_floatvalues ( id_signal bigint NOT NULL, -- Indica la se=C3=B1al a la que pertenece = este=20 valor. Clave for=C3=A1nea que referencia al campo id_signal de la tabla=20 ism_signal. time_stamp timestamp without time zone NOT NULL, -- Marca de tiempo=20 que indica fecha y hora correpondiente a este dato. Junto con id_signal=20 forma la clave primaria de esta tabla var_value double precision, -- Almacena el valor concreto de la se=C3=B1= al=20 en la marca de tiempo espeficicada. CONSTRAINT ism_floatvalues_id_signal_fkey FOREIGN KEY (id_signal) REFERENCES ism_signal (id_signal) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE ) WITH ( OIDS=3DFALSE ); CREATE INDEX ism_floatvalues_index_idsignal_timestamp ON ism_floatvalues USING btree (id_signal, time_stamp DESC); *************************************************** Table ism_signal: this table has about 24K records **************************************************** CREATE TABLE ism_signal ( id_signal bigserial NOT NULL, -- C=C3=B3digo num=C3=A9rico autoincreme= ntal.=20 Clave primaria de la tabla. id_source bigint NOT NULL, reference character varying NOT NULL, -- Cadena de caracteres con la=20 que se identifica de forma =C3=BAnica cada se=C3=B1al ( v=C3=A1lida para = toda la=20 plataforma de ISM ). "name" character varying NOT NULL, -- Cadena de caracteres con la que=20 se muestra este se=C3=B1al al usuario. signalclass character varying NOT NULL, -- Indica la clase de la=20 se=C3=B1al. S=C3=B3lo admite valores measure, global, hourly, daily, mont= hly,=20 yearly, alarm, event, constant y attribute. signaltype character varying NOT NULL, -- Indica el tipo de dato de=20 la se=C3=B1al. opcitem character varying, -- Cadena de caracteres que indica el item=20 OPC de donde debe leerse esta se=C3=B1al. Como un mismo servidor OPC pued= e=20 manejar varios sistemas, este item OPC se personaliza seg=C3=BAn el el=20 espacio de nombres para una configuraci=C3=B3n concreta del servidor OPC = (si=20 hay 3 inversores gestionados por el mismo servidor OPC, el canal que=20 gen=C3=A9ricamente se donomina PCC debe ser personalizado a 1.PCC, 2.PCC = o 3.PCC. formula character varying, -- Cadena de caracteres que indica la=20 f=C3=B3rmula de ajuste para esta se=C3=B1al (como como argumento el valor= leido=20 del servidor OPC y le aplica esta f=C3=B3rmula). id_opcserverconf bigint, -- Referencia a un servidor OPC configurado=20 de una forma determinada. Clave for=C3=A1nea al campo id_opcServerConf de= la=20 tabla ism_opcServerConf decimals smallint, -- N=C3=BAmero de cifras decimales que se muestran = al=20 usuario unit character varying, -- Cadena de caracteres que indica las=20 unidades de medida. description text, -- Breve descripci=C3=B3n y comentarios adicionales. max_value double precision, -- L=C3=ADmite superior para representar=20 gr=C3=A1ficamente la magnitud. min_value double precision, -- L=C3=ADmite inferior para representar=20 gr=C3=A1ficamente la magnitud. critical_day date, -- Indica el d=C3=ADa a partir del cual debemos emp= ezar=20 a pedir datos de esta se=C3=B1al. erased boolean DEFAULT false, -- Indica si este canal debe o no=20 mostrarse en la web. Si vale "false" el dato debe mostrarse. writetodb boolean DEFAULT true, -- Indica si este canal debe o no=20 almacenarse en la base de datos. Si vale "true" el dato debe=20 almacenarse dbupdaterate integer DEFAULT 0, -- Indica el intervalo de tiempo en=20 el que debe recuperarse y almacenarse esta se=C3=B1al desde el servidor O= PC a=20 la base de datos. ordering integer, -- Indica el orden en el que deben mostrarse las=20 se=C3=B1ales al usuarioIndica el intervalo de tiempo en el que debe=20 recuperarse y almacenarse esta se=C3=B1al desde el servidor OPC a la base= de=20 datos. Si est=C3=A1n a NULL los canales se ordenan por orden alfab=C3=A9t= ico. sync_level smallint NOT NULL DEFAULT 0, -- ndica el nivel de=20 sincronizaci=C3=B3n. Si vale 0 indica que el dato se obtiene=20 directamente un servidor OPC asociado a un dispositivo. Si vale N (N>0)=20 significa que la se=C3=B1al se obtiene mediante c=C3=A1lculos sobre algun= a se=C3=B1al=20 de nivel N-1 y se lee de un servidor OPC asociado a la base de datos.=20 Las se=C3=B1ales de nivel N deben sincronizarse antes que las de nivel N+= 1. hastodaydata boolean NOT NULL DEFAULT true, -- Indica si la medida=20 tiene datos en el dia actual o si por el contrario solo tiene datos de=20 dias ya pasados interval_minutes smallint, updaterate integer DEFAULT 0, CONSTRAINT ism_signal_pkey PRIMARY KEY (id_signal), CONSTRAINT ism_signal_id_opcserverconf_fkey FOREIGN KEY=20 (id_opcserverconf) REFERENCES ism_opcserverconf (id_opcserverconf) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE, CONSTRAINT ism_signal_id_source_fkey FOREIGN KEY (id_source) REFERENCES ism_source (id_source) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE, CONSTRAINT ism_signal_name_check CHECK (name::text <> ''::text), CONSTRAINT ism_signal_reference_check CHECK (reference::text ~=20 '^[_A-Za-z0-9]+$'::text), CONSTRAINT ism_signal_signalclass_check2 CHECK (signalclass::text =3D=20 'measure'::text OR signalclass::text =3D 'global'::text OR=20 signalclass::text =3D 'hourly'::text OR signalclass::text =3D 'daily'::te= xt=20 OR signalclass::text =3D 'monthly'::text OR signalclass::text =3D=20 'yearly'::text OR signalclass::text =3D 'alarm'::text OR signalclass::tex= t=20 =3D 'event'::text OR signalclass::text =3D 'constant'::text OR=20 signalclass::text =3D 'attribute'::text OR signalclass::text =3D=20 'DAmeasure'::text OR signalclass::text =3D 'filter'::text), CONSTRAINT ism_signal_signaltype_check CHECK (signaltype::text =3D=20 'float'::text OR signaltype::text =3D 'integer'::text OR signaltype::text= =20 =3D 'char'::text OR signaltype::text =3D 'string'::text OR signaltype::te= xt=20 =3D 'boolean'::text OR signaltype::text =3D 'memo'::text OR signaltype::t= ext=20 =3D 'void'::text) ) WITH ( OIDS=3DFALSE ); CREATE INDEX ism_signal_idx_id_signal ON ism_signal USING btree (id_signal); CREATE INDEX ism_signal_idx_id_source ON ism_signal USING btree (id_source); CREATE INDEX ism_signal_idx_reference ON ism_signal USING btree (reference); ****************************************** Table ism_installation: This table has about 200 records. ****************************************** CREATE TABLE ism_installation ( id_installation bigserial NOT NULL, -- C=C3=B3digo num=C3=A9rico=20 autoincremental. Clave primaria de la tabla. id_source bigint NOT NULL, -- C=C3=B3digo =C3=BAnico para cualquier fu= ente de=20 se=C3=B1ales (source). Clave for=C3=A1nea al campo id_source de la tabla = ism_source "name" character varying NOT NULL, -- Nombre de la instalaci=C3=B3n. N= o=20 puede ser cadena vac=C3=ADa ni nulo. No puede haber dos instalaciones con= el=20 mismo nombre. description text, -- Breve descripci=C3=B3n y comentarios adicionales. latitude_degree smallint, -- Grados de latitud del emplazamineto de=20 la instalaci=C3=B3n. Entero entre -180 y +180 latitude_minute smallint, -- Minutos de latitud del emplazamineto de=20 la instalaci=C3=B3n. Entero entre 0 y 59 longitude_degree smallint, -- Grados de longitud del emplazamineto de=20 la instalaci=C3=B3n. Entero entre -180 y +180 longitude_minute smallint, -- Minutos de longitud del emplazamineto=20 de la instalaci=C3=B3n. Entero entre 0 y 59 city character varying, -- Nombre del t=C3=A9rmino municipal donde est= =C3=A1 la=20 instalaci=C3=B3n province character varying, -- Nombre de la provincia donde est=C3=A1 = la=20 instalaci=C3=B3n. id_class bigint, -- Referncia a un elemento de ism_class que indica=20 la tecnolog=C3=ADa de la instalaci=C3=B3n(fotovoltaica, e=C3=B3lica, t=C3= =A9rmica). Clave=20 for=C3=A1nea al campo id_class de la tabla ism_class initial_date date, last_date date, last_hour time without time zone, ordering integer DEFAULT 0, -- Orden de las instalaciones de un grupo short_name character varying(20), -- Nombre corto de la instalcion=20 para mostrarlo en un menu lateral de la web, que no debe exceder de 20=20 caracteres id_owner bigint, id_distributor bigint, installation_type character(1), id_syncgroup integer, address character varying(256), ripre character varying(256), plantgroup character varying(256), power character varying(256), edecode character varying(256), instgroup character varying(256), id_zone bigint, active boolean DEFAULT true, latitude_second double precision, longitude_second double precision, id_node integer, firstdataday date, CONSTRAINT ism_installation_pkey PRIMARY KEY (id_installation), CONSTRAINT id_syncgroup_fk FOREIGN KEY (id_syncgroup) REFERENCES ism_syncgroup (id_syncgroup) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE, CONSTRAINT id_zone_fk FOREIGN KEY (id_zone) REFERENCES ism_counterzone (id_zone) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE, CONSTRAINT ism_installation_distributor_fkey FOREIGN KEY (id_distribut= or) REFERENCES ism_distributor (id_distributor) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE, CONSTRAINT ism_installation_id_class_fkey FOREIGN KEY (id_class) REFERENCES ism_class (id_class) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE, CONSTRAINT ism_installation_id_source_fkey FOREIGN KEY (id_source) REFERENCES ism_source (id_source) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE, CONSTRAINT ism_installation_owner_fkey FOREIGN KEY (id_owner) REFERENCES ism_owner (id_owner) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE, CONSTRAINT ism_installation_name_key UNIQUE (name), CONSTRAINT ism_installation_latitude_degree_check CHECK ((-180) <=3D=20 latitude_degree AND latitude_degree <=3D 180), CONSTRAINT ism_installation_latitude_minute_check CHECK (0 <=3D=20 latitude_minute AND latitude_minute < 60), CONSTRAINT ism_installation_latitude_second_check CHECK (0::double=20 precision <=3D latitude_second AND latitude_second < 60::double precision= ), CONSTRAINT ism_installation_longitude_degree_check CHECK ((-180) <=3D=20 longitude_degree AND longitude_degree <=3D 180), CONSTRAINT ism_installation_longitude_minute_check CHECK (0 <=3D=20 longitude_minute AND longitude_minute < 60), CONSTRAINT ism_installation_longitude_second_check CHECK (0::double=20 precision <=3D longitude_second AND longitude_second < 60::double precisi= on), CONSTRAINT ism_installation_name_check CHECK (name::text <> ''::text) ) WITH ( OIDS=3DFALSE ); **************************************************** Regards. El 05/11/2012 10:54, =D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80 =D0=95=D0=B3=D0= =BE=D1=80=D0=BE=D0=B2 escribi=C3=B3: > 2012/11/2 Pedro Jim=C3=A9nez P=C3=A9rez > > > I have this table definition: > > > 1) Could you kindly include also information bout ism_signal and=20 > ism_installation tables? > 2) Please, follow this guide to provide more input:=20 > http://wiki.postgresql.org/wiki/Slow_Query_Questions > > > --=20 > Victor Y. Yegorov --=20 Documento sin t=C3=ADtulo **Pedro Jim=C3=A9nez P=C3=A9rez **p.jimenez@ismsolar.com **** =09 **Innovaci=C3=B3n en Sistemas de Monitorizaci=C3=B3n, S.L.** Edificio Hevimar C/ Iv=C3=A1n Pavlov 2 y 4 - Parcela 4 2=C2=AA Planta Local 9 Parque Tecnol=C3=B3gico de Andaluc=C3=ADa 29590 Campanillas (M=C3=A1laga) Tlfno. 952 02 07 13 contacto@ismsolar.com firma_gpt.jpg, 1 kB =09 Antes de imprimir, piensa en tu responsabilidad y compromiso con el=20 MEDIO AMBIENTE! Before printing, think about your responsibility and commitment with the=20 ENVIRONMENT! CL=C3=81USULA DE CONFIDENCIALIDAD.- Este mensaje, y en su caso, cualquier= =20 fichero anexo al mismo, puede contener informaci=C3=B3n confidencial o=20 legalmente protegida (LOPD 15/1999 de 13 de Diciembre), siendo para uso=20 exclusivo del destinatario. No hay renuncia a la confidencialidad o=20 secreto profesional por cualquier transmisi=C3=B3n defectuosa o err=C3=B3= nea, y=20 queda expresamente prohibida su divulgaci=C3=B3n, copia o distribuci=C3=B3= n a=20 terceros sin la autorizaci=C3=B3n expresa del remitente. Si ha recibido e= ste=20 mensaje por error, se ruega lo notifique al remitente enviando un=20 mensaje al correo electr=C3=B3nico contacto@ismsolar.com y proceda=20 inmediatamente al borrado del mensaje original y de todas sus copias.=20 Gracias por su colaboraci=C3=B3n. --------------060001090208060706000909 Content-Type: multipart/related; boundary="------------080005000509000606070509" --------------080005000509000606070509 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Ok, here we go:

I'm using postgresql version 8.0

Here is my query that is too slow:=C2=A0 http://explain.depesz.com= /s/GbQ

***************************************************
EXPLAIN analyze
select round(CAST(sum(var_value) AS numeric),2) as var_value, date_trunc('month', time_stamp) as time_stamp , date_part('month',date_trunc('month', time_stamp)) as month, date_part('year',date_trunc('year', time_stamp)) as year from ism_floatvalues where id_signal in
(
select id_signal from ism_signal where reference =3D 'EDCA' and id_source in
(
select id_source from ism_installation where id_installation in
(select id_installation from ism_groupxinstallation where id_group =3D 101)
)
)
and time_stamp > date_trunc('month', current_date - interval '11 months')
group by date_trunc('month', time_stamp), month, year
order by time_stamp

***************************************************
Here are the tables:

Table ism_floatvalues:
Table ism_floatvalues has about 100 million records.
This table is updated everyday. Everyday we delete the data stored regarding yesterday, usually from 8 am to 13 pm moreless, and then we insert the data for yesterday (complete data) and the data we have available for today (usually from 8 am to 13pm) Then, tomorrow, we start over again.... so about 30% of records are deleted at least one time.
***************************************************
CREATE TABLE ism_floatvalues
(
=C2=A0 id_signal bigint NOT NULL, -- Indica la se=C3=B1al a la que pe= rtenece este valor. Clave for=C3=A1nea que referencia al campo id_signal de l= a tabla ism_signal.
=C2=A0 time_stamp timestamp without time zone NOT NULL, -- Marca de tiempo que indica fecha y hora correpondiente a este dato. Junto con id_signal forma la clave primaria de esta tabla
=C2=A0 var_value double precision, -- Almacena el valor concreto de l= a se=C3=B1al en la marca de tiempo espeficicada.
=C2=A0 CONSTRAINT ism_floatvalues_id_signal_fkey FOREIGN KEY (id_sign= al)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCES ism_signal (id_signal) MATC= H SIMPLE
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ON UPDATE NO ACTION ON DELETE CASCADE<= br> )
WITH (
=C2=A0 OIDS=3DFALSE
);
CREATE INDEX ism_floatvalues_index_idsignal_timestamp
=C2=A0 ON ism_floatvalues
=C2=A0 USING btree
=C2=A0 (id_signal, time_stamp DESC);
***************************************************

Table ism_signal:
this table has about 24K records
****************************************************
CREATE TABLE ism_signal
(
=C2=A0 id_signal bigserial NOT NULL, -- C=C3=B3digo num=C3=A9rico aut= oincremental. Clave primaria de la tabla.
=C2=A0 id_source bigint NOT NULL,
=C2=A0 reference character varying NOT NULL, -- Cadena de caracteres = con la que se identifica de forma =C3=BAnica cada se=C3=B1al ( v=C3=A1lid= a para toda la plataforma de ISM ).
=C2=A0 "name" character varying NOT NULL, -- Cadena de caracteres con= la que se muestra este se=C3=B1al al usuario.
=C2=A0 signalclass character varying NOT NULL, -- Indica la clase de = la se=C3=B1al. S=C3=B3lo admite valores measure, global, hourly, daily, = monthly, yearly, alarm, event, constant y attribute.
=C2=A0 signaltype character varying NOT NULL, -- Indica el tipo de da= to de la se=C3=B1al.
=C2=A0 opcitem character varying, -- Cadena de caracteres que indica = el item OPC de donde debe leerse esta se=C3=B1al. Como un mismo servidor= OPC puede manejar varios sistemas, este item OPC se personaliza seg=C3=BA= n el el espacio de nombres para una configuraci=C3=B3n concreta del servid= or OPC (si hay 3 inversores gestionados por el mismo servidor OPC, el canal que gen=C3=A9ricamente se donomina PCC debe ser personalizado a 1.PCC, 2.PCC o 3.PCC.
=C2=A0 formula character varying, -- Cadena de caracteres que indica = la f=C3=B3rmula de ajuste para esta se=C3=B1al (como como argumento el v= alor leido del servidor OPC y le aplica esta f=C3=B3rmula).
=C2=A0 id_opcserverconf bigint, -- Referencia a un servidor OPC configurado de una forma determinada. Clave for=C3=A1nea al campo id_opcServerConf de la tabla ism_opcServerConf
=C2=A0 decimals smallint, -- N=C3=BAmero de cifras decimales que se m= uestran al usuario
=C2=A0 unit character varying, -- Cadena de caracteres que indica las unidades de medida.
=C2=A0 description text, -- Breve descripci=C3=B3n y comentarios adic= ionales.
=C2=A0 max_value double precision, -- L=C3=ADmite superior para repre= sentar gr=C3=A1ficamente la magnitud.
=C2=A0 min_value double precision, -- L=C3=ADmite inferior para repre= sentar gr=C3=A1ficamente la magnitud.
=C2=A0 critical_day date, -- Indica el d=C3=ADa a partir del cual deb= emos empezar a pedir datos de esta se=C3=B1al.
=C2=A0 erased boolean DEFAULT false, -- Indica si este canal debe o n= o mostrarse en la web. Si vale "false" el dato debe mostrarse.
=C2=A0 writetodb boolean DEFAULT true, -- Indica si este canal debe o= no almacenarse en la base de datos.=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 Si va= le "true" el dato debe almacenarse
=C2=A0 dbupdaterate integer DEFAULT 0, -- Indica el intervalo de tiem= po en el que debe recuperarse y almacenarse esta se=C3=B1al desde el servidor OPC a la base de datos.
=C2=A0 ordering integer, -- Indica el orden en el que deben mostrarse= las se=C3=B1ales al usuarioIndica el intervalo de tiempo en el que debe recuperarse y almacenarse esta se=C3=B1al desde el servidor OPC a la = base de datos. Si est=C3=A1n a NULL los canales se ordenan por orden alfab=C3=A9tico.
=C2=A0 sync_level smallint NOT NULL DEFAULT 0, -- ndica el nivel de sincronizaci=C3=B3n.=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 Si vale 0 indica = que el dato se obtiene directamente un servidor OPC asociado a un dispositivo. Si vale N (N>0) significa que la se=C3=B1al se obtiene mediante c=C3=A1lculo= s sobre alguna se=C3=B1al de nivel N-1 y se lee de un servidor OPC asociado a= la base de datos. Las se=C3=B1ales de nivel N deben sincronizarse antes = que las de nivel N+1.
=C2=A0 hastodaydata boolean NOT NULL DEFAULT true, -- Indica si la me= dida tiene datos en el dia actual o si por el contrario solo tiene datos de dias ya pasados
=C2=A0 interval_minutes smallint,
=C2=A0 updaterate integer DEFAULT 0,
=C2=A0 CONSTRAINT ism_signal_pkey PRIMARY KEY (id_signal),
=C2=A0 CONSTRAINT ism_signal_id_opcserverconf_fkey FOREIGN KEY (id_opcserverconf)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCES ism_opcserverconf (id_opcse= rverconf) MATCH SIMPLE
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ON UPDATE NO ACTION ON DELETE CASCADE,=
=C2=A0 CONSTRAINT ism_signal_id_source_fkey FOREIGN KEY (id_source) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCES ism_source (id_source) MATC= H SIMPLE
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ON UPDATE NO ACTION ON DELETE CASCADE,=
=C2=A0 CONSTRAINT ism_signal_name_check CHECK (name::text <> ''::text),
=C2=A0 CONSTRAINT ism_signal_reference_check CHECK (reference::text ~ '^[_A-Za-z0-9]+$'::text),
=C2=A0 CONSTRAINT ism_signal_signalclass_check2 CHECK (signalclass::t= ext =3D 'measure'::text OR signalclass::text =3D 'global'::text OR signalclass::text =3D 'hourly'::text OR signalclass::text =3D 'daily'::text OR signalclass::text =3D 'monthly'::text OR signalclass::text =3D 'yearly'::text OR signalclass::text =3D 'alarm'::text OR signalclass::text =3D 'event'::text OR signalclass::text =3D 'constant'::text OR signalclass::text =3D 'attribute'::text OR signalclass::text =3D 'DAmeasure'::text OR signalclass::text =3D 'filter'::text),
=C2=A0 CONSTRAINT ism_signal_signaltype_check CHECK (signaltype::text= =3D 'float'::text OR signaltype::text =3D 'integer'::text OR signaltype::text =3D 'char'::text OR signaltype::text =3D 'string'::t= ext OR signaltype::text =3D 'boolean'::text OR signaltype::text =3D 'memo'::text OR signaltype::text =3D 'void'::text)
)
WITH (
=C2=A0 OIDS=3DFALSE
);

CREATE INDEX ism_signal_idx_id_signal
=C2=A0 ON ism_signal
=C2=A0 USING btree
=C2=A0 (id_signal);

CREATE INDEX ism_signal_idx_id_source
=C2=A0 ON ism_signal
=C2=A0 USING btree
=C2=A0 (id_source);

CREATE INDEX ism_signal_idx_reference
=C2=A0 ON ism_signal
=C2=A0 USING btree
=C2=A0 (reference);

******************************************

Table ism_installation:
This table has about 200 records.
******************************************

CREATE TABLE ism_installation
(
=C2=A0 id_installation bigserial NOT NULL, -- C=C3=B3digo num=C3=A9ri= co autoincremental. Clave primaria de la tabla.
=C2=A0 id_source bigint NOT NULL, -- C=C3=B3digo =C3=BAnico para cual= quier fuente de se=C3=B1ales (source). Clave for=C3=A1nea al campo id_source de la= tabla ism_source
=C2=A0 "name" character varying NOT NULL, -- Nombre de la instalaci=C3= =B3n. No puede ser cadena vac=C3=ADa ni nulo. No puede haber dos instalaciones= con el mismo nombre.
=C2=A0 description text, -- Breve descripci=C3=B3n y comentarios adic= ionales.
=C2=A0 latitude_degree smallint, -- Grados de latitud del emplazamine= to de la instalaci=C3=B3n. Entero entre -180 y +180
=C2=A0 latitude_minute smallint, -- Minutos de latitud del emplazamin= eto de la instalaci=C3=B3n. Entero entre 0 y 59
=C2=A0 longitude_degree smallint, -- Grados de longitud del emplazami= neto de la instalaci=C3=B3n. Entero entre -180 y +180
=C2=A0 longitude_minute smallint, -- Minutos de longitud del emplazamineto de la instalaci=C3=B3n. Entero entre 0 y 59
=C2=A0 city character varying, -- Nombre del t=C3=A9rmino municipal d= onde est=C3=A1 la instalaci=C3=B3n
=C2=A0 province character varying, -- Nombre de la provincia donde es= t=C3=A1 la instalaci=C3=B3n.
=C2=A0 id_class bigint, -- Referncia a un elemento de ism_class que indica la tecnolog=C3=ADa de la instalaci=C3=B3n(fotovoltaica, e=C3=B3= lica, t=C3=A9rmica). Clave for=C3=A1nea al campo id_class de la tabla ism_c= lass
=C2=A0 initial_date date,
=C2=A0 last_date date,
=C2=A0 last_hour time without time zone,
=C2=A0 ordering integer DEFAULT 0, -- Orden de las instalaciones de u= n grupo
=C2=A0 short_name character varying(20), -- Nombre corto de la instal= cion para mostrarlo en un menu lateral de la web, que no debe exceder de 20 caracteres
=C2=A0 id_owner bigint,
=C2=A0 id_distributor bigint,
=C2=A0 installation_type character(1),
=C2=A0 id_syncgroup integer,
=C2=A0 address character varying(256),
=C2=A0 ripre character varying(256),
=C2=A0 plantgroup character varying(256),
=C2=A0 power character varying(256),
=C2=A0 edecode character varying(256),
=C2=A0 instgroup character varying(256),
=C2=A0 id_zone bigint,
=C2=A0 active boolean DEFAULT true,
=C2=A0 latitude_second double precision,
=C2=A0 longitude_second double precision,
=C2=A0 id_node integer,
=C2=A0 firstdataday date,
=C2=A0 CONSTRAINT ism_installation_pkey PRIMARY KEY (id_installation)= ,
=C2=A0 CONSTRAINT id_syncgroup_fk FOREIGN KEY (id_syncgroup)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCES ism_syncgroup (id_syncgroup= ) MATCH SIMPLE
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ON UPDATE NO ACTION ON DELETE CASCADE,=
=C2=A0 CONSTRAINT id_zone_fk FOREIGN KEY (id_zone)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCES ism_counterzone (id_zone) M= ATCH SIMPLE
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ON UPDATE NO ACTION ON DELETE CASCADE,=
=C2=A0 CONSTRAINT ism_installation_distributor_fkey FOREIGN KEY (id_distributor)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCES ism_distributor (id_distrib= utor) MATCH SIMPLE
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ON UPDATE NO ACTION ON DELETE CASCADE,=
=C2=A0 CONSTRAINT ism_installation_id_class_fkey FOREIGN KEY (id_clas= s)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCES ism_class (id_class) MATCH = SIMPLE
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ON UPDATE NO ACTION ON DELETE CASCADE,=
=C2=A0 CONSTRAINT ism_installation_id_source_fkey FOREIGN KEY (id_sou= rce)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCES ism_source (id_source) MATC= H SIMPLE
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ON UPDATE NO ACTION ON DELETE CASCADE,=
=C2=A0 CONSTRAINT ism_installation_owner_fkey FOREIGN KEY (id_owner)<= br> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCES ism_owner (id_owner) MATCH = SIMPLE
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ON UPDATE NO ACTION ON DELETE CASCADE,=
=C2=A0 CONSTRAINT ism_installation_name_key UNIQUE (name),
=C2=A0 CONSTRAINT ism_installation_latitude_degree_check CHECK ((-180= ) <=3D latitude_degree AND latitude_degree <=3D 180),
=C2=A0 CONSTRAINT ism_installation_latitude_minute_check CHECK (0 <= ;=3D latitude_minute AND latitude_minute < 60),
=C2=A0 CONSTRAINT ism_installation_latitude_second_check CHECK (0::do= uble precision <=3D latitude_second AND latitude_second < 60::double precision),
=C2=A0 CONSTRAINT ism_installation_longitude_degree_check CHECK ((-18= 0) <=3D longitude_degree AND longitude_degree <=3D 180),
=C2=A0 CONSTRAINT ism_installation_longitude_minute_check CHECK (0 &l= t;=3D longitude_minute AND longitude_minute < 60),
=C2=A0 CONSTRAINT ism_installation_longitude_second_check CHECK (0::double precision <=3D longitude_second AND longitude_second < 60::double precision),
=C2=A0 CONSTRAINT ism_installation_name_check CHECK (name::text <&= gt; ''::text)
)
WITH (
=C2=A0 OIDS=3DFALSE
);


****************************************************

Regards.


El 05/11/2012 10:54, =D0=92=D0=B8=D0=BA= =D1=82=D0=BE=D1=80 =D0=95=D0=B3=D0=BE=D1=80=D0=BE=D0=B2 escribi=C3=B3:
2012/11/2 Pedro Jim=C3=A9nez P=C3=A9rez <p.jimenez@ismsolar.com>
=C2=A0 I have this t= able definition:

1) Could you kindly include also information bout=C2=A0ism_signal and=C2=A0ism_installation tables?
2) Please, follow this guide to provide more input:=C2=A0h= ttp://wiki.postgresql.org/wiki/Slow_Query_Questions


--
Victor Y. Yegorov

--
Documento sin t=C3=ADtulo

Pedro Jim=C3=A9nez P=C3= =A9rez
p.jimenez@ismsola= r.com

Innovaci=C3=B3n en Sistemas de Monitorizaci=C3=B3n, S.L.=
Edificio Hevimar
C/ Iv=C3=A1n Pavlov
2 y 4 - Parcela 4 2=C2=AA Planta Local 9
Parque Tecnol=C3=B3gico de Andaluc=C3=ADa
29590 Campanillas (M=C3=A1laga)
Tlfno. 952 02 07 13
contacto@ismsolar.com

3D"firma_gpt.jpg,

Antes de imprimir, piensa en tu responsabilidad y compromiso con el MEDIO AMBIENTE!

Before printing, think about your responsibility and commitment with the ENVIRONMENT!

CL=C3=81USULA DE CONFIDENCIALIDAD.- Este mensaje, y en su caso, cualquier fichero anexo al mismo, puede contener informaci=C3=B3n confidencial o legalmente protegida (LOPD 15/1999 de 13 de Diciembre), siendo para uso exclusivo del destinatario. No hay renuncia a la confidencialidad o secreto profesional por cualquier transmisi=C3=B3n defectuosa o err=C3=B3nea, y queda expresamente prohibida su divulgaci=C3=B3n, copia o distribuci=C3=B3n a terceros sin la autorizaci=C3=B3n= expresa del remitente. Si ha recibido este mensaje por error, se ruega lo notifique al remitente enviando un mensaje al correo electr=C3=B3nico contacto@ismsolar.com y proceda inmedi= atamente al borrado del mensaje original y de todas sus copias. Gracias por su colaboraci=C3=B3n.

--------------080005000509000606070509 Content-Type: image/gif; name="Logo_Ism.gif" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="Logo_Ism.gif" R0lGODlhZAA0AMQAAPz8+/6xCgUrdubn6J+uydjY2FFsn/zwzsnJyTNTj/zkqvzJVfzaifzR bfLy8/3349LZ5f26JmyDroudvv378rK+1PzBPOrr7cPN3N7g4u/v8Bc7gPb29/n5+czMzP// /yH5BAAAAAAALAAAAABkADQAAAX/4CeOZGmeaKqubOu+cCzPdG3fOPwoTOM3DMWBkisaURTF IhJoOp2WxsEFIRAwpgthwr1eTprt5ApAAQaOMk5heVoWv4WF2ZyuCIL85jvCbPKAAhsGBBwk eIETKBIbGwmENRQNUAxDJhQHPQ8sEoAbDiMZf4GkCQMjiJ4aJhmkEjQUbQERDGo4E4AJHSOd ngRVowIGqJ55BCa4ga8yFAtNFpsnAA8HBw9ELckCCSMDwQIVxIAQInjfwyQcCYKAyzEMz9Ek AAcNc04RFpV3uSMVgehEOFhnTIQ2dp9I/Cvm7sUBJhHskDgga5aFe00iLJBnIlXATqOOkegl YFmyRoDC//HKk2BUQxeTAjAwAW9WpWsAMCmIGUEBCo8jDAQiR0KbSZZC8wQUJYjAqIAuHkDE NqImA6omDjgL4LMjoIBJBWUosbCkQT2p9pwVBuFpDAVNZpKAy3XeNZpNuir8GtQT0T7t1u4h CE4EQQIX3MKIKVFEG7kfKDCYo1GBrQ+TLGD9UJbb2VGKSGAI/OEkB6MfRgty4E1pDGcROB6Y he2BrDdMGtiSKpNsPxGJAVYYUMaBgUdYSuvRAMFTh17DgguDESuA5rkBGoyA3VVS76rWL3cm AYGwngQTMIAqqudUWAIEw0mHygJAm+sj4MqdXZfEJHmzRbQXS5d1MIF5nhiQnP9ygpyS1h8J rKKBYi7YRxt2clGgUVbfRcaEXpzlYgsAGUBwAQYSIJhHaCeNxZQyInBAoQuwNTbbAiPcVYKG OI7w2IDbqFHeHyJ1UIV5G5DToghh5aGSjK7BUBOIGsa2wkUjWAhZiAQySRp7gByzZIij6BIj QfSxwJ8FJcCzpQkPBNDjB7yBOJ4IJCVw2QckCSCmHkQ5EExoH3RAkGcvVNefCHWmAI9edDWW CqKq5bHgB6lss8pJf5G0oKEsyVCTBZfB1ZMJAMCD3wfOrIqpiCNoY8AXGfSZQHKcjnCBBJBk eSgzdLxZ0wIKPEANG7NIRJd2QJqJyiiOnMMHn+NwEuX/W068SdETTjQgj22zcPQBABBggMG0 IzhwILSP/CUCBgkkIMEuKxgJgSEzxCTTnpksAAcDHIG7aAwXlAvBeimUAcCeauw5AwBbydmY CgrQwawJGoDCAQC7cJABvgLtosHCA5QMHHEfZAAAB6t4bEgaHXhQaAcgywCAvtkd4LAIACjR 7c4pu6jBKRkUUAAJBRDdgQNGF7CKByYXAMAFpxRwASjExfwBBwWMZUPFbjQgRDUH7FQRLSoM cLQGVn9w9SmhjJW1Axpc/YEHTn9AnANfqA3KBSSL4AHCNTzAAB3cIp7RAhOjOgK90iQMOAqQ l7BKEUkswS0UUhzh+eeRld0D/xBCAA366ainrvrqrLfu+uuwxx47x3RTPUAGuOfedO64lzzA 1Rx0YLrs9fF9u9EeJI/A8sw37/zzyye/++8OVE48CR0MXbTyzSfv/ffghy8+98xLn8HvG8ee /fbdj+++B9DH7/z37SetQc2pr6xB0dG/7339uztfyS5AQN/prmnkgx7eMqAB66WObfAbX/+6 NoD7LYwGC+OA8YpWgARGr2vVYx3T4IcA7uENDcMrwsouwEESls9qDvycxzroAQbGsHW0U1sH XziAGx7hgteTBsvURsIT+jCIrcseEUtotRQicXVKLEAJM0C4JxKPAzpsohWRCID9JQ1/W5wd ay6QvgkwXm9lITRBCAAAOw== --------------080005000509000606070509 Content-Type: image/jpeg; name="graphics2" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="graphics2" 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 RlU10bMgAAAAAElFTkSuQmCC --------------080005000509000606070509-- --------------060001090208060706000909--