Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#51 Re : Général » Difficulté avec ALTER TABLE ALTER COLUMN » 22/12/2011 11:05:17
rjuju a raison, il y a plusieurs choses dans votre message :
1. erreur de frappe sur "total"
2. notion de relation : une relation c'est une table (http://fr.wikipedia.org/wiki/Bases_de_d … tionnelles). PostgreSQL utilise le terme relation, qui est plus proche de l'algèbre relationnelle, alors que dans la vie "courante" on dit plutôt table.
3. on ne stocke généralement pas les résultats de calculs dans une base de données relationnelle. Le principe est justement de stocker uniquement les informations nécessaires pour pouvoir reconstituer à partir de celles-ci tous les résultats dont on peut avoir besoin. C'est lorsque vous ferez une requête que vous calculerez le total.
4. hier j'ai lu (ici : http://archives.postgresql.org/pgsql-jd … 00117.php) que le type money n'était pas une bonne idée (NUMERIC est moins dangereux et moins pénible à utiliser). Voir aussi ici : http://forums.postgresql.fr/viewtopic.php?id=1130 où la conclusion est la même.
5. l'ordre ALTER TABLE ne va calculer la valeur de total qu'au moment où vous le faites. Il ne positionne pas la valeur par défaut (je ne sais pas si c'était clair pour vous). Un ordre alter table c'est un ordre de modification de structure : pour diverses raisons, ce n'est pas ce qu'il faut utiliser pour mettre à jour la colonne total (sauf en one-shot pour faire une évolution de schéma...). Comme précise rjuju, si vous voulez simplifier le travail des développeurs, vous pouvez faire une vue.
Flo
#52 Re : Migration » Garder INTEGER comme type boolean » 21/12/2011 18:47:58
Salut gleu,
C'est un problème souvent rencontré lors des migrations j'ai l'impression (à partir de bases de données qui ne connaissent pas le type booléen, quel dommage...).
Du coup, on est obligé de réécrire toutes les requêtes.
Y'a pas de truc ou d'astuce alors?
(il me semble que le problème c'est que le driver JDBC d'Oracle convertit automatiquement les booléens en entiers, d'où les problèmes de migration ensuite. À vérifier)
#53 Re : PL/pgSQL » Recuperer un serail lors d'une transaction » 21/12/2011 11:08:02
Dans l'insert de la première table, tu peux utiliser la clause RETURNING :
#54 Événements » PGDay 2012 : comité de programme » 06/12/2011 21:15:25
- flo
- Réponses : 2
Bonjour,
L'association PostgreSQLfr.org organisera en 2012 une journée de conférences à destination des développeurs et des utilisateurs de PostgreSQL. Cette journée a pour nom : PGDay.
Actuellement, l'association est à la recherche de volontaires pour participer au comité de
programme du PGDay 2012.
Il s'agira de sélectionner les interventions et d'établir le programme
des conférences.
La règle est de ne pas avoir plus d'une personne de chaque société dans le comité.
Si vous utilisez PostgreSQL, vous êtes qualifié pour participer!
Merci,
Florence Cousin.
#55 Re : Général » trouver une bourse de formation en administration de la bdd postgres » 10/11/2011 10:26:18
Vous êtes dans quelle situation? Vous travaillez, vous êtes au chômage, étudiant, autre? Vous habitez Madagascar ou en France, ou ailleurs? La réponse dépend de tout cela....
En France, pour les chômeurs, il faut se renseigner auprès du Pôle Emploi, pour les salariés, du Fongecif. Pour les autres, je ne sais pas.
#56 Re : Général » transformer un tableau en champs » 07/10/2011 15:50:18
À quoi correspondent les 2 premières lignes? Est-ce que ce sont des informations que vous souhaitez conserver dans votre base, ou non? (il semblerait que non, vu que vous supprimer les premières lignes?)
Si non, il serait certainement plus simple de supprimer ces lignes du fichier avant import? Et ensuite on peut l'importer avec COPY directement.
Si oui, alors pourriez-vous expliquer ce que vous souhaitez en sortie? (structure de la ou des tables à la fin du traitement).
#57 Re : Général » Optimisation d'un id de table et l'insertion d'une nouvelle ligne » 30/09/2011 16:03:49
Certaines valeurs auront l'air d'être sautées, c'est normal dans le fonctionnement de la séquence. Tout autre moyen ralentira forcément l'ajout de lignes (que ce soit par un trigger, par un code applicatif, etc.) et ne sera pas forcément exempt de bugs.
Je vais aller encore plus loin dans ce sens : pourquoi vouloir une série sans trous? Je ne connais guère qu'un cas où cela est nécessaire, et il est rare, c'est celui des numéros de facture (pour des raisons légales). Mais on parle là d'une clé qui a une signification fonctionnelle, ce qui ne semble pas être le cas de ce que vous cherchez à faire.
Pour tous les autres cas, serial ou bigserial.
NB : attention la solution de votre programme en php ne fonctionne pas à cause de la concurrence. 2 éléments de la table peuvent se retrouver avec le même id (enfin je suppose que vous aurez défini l'id comme clé primaire, donc vous aurez sans doute plutôt une erreur de violation de l'unicité)
#58 Re : Général » Creer une valeur à partir de plusieurs valeurs » 27/09/2011 15:31:19
Pourquoi ne faites-vous pas cela dans l'application? (lorsque l'utilisateur saisit une nouvelle station d'étude). C'est beaucoup plus simple.
Pourquoi mettre tout dans la même table? J'imagine qu'il pourrait y avoir une sorte de table de référence avec la liste des codes de lieu dit. Une autre table contiendrait les stations d'étude (une station correspond à un lieu dit + une altitude).
Si j'ai bien compris votre besoin...
Je suppose que vous êtes débutant en bases de données?
#59 Re : Optimisation » Substituer un "vacuum full" par un truncate? » 09/09/2011 16:13:52
Pourquoi faire un vacuum full au lieu d'un vacuum ?
Sinon, déjà, pour faire un truncate de la table puis un réimport des données, il faut qu'aucun utilisateur n'utilise la table à ce moment-là...
#60 Re : Général » Left join ambigu » 24/08/2011 11:04:23
J'ai du mal aussi.
Alors j'ai fait le test :
cela fait un produit cartésien, sauf que pour les lignes où la condition n'est pas respectée, on n'a rien dans les colonnes de la table "de droite".
Exemple :
test=# select * from table1 left join table2 on table1.valeurs1 = 'b';
idtable1 | valeurs1 | idtable2 | valeur2
----------+----------+----------+---------
1 | a | |
2 | b | 1 | 1
2 | b | 2 | 2
2 | b | 3 | 3
2 | b | 4 | 4
3 | c | |
4 | d | |
5 | e | |
6 | f | |
(9 lignes)
J'avoue que je ne vois pas l'intérêt du truc, comme cela.
#61 Re : Optimisation » Temps de réponse et optimisation » 25/07/2011 11:19:31
En ce qui concerne les coalesce dans les conditions, il s'agit de ramener des informations d'une table x en fonction de la valeur de la clé étrangère d'une table a ou b.
Sachant que la clé étrangère n'est pas systématique en b mais l'est en a.
Je ne comprends toujours pas à quel besoin cela répond. Je ne comprends pas sans un exemple.
Certaines des vues font des calculs ( group by, having, disctinct...),ce qui me parait pour le coup difficilement réintégrable dans une seule et même requête.
Raison de plus pour décortiquer cela, et les réintégrer dans la requête (au moins pour l 'analyse)
Je ne vois pas pour le moment de porte de sortie...
J'en vois 2 :
Faire des extractions planifiées (vos utilisateurs ont-ils vraiment besoin de faire des extractions à la demande? peuvent-ils se contenter d'une extraction par jour? heure?). J'ai connu le cas d'un utilisateur m'ayant affirmé avoir besoin d'une vision instantanée pour des statistiques, alors que les batchs passaient 1 fois par nuit, et que les modifications en journée étaient rarissimes (en gros seulement en cas de corruption des données les administrateurs pouvaient modifier une ligne).
Optimiser la requête. Mais en effet, il vous faudra connaître bien le schéma, et ce que fait la requête.
#62 Re : Optimisation » Temps de réponse et optimisation » 25/07/2011 10:10:16
Que vous soyez avec des vues ou non ne change rien à l'optimisation, car le moteur "déplie" les vues en faisant une transformation au niveau table.
Cependant il est possible qu'en intégrant vos vues à votre requête vous vous rendiez compte qu'une simplification est possible. C'est donc une bonne pratique que de réintégrer le code SQL des vues dans les requêtes lorsque ces dernières sont complexes.A +
C'est exactement ce que je voulais dire . Il est assez fréquent qu'on se rende compte, en remplaçant les vues par leur requête, que des tables sont inutilement jointes plusieurs fois. C'est en cela que je disais qu'il faut faire attention quand on joint des vues et des tables.
D'autre part, l'utilisation de COALESCE comme condition de jointure me laisse penser qu'il y a un problème dans le modèle de données, ou dans la requête elle-même. Je n'ai jamais vu de cas où on avait besoin d'une telle chose, même dans des cas très tordus.
#63 Re : Général » Changer le format de la date » 22/07/2011 17:46:22
comment la récupérez-vous?
#64 Re : Général » Changer le format de la date » 22/07/2011 17:30:56
La date n'est stockée sous aucun format. C'est juste une date.
http://docs.postgresql.fr/9.1/datatype-datetime.html
Afin que nous puissions vous aider, comment insérez-vous la date dans la base (outil, code?), et comment la récupérez-vous?
#65 Re : Optimisation » Temps de réponse et optimisation » 22/07/2011 15:47:18
-> Flo :
Les COALESCE dans les jointures sont utilisés car on fait une jointure sur une table, mais avec une valeur provenant de deux tables jointes précédemment et ayant potentiellement la valeur à NULL.
Cela mériterait sans doute d'être remplacé par une jointure externe...
#66 Re : Optimisation » Temps de réponse et optimisation » 22/07/2011 15:16:38
Je vous conseille de travailler d'abord sur la requête avant de vous pencher sur les paramètres. Il y a très probablement des améliorations importantes à faire. Voir ce que j'ai écrit 1 min avant votre question (les messages se sont croisés sans doute)
#67 Re : Optimisation » Temps de réponse et optimisation » 22/07/2011 15:05:29
dont 2 sur des vues?
Ca c'est dangereux. Regardez la définition des vues. Faire des jointures sur des vues, c'est s'exposer à joindre inutilement plusieurs fois les mêmes tables (si la vue est elle-même constituée de jointures). Réécrivez la requête pour ne pas avoir de jointures inutiles, si c'est le cas.
des COALESCE dans les jointures
Bigre... ne pouvez-vous vraiment pas faire autrement?
Pourquoi avez-vous besoin de faire des coalesce DANS les jointures? Donnez-nous un exemple avec une explication : il y a peut-être plus simple et plus efficace.
Ce que je n'arrive toujours pas saisir c'est pourquoi l'ordre des joins a un impact alors que le explain et l'analyse sont là pour çà ?
Gleu a raison, cela n'a rien d'étonnant (faites le calcul du nombre de permutations possibles sur 21 tables...)
#68 Re : Général » Dupliquer un enregistrement avec un INSERT » 21/07/2011 17:21:47
Ah gleu c'est malin, je n'y avais pas pensé . Par contre, il n'est pas possible de faire cela de manière générique, je suppose? (la demande d'Olivier précise qu'il voudrait ne pas saisir les colonnes).
Sinon, Olivier, je trouve cette demande très étrange. Je ne comprends pas quel sens cela peut avoir. Pourriez-vous nous l'expliquer, s'il vous plaît? Si l'on a deux enregistrements avec des clés différentes, la logique relationnelle veut justement que les lignes correspondent à des données différentes. Avoir 2 lignes de même données sauf la clé autogénérée, c'est ce que l'on cherche normalement à éviter.
#69 Re : Optimisation » Temps de réponse et optimisation » 21/07/2011 17:11:08
Cela ne va très probablement pas être possible de vous aider sans le texte de la requête, la définition précise des tables, et le plan d'exécution.
Que pourrait-on donner comme piste sans information? Il y a tellement de possibilités. Par expérience (la mienne, donc c'est plus côté développement), les causes principales de problèmes sont :
un mauvais schéma de données,
une requête inutilement complexe, voire fausse,
un développeur qui essaie d'optimiser alors qu'il n'a pas suffisemment d'expérience,
une base beaucoup trop sollicitée,
une requête de type "data mining" que l'on souhaite instantanée...
Je ne pense pas hélas pour vous que ces pistes vous aident. Les "recettes de cuisine" ne marchent généralement pas.
Si la requête est si imposante (mais l'est-elle vraiment?), peut-être est-elle inutilement complexe? (ce sont des choses qui arrivent). Donnez-la tout de même, en expliquant ce qu'elle essaie de faire. On pourra peut-être vous aider? (à la réécrire si c'est possible et souhaitable, ou à l'optimiser)
#70 Re : Optimisation » Mauvais plan d'exec » 21/07/2011 16:35:38
gleu, il me semble aussi que s'il existe un index sur (A,B), il ne sert à rien de créer un index sur A. Or c'est ce que tu proposes : n'es-tu donc pas d'accord avec Cédric? pourquoi?
(bon, si c'est trop long ou hors sujet, il faudra peut-être reporter sur une autre discussion)
#71 Re : Général » Performance d'une base / regex sur texte » 28/06/2011 08:20:17
Sauf que vous dites : "sur lesquels j'applique souvent des regex pour retrouver des phrases."
Et la clairement ça va être mauvais... enfin si c'est bien sur l'ensemble de la table que vous cherchez. Parce que là encore ce n'est pas clair dans votre explication. Si vous êtes certains de toujours rechercher sur la clé primaire, c'est différent. Mais dans ce cas, je ne comprends pas votre question initiale. Votre dernier post et le premier me semblent absolument contradictoires (d'où j'en déduis qu'il y en a 1 que je n'ai pas compris, mais lequel?)
#72 Re : Général » Performance d'une base / regex sur texte » 27/06/2011 22:27:42
A mon avis, votre solution (tout mettre sur la même ligne) est idéale... dans un fichier texte. Dans une base de données relationnelles, certainement pas... En fait, je suis tout à fait d'accord avec gleu.
Vous faites aussi une erreur en supposant que les données sont triées dans la table. Ce n'est pas comme cela que ça fonctionne dans une base de données. Les index sont disposés en général suivant un arbre balancé. Les données... euh je ne suis pas assez calée pour expliquer comment c'est dans PostgreSQL, mais ce qu'il faut retenir, c'est qu'on s'en moque éperdument (en tant que développeur, je veux dire, moi ce qui m'intéresse c'est que cela fonctionne ). Donc ajouter des données n'est pas un problème, ce n'est pas comme dans un beau fichier trié (où là c'est vite le bazar).
Donc (tant pis si je me répète), écoutez gleu, il a raison Cela ne veut pas dire que vous n'aurez pas de souci, mais c'est sans doute la meilleure solution. Et puis 50 millions de lignes, de nos jours, c'est presque courant...
#73 Re : Général » Performance d'une base / regex sur texte » 27/06/2011 18:26:11
Et si vous nous expliquiez vraiment ce que vous voulez faire? Je n'ai toujours pas compris quel était le but de l'énorme texte dont vous parliez au début : pourquoi ne pouvez-vous pas faire des tables en forme normale? Pourquoi chaque compte client a-t-il des informations de structure différente? Chaque client possède une liste, d'accord, mais une liste de QUOI?
Il y a peut-être une solution simple à votre problème, pour peu que vous l'exprimiez complètement.
#74 Re : Général » Formulation d'une contrainte stockée dans une colonne TEXT » 20/06/2011 16:53:31
La technique des métadonnées fonctionne, mais pas sur de gros volumes de données. Pour stocker quelques paramètres d'une application (100-1000 lignes peut-être), c'est parfait. Pour les traitements métier d'une application importante, c'est très fortement déconseillé (vu des applications complètement inutilisables à cause de cela).
Après, c'est vous qui voyez en fonction de vos besoins, et de vos contraintes.
La cause de cela, à mon avis, c'est qu'on peut difficilement concilier flexibilité extrème du modèle de données (laisser l'utilisateur ajouter des colonnes au besoin...), performances, robustesse, facilité de développement (utiliser une base de données pour éviter d'écrire votre système de stockage à la main). Il faut savoir quels paramètres privilégier, et dans le cas de l'utilisation d'un SGBDR, on a déjà la robustesse, la facilité de développement.
Bon courage.
(on peut peut-être en rester là sur le hors sujet, non?)
#75 Re : Installation » installation » 14/06/2011 16:34:49
Le port 5432 est peut-être utilisé par un autre programme. Vérifiez...