Vous n'êtes pas identifié(e).

#76 Re : Optimisation » Optimisation Basse de Données » 17/03/2014 18:33:59

116M de lignes et 2 ou 3 jours pour avoir les résultats ???
Est-il possible d'avoir plus d'infos :
- un explain de la requête (on voit la analyse un autre jour)
- type de serveur (CPU / RAM / ...)
- les éléments de configuration modifiés :  select name, setting from pg_settings where source !='default'  and source='configuration file';

#77 Re : PL/pgSQL » fonction SQL (avec timestamp) pour sommer des quantités de pluies. » 14/03/2014 18:19:55

OK ! smile

donc mon jeux de test :

create table the_range(id_the_range integer,dt_deb date, dt_fin date);
insert into the_range values(1,'2014-02-21', '2014-02-25');
insert into the_range values(2,'2014-02-20', '2014-02-22');
insert into the_range values(3,'2014-02-26', '2014-02-27');

la requête :

SELECT
	t.id_the_range,
	dt_deb,
	dt_fin,
	(
		SELECT 
			count(*)::text || ' : ' || coalesce(string_agg(id_the_range::text,','),'NA') 
		FROM 
			the_range 
		WHERE
			t.id_the_range != id_the_range AND
			(
				(t.dt_deb>=dt_deb AND t.dt_deb<=dt_fin) OR
				(t.dt_deb<=dt_deb AND t.dt_fin>=dt_deb)
			)
	) as count_and_liste_id
FROM
	the_range t
ORDER BY 1

résultat :

 id_the_range |   dt_deb   |   dt_fin   | count_and_liste_id 
--------------+------------+------------+--------------------
            1 | 2014-02-21 | 2014-02-25 | 1 : 2
            2 | 2014-02-20 | 2014-02-22 | 1 : 1
            3 | 2014-02-26 | 2014-02-27 | 0 : NA
(3 rows)

count_and_liste_id -> count = 1 et 2 est l'id qui le chevauche

vu de loin les 2 clause (t.dt_deb>=dt_deb AND t.dt_deb<=dt_fin) OR (t.dt_deb<=dt_deb AND t.dt_fin>=dt_deb) me semblent couvrir tous les cas, mais je peux me tromper !

#78 Re : PL/pgSQL » fonction SQL (avec timestamp) pour sommer des quantités de pluies. » 14/03/2014 17:56:21

de ce que je vois :

date_debut  | date_fin
-----------------------------
2014-02-21 | 2014-02-25
2014-02-20 | 2014-02-22
2014-02-26 | 2014-02-27

la premiere se chevauche avec la seconde et la dernière avec personne.
donc :

date_debut  | date_fin
-----------------------------
2014-02-21 | 2014-02-25 -> 1
2014-02-20 | 2014-02-22 -> 1
2014-02-26 | 2014-02-27 -> 0

c'est ça ?

#80 Re : Général » arrondi superieur » 14/03/2014 16:29:57

à mon avis, vous allez devoir passer par un procédure stockée maison ...

#81 Re : PL/pgSQL » fonction SQL (avec timestamp) pour sommer des quantités de pluies. » 13/03/2014 17:17:28

Il reste juste à remplacer ???NOM_DE_LA_TABLE¿¿¿ par le nom de votre table

SELECT 
	DATE_TRUNC('hour', new_date), -- date de début
	DATE_TRUNC('hour', new_date + INTERVAL '1 hours'), -- date de fin
	SUM(raw_value) 
FROM 
	(SELECT 
		CASE WHEN 
			DATE_TRUNC('hour', horodate) = horodate THEN horodate - INTERVAL '1 minutes' 
		ELSE 
			horodate 
		END AS new_date, 
		raw_value 
	FROM 
		???NOM_DE_LA_TABLE¿¿¿) AS foo 
GROUP BY 
	1,2 
ORDER BY 
	1;

#82 Re : PL/pgSQL » fonction SQL (avec timestamp) pour sommer des quantités de pluies. » 13/03/2014 16:15:57

Les données :

test=# select * from pluie;
       la_date       | val  
---------------------+------
 2000-01-01 09:00:00 | 0.10
 2000-01-01 09:30:00 | 0.20
 2000-01-01 09:42:00 | 0.50
 2000-01-01 09:54:00 | 0.20
 2000-01-01 10:00:00 | 1.00
(5 rows)

La requête :

test=# select date_trunc('hour', new_date), date_trunc('hour', new_date + interval '1 hours'), sum(val) from (select case when date_trunc('hour', la_date) = la_date THEN la_date - interval '1 minutes' ELSE la_date END as new_date, val from pluie) as foo group by 1,2 order by 1;
     date_trunc      |     date_trunc      | sum  
---------------------+---------------------+------
 2000-01-01 08:00:00 | 2000-01-01 09:00:00 | 0.10
 2000-01-01 09:00:00 | 2000-01-01 10:00:00 | 1.90
(2 rows)

C'est ça ?

#83 Re : PL/pgSQL » fonction SQL (avec timestamp) pour sommer des quantités de pluies. » 12/03/2014 16:02:23

Pour avoir date début / date fin :

select date_trunc('hour', la_colonne_avec_le_timestamp), date_trunc('hour', la_colonne_avec_le_timestamp) + interval '1 hours', sum(la_colonne_pluie) from votre_table group by 1,2 order by 1;

#84 Re : PL/pgSQL » fonction SQL (avec timestamp) pour sommer des quantités de pluies. » 12/03/2014 14:44:25

bonjour,
double post ?
double réponse smile

select date_trunc('hour', la_colonne_avec_le_timestamp), sum(la_colonne_pluie) from votre_table group by 1 order by 1;

#85 Re : Général » fonction SQL (avec timestamp) pour sommer des quantités de pluies. » 11/03/2014 18:53:28

Bonjour,

Votre question n'est pas au bon endroit, mais je ne suis pas modérateur smile

Sinon :

select date_trunc('hour', la_colonne_avec_le_timestamp), sum(la_colonne_pluie) from votre_table group by 1 order by 1;

#86 Re : Site PostgreSQL.fr » postgresql Utilisation des index composés et EXPLAIN » 11/02/2014 13:22:07

En gardant votre UNIQUE index (fk1,val1) et en ajoutant une clause WHERE sur fk1 = 1 vous avez un fonctionnement assez proche :
Index sur val1 :

explain analyse SELECT * FROM tt WHERE val1 = '100' ;
                                                  QUERY PLAN                                                  
--------------------------------------------------------------------------------------------------------------
 Index Scan using idx_tt2 on tt  (cost=0.55..4.57 rows=1 width=109) (actual time=0.028..0.028 rows=1 loops=1)
   Index Cond: (val1 = '100'::bpchar)
 Planning time: 0.074 ms
 Total runtime: 0.050 ms

Index unique sur fk1 + val1 :

explain analyse SELECT * FROM tt WHERE val1 = '100' and fk1=1;
                                                 QUERY PLAN                                                  
-------------------------------------------------------------------------------------------------------------
 Index Scan using idx_tt on tt  (cost=0.55..4.57 rows=1 width=109) (actual time=0.033..0.034 rows=1 loops=1)
   Index Cond: ((fk1 = 1) AND (val1 = '100'::bpchar))
 Planning time: 0.098 ms
 Total runtime: 0.058 ms
(4 rows)

Je ne dis pas que c'est ce qui est le plus propre, mais ça répond à la première question (1) comme l'index composé n'a que des 1 dans sont premier champ peut il etre utilisé ?)

#87 Re : Site PostgreSQL.fr » postgresql Utilisation des index composés et EXPLAIN » 10/02/2014 18:16:55

Bonjour,
Pour que PostgreSQL utilise votre index sans avoir à en re-créer un, il suffit de faire un where champ3 = ?? and champ2 = 1

#88 Re : Autres langages » Installation plsh » 10/02/2014 15:07:09

Bonjour,
je n'ai jamais utilisé ces langages dans PG.
Pour PLR : http://www.joeconway.com/plr/ + http://www.joeconway.com/plr/doc/plr-install.html
La dernière version semble compatible avec la 9.3

Pour PLSH : https://github.com/petere/plsh
"You need to have PostgreSQL 8.3 or later ..." donc ça doit être OK

#90 Re : Sécurité » Comprendre les droits » 23/01/2014 12:28:14

SQLpro a écrit :

En sus, PG n'offre pas non plus de déclencheurs DDL (se lançant sur un ordre CREATE ALTER ou DROP) contrairement à Oracle ou SQL Server, ce qui aurait permis d'attribuer ces privilèges au moment de la création des objets !

Raté : http://docs.postgresql.fr/9.3/sql-creat … igger.html

#92 Re : Installation » install pgmodeler » 27/11/2013 17:15:57

et en ajoutant cette ligne dans start-pgmodeler.sh (en validant le chemin) :

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/bernard/Qt5.1.1/5.1.1/gcc_64/lib

#93 Re : Installation » install pgmodeler » 26/11/2013 10:19:00

j'ai la même erreur si je ne charge pas certaines variables environnement.
mais tout fonctionne avec après un "source pgmodeler.vars".
Voila le contenu de mon fichier pgmodeler.vars (vous avez juste à modifier la valeur de PGMODELER_ROOT) :

#/bin/bash

# If you have root access you can rename this file to pgmodeler.sh and put it on
# /etc/profile.d (if you system supports this technique).

# If you do not have root access you can change this file and install it
# as a .bashrc or .bash_profile.

# Specify here the full path to the pgmodeler's root directory
export PGMODELER_ROOT="/home/pri/pgmodeler"

export PGMODELER_CONF_DIR="$PGMODELER_ROOT/conf"
export PGMODELER_SCHEMAS_DIR="$PGMODELER_ROOT/schemas"
export PGMODELER_LANG_DIR="$PGMODELER_ROOT/lang"
export PGMODELER_TMP_DIR="$PGMODELER_ROOT/tmp"
export PGMODELER_PLUGINS_DIR="$PGMODELER_ROOT/plugins"
export PGMODELER_CHANDLER_PATH="$PGMODELER_ROOT/pgmodeler-ch"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$PGMODELER_ROOT"
export PATH=$PATH:$PGMODELER_ROOT

Sur le WIKI, ils conseillent de créer un fichier SH qui lance pgmodeler. Au final le principe est le même :
http://www.pgmodeler.com.br/wiki/doku.p … y_packages

#94 Re : Installation » install pgmodeler » 25/11/2013 10:52:19

Bonjour,

Dans le répertoire de pgmodeler, vous devez avoir un fichier à configurer -> pgmodeler.vars
Quand tout est configuré, vous n'avez plus qu'à prendre en compte les variables de ce fichier (en console) :

arthurr:~/pgmodeler$ source pgmodeler.vars

puis à exécuter le binaire :

arthurr:~/pgmodeler$ ./pgmodeler

#95 Réplication » Bug réplication » 21/11/2013 19:55:10

arthurr
Réponses : 1

Bonsoir,

Pour tous les DBA : je viens de lire : http://wiki.postgresql.org/wiki/Nov2013ReplicationIssue
Préparez vous à mettre à jours vos PostgreSQL si vous avec des hot-standby ...
Ici tous nos serveurs sont en 9.2.5 ou 9.3.1, je ne sais pas si nous sommes touchés mais je vais surveiller !

#96 Re : Général » smallint ?? » 18/11/2013 18:47:52

Je l'utilise plus par réflexe que par utilité : si je sais que la donnée à stocker n'a pas besoin de stocker de grande valeur.

A noter :
- il faut parfois caster explicitement dans certaines requêtes
- il semble que le gains en place disque soit dépendant des colonnes adjacentes à la colonne (http://postgresql.1045698.n5.nabble.com … 17850.html)

#97 Re : Général » smallint ?? » 18/11/2013 16:20:14

la taille de stockage.
un smallint = 2 octets
un integer = 4 octets
un bigint = 8 octets

#98 Re : Général » [RESOLU] Requête avec count() dans plusieurs tables » 06/11/2013 14:57:43

Si vous avez plusieurs ventouses (id 1 et id 2) pour une vanne (id 1), la vanne (id 1) va être compté 2 fois dans le count(v.id).
Avec le distinct, elle ne va être compté qu'une seule fois.

#99 Re : Général » [RESOLU] Requête avec count() dans plusieurs tables » 06/11/2013 12:07:24

bonjour,

je ne connais pas assez bien votre base, mais un DISTINCT dans le count est peut être suffisant :

SELECT 
  a.insee AS commune, 
  count(distinct b.gid) AS nb_vanne, 
  count(distinct c.gid) AS nb_ventouse

FROM commune a
  LEFT JOIN vanne b ON a.insee = b.insee
  LEFT JOIN ventouse c ON a.insee = c.insee

WHERE a.insee = '86000'

GROUP BY a.insee ;

#100 Re : Général » [RESOLU] Ajouter et remplir une colonne dans la même requête » 05/11/2013 15:52:46

Bonjour,

vous parlez de vue, mais dans la première requête, vous essayez d'ajouter une colonne à votre table (la syntaxe est fausse quand même).
concernant votre 2ème requête, je n'ai aucune idée de ce que vous avez essayer de faire. smile

pour créer une vue toto avec une nouvelle colonne nommée colonne3 qui prend la valeur "yes" (champ texte) :

create view toto as (select *,'yes'::text as colonne3 from votre_table);

La doc sur les vues : http://docs.postgresql.fr/9.3/sql-createview.html

Pied de page des forums

Propulsé par FluxBB