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

#1 08/07/2011 11:22:20

marc.stx
Membre

Trier et sauvegarder une table

Bonjour,

J'essaye d'effectuer un opération toute simple, mais je n'y arrive pas.
Je voudrai trier une table en fonction d'une variable et enregistrer la table.
Voici le script utilisé :

SELECT * FROM ma_table ORDER BY "ma_var" FOR UPDATE

La table est bien triée, mais elle n'est pas sauvegardée triée.

Hors ligne

#2 08/07/2011 11:57:55

gleu
Administrateur

Re : Trier et sauvegarder une table

Le SELECT ... FOR UPDATE n'est pas fait pour ça. La première solution serait d'utiliser CLUSTER. Les données seront stockées triées d'après un index fourni en argument de CLUSTER (http://docs.postgresql.fr/9.0/sql-cluster.html). Une deuxième solution serait de créer une nouvelle table identique à la première (CREATE TABLE ... (LIKE table_a_copier autres_options)...), puis d'y insérer les données (INSERT INTO nouvelle_table SELECT * FROM table_a_copier ORDER BY la_colonne_de_tri). Ensuite, suppression de l'ancienne table, renommage de la nouvelle. Le tout dans une transaction pour que cela ne gêne personne, et en verrouillant la table pour que personne ne la modifie pendant la transaction.


Guillaume.

Hors ligne

#3 08/07/2011 12:22:49

marc.stx
Membre

Re : Trier et sauvegarder une table

Ok, en fait ce n'est pas vraiment possible de le faire directement.
Merci beaucoup.

Hors ligne

#4 08/07/2011 12:40:06

marc.stx
Membre

Re : Trier et sauvegarder une table

Visiblement la syntaxe n'est pas bonne ? ça bloque sur le "LIKE"

CREATE TABLE new_table LIKE old_table
INSERT INTO new_table SELECT * FROM old_table ORDER BY ma_variable

Dernière modification par marc.stx (08/07/2011 12:40:30)

Hors ligne

#5 08/07/2011 13:24:48

gleu
Administrateur

Re : Trier et sauvegarder une table

Le LIKE doit être compris dans les parenthèses comme je l'indiquais plus haut. Voir aussi http://docs.postgresql.fr/9.0/sql-select.html .


Guillaume.

Hors ligne

#6 08/07/2011 14:27:38

marc.stx
Membre

Re : Trier et sauvegarder une table

Parenthèse plus virgule entre CREATE et INSERT voilà les erreurs.
Mon SQL est encore balbutiant...

Merci pour votre aide.

Hors ligne

Pied de page des forums