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

#76 Re : PHP » Récupérer l'ID dernier enregistrement » 08/06/2011 11:30:27

flo

c'est titre, ou titre_doc, le nom de la colonne?
Sinon, quelle sont les erreurs que vous obtenez? (je ne  comprends pas ce que veut dire "la requête échoue")

#77 Re : Général » Update de tables Oracle vers PostgreSQL » 07/06/2011 17:13:17

flo

Sinon il y a toujours la solution rustique d'avoir 2 programmes "maison" :
1 programme qui lit la base Oracle et qui export dans un fichier les enregistrements (soit tout, soit juste ce qui a bougé, en fonction des volumétries respectives). Par exemple un fichier de type csv.
1 programme qui lit et charge le fichier et qui met à jour la base Postgresql (si le fichier est juste un diff, c'est simple, il suffit d'ajouter/mettre à jour les nouveaux enregistrements, sinon, charger les données dans une table temporaire, et faire les comparaisons dans la base Postgres). Par exemple un chargement avec COPY.

Mais en gros le problème principal est toujours le même : repérer efficacement ce qui a bougé.

Ce type de solution marche bien, et est simple à mettre en oeuvre si la structure des 2 bases est assez proche (en gros si chaque table de départ correspond à une table à l'arrivée, et réciproquement). Plus les modèles sont différents, plus c'est compliqué.
L'autre intérêt c'est de pouvoir faire des mécanismes de reprise en cas d'erreur du programme de chargement dans PG (le fichier est toujours dispo pour être chargé plus tard, une fois le programme de chargement corrigé).

On peut le faire en Java, par exemple. Ainsi il est facile de faire, soit 1 programme qui fait tout et se connecte aux 2 bases, soit 2 programmes, ou 3...

#78 Re : Optimisation » Durée d'exécution d'une requête » 31/05/2011 17:54:47

flo

Déjà il ne peut utiliser aucun index... est-ce que c'est normal?
Il n'y a en particulier pas d'index sur keep_persohoraires.numero_tec. Peut-être qu'avec cet index il pourrait utiliser un plan différent?

#79 Re : Général » foreign key sur une vue : par trigger, par vues matérialisées, ... ? » 31/05/2011 14:50:00

flo

Ah non, le moteur PG n'est pas ingres. C'est juste le même créateur, au départ.
Quelqu'un a déjà fait ce test sur PostgreSQL, sinon?

#80 Re : PgAdmin3 » Importation fichier csv. » 26/05/2011 13:45:19

flo

Comme a dit Marc (vos messages se sont peut-être croisés), cela n'a pas d'importance pour votre cas.
Par contre, si votre fichier s'appelle sim.csv, donnez bien le nom avec l'extension (par exemple C:/sim.csv). Ce sera le cas pour toute commande, même sous Windows.

#81 Re : Java » Problemes lecture/ecriture getBytes et bytea avec postgresql » 19/05/2011 11:28:56

flo

Sinon, le lien fonctionne, vous avez des restrictions pour l 'accès au web?

Ici : http://java.developpez.com/faq/jdbc/?pa … nfosDriver il y a un bout de code pour récupérer les informations du Driver. Pourriez-vous l'exécuter?

Merci.

#82 Re : Java » Problemes lecture/ecriture getBytes et bytea avec postgresql » 19/05/2011 11:07:29

flo

Il n'y a pas d'autre driver Postgresql dans le Classpath?

#84 Re : Java » Problemes lecture/ecriture getBytes et bytea avec postgresql » 18/05/2011 20:10:45

flo

Pourriez-vous mettre un peu plus de code que juste ces 2 lignes (on ne sait jamais...)? Notamment les lignes avant l'insertion, et avant la récupération en base (la requête, etc...)

Et quelle version de la base de données, quelle version du driver JDBC?

#85 Re : Général » Novice - Comment créer deux tables mères? » 03/05/2011 21:02:46

flo

Bonsoir,

Ce que vous cherchez à faire n'a rien à voir avec l'héritage, il vaudrait mieux éviter de parler de tables mères ou filles.
Si j'ai bien compris, vous voulez faire une relation n-n entre film et cinéma.
Pour cela, il faut une 3ème table, que l'on appelle table de relation.

Avec une table cinema (id_cinema, ....), une table film (id_film, ...) et une table passe_dans (id_film, id_cinema, ....)
La clé primaire de la table passe_dans sera sur les 2 colonnes (id_film, id_cinema). Et il y a 2 clés étrangères : id_film vers la colonne id_film de la table film, et id_cinema vers la colonne id_cinema de la table cinema.

#86 Re : Publications » Besoin de recommandations pour l'achat de e-books sur PostgreSQL 9 » 12/04/2011 22:16:10

flo

J'ajouterai juste que le manuel existe aussi en Français.
Pour les développeurs, si c'est du JEE, il y a peu de choses à savoir (les types de données et notamment l'utilisation du Serial, la gestion des transactions et des niveaux d'isolation, éventuellement la gestion des droits, l'outil COPY, psql pour les personnes plus spécifiquement en charge des données).
Les 2 premiers livres que tu cites ont l'air bien pour des DBAs, mais pas du tout pour des développeurs. Je ne pense pas qu'il existe quelque chose de ce niveau pour développeurs (mais encore une fois, pour du JEE, pas besoin d'un livre de 300 pages, sauf s'ils ne connaissent pas du tout les bases de données relationnelles).
Je conseillerai de leur faire lire la doc d'introduction sur la première page du site (c'est d'ailleurs pour cet usage que je l'ai écrite, car je n'ai rien trouvé pour des développeurs), plus les chapitres de la documentation qui les concernent en priorité ma liste ci-dessus).

#87 Re : Java » [JDBC] Soupçon de fuite memoire » 07/04/2011 10:17:16

flo

Vous utilisez plusieurs fois le même resultset, sans le fermer. Normalement on n'utilise un resultset que pour 1 requête( 1 seul execute ou executeQuery)

#88 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 14:12:21

flo

SQLPro, je pense que l'entité famille est inutile dans votre modèle : elle ne représente rien (les relations familiales sont portées par le bas du schéma).
Sa seule fonction est de remplacer une chaîne de caractères par une clé technique... C'est probablement aussi inutile que de faire la même chose sur les prénoms, ou sur les dates de naissance. Quant à l'orthographe du nom, il est très probable qu'une erreur soit faite sur le nom d'une personne : par exemple 'Dupont' à la place de 'Dupond'. Et lorsqu'on corrige le nom de Jean, on ne veut pas modifier du même coup le nom de Jacques, qui doit rester 'Dupont'. Je ne parle même pas des noms étrangers qui sont transcrits différemment selon l'officier d'Etat Civil...
Enfin bref cela complique seulement les choses (travail de conception et de développement plus compliqué et plus risqué, jointures supplémentaires...). Pour quel gain?
De plus, on n'a pas besoin de cela pour être en 3ème forme normale : L'attribut nom dépend bien uniquement de la personne.

#89 Re : Général » Utilisation index » 22/03/2011 13:00:28

flo

Pourriez-vous également donner l'ordre exact de création de l'index?

#90 Re : Général » Pb dans un batch de sauvegarde » 15/02/2011 10:27:47

flo

Ce n'est pas un peu risqué de modifier le pg_hba.conf afin que le mot de passe ne soit pas demandé?
(à moins que ce soit juste une base de test ou de développement, ce qui me parait peu probable dans le cas de ninja21a...)

#91 Re : Général » pg_dump : la base de données n'existe pas » 10/02/2011 12:31:31

flo

Pas de problème de casse? (es-tu certain que le nom est en majuscules?)
comment vous connectez-vous d'habitude?

#92 Re : Installation » Installation Postgresql 8.4.4.1 » 09/02/2011 10:32:58

flo

Pour faire avancer le schmilblick : quel système d'exploitation? Comment avez-vous installé? (compilation, installeur? il y a, à part pour Windows, plusieurs manières de le faire).

Flo

#93 Re : Java » GlassFish v2.11 - DataSource - JNDI » 07/02/2011 22:21:30

flo

À mon avis, l'exemple que vous citez est surtout destiné aux développeurs de pool d'application... ou pour comprendre comment cela fonctionne ( je m'en sers en formation, parce qu'on forme des débutants à Java, et que c'est un peu hard de leur montrer JNDI d'emblée...)

Je ne connais pas Glassfish, et je ne sais pas par coeur comment on utilise JNDI (surtout à cette heure-ci...), par contre ce qui est sûr c'est que c'est (ou ça devrait être ) dans la doc du serveur d'application (ou dans les tutoriels de Sun/Oracle), mais pas dans les docs Postgresql (là on est vraiment sur une problèmatique JEE, pas spécifique Postgresql). Si mes souvenirs sont exacts, la seule chose spécifique au moteur de base de données, c'est la forme de l'URL à renseigner.
Pour PostgreSQL, L'URL a une de ces formes :
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database

C'est décrit ici :
http://jdbc.postgresql.org/documentatio … nnect.html (pour la 8.3, mais ça m'étonnerait que cela ait changé)

Bonne recherche. N'hésitez pas à revenir si vous avez d'autres soucis spécifiques à Postgresql.

#94 Re : Général » Faire "copy from csv" qui effectue un "insert or ignore + update" » 07/02/2011 12:50:45

flo

Et quand on fait le truncate, est-ce que la séquence repart au début? ou faudra-t-il la réinitialiser manuellement?

#95 Re : Général » Faire "copy from csv" qui effectue un "insert or ignore + update" » 07/02/2011 12:00:52

flo

Ah oui effectivement, si on parle de la même chose il y a un gros souci.
Une solution serait peut-être de calculer les différences en amont, dans le batch, à partir des fichiers texte, pour ne charger que la différence (en gardant à chaque fois l'historique de l'ancien fichier). C'est plutôt de cette manière que j'aurai essayé de faire. Mais sous Windows, je ne sais pas faire...
Dans ce cas, fonctionnellement, on fait confiance au fichier texte pour ne pas envoyer de doublon.

Sinon, il faudrait un identifiant supplémentaire dans la table à charger (la table définitive), et dans la table temporaire.
Chaque soir, faire un truncate de la table temporaire, copier les données dans la table temporaire en donnant un numéro de séquence (premier enregistrement : 1, 2ème : 2, etc...). (est-ce que copy sait faire cela?)
Ensuite, ne charger dans la table finale que les lignes dont l'identifiant n'est pas encore dans la table finale.

#96 Re : Optimisation » Requête anormalement longue » 05/02/2011 08:48:08

flo
Redge a écrit :

A noter que quand j'exécute la requête sur la même base et donc meme contenu mais à partir de pgadmin, l'exécution est instantanée.

Curieux. Vous n'avez pas de base de test ou de pré-production pour faire des tests plus approfondis? À moins que vous ne parliez déjà d'une telle base?
Les seules raisons que je vois pour cela sont :
1. vous ne passez pas les mêmes paramètres que votre application.
2. lorsque vous effectuez la requête "à la main", les conditions sont différentes : données en cache, statistiques plus à jour...

Redge a écrit :

Voici le resultat du explain analyse sur la requete:

"Total runtime: 21.169 ms"

Evidemment, ce n'est pas long.
Question con, mais on ne sait jamais : vous avez le code de l'application? Vous êtes certain que c'est bien une requête unitaire qui est aussi longue, et non un traitement qui exécute une requête en boucle? (Je ne connais pas votre rôle, votre niveau d'expérience, etc... et ce sont des choses que j'ai déjà vues)
Autre question : vous avez tenté de faire l'insert à la main également? Parce que là, vous ne savez pas ce  qui pose problème, et vous risquez de partir sur une fausse piste.

La priorité pour vous, à mon avis, est soit d'isoler le problème. En fonction de votre rôle, de vos autorisations, vous pouvez soit commencer par prendre le problème du côté de l'application : que fait-elle exactement? regardez le code, les traces, ajoutez des timer dans les logs. Soit suivre le conseil de gleu et utiliser auto_explain. Si vous n'avez pas le droit d'ajouter des modules en production, faites-le en préproduction, ou recette, ou développement, du moment que vous arrivez à avoir le même volume de données, et le même environnement (insertion, purges, vacuum...)

Lorsque vous reviendrez sur le forum, essayez également d'être plus précis :
donnez le texte de votre requête, la description des tables impliquées (colonnes, index, contraintes) dans la requête, ainsi que la description précise des 2 autres requêtes dont vous parlez : celle d'insertion des données acquises et celle de purge (sur quelles tables travaillent-elles? À quelle fréquence?). Afin de comprendre laquelle fait quoi, sur quelles tables, et quelles sont les tailles respectives des tables. Faites le nécessaire pour repérer si la durée extraordinairement longue se produit à un instant particulier (après la purge? après l'insertion? pendant le vacuum? ...)

De toute manière, il faut absolument que vous arriviez à repérer et recrééer les conditions qui produisent la requête trop longue...

#97 Re : Optimisation » Requête anormalement longue » 04/02/2011 14:09:15

flo
Redge a écrit :

Bonjour,

Et arrivé à 2h de fonctionnement environ (donc 1 millions d'enregistrements dans mes tables), la requête passe de 1s a 10mn sans raison particulière et peut même aller jusqu'à 1h de fonctionnement.

La requête fait un INSERT d'un SELECT qui comporte une jointure sur 2 tables en utilisant 2 champs indexés pour la jointure et un WHERE sur une colonne numérique non indexée.

Sans raison particulière??? Attention à ce que vous écrivez, il y en a qui sont susceptibles ici wink il y a bien une raison (mais vous ne l'avez pas encore trouvée... )

La première chose à faire, est de faire un explain (de préférence un explain analyze ) de la requête avec un nombre significatif de données, dans les conditions de votre problème  (dans les 1 millions d'enregistrement dans les 2 tables, donc, et dans les mêmes conditions au niveau des vacuum et des statistiques).
D'ailleurs c'est l'INSERT ou le SELECT qui est anormalement long?
(si vous cherchez un coup de main, donnez la requête, et le résultat de l'explain)

#98 Re : Installation » impossible d'ouvrir une base,message d'erreur contenant /tmp/.s.PGSQL. » 04/02/2011 13:59:28

flo

chris0938, si vous ne savez pas où sont les logs de démarrage, allez voir le script de démarrage (/etc/init.d/postgres), vous y trouverez le nom du répertoire de log (dans celui que  j'ai sous les yeux, c'est la variable PGLOG). S'il n'y a rien ou si la date de création du fichier ne correspond pas à votre tentative de démarrage... eh bien vous saurez au moins que ça rate avant d'y écrire (voir le script encore).

#99 Re : Général » Restauration d'une table » 26/01/2011 12:02:27

flo

Pourquoi ne peux-tu pas (ou ne veux-tu pas?) faire un script qui appelle psql en boucle, suivant la syntaxe donnée par Marc, comme tu as fait sans doute pour pg_dump?

Ou alors explique  mieux ton problème?

#100 Re : Java » Comment stocker un DefaultTreeModel dans une base PostgreSQL ? » 14/01/2011 21:56:44

flo

Je suppose que c'est parce que cet objet n'implémente pas les bonnes interfaces, ou bien n'est pas de la bonne classe :
http://download.oracle.com/javase/1.4.2 … .Object%29

De toute manière, comment pouvez-vous espérer stocker un arbre, donc une structure pleine de pointeurs, dans une suite d'octets? Même Postgresql n'est pas capable de cette sorte de magie...
Il manque donc une étape de sérialisation avant l'étape JDBC, si c'est vraiment ce que vous voulez faire (mais là c'est du pur Java).


D'autre part, sur le fond de votre problème, je ne comprend pas l'intérêt de mettre cela dans la base. Pourquoi ne pas faire un objet partagé par tous vos threads, résidant en mémoire? (quand vous parlez d'instances, c'est quoi? des processus? des threads?  les changements de l'un doivent se répercuter dans l'autre?)

Pied de page des forums

Propulsé par FluxBB