Vous n'êtes pas identifié(e).
Ok merci du conseil.
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
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 .
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 .
Merci pour votre aide
Je croyais qu'on ne pouvait pas créer de fichier à partir d'une procédure stockée ???
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
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.
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.
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 ?
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 !
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 ),
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 ?
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 .
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 ?
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.
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...) .
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 .
Merci à vous deux, je ferai une simulation de crash un de ces soirs.
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
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
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 ))
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.
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.
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.
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)