Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 24 January 2012 09:07

cyril_c
Participant assidu
Lieu: Périgueux
Date d'inscription: 13 Jan 2009
Messages: 176
Site web

[POSTGIS] Restauration d'une table

Bonjour
J'ai une question à propos de la restauration d'une table dans postgis. J'aurais voulu savoir si postgis gérait la subversion?
J'explique rapidement le contexte. J'ai un outil de saisie terrain qui remplit une base postgis en local, puis je fais une sauvegarde que je restaure sur mon serveur de production. Par contre, si je restaure une table avec une clef primaire, il me mets une erreur, donc au préalable, je dois supprimer cette table, et s'il n'y a pas de clef primaire, il me copie toute la table sauvegardé à la suite et donc ça fait des doublons.

Donc je voulais savoir si postgis avait une fonction de mise à jour de table ou s'il faut soit même se créer une fonction qui compare tous les champs?

Merci pour vos lumières

Hors ligne

 

#2 Tue 24 January 2012 11:05

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: [POSTGIS] Restauration d'une table

cyril_c a écrit:

Bonjour
J'ai une question à propos de la restauration d'une table dans postgis. J'aurais voulu savoir si postgis gérait la subversion?
J'explique rapidement le contexte. J'ai un outil de saisie terrain qui remplit une base postgis en local, puis je fais une sauvegarde que je restaure sur mon serveur de production. Par contre, si je restaure une table avec une clef primaire, il me mets une erreur, donc au préalable, je dois supprimer cette table, et s'il n'y a pas de clef primaire, il me copie toute la table sauvegardé à la suite et donc ça fait des doublons.

Donc je voulais savoir si postgis avait une fonction de mise à jour de table ou s'il faut soit même se créer une fonction qui compare tous les champs?

Merci pour vos lumières


Bonjour,

L'erreur générée par la clé primaire me semble bien normale, et meme salutaire:
Si vous voulez eviter les doublons, il faut bien, au moment de la restauration, prendre en compte ces erreurs.
Le pb doit venir du fait que cette mise a jour se fait dans une transaction: si une erreur est detectée pdt la transaction, celle-ci est annulée entierement.
Dans votre contexte, il faut sortir d'une transaction: l'erreur sur la clé primaire en double ne doit pas etre bloquante, pour permettre les autres insertions, mais juste informative (pour vérifier que l'erreur porte bien sur ces doublons, et pas autres chose).

Pour eviter de corrompre la table (en laissant une erreur se dérouler sans faire de rollback), je vous conseille, juste avant la restauration sur la base de prod, de faire une sauvegarde rapide de cette table:
create table matable_sauvegarde as select * from matable;

S'il se passe qqche de mal, vous pourrez revenir a la table de prod tres facilement.

Pourriez-vous nous décrire votre procedure de restauration, pour voir a quelle moment la transaction entre en jeu ?

Nicolas

Hors ligne

 

#3 Tue 24 January 2012 11:22

cyril_c
Participant assidu
Lieu: Périgueux
Date d'inscription: 13 Jan 2009
Messages: 176
Site web

Re: [POSTGIS] Restauration d'une table

La procédure est simple, je passe par pgadmin, je choisis le localhost, clique droit sur la table, sauvegarder. Puis je me mets sur la base sur le serveur distant qui m'intéresse, clique droit, restaurer. J'essaye de faire ça manuellement avant de créer un petit script.

Je comprends bien l'erreur avec une pk, mais je pensais, naïvement, que s'il y avait déjà un identifiant présent, il faisait un update de la ligne, et si la ligne n'existait pas, il faisait un insert. Mais apparemment non!

Dernière modification par cyril_c (Tue 24 January 2012 11:23)

Hors ligne

 

#4 Tue 24 January 2012 12:04

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: [POSTGIS] Restauration d'une table

cyril_c a écrit:

La procédure est simple, je passe par pgadmin, je choisis le localhost, clique droit sur la table, sauvegarder. Puis je me mets sur la base sur le serveur distant qui m'intéresse, clique droit, restaurer. J'essaye de faire ça manuellement avant de créer un petit script.

Je comprends bien l'erreur avec une pk, mais je pensais, naïvement, que s'il y avait déjà un identifiant présent, il faisait un update de la ligne, et si la ligne n'existait pas, il faisait un insert. Mais apparemment non!


Non effectivement.
La restauration d'une table, ce sont des insert ou copy suivant le mode choisi.
Dans votre cas, il faut faire un update (tous les champs deja existants), puis un insert (les nouveaux champs)

Nico

Hors ligne

 

#5 Tue 24 January 2012 12:16

cyril_c
Participant assidu
Lieu: Périgueux
Date d'inscription: 13 Jan 2009
Messages: 176
Site web

Re: [POSTGIS] Restauration d'une table

merci et bonne journée

Hors ligne

 

Pied de page des forums

Powered by FluxBB