PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 PHP » performance table vs json » 25/09/2020 11:05:33

oles67
Réponses : 0

Bonjour
est-ce que quelqu'un a déjà testé les performances de traitement php d'une requête de lecture qui retourne une table par rapport à un json avec les même données ?

La table est plus volumineuse en nombre de ligne, mais pas de traitement json à faire pour le mettre dans un array.
Le json est moins volumineux mais il faut le decoder vers un array.

Merci de votre aide.

#2 pgAdmin4 » Actualiser la liste "navigateur" à gauche. » 25/09/2020 09:58:54

oles67
Réponses : 1

Bonjour,

1) est-il possible d'actualiser automatiquement la liste "navigateur" à gauche de PGadmin qui affiche la structure de la base de données ?
Quand j'ajoute une table/fonction je dois le faire manuellement en remontant dans l'arborescence et faire ça avec le menu contextuel.

A moins qu'il existe un raccourci clavier

2) est-il possible aussi de créer des sous dossier dans fonction, table,... ?
Avec 1000 tables et presque autant de fonctions, ça devient un peu chiant de retourver ses petits. Donc, grouper les tables/fonction par thème serait plus simple.

Merci de votre aide.

#3 Re : Général » extraire ligne qui suit une valeur 0 dans une table. » 03/09/2020 10:02:50

gleu a écrit :

Mon avis est que cela doit se faire au niveau du client. SQL ne permettra pas de réaliser ça.

Finalement j'ai trouvé une solution avec Doliprane.
Ca ne fait pas que ça.
Ca se joue sur "where Champ2 is distinct from prev_Champ2"

Si ça peut aider quelqu'un....

Select -- table3
	*,
	first_value(Champ1) over(partition by Champ3 order by Champ1 desc) as firstChamp1, -- retourne la dernière valeur du champ (Date/heure) pour chaque group champ3 
	first_value(Champ2) over(partition by Champ3 order by Champ1 desc) as FirstChamp2  -- retourne la dernière valeur du champ (Valeur) pour chaque groupe champ3 
	from ( 
	SELECT -- table2
		* 
	from( 
		SELECT 
			Champ3,
			Champ1,
			Champ2,
			lag(Champ3) over(order by Champ3,Champ1) as prev_Champ3,
			lag(Champ2) over(order by Champ3,Champ1) as prev_Champ2
		FROM 
			public.MaTable
			Order by Champ3,Champ1,Champ2 asc
	) as table2
where Champ2 is distinct from prev_Champ2  -- Filtre doublons consécutifs du champ 2 (valeur)
order by Champ3,Champ1 asc
) as table3

#4 Re : Général » extraire ligne qui suit une valeur 0 dans une table. » 01/09/2020 22:00:41

Je vais réfléchir en contournant le problème en supprimant les doublons consecutifs puis "order by date desc" et "limit 1"

Ainsi je récupère la dernière valeur 0, 5 ou 2

Vous en pensez quoi ? Vous feriez comment ?

Merci

#5 Général » extraire ligne qui suit une valeur 0 dans une table. » 31/08/2020 22:51:31

oles67
Réponses : 3

Bonjour,

J'ai une table1 avec :

date                                 value
01/01/2020 00:00:00        0
01/01/2020 01:00:00        0
01/01/2020 02:00:00        0
01/01/2020 03:00:00        0
01/01/2020 04:00:00        5
01/01/2020 05:00:00        5
01/01/2020 06:00:00        5
01/01/2020 07:00:00        0
01/01/2020 08:00:00        0
01/01/2020 09:00:00        2 
01/01/2020 10:00:00        2
01/01/2020 11:00:00        2
01/01/2020 12:00:00        2

Comment traduire :
Si dernière ligne "value" = 0 alors extrait la dernière ligne sinon extraire la ligne qui suit le dernier "0" de la colonne value.

Dans cet exemple c'est "01/01/2020 09:00:00        2  "



Merci de votre aide.

#6 Re : Général » [résolu] compter les fronts montants de valeur de reférence d'articles » 13/08/2020 16:25:28

rjuju a écrit :

Vous devriez pouvoir faire ça avec des window functions: https://www.postgresql.org/docs/current … indow.html

Bonjour,

désolé, j'ai trouvé une solution. Je vais suivre votre lien pour en apprendre plus sur les windows functions.

Merci

#7 Re : Général » [résolu] compter les fronts montants de valeur de reférence d'articles » 13/08/2020 16:24:20

Finalement j'ai trouvé une solution.
Si vous avez des commentaires sur mon code, je suis preneur.

select 
	evtProduit,
	DateOfDay,
	count(DateOfDay)
from 
	(
	SELECT 
		evtProduit,
		evtdatetime,
		evtAction,
		lag(evtProduit) over(order by evtProduit,evtdatetime) as prev_evtProduit,
		lag(evtAction) over(order by evtProduit,evtdatetime) as prev_evtAction,
	 	to_char(evtdatetime, 'YYYYMMDD') as DateOfDay 
	 	
	FROM 
		public.MaTable
	where
		DATE_PART('year', evtdatetime)='2020'
	Order by 
		evtProduit,
		evtdatetime,
		evtAction 
			asc
	) table2
where
	(evtProduit<>prev_evtProduit and evtProduit>0) 
or 
	(evtAction<>prev_evtAction and evtAction>0) 
or 
	(evtAction>0 and prev_evtAction is null)
	
group by evtProduit, DateOfDay
order by evtProduit, dateofday

Le résultat (j'ai vérifié).
RefProduit    Date    Count
253897    20200105    1
253899    20200105    1
254205    20200105    1
254205    20200430    1
254224    20200105    1
254224    20200121    1
254224    20200122    2
254224    20200123    93
254224    20200124    106
254224    20200126    1
254224    20200206    1
254224    20200207    2
254224    20200430    1
256409    20200105    1
259251    20200105    1
265451    20200105    1
266896    20200101    1

#8 Re : Général » Tester l'existence d'une colonne dans une table » 13/08/2020 13:25:08

Il y a peut-être mieux, mais j'utilise ça :

select count(*) from (
select
    a.schemaname || '.' || a.relname as "tablename",
    b.attname as "columnname"
from pg_stat_user_tables a, pg_attribute b
where a.relid = b.attrelid
    and a.relname like 'Nom de la table'
    and b.attname like 'Nom de la colonne'
order by a.schemaname asc
) as ttable


Si le nom existe dans la table spécifié, ça retourne 1.

A mettre dans un IF then....pour gérer la creation

#9 Général » [résolu] compter les fronts montants de valeur de reférence d'articles » 12/08/2020 14:17:50

oles67
Réponses : 3

Bonjour,

En général j'arrive à mes fin grâce aux recherche sur le forum, mais là, j'ai un problème de noeud au cerveau.
J'aimerai compter le nombre de fois où "valeur" augmente pour chaque article. Et ça, je n'ai pas trouvé comment faire.

La première colonne est la date et l'heure (trié dans l'ordre du plus ancien en premier vers le plus récent en dernier)
La colonne "Ref" c'est la référence article
La "valeur" peut-être de 0 à 9 ou des NON/OUI, FAUX/VRAI (sachant que 0, NON, Faux,... sera toujours 0)
La colonne "incrémente" est uniquement là pour vous montrer quand la valeur doit incrémenté (Voir résultat table plus bas)


Table origine           
Date                            Ref        Valeur    Incremente (pour comprehension)
01/01/2020 01:00:00    Ref1        1        Ref 1 ++
01/01/2020 02:00:00    Ref1        1   
01/01/2020 03:00:00    Ref1        0   
01/01/2020 04:00:00    Ref2        0   
01/01/2020 05:00:00    Ref2        5        Ref 2 ++
01/01/2020 06:00:00    Ref2        0   
01/01/2020 07:00:00    Ref2        5        Ref 2 ++
01/01/2020 08:00:00    Ref2        0   
01/01/2020 08:00:00    Ref1        0   
01/01/2020 10:00:00    Ref1        0   
01/01/2020 11:00:00    Ref2        5        Ref 2 ++
01/01/2020 12:00:00    Ref1        1        Ref 1 ++
01/01/2020 13:00:00    Ref1        1   
01/01/2020 14:00:00    Ref2        5   
01/01/2020 15:00:00    Ref2        5   
01/01/2020 16:00:00    Ref2        0   
01/01/2020 17:00:00    Ref2        0   
01/01/2020 18:00:00    Ref2        0   
01/01/2020 19:00:00    Ref1        0   
01/01/2020 20:00:00    Ref1        1        Ref 1 ++
01/01/2020 21:00:00    Ref2        5        Ref 2 ++
01/01/2020 22:00:00    Ref2        0   
02/01/2020 01:00:00    Ref2        0   
02/01/2020 02:00:00    Ref2        5        Ref 2 ++
02/01/2020 03:00:00    Ref1        0   
02/01/2020 04:00:00    Ref2        0   
02/01/2020 05:00:00    Ref2        5        Ref 2 ++
02/01/2020 06:00:00    Ref2        0   
02/01/2020 07:00:00    Ref1        1        Ref 1 ++
02/01/2020 08:00:00    Ref1        0   
02/01/2020 09:00:00    Ref2        5        Ref 2 ++
02/01/2020 10:00:00    Ref2        0   
02/01/2020 11:00:00    Ref1        1        Ref 1 ++
02/01/2020 12:00:00    Ref1        0   


Table résultat :   
Date                Ref        Count
01/01/2020    Ref1        3
01/01/2020    Ref2        4
02/01/2020    Ref1        2
02/01/2020    Ref2        3



C'est un exemple, l'ordre de tri/période(jour, mois, année) ne devraient pas être un problème.

Merci de votre aide.
Si vous avez des questions, n'hésitez pas.

#10 Re : PL/pgSQL » PG9.6 : Copy Import CSV ERREUR: données manquantes pour la colonne » 28/04/2020 17:14:20

rjuju a écrit :

Il n'y a pas d'alternative côté postgres tout simplement car le fichier est question n'est pas un fichier CSV valide.  Vous devriez pouvoir trouver un ETL capable d'ignorer les lignes invalides si c'est le compromis que vous cherche.

Bonjour,

finalement j'ai traité ça en amont avec powershell et copy ne pose plus de problème.

Merci

#11 PL/pgSQL » PG9.6 : Copy Import CSV ERREUR: données manquantes pour la colonne » 24/04/2020 11:51:35

oles67
Réponses : 2

Bonjour,

j'ai un gros fichiers CSV que je dois importer régulièrement à chaque fois qu'il est modifié.

Ce fichier est généré par un logiciel que je ne maitrise pas. L’éditeur n'est pas pressé car c'est un défaut mineur (il le fera lors de la prochaine grosse mise à jour du logiciel)

Ce programme ajoute des colonnes aux fils des versions, mais les lignes existantes ne sont pas mise à jour sur le nombre de tabulation. Seules les nouvelles lignes sont completes jusqu'à l'ajout de nouvelles colonnes par le logiciel.
En attendant j'aimerai savoir comment contourner le problème.

Exemple fichier CSV (colonne texte et numérique) dans une table avec 4 colonnes datatype TEXT :  ("|" est en faite une tabulation)
ColonneA|colonneB|ColonneC|ColonneD
A1|B1|C1
A2|B2
A3|B3|C3|C4

Avec cet exemple COPY n'est pas content en ligne 1 et 2.
Compliqué de prétraité le CSV en ajoutant les tabulations manquantes car risque de corruptions du format des valeurs numérique et des quotes s'il y en a.



Y a t-il une méthode pour contourner ou bien une alternative pgsql ?

Merci de votre aide.
Cordialement.

#12 ODBC » PGSQL 9.6 : Alternative au driver PostgreSQL35W » 30/09/2019 11:08:33

oles67
Réponses : 1

Bonjour,

j'ai plusieurs machines à ma disposition.
La plupart admin.
Notre SSI est plutôt très lent dans la demande d'installation du driver pgsql pour permettre aux utilisateurs d’accéder aux données avec excel. (c'est au cas par cas)
Pour ma question, on va considérer que le client est non-admin et que le serveur est admin :

J'aimerai savoir s'il existe une alternative à l'installation de ce driver pgsql du côté client (vba, dll,....), ou du coté serveur (passerelle pgsql ->sql server, oracle, msdatashape, Search,...)

Actuellement, pour palier le problème, je passe par des fichiers CSV, mais c'est excessivement lourd à cause de la quantité de données à traiter (et créer des tables intermédiaires, c'est encore pire à gérer)

Merci
cordialement.

#13 Re : PSQL » requete : 2 tables avec période enregistrement différente » 02/09/2019 14:25:18

gleu a écrit :

Le plus simple est d'utiliser generate_series pour créer les intervalles de date et de joindre le résultat aux autres tables avec un LEFT JOIN.


Ça solutionne une partie du problème.
Super merci.

#14 PSQL » requete : 2 tables avec période enregistrement différente » 02/09/2019 11:33:20

oles67
Réponses : 2

Bonjour,

j'ai 2 tables. La première (T1) à une valeur enregistrée toutes les 15mn, la secondes (T2), toutes les heures.

Lorsque je "join" les 2 table dans une requête, j'ai des trous dans la seconde car il manque les valeurs intermediaire.

Comment faire pour qu'à partir de çà :

Table T1

DT			T1
01/09/2019 00:00	10
01/09/2019 00:15	30
01/09/2019 00:30	5
01/09/2019 00:45	22
01/09/2019 01:00	89
01/09/2019 01:15	54
01/09/2019 01:30	66
01/09/2019 01:45	21
01/09/2019 02:00	203
01/09/2019 02:15	0
01/09/2019 02:30	25
01/09/2019 02:45	15
01/09/2019 03:00	68
01/09/2019 03:15	49
01/09/2019 03:30	95
01/09/2019 03:45	87

et T2

DT			T2
01/09/2019 00:00	12
01/09/2019 01:00	55
01/09/2019 02:00	41
01/09/2019 03:00	15

J'arrive à ça :

DT			T1	T2
01/09/2019 00:00	10	12
01/09/2019 00:15	30	12
01/09/2019 00:30	5	12
01/09/2019 00:45	22	12
01/09/2019 01:00	89	55
01/09/2019 01:15	54	55
01/09/2019 01:30	66	55
01/09/2019 01:45	21	55
01/09/2019 02:00	203	41
01/09/2019 02:15	0	41
01/09/2019 02:30	25	41
01/09/2019 02:45	15	41
01/09/2019 03:00	68	15
01/09/2019 03:15	49	15
01/09/2019 03:30	95	15
01/09/2019 03:45	87	15

Je précise, que la plage de date peut être sur plusieurs années.


Merci

cordialement.

#15 Re : PL/pgSQL » Timestap without time zone » 09/08/2019 20:00:03

gleu a écrit :

Ce n'est tout simplement pas possible. La colonne est déclarée sans fuseau horaire, donc toute configuration sur les fuseaux horaires ne la concernera pas.

Donc soit vous modifiez le type de la colonne pour que PG gère le fuseau horaire, soit vous modifiez les requêtes pour ajouter le "interval +2h". La première solution est de loin la plus intelligente.

Ce sera la 2e car la première n'est pas possible.
Merci.

#16 Re : PL/pgSQL » Timestap without time zone » 09/08/2019 12:20:15

gleu a écrit :

Si l'application stocke les données dans une colonne de type Time without timezone, vous perdez toute information de fuseau horaire. De ce fait, PostgreSQL ne fera aucun calcul de changement d'horaire été/hiver.

Ok.
D'après vous, qu'elle est la meilleure solution pour que de manière implicite toutes les requêtes se fassent en without time.zone et retourne le résultat avec un interval +2h. Par exemple quelqu'un demande les valeurs de 00:00 à 24:00 et que ça lui retourne les valeurs de 00:00 à 24:00 et non pas de 22:00 à 22:00 ?
L'utilisateur final, n'a pas connaissance du without time zone et je peux pas intercepter ses requêtes.

#17 Re : PL/pgSQL » Timestap without time zone » 09/08/2019 12:18:33

gleu a écrit :

Si l'application stocke les données dans une colonne de type Time without timezone, vous perdez toute information de fuseau horaire. De ce fait, PostgreSQL ne fera aucun calcul de changement d'horaire été/hiver.

Ok.
D'après vous, qu'elle est la meilleure solution pour que de manière implicite toutes les requêtes se fassent en without time.zone et retourne le résultat avec un interval +2h. Par exemple quelqu'un demande les valeurs de 00:00 à 24:00 et que ça lui retourne les valeurs de 00:00 à 24:00 et non pas de 22:00 à 22:00 ?
L'utilisateur final, n'a pas connaissance du without time zone et je peux pas intercepter ses requêtes.

#18 PL/pgSQL » Timestap without time zone » 09/08/2019 09:03:24

oles67
Réponses : 5

Bonjour,

j'ai une base (pg 9.6) alimentée par une application qui stock un champ date en Time without time zone.
Pour chaque requête, je dois systématiquement ajouter "+ interval '02:00:00'"

Je ne sais pas si c'est la bonne méthode et si c'est compatible changement d'horaire été/hiver parce que la base n'existe que depuis le mois de mai 2019.


Pour le moment, je suis en phase de prise en main et j'ai mis un peu le bazar partout.
Je compte de toute façon réinstaller pgsql avec paramètre par défaut et réinjecter les données depuis l'application.

Y-a-t-il une solution globale en se basant l'OS du client pour ne plus avoir à y penser à chaque requête ?

Merci de votre aide

Cordialement

show timezone : 
-------> Europe/Paris

SELECT current_setting('TIMEZONE');
-------> Europe/Paris

postgresql.conf : 
Timezone = 'GMT'
log_timezone = 'Europe/Brussels'

SELECT EXTRACT(TIMEZONE FROM now())/3600.0;
-------> 2

select now()::timestamptz;
select now()::time;
-------> me donne l'heure de ma montre

select now() at time zone 'gmt' at time zone 'Europe/Paris'
-------> me donne 2H de moins que sur ma montre.

#19 Re : pgAdmin4 » pgadmin4 : interface vide sans aucun onglet » 08/08/2019 11:39:42

Bonjour,

je vois que vous utilisez InternetExplorer/edge
J'avais pas mal de problèmes avec.
En passant sur firefox, ça roule tout seul.
Pas testé sur Chrome, ni Opéra.
Il faut configurer PGAdmin (trayicon) pour qu'il utilise Firefox ou autre.

Si ça ne change rien, réinstallez PGadmin.

cordialement.

#20 pgAdmin4 » Personnaliser treeview tables et fonctions » 07/08/2019 10:10:32

oles67
Réponses : 0

Bonjour,

avec PGadmin4.5, est-il possible de personnaliser l'arborescence de gauche MaBase.Schema.public.tables et MaBase.Schema.public.fonctions.
Je m'explique :
J'ai une liste de tables et fonctions très longue. La majorité est générée par une application externe que je ne peux pas modifier.
Dans cette liste sont noyées mes tables et fonctions. Certains en exploitation et d'autre en développement.

Pour clarifier tout ça, j'aimerai savoir s'il est possible de créer des sous-branches comme par exemple :
MaBase.Schema.public.fonctions (pour celles de l'application)
MaBase.Schema.public.fonctions.Exploit (mes fonctions en exploitation)
MaBase.Schema.public.fonctions.Dev (mes fonctions en développement)

et que ça reste dans "public"

Merci de votre aide.

Cordialement.

#22 Général » PGSQL 9.6 : Limitation à 1600 colonnes. » 06/08/2019 16:21:07

oles67
Réponses : 2

Bonjour,

J'ai 2.000 appareils qui me renvoi des valeurs toutes les heures avec une rétention de 365 jours (8760 valeurs par appareil)
A terme ce sera 10.000 appareils

Je travaille depuis des années avec excel et ne suis pas impacté par cette limite de 1600 (env 16384*1000000)

Ma question :
Comment vous y prendriez-vous pour gérer une table de 10.000*8.760 en "double précision" sachant que la limite est de 1.600 ?

multiplier le nombre de tables ?
Dans ce cas, si je fais des jointures pour extraire des données et les traiter, ne vais-je pas retomber sur cette limite ?
Sans compter le nombre de table à gérer.

Passer par un array ?
Une colonne par mois avec 28 à 31 valeurs par colonne ?
Niveau performances, pas trop lourd ?

Une autre idée ?

Merci pour vos lumières.

Cordialement.


PS : est-ce que cette limite sera augmenter un jour sans avoir à bricoler le source ?

#23 Re : Général » Format Export fichier XML » 01/08/2019 11:07:36

duple a écrit :

Salut,
Si çà peut aider, existe un logiciel "Navicat" qui permet de se connecter sur plusieurs SGBD, tel que Oracle, PG, Mysql, ... et on peut exécuter des requêtes dedans, on peut également exporter les données sous plusieurs format : le xml y compris. Tu peux même paramétrer çà pour que çà se lance en tache planifiée, super le soft non smile

Merci mais j'ai une préférence pour le GNU.

#24 PL/pgSQL » Select between date : problème avec 1ere valeur vide » 29/07/2019 12:48:47

oles67
Réponses : 0

Bonjour,

j'ai une table avec un champ "heure", "valeur1" et "Etat"
"Valeur1" est enregistré toutes les heures.
"Etat" est uniquement sur événement. (Je ne peux modifier la période)
J'aimerai extraire les données entre 11:00:00 et 14:00:00 avec un where between


Ca, c'est ce qui est enregistré :

Heure	Valeur1	Etat
09:00:00	10	Marche
10:00:00	12	-
11:00:00	9	-
12:00:00	5	Arret
13:00:00	15	Marche
14:00:00	16	-

et ça, ce que j'aimerai avoir :

Heure	Valeur1	Etat
11:00:00	9	Marche
12:00:00	5	Arret
13:00:00	15	Marche
14:00:00	16	Marche

Peux-t-on déroger la date de début pour récupérer la dernière valeur "Etat" pour ne pas avoir de ligne vide à la première valeur ?
Sinon, y a t-il une solution ?

Merci de vos lumières.

#25 Re : pgAdmin4 » saturation iexplore.exe » 23/07/2019 12:47:16

gleu a écrit :

J'aime beaucoup DBeaver. Simple, rapide et évoluant rapidement.

Merci je vais jeter un oeil.

Pied de page des forums

Propulsé par FluxBB