jeudi 30 juillet 2009

Copier des données d'une base vers une autre sous PostgreSQL

Il m'arrive d'avoir à copier des données d'une base PostgreSQL vers une autre, mais pas une table entière, juste un échantillon. La commande pg_dump m'est alors inutile car sa granularité est la table entière.

Je parle ici de transférer des données de tables identiques.

Soit la table définie par la commande SQL suivante présente dans les 2 bases de données bdd_source et bdd_destination:
CREATE TABLE machin (truc VARCHAR(255), bidule INT, quand DATE);
Supposons que l'on souhaite copier les machins dont le nombre de bidules est supérieur à 5 de la base bdd_source dans la base bdd_destination. Pas possible avec pg_dump simplement, mais relativement propre avec la commande COPY.

On peut sélectionner les données voulues à l'aide de la requête:
SELECT * FROM machin WHERE bidule > 5;
Pour copier notre sélection de données d'une base vers une autre, on peut utiliser la commande suivante:
psql bdd_source -c "COPY (SELECT * FROM machin WHERE bidule > 5) TO STDOUT" > machin_data
Les données sélectionnées se trouvent alors dans le fichier machin_data. Pour les insérer dans la base bdd_destination, il faut exécuter:
cat machin_data | psql bdd_destination -c "COPY machin FROM STDIN"
L'utilisation de l'entrée STDIN et de la sortie STDOUT permet de ne pas avoir besoin d'utiliser le compte super-utilisateur de vos serveurs PostgreSQL, qui est nécessaire pour écrire sur le système de fichier de votre serveur.

De cette façon, vous passez par un fichier local.

On pourrait aussi faire le transfert en une seule commande:
psql bdd_source -c "COPY (SELECT * FROM machin WHERE bidule > 5) TO STDOUT" | psql bdd_destination -c "COPY machin FROM STDIN"
Mais je préfère toujours vérifier ce que je fais, une erreur est vite arrivée... ;)

Libellés : ,

mardi 28 juillet 2009

Bash: Lancer une commande indéfiniment

Un petit truc en bash bien utile quand on a un programme mal codé qui plante de temps en temps ;)

Pour lancer une commande indéfiniment en bash (aussi appelé boucle infinie), et donc la relancer dès qu'elle plante, on peut utiliser la commande suivante:
while [ true ] ; do ./ma_commande ; done
Bien entendu, remplacez ./ma_commande par la commande de votre choix.

Libellés : , ,

vendredi 4 juillet 2008

Gmail par défaut sous Firefox 3

Sur le blog de Gmail, j'ai appris un truc utile: comment faire de Gmail mon client mail par défaut dans Firefox 3.

Simple:
  1. Loguez-vous sur Gmail
  2. Une fois dans Gmail, copiez-collez le code javascript suivant dans la barre d'adresse de Firefox 3:
    javascript:window.navigator.registerProtocolHandler("mailto","https://mail.google.com/mail/?extsrc=mailto&url=%s","Gmail")

  3. Quand il vous demande quel client mail utiliser, choisissez Gmail
  4. Cliquez sur un lien mailto: pour tester, c'est fini !
Plus besoin de hack à la con ! ;)

Libellés : , ,

jeudi 12 juin 2008

Passer les intros Flash

Dans la discrétion, Google a releasé une killer app, très utile à ceux qui trouvent que les animations flash d'introduction à un site sont une perte de temps. Dans la liste des résultats de Google, quand c'est possible, un lien "Passer l'intro" est disponible. Exemple de recherche.
Ce lien renvoie à la page qui suit l'introduction en Flash. Simple et efficace =)

Libellés : , ,