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).

#77 Optimisation » Optimisation table » 11/07/2012 14:06:49

MitsuTomoe
Réponses : 7

Bonjour à tous,
j'ai une table qui va être vidée toutes les nuits, puis insertion d'environ 50000 lignes.
A terme, ce volume sera multiplié par 6 ou 7 (progressivement).
Y-a-t-il des précautions particulières à prendre, des vacuum à faire systématiquement ou autres ?
Je suis en 9.1.4 sous Ubuntu 12.04 .

Merci

#78 Général » Supprimer séquences orphelines » 11/07/2012 13:59:35

MitsuTomoe
Réponses : 5

Bonjour à tous,
je viens de m'apercevoir que supprimer une table ne vire pas la séquence associée à la PK.
Bug or feature ?
Qqn aurait-il une requête pour supprimer toutes les séquences orphelines ? En 6 mois de dvpt, je dois en avoir des milliards...
J'ai déjà fait quelques select dans le méta-dictionnaire, mais je n'ose pas faire de modifs.
Je suis en 9.1.4 sous Ubuntu Server 12.04 .

Merci

PS : j'ai installé pg_snap, c'est super, même si je ne comprend pas encore toutes les infos.
J'ai pu corriger 2 tables où j'avais oublié de déclarer la PK .

#79 Re : Réplication » Réplication sur serveur dvpt » 07/07/2012 18:49:43

Il n'y a pas eu vraiment d'étude scientifique pour le choix de l'OS . Les développeurs connaissaient Ubuntu, j'ai un lourd passé OpenVMS/RDB .
En cherchant un peu j'ai vu que le dvpt avait l'air dynamique sur Ubuntu, alors que centos est en standby pendant des mois
lorsqu'une nouvelle RHEL sort. Le projet d'entreprise se veut novateur et sans cesse remis en question pour bénéficier de
nouvelles technologies, ça m'a semblé coller. Ca fait 6 mois maintenant, et je me sens assez à l'aise avec Ubuntu, plus
trop envie de changer .

#81 Re : Général » UPDATE après SELECT » 07/07/2012 16:16:01

Je croyais qu'on ne pouvait pas créer de fichier à partir d'une procédure stockée ???

#82 Re : Général » UPDATE après SELECT » 07/07/2012 02:13:20

J'ai trouvé une solution, probablement pas la plus élégante mais qui a le mérite de marcher. Si qqn a une meilleure idée ?


DATE=$(date +%Y-%m-%d)
TIME=$(date +%T)
rm -f /var/lib/postgresql/diff_ann.ok
psql << EOF
    copy  (select id_envoi from diffusion_envoi where dat_envoi is null order by id_envoi limit 1) to '/var/lib/postgresql/diff_ann.ok';
EOF

id=`head -1 /var/lib/postgresql/diff_ann.ok`
if [ -z "$id" ]
    then
        echo "Aucun fichier à envoyer"
    else
        echo "Traitement envoi $id"
         psql << EOF
             copy  (select fichier_contenu from diffusion_envoi where id_envoi = $id) to '/var/lib/postgresql/1131422.xml' csv;
             update diffusion_envoi set dat_envoi='$DATE $TIME' WHERE id_envoi = $id;
EOF
        sed --in-place -e 's/\"\"/\"/g' 1131422.xml
        sed --in-place -e 's/\"<?xml/<?xml/g' 1131422.xml
        sed --in-place -e 's/\n\"\n/\n/g' 1131422.xml
        sed --in-place -e '$!N;s|\n\"||' 1131422.xml
        rm -f 1131422.zip
        zip -r 1131422.zip 1131422.xml
#
#        ftp
#
        msg=" $DATE $TIME Envoi no. $id effectué"
        echo $msg | mail -s "Multi-diffusion" -t xxx -a From:xxx
fi

#83 Re : Général » UPDATE après SELECT » 07/07/2012 00:48:26

Je n'ai qu'un champ d'une ligne à exporter à chaque fois. Ce qui me manque est un moyen de récuperer la PK de la ligne exportée.

#84 Général » UPDATE après SELECT » 06/07/2012 15:49:07

MitsuTomoe
Réponses : 7

Bonjour,
je voudrais mettre à jour la ligne d'une table qui vient de faire l'objet d'un COPY.
Je fais :
copy  (select fichier_contenu from diffusion_envoi where dat_envoi is null order by id_envoi limit 1) to '/var/lib/postgresql/1131422.xml' csv;

et je voudrais faire après :

update diffusion_envoi set dat_envoi=now() where ???

J'ai plus ou moins compris que les CTE étaient faites pour ce genre de chose, mais je ne vois pas comment faire.

#85 Re : Réplication » Réplication sur serveur dvpt » 06/07/2012 13:28:51

Pour l'instant ça marche nickel, et il y a postgresql 9.1.4 sur les deux.
Quelles sont les limitations/problèmes de Ubuntu 12.04 en serveur ?

#86 Re : Réplication » Réplication sur serveur dvpt » 06/07/2012 11:23:51

Le script tourne sur le dvpt.
Pour l'instant nous avons 2 serveurs : dvpt et prod . J'ai mis le cluster de secours sur le serveur de dvpt
pour l'instant, mais c'est plus une démonstration de faisabilité qu'un vrai secours.
Il est prévu d'avoir un serveur dédié vers la rentrée, la montée en charge va se faire entre la fin juillet et début septembre.
Je suis de mon côté en pleine autoformation sur PostgreSQL et Ubuntu, en espérant être à la hauteur le moment venu.
Vivement qu'on ait besoin de 30 serveurs avec réplication en cascade smile !

#87 Re : Réplication » Réplication sur serveur dvpt » 06/07/2012 10:34:32

Pour l'instant la société est en pleiin démarrage, je cherche une solution simple et peu coûteuse,
quitte à faire quelques compromis. Dans quelques mois, avec la montée en charge (et les rentrées financières correspondantes smile ),
nous pourrons faire mieux. Pour ma culture personnelle, un serveur de monitoring serait dédié à la surveillance du bon fonctionnement
du serveur de production ? Ce n'est pas un peu lourd ? Qu'est-ce que ça ferait de mieux que mes 10 lignes de script ?

#88 Re : Réplication » Réplication sur serveur dvpt » 06/07/2012 10:09:17

Vous me conseilleriez plutôt de me contenter d'envoyer un mail ?
Pour l'instant, voici mon script :

#!/bin/sh
DATE=$(date +%Y-%m-%d-%H-%M)
msg=" $DATE  Base xxxx sur xx.xx.xx.xx ne répond pas"
rm -f /var/lib/postgresql/prod_ok.log
psql -h xx.xx.xx.xx xxx -f test_live.sql -q -o prod_ok.log
if grep -q "?column?"  /var/lib/postgresql/prod_ok.log
    then
        echo "$DATE : Prod OK"
    else
        echo "$DATE : Prod en panne"
        echo $msg|ssmtp xx@xx.fr xx@xx.fr
        touch /var/lib/postgresql/9.1/secours/failover
fi

Le script sql fait juste select 1 .

#89 Re : Réplication » Réplication sur serveur dvpt » 05/07/2012 10:41:52

Si je laissais tomber le load balancing pour l'instant, que serait la solution la plus simple
pour créer automatiquement le fichier trigger en cas de défaillance du master ?
J'avais imaginé un shell dans crontab toutes les x mn, qui essaie de se connecter à la base de prod et crée
le fichier trigger en cas d'échec (+ envoi mail avec ssmtp). Qu'en pensez-vous ?

#90 Re : Réplication » Réplication sur serveur dvpt » 04/07/2012 23:42:44

Bonsoir,
En cherchant une solution d'automatisation du passage en mode secours (création du fichier failover), je suis tombé sur pgpool-II
et pgpooladmin . Connaissez-vous ces outils et sont-ils adaptés :
- pour faire du load balancing (select sur le secours)
- pour passer en secours sans intervention humaine ?
D'après le wiki, la version 3.2 encore en développement comprend un watchdog, ce qui était ma recherche initiale.
SInon, j'ai vu heartbeat, mais ça a l'air démesuré par rapport à mes besoins.

#91 Re : PL/pgSQL » Quel éditeur pour pl/PgSQL » 04/07/2012 11:01:09

Après quelques recherches et lectures de tests, j'ai pris Sublime Text : http://www.sublimetext.com/ ,
c'est vraiment très bien (édition multi-curseur...) .

#92 PL/pgSQL » Quel éditeur pour pl/PgSQL » 03/07/2012 21:29:04

MitsuTomoe
Réponses : 3

Bonjour,
quel est selon vous le meilleur éditeur pour du code pl/pgSQL ?
Pour l'instant, j'utilise phpPgAdmin, mais j'aimerais trouver mieux (TextMate ?) .
Je suis sur Mac OS X 10.7 .

#93 Re : Réplication » Réplication sur serveur dvpt » 02/07/2012 10:19:43

Merci à vous deux, je ferai une simulation de crash un de ces soirs.

#94 Re : Réplication » Réplication sur serveur dvpt » 02/07/2012 08:11:04

Bonjour,
la réplication fonctionne parfaitement, mais je me pose des questions sur les procédures de reprise.
1) Le master ne fonctionne plus ==> je crée le fichier trigger sur le slave, qui est du coup promu nouveau master
2) Du temps se passe durant lequel des transactions ont lieu sur le secours
3) le master est prêt à redémarrer : que faire pour récupérer les transactions passées sur le secours ?
Configurer l'ancien master en standby, récupérer le répertoire data du secours, démarrer, puis le promouvoir comme maître ?
Je suis en 9.1.4 sur 2 serveurs Ubuntu 12.04 .

Merci de votre aide

#95 Re : Réplication » Réplication sur serveur dvpt » 01/07/2012 22:55:34

Ca marche ! J'ai ajusté shared_buffers pour les 2 clusters afin de ne pas épuiser les petits 2 Go du serveur de dvpt.

postgres@ks3001539:~$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres 14272  0.2  0.6 170412 12432 ?        S    22:37   0:01 /usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1/secours -c config_file=/etc/postgresql/9.1/secours/postgresql.conf
postgres 14273  0.4  0.1 170468  3224 ?        Ss   22:37   0:03 postgres: startup process   recovering 000000010000000B00000013                                                                   
postgres 14274  0.0  0.1 170396  2648 ?        Ss   22:37   0:00 postgres: writer process                                                                                                         
postgres 14275  0.0  0.0  95628  1680 ?        Ss   22:37   0:00 postgres: stats collector process                                                                                                 
postgres 14296  0.2  1.3 513604 27732 ?        S    22:38   0:01 /usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1/main -c config_file=/etc/postgresql/9.1/main/postgresql.conf
postgres 14342  0.0  0.2 513792  5028 ?        Ss   22:38   0:00 postgres: writer process                                                                                                   
postgres 14343  0.0  0.0 513800  1688 ?        Ss   22:38   0:00 postgres: wal writer process                                                                                               
postgres 14344  0.0  0.1 514776  3256 ?        Ss   22:38   0:00 postgres: autovacuum launcher process                                                                                       
postgres 14345  0.0  0.0  95780  1996 ?        Ss   22:38   0:00 postgres: stats collector process                                                                                           
postgres 14414  0.0  0.1 175396  3404 ?        Ss   22:39   0:00 postgres: wal receiver process   streaming B/13A53988

#96 Re : Général » pg_lsclusters n'affiche rien » 29/06/2012 17:37:48

C'est ok . J'avais mis md5 pour tout le monde dans pg_hba.conf . J'ai mis peer pour postgres en local, tout est parfait maintenant.
Je pense que le travail effectué sera utile lors de la migration en 9.2, si j'ai bien compris l'intérêt de l'architecture multi-cluster.
Sur ma lancée, je vais peut-être essayer la réplication smile))

#97 Re : Général » pg_lsclusters n'affiche rien » 29/06/2012 15:52:41

C'est (presque) ok :
pg_lsclusters
Version Cluster   Port Status Owner    Data directory                     Log file
9.1     main      5432 online postgres /var/lib/postgresql/9.1/main       /var/log/postgresql/postgresql-9.1-main.log

Le seul (petit) souci est que j'ai une erreur d'authentification sur postgres quand je démarre le cluster, mais il passe online quand même.
Le password de postgres est dans .pgpass . J'ai regardé dans /usr/bin/pg_ctlcluster, et la même commande (psql -h ... -p xxx -l ) fonctionne en interactif.

#98 Re : Général » pg_lsclusters n'affiche rien » 29/06/2012 14:21:12

Pour le démarrage, j'ai un script dans /etc/init.d que j'ai récupéré dans postgresql-contrib . Suite à vos explications, je crois que je comprend mieux maintenant.
Si je trouve du temps, j'essaierai de faire ça bien propre.
Merci pour votre aide, je pose beaucoup de questions ces temps ci, mais je débute.
J'espère apporter ma contribution à la communauté quand j'aurai plus de kms sur Postgres.
PS : j'ai découvert l'outil apgdiff, c'est parfait pour synchroniser dev/prod.

#99 Re : Général » pg_lsclusters n'affiche rien » 29/06/2012 10:17:05

J'ai fait le déplacement, ça marche nickel sauf que pg_lsclusters ne m'affiche toujours rien...

pg_ctl status
pg_ctl: server is running (PID: 938)
/usr/lib/postgresql/9.1/bin/postgres "-D" "/var/lib/postgresql/9.1/main"
postgres@sd-16433:~$ pg_lsclusters
Version Cluster   Port Status Owner    Data directory                     Log file
postgres@sd-16433:~$ pg_ctlcluster 9.1 main reload
Error: specified cluster does not exist

Je crois que je vais laisser tomber, mais ça m'ennuie de ne pas comprendre.

#100 Re : Général » pg_lsclusters n'affiche rien » 28/06/2012 22:41:13

merci je vais essayer (après une sauvegarde), j'aimerais que ce soit propre avant qu'il y ait de l'affluence sur le site, dans 1 mois je ne pourrai plus le faire (enfin disons que je n'oserai pas)

Pied de page des forums

Propulsé par FluxBB