Vous n'êtes pas identifié(e).
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.
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.
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
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
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.
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
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
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
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 ?
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
Merci mais j'ai une préférence pour le GNU.
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.
J'aime beaucoup DBeaver. Simple, rapide et évoluant rapidement.
Merci je vais jeter un oeil.