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

#26 Re : Réplication » Synchronisation d'une base client avec une base maitre » 06/12/2011 12:02:19

Mais dans mon cas, je n'ai pas de multi-maître. J'ai par contre une base "maître" qui va alimenter différentes bases "clientes".
Du coup nous avons développé notre propre processus de synchronisation des données, avec un batch qui sera exécuté via une tâche planifiée coté client.
Cela nous permets justement d'affiner les règles métiers, mais je me demande si nous n'avons pas perdu de temps dans le développement, et si les perfs seront satisfaisantes.

#27 Re : Réplication » Synchronisation d'une base client avec une base maitre » 06/12/2011 10:50:56

Je ne connaissais pas Bucardo, quelle est la différence avec Slony?
Pour en revenir à mon problème, quand tu parles de "méthode rusée" ca aurait pu consister en quoi?
On aurait pu tester la présence d'une donnée coté SERVEUR lors d'un ajout coté CLIENT, mais nous sommes incapables de faire  ce test dans l'autre sens...
Du coup, nous sommes obligé de gérer des doublons. Y a t'il de bonnes pratiques ou des outils sur ce sujet?
Merci,

#28 Réplication » Synchronisation d'une base client avec une base maitre » 02/12/2011 16:45:20

Gold.Strike
Réponses : 5

Bonjour,

Je souhaite synchroniser 2 bases de données ayant le même schéma :
- une base "maître" : sur laquelle  nous saisissons des données "communes"
- une base "client" : sur laquelle le client saisi ses propres données

Ces bases de données contiennent donc 2 types de tables :
- les tables "fermées" : que nous sommes les seuls à pouvoir alimenter
- les tables "ouvertes" : sur lesquelles le client peut ajouter ses propres enregistrements

La synchronisation consiste donc à mettre à jour la base "client" avec les données de la base "maître". Nous utilisons pour cela :
- une table "synchronisation" coté serveur, qui contient les champs suivants : id / id_serveur / nom_table / etat / date_maj_serveur => cette table est mise à jour via des triggers positionnés sur les tables impactées par la synchro
- une table "synchronisation" coté client, qui contient les champs suivants : id / id_serveur / id_client / nom_table / date_synchro / modif_client / etat / date_maj_serveur => cette table est mise à jour via le processus de synchronisation
- une table "synchro_entites" coté serveur, qui contient la liste des tables à synchroniser, avec l'ordre associé : id / nom_table / ordre
- une table "synchro_discriminants" coté serveur, qui contient les champs correspondant aux discriminants pour chaque table à synchroniser : id / table_id / ordre / nom_champ / type / parametre (si le champ représente un id d'une autre table)

Les discriminants sont utilisés pour vérifier si une donnée coté serveur corresponds à une donnée coté client lors de la synchronisation.

=> que pensez vous de cette architecture?

J'ai cependant du mal avec certaines des tables que nous synchronisons, et qui sont ouvertes aux clients :
- contacts : id / nom / prenom / id_typecontact / datenaissance / id_paysnaissance / id_nationalite / ...
- club : id / nom / adresse / telephone / id_pays / ville / nomcourt / ...
- competition : id / nom / id_zone / id_categorieage / nomcourt / nom5lettres / ...
en effet, dans ces cas la, les discriminants reposent sur des champs texte (nom/prénom) ou sur des infos qui ne seront pas forcément saisies par le client (datenaissance/id_nationalite)

=> comment réduire au maximum les risques de doublons? faut il imposer aux client la saisie d'informations (datenaissance/id_nationlite) dont ils ne disposeront pas forcément?
=> la solution est elle de prévoir également une interface de gestion des doublons?

Merci,

#29 Re : Général » Recherche de doublons sur des champs texte » 09/11/2011 17:25:00

Merci à toi, effectivement, en terme de perf ca n'a rien à voire : pour la recherche des doublons, je passe de 30 minutes avec la première version de la fonction, à quelques secondes avec la dernière!

Mais en clair, qu'est ce qui distingue une procédure stockée "SQL" d'une procédure sotckée "PLSQL"?
La gestion des paramètres utilisées?
La structure de la fonction est la même, donc j'ai du mal à comprendre de tels écarts de performance.

#30 Re : Général » Recherche de doublons sur des champs texte » 08/11/2011 11:12:08

gleu a écrit :

Le plus simple serait de tout transformer en une seule requête et du coup de transformer la procédure PL/pgsql en procédure SQL.

Je ne comprends pas ce que tu veux dire. Est ce ma fonction que je dois transformer en une seule requête?
Les procédure SQL sont elles gérées de la même façon que les procédures PLSQL?

#31 Re : Général » Recherche de doublons sur des champs texte » 07/11/2011 19:23:14

Alors j'ai effectivement constaté une nette amélioration des performances en utilisant des "translate". Pour une recherche classique, je passe de 4 secondes à 1.5 secondes.

Je voudrais cependant savoir si je peux encore optimiser d'avantage ma fonction :

-- Function: fct_format_string(text)

-- DROP FUNCTION fct_format_string(text);

CREATE OR REPLACE FUNCTION fct_format_string2(stringtoformat text)
  RETURNS text AS
$BODY$DECLARE formatedString text;
BEGIN
    SELECT LOWER(stringToFormat) INTO formatedString ;
   
--     bloc non remplacé
    SELECT replace(formatedString,'æ','ae') INTO formatedString ;
    SELECT replace(formatedString,'œ','oe') INTO formatedString ;

--     bloc "accents"       
--     SELECT replace(formatedString,'â','a') INTO formatedString ;
--     SELECT replace(formatedString,'ä','a') INTO formatedString ;
--     SELECT replace(formatedString,'à','a') INTO formatedString ;   
--     SELECT replace(formatedString,'é','e') INTO formatedString ;
--     SELECT replace(formatedString,'è','e') INTO formatedString ;
--     SELECT replace(formatedString,'ê','e') INTO formatedString ;
--     SELECT replace(formatedString,'ë','e') INTO formatedString ;
--     SELECT replace(formatedString,'î','i') INTO formatedString ;
--     SELECT replace(formatedString,'ï','i') INTO formatedString ;
--     SELECT replace(formatedString,'ö','o') INTO formatedString ;
--     SELECT replace(formatedString,'ô','o') INTO formatedString ;
--     SELECT replace(formatedString,'û','u') INTO formatedString ;
--     SELECT replace(formatedString,'ü','u') INTO formatedString ;
    SELECT translate(formatedString, 'âäàéèêëîïöôûü', 'aaaeeeeiioouu') INTO formatedString ;

--     bloc "caractère spéciaux"   
--     SELECT replace(formatedString,'&','') INTO formatedString ;
--     SELECT replace(formatedString,'$','') INTO formatedString ;
--     SELECT replace(formatedString,'*','') INTO formatedString ;
--     SELECT replace(formatedString,'@','') INTO formatedString ;
--              SELECT replace(formatedString,'^','') INTO formatedString ;
--     SELECT replace(formatedString,'#','') INTO formatedString ;
--     SELECT replace(formatedString,'-','') INTO formatedString ;
--     SELECT replace(formatedString,' ','') INTO formatedString ;
--     SELECT replace(formatedString,'_','') INTO formatedString ;
    SELECT translate(formatedString, '&$*@^#- _', '') INTO formatedString ;

--     gestion du caractère simple quote (')
    SELECT replace(formatedString,'''','') INTO formatedString ;
   
    --SELECT replace(formatedString,''"','') INTO formatedString ;

RETURN formatedString;
END;$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION fct_format_string(text) OWNER TO postgres;

Enfin, j'ai un problème avec le caractère simple quote ('). En effet, je n'arrive pas à trouver la méthode permettant de le prendre en compte dans le bloc des caractères spéciaux. Ai je oublié quelque chose?

#32 Re : Général » Recherche de doublons sur des champs texte » 04/11/2011 19:07:48

Je me permets de relancer cette discussion, car la fonction que j'ai cité, est utilisé à différents endroits, notamment pour synchroniser des données entre une base MAITRE et des bases CLIENTES. Je me sers donc de la fonction pour vérifier la présence de données dans différentes tables...

-- Function: fct_format_string(text)

-- DROP FUNCTION fct_format_string(text);

CREATE OR REPLACE FUNCTION fct_format_string(stringtoformat text)
  RETURNS text AS
$BODY$DECLARE formatedString text;
BEGIN
    SELECT LOWER(stringToFormat) INTO formatedString ;
        SELECT replace(formatedString,'&','') INTO formatedString ;
    SELECT replace(formatedString,'$','') INTO formatedString ;
    SELECT replace(formatedString,'*','') INTO formatedString ;
    SELECT replace(formatedString,'@','') INTO formatedString ;
        SELECT replace(formatedString,'^','') INTO formatedString ;
    SELECT replace(formatedString,'#','') INTO formatedString ;
    SELECT replace(formatedString,'æ','ae') INTO formatedString ;
    SELECT replace(formatedString,'â','a') INTO formatedString ;
    SELECT replace(formatedString,'ä','a') INTO formatedString ;
    SELECT replace(formatedString,'à','a') INTO formatedString ;
    SELECT replace(formatedString,'é','e') INTO formatedString ;
    SELECT replace(formatedString,'è','e') INTO formatedString ;
    SELECT replace(formatedString,'ê','e') INTO formatedString ;
    SELECT replace(formatedString,'ë','e') INTO formatedString ;
    SELECT replace(formatedString,'î','i') INTO formatedString ;
    SELECT replace(formatedString,'ï','i') INTO formatedString ;
    SELECT replace(formatedString,'œ','oe') INTO formatedString ;
    SELECT replace(formatedString,'ö','o') INTO formatedString ;
    SELECT replace(formatedString,'ô','o') INTO formatedString ;
    SELECT replace(formatedString,'û','u') INTO formatedString ;
    SELECT replace(formatedString,'ü','u') INTO formatedString ;
    SELECT replace(formatedString,'-','') INTO formatedString ;
    SELECT replace(formatedString,' ','') INTO formatedString ;
    SELECT replace(formatedString,'_','') INTO formatedString ;
    SELECT replace(formatedString,'''','') INTO formatedString ;
    --SELECT replace(formatedString,''"','') INTO formatedString ;

RETURN formatedString;
END;$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION fct_format_string(text) OWNER TO postgres;

Le fait d'utiliser "translate" apporte t'il un gain significatif?
Du coup existe t'il une fonction Postgre qui fasse la même chose? Je n'ai pas très bien compris l'utilité ni l'application de "pg_trm"...

Merci,

#33 PgAdmin3 » Une erreur s'est produite : séquence d'octets invalide pour l'encodage » 23/09/2011 18:55:57

Gold.Strike
Réponses : 3

Bonjour,

Lorsque j'utilsie l'interface "Etat du serveur" de pgAdmin, j'ai une fenêtre qui s'affiche toutes les 10 secondes avec le message suivant :

pdAdmin 3 - Une erreur s'est produite - ERREUR : séquence d'octets invalide pour l'encodage "UTF8" : 0xe86d65

J'ai essayer de :
- redémarrer pgAdmin
- redémarrer les services

Mais rien n'y fait...

Auriez vous une idée?

Merci...

#34 Re : Général » Bytea et XML » 23/09/2011 18:01:57

Effectivement, c'est bien ça...
J'avais déja eu ce problème en plus!
Mais si je trouve un driver qui gère Postgre 9 (je suis sur du .Net), je pourrais rebasculer "bytea_output" en "hex" et bénéficier de meilleures performances donc?
Merci,

#35 Général » Bytea et XML » 23/09/2011 16:40:19

Gold.Strike
Réponses : 3

Bonjour,

Je rencontre actuellement des difficultés lors de la restitution d'un XML sauvegardée dans une colonne de type "bytea"...

J'ai une table qui me permets de sauvegarder les configurations utilisateurs des fenêtres de mon application. La configuration des layout est enregistré dans un XML, qui est lui même stocké dans une colonne de type "bytea" de cette table. Pour mes bases qui tournent sous Postgre 8.4, tout marche bien. Par contre, lorsque j'essaie de recharger les données dans mon application, pour des bases tournant sous Postgre 9.0, j'obtiens un message d'erreur :

Données non valides au niveau racine. Ligne 1, position 1. xmlreader

J'ai essayé de vérifier le contenu de la colonne avec la fonction "convert_from", mais je ne parviens à visualiser que la première ligne du XML...

select convert_from(donnees, 'UTF-8')
from uiconfigurations

Auriez vous des explications sur ce phénomène? Y a t'il des différences entre Postgre 8 et 9 qui m'échappent?

Merci...

#36 Général » Recherche de doublons sur des champs texte » 13/09/2011 15:41:58

Gold.Strike
Réponses : 11

Bonjour,

Dans ma base de données, j'ai une table CONTACT qui contient des informations nominatives et personnelles (nom, prénom, sexe, date de naissance, etc...).
Je me suis rendu qu'il y avait déja plusieurs "doublons" dans cette base.

Afin de pouvoir les identifier rapidement, j'ai donc exécuté cette requête qui marche parfaitement bien :

SELECT T1.id
FROM contacts T1, contacts T2
WHERE LOWER(T1.nom) = LOWER(T2.nom)
AND LOWER(T1.prenom) = LOWER(T2.prenom)
AND T1.id <> T2.id

Comme il y d'autres cas, avec des accents ou des guillemets, j'ai créé une fonction intermédiaire censée gérer ces cas :

-- Function: fct_format_string(text)
-- DROP FUNCTION fct_format_string(text);

CREATE OR REPLACE FUNCTION fct_format_string(stringtoformat text)
  RETURNS text AS
$BODY$DECLARE formatedString text;
BEGIN
	SELECT LOWER(stringToFormat) INTO formatedString ;
                --SELECT replace(formatedString,'&','') INTO formatedString ;
                --SELECT replace(formatedString,'$','') INTO formatedString ;
	--SELECT replace(formatedString,'*','') INTO formatedString ;
	--SELECT replace(formatedString,'@','') INTO formatedString ;
                --SELECT replace(formatedString,'^','') INTO formatedString ;
	--SELECT replace(formatedString,'#','') INTO formatedString ;
	SELECT replace(formatedString,'æ','ae') INTO formatedString ;
	SELECT replace(formatedString,'â','a') INTO formatedString ;
	SELECT replace(formatedString,'ä','a') INTO formatedString ;
	SELECT replace(formatedString,'à','a') INTO formatedString ;
	SELECT replace(formatedString,'é','e') INTO formatedString ;
	SELECT replace(formatedString,'è','e') INTO formatedString ;
	SELECT replace(formatedString,'ê','e') INTO formatedString ;
	SELECT replace(formatedString,'ë','e') INTO formatedString ;
	SELECT replace(formatedString,'î','i') INTO formatedString ;
	SELECT replace(formatedString,'ï','i') INTO formatedString ;
	SELECT replace(formatedString,'œ','oe') INTO formatedString ;
	SELECT replace(formatedString,'ö','o') INTO formatedString ;
	SELECT replace(formatedString,'ô','o') INTO formatedString ;
	SELECT replace(formatedString,'û','u') INTO formatedString ;
	SELECT replace(formatedString,'ü','u') INTO formatedString ;
	SELECT replace(formatedString,'-','') INTO formatedString ;
	SELECT replace(formatedString,' ','') INTO formatedString ;
	--SELECT replace(formatedString,'_','') INTO formatedString ;
	--SELECT replace(formatedString,'''','') INTO formatedString ;
	--SELECT replace(formatedString,''"','') INTO formatedString ;

RETURN formatedString;
END;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION fct_format_string(text) OWNER TO postgres;

Malheureusement, quand j'exécute la requête précédente avec cette fonction, Postgre mouline énormément et ne m'a toujours pas retourné de résultat après près d'une heure d'exécution...

WHERE C.id in (
SELECT T1.id
FROM contacts T1, contacts T2
WHERE fct_format_string(T1.nom) = fct_format_string(T2.nom)
AND fct_format_string(T1.prenom) = fct_format_string(T2.prenom)
AND T1.id <> T2.id

Y a t'il une autre méthode de faire ce test?
Ai je oublié quelque chose?

Merci,

#37 Offres » Développeur .Net (C#, WPF) ayant des connaissances en PostgreSQL » 09/09/2011 18:00:36

Gold.Strike
Réponses : 0

Venez prendre part à un projet original et innovant dans le domaine du sport : le développement d'un progiciel de gestion de clubs de football.
Pour accompagner sa croissance, Pro Training Systems recrute de façon urgente, un/une ingénieur études et développements pour rejoindre notre équipe de R&D.

Profil recherché :
• Bac +2/+3 avec 4-5 ans d'expérience
• Bac +5/Ingénieur avec 1-2 ans d'expérience
Maitrise des langages .Net (C# et/ou WPF) et SQL
• Maitrise de l'environnement Visual Studio 2010
La maitrise d'un des domaines suivants est un plus : DevExpress, PostgreSQL
• Français courant, bonne connaissance de l'anglais
• Intérêt pour le milieu sportif amateur et professionnel

Poste à pourvoir rapidement, basé à Strasbourg, Alsace, France.

Pour postuler :
• Site internet : http://www.protraining-systems.com/contact.html
• Email : pc.dus(at)protraining-systems(point)com

#38 Re : Général » Export de données avec la commande COPY » 09/09/2011 09:31:30

gleu a écrit :

Si le serveur ne contient pas de répertoire C:\PCD\Export, vous avez votre réponse. La commande COPY ne peut pas lire le fichier ailleurs que sur le serveur vu qu'elle est exécutée par le serveur.

Merci Gleu. Effectivement après avoir créé le bon dossier sur le serveur la commande s'est exécutée correctement.
Je pensais qu'elle était exécutée directement pas PgAdmin, et que du coup elle pouvait être utilisée "n'importe ou"...

#39 Re : Général » Export de données avec la commande COPY » 08/09/2011 17:53:22

Quand je teste en mettant :

COPY 
(select * 
FROM exercices 
WHERE module_id = 2)
TO E'C://PCD//Export//test.csv';

Le message est différent :

ERREUR:  n'a pas pu ouvrir le fichier « C://PCD//Export//test.csv » en écriture : No such file or directory

********** Erreur **********

ERREUR: n'a pas pu ouvrir le fichier « C://PCD//Export//test.csv » en écriture : No such file or directory
État SQL :58P01

Je pense donc que la première syntaxe est correcte.
Sinon j'ai bien donné les droits à tous les utilsiateurs sur le répertoire : "'C:\PCD\Export\". C'est pour ça que ne comprends pas trop...

Mais j'ai testé la même commande sur mon serveur, qui lui ne contient pas de répertoire  "'C:\PCD\Export\", et le message est le même. Je ne pense donc pas que ce soit un problème de droits.

#40 Général » Export de données avec la commande COPY » 08/09/2011 17:22:28

Gold.Strike
Réponses : 9

Bonjour,

J'ai besoin de copier des données issues de plusieurs tables d'une BDD vers une autre.

Je souhaite utiliser la commande COPY car je dois copier seulement une partie de données correspondant à un critère, comme suggéré sur ce topic : http://forums.postgresql.fr/viewtopic.php?id=293

Je n'arrive pas à exécuter ma commande :

COPY 
(select * 
FROM exercices 
WHERE module_id = 2)
TO E'C:\\PCD\\Export\\test.csv';

car j'obtiens le message suivant :

ERREUR: n'a pas pu ouvrir le fichier « C:\PCD\Export\test.csv » en écriture : No such file or directory
État SQL :58P01

Auriez vous une idée?

#41 Re : PSQL » psql: FATAL: la base de données " ma_baseDest " n'existe pas » 12/08/2011 16:40:51

J'ai compris pourquoi, la version de PSQL est bien la 9.0, par contre il pointe sur le serveur 8.4:

WARNING: psql version 9.0, server version 8.4.
         Some psql features might not work.

Comment puis je régler ce problème??

Y a t'il un moyen de "spécifier" le serveur avec la commande psql???

#42 PSQL » psql: FATAL: la base de données " ma_baseDest " n'existe pas » 12/08/2011 16:30:52

Gold.Strike
Réponses : 2

Je fais cohabiter 2 versions de Postgre sur mon serveur: une 8.4 et une 9.0
Actuellement, c'est encore la 8.4 qui contient la base "source".

Je crée une copie de données à partir de cette table source, via un batch qui exécute la commande suivante :
C:\PostgreSql\8.4\bin\pg_dump.exe --host %nom_serveur% --port 5432 --username postgres -t table1 -t table2 -t table3 --data-only --file "%rep_save%synchro.backup" ma_baseSource

Je restaure le ficher obtenu, à partir d'un autre batch qui exécute la commande suivante :
C:\PostgreSql\9.0\bin\psql.exe -U postgres -f %rep_save%synchro.backup ma_baseDest

Mais j'obtiens le message suivant :
psql: FATAL: la base de données " ma_baseDest " n'existe pas

Je ne comprends pas pourquoi, je suis sur du nom de ma base...

#43 Re : Général » Performances et optimisations de BDD PostgreSQL » 29/07/2011 17:44:52

Bonjour, je me permets de relancer ce topic pour avoir votre avis.

Nous avons en effet fait développé la "synchronisation" entre la la base "Prestataire" et la base "Mère" par une société de services. La base "Prestataire" se compose d'une quinzaine de tables et fait environ 2 Go. La synchronistaion adapte les données du prestataire à notre format de base de données et alimente ensuite notre base "Mère".

Le problème est qu'après 15 jours d'exécution, la synchro n'est toujours pas terminée. La société de services se justifie en distant que le nombre de données à synchroniser est "trop important" et que nous devrions prendre moins de données chez le prestataire pour optimiser les performances.

- Que pensez vous de cette justification?
- Avez vous déja développée une interface de synchronisation ressemblant à cela, et combien de temps vous a t'il fallu pour synchroniser 2 Go?

Merci,

#45 Général » Impossible de restaurer un dump : unsupported version in file header » 27/07/2011 15:30:29

Gold.Strike
Réponses : 2

Bonjour,

J'ai essayé de rapatrier une base qui est hébergée sur le serveur d'un client, vers un serveur de ma société.
J'ai donc créé un dump de la base avec pgAdmin sur le serveur client. Je copie ce dump sur mon serveur. Mais quand j'essaie de restaurer le dump, j'obtiens le message suivant :

pg_restore: [archiver] unsupported version (1.12) in file header

Ce que je ne comprends pas, c'est que la version de Postgre est la 9 sur les 2 serveurs. Celle installée sur le serveur de ma société doit être plus récent, il ne devrait donc pas y avoir de problème de compatibilité non?

Auriez vous une idée?

#46 Re : Général » Performances et optimisations de BDD PostgreSQL » 06/07/2011 10:09:00

gleu a écrit :

Mais dans le cas ou l'alimentation dure plusieurs jours? Il faut exécuter un script qui lance réguliérement ces opérations?

Une alimentation qui prend deux jours pour une base de 2 Go, j'ai un peu de mal à comprendre comment c'est possible pour être franc. Mais bon, en tout état de cause, après une alimentation, qu'elle qu'en soit la durée, un VACUUM ANALYZE ne peut pas faire de mal.

En fait cette étape corresponds à la première phrase de récupération des données au près d'un prestataire. Nous récupérons des données via des webservices, et la taille de la base après import est de 1.5 Go. La durée est elle effectivement de 2 jours. Par la suite, une la phase de mise à jour des données sera beaucoup plus rapide et exécutée une à 2 fois par jour...

Au cours du processus de synchronisation entre la base "prestataire" et la base "mère", des données sont écrites sur les 2 bases :
- les données insérées réellement sur la base "mère"
- une table de "synchronisation", qui contient les relations entre les identifiants des 2 bases, sur la base "prestataire"
Comme cette étape est relativement longue, il faudrait également exécuter périodiquement des VACUUM/ANALYZE non?
Est il mieux d'automatiser cette tâche après la mise à jour de chaque table ou l'insertion de n lignes?

gleu a écrit :

Du coup vaut il mieux suivre une formation "générique" ou faire intervenir un prestataire pour me former et optimiser les bases utilisées?

J'aurais tendance à dire les deux. La formation générique couvrira certainement plus de choses qu'un transfert de compétences réalisé par un prestataire. Ce "plus de choses" est un atout car, même si vous avez un problème spécifique aujourd'hui, une fois ce problème réglé, d'autres arriveront. Et seule une formation complète vous permettra de vous aider à être plus généraliste (tout en sachant évidemment qu'une formation ne fait pas devenir expert en trois ou quatre jours, ça demande du travail ensuite). Faire intervenir un prestataire est une bonne chose ensuite car vous pourrez comprendre ce que ce dernier fait. Vous aurez suffisamment de connaissances pour ne pas vous en laisser raconter.

Idéalement, c'est vrai qu'il faudrait mieux commencer par une formation générique avant de faire appel à un prestataire...
Mais en raison du contexte économique (petite structure = peu de moyens) et de la nécessité d'avancer le plus rapidement possible, je pense qu'il serait quand même plus judicieux de faire d'abord appel à un prestataire.
Cela devrait permettre d'apporter des réponses aux questions qui sont les notres, et de m'orienter si besoin vers une formation adaptée.

Pour ce qui est du choix du prestataire, je pense de tout façon privilégier la communauté dans la mesure ou j'ai toujours pu obtenir des réponses aux questions posées. Je suppose donc que différents membres sont susceptibles de m'apporter ce service.

#47 Re : Général » Performances et optimisations de BDD PostgreSQL » 05/07/2011 18:05:50

gleu a écrit :

Y a t'il des optimisations particulières à apporter à une base mise à jour une à fois par jour via des webservices?

Bien penser à faire un VACUUM ANALYZE après l'alimentation. En dehors de ça, non, pas particulièrement.

Mais dans le cas ou l'alimentation dure plusieurs jours? Il faut exécuter un script qui lance réguliérement ces opérations?

gleu a écrit :

Il y a certainement des optimisations à apporter dans le code, mais y aurait il également des optimisations à apporter au niveau du serveur Postgre?

Peut-être, mais c'est impossible à dire sans avoir plus d'infos.

Cela peut il impacter sur les performances de Postgre?

Oui et non. Désolé de faire ce type de réponse mais c'est vraiment dû à vos questions. C'est beaucoup trop global pour pouvoir dire plus.

À mon avis, vous avez intérêt rapidement en début de processus à faire une formation sur PostgreSQL, ça sera beaucoup plus rapide et intéressant que quelques questions posées sur un forum.

Je suis assez d'accord avec vous.
Le problème est que le projet existe depuis 1 an 1/2, et lorsque je suis arrivé les choix techniques avaient déja été faits : langage, framework, bdd, ...
Depuis je me forme donc au fure et à mesure, mais sans maitriser certaines choses importantes je pense.

L'idée d'une formation est donc intéressante, si elle peut couvrir l'ensemble de mes besoins.

- Du coup vaut il mieux suivre une formation "générique" ou faire intervenir un prestataire pour me former et optimiser les bases utilisées?
- Assurez vous vous mêmes des formations ou pourriez vous m'orienter vers une structure adaptée?

Merci,

#48 Général » Performances et optimisations de BDD PostgreSQL » 05/07/2011 14:44:33

Gold.Strike
Réponses : 7

Bonjour,

J'aurais besoin de vos avis et conseils concernant les éventuelles optimisations à apporter aux BDD que nous utilisons sur notre serveur.

- BDD "Prestataire" :
Nous avons une première base de données, qui représente une "copie" des données récupérées chez un prestataire.
Elle est stockée sur notre serveur.
Cette base est mise à jour quotidiennement, et contient plus de 1.5 Go, qui sont réparties dans une dizaine de tables.

- BDD "Mère" :
C'est notre base de données "principale".
Elle contient des données que nous avons saisies et des données que nous récupérons via un processus de synchronisation depuis la base "prestataire".
Elle est stockée sur notre serveur.
Comme nous y stockons des blobs (principalement pour stocker des images), elle est plus conséquente que la base "prestataire" et devrait contenir 2 Go, pour environ 150 tables.

- BDD "Client" :
C'est la base de données du client. Il y en a donc autant qu'il y a de clients.
Elle est stockée sur le poste d'un client, sur le serveur d'un client, ou sur notre serveur.
Cette base est actuellement mise à jour "manuellement", car le processus de synchronisation BDD "Mère" vers "Client" n'est pas finalisé.
Elle contient les mêmes informations que la base "mère" et les données saisies par les clients : 2.5 Go pour environ 150 tables.

J'aurais donc plusieurs questions concernant cette configuration :

- Y a t'il des optimisations particulières à apporter à une base mise à jour une à fois par jour via des webservices?

- Le premier "remplissage" de la base "prestataire" prends environ 2 jours. La synchronisation entre la base "prestaire" et la base "mère" se charge de mettre de données à notre format. Après 10 jours d'exécution, cette étape n'est toujours pas terminée. Il y a certainement des optimisations à apporter dans le code, mais y aurait il également des optimisations à apporter au niveau du serveur Postgre?

- Nous hébergons les bases de certains clients qui n'ont pas de serveur et qui ont besoin de pouvoir partager les données. Du coup, nous avons actuellement une dizaine de bases sur notre serveur. Cela peut il impacter sur les performances de Postgre? (sachant que toutes les bases ne sont pas "utilisées" en même temps)

Je précise que je n'y connais pas grand chose en maintenance de base de données, et que si le travail à faire est important nous pourrions envisager une collaboration de quelques jours pour formation + optimisation...

Merci d'avances pour vos remarques et suggestions.

#49 Re : Installation » Installer une deuxième version de PostGRE sur le même serveur » 11/05/2011 14:24:54

Effectivement, je viens de tester sur mon poste en local, et il n'y a que le port qui change.
Je pense donc faire pareil sur le serveur pour les tests de migration de Postgre 8.4 à Postgre 9. Puis ensuite réaffecter le prot 5432 à Postgre 9 afin que la migration soit transparent aux utilisateurs.
Il ne devrait pas y avoir de soucis pour le changement de port non?

#50 Re : Installation » Installer une deuxième version de PostGRE sur le même serveur » 10/05/2011 17:14:30

Re-bonjour à vous,

Après avoir mis ce problème de coté pendant un moment, je suis de nouveau confronté à une situation similaire : j'ai besoin de passer à Postgre 9 pour profiter de certaines optimisations mais je souhaite garder Postgre 8.4 installé, le temps de s'assurer que tout marche bien...

Dans ce cas, la meilleure solution consiste t'elle aussi à utiliser :
- initdb
- puis pg_ctl register ...

Ou y a t'il une autre méthode?

Merci,

Pied de page des forums

Propulsé par FluxBB