CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Déplacer données sql

thetalc
thetalc
Niveau 11
13 août 2015 à 11:51:21

:salut:
J'ai 2 tables du même format dans une bdd postgresql. Chacune contient des données (pouvant aller jusqu'à environ 5 millions de lignes). Je cherche donc à déplacer les données d'une des tables vers l'autre, en sachant que certaines lignes de données exportées pourraient déjà se trouver dans la table où on importe, (clé primaire déjà existante), il faudrait alors plutôt faire un update qu'un insert.

Comment pourrais-je m'y prendre ?

Je pensais le faire en php mais ce sera trop long (requêtes select/insert à répétitions..). y aurait-il un moyen plus rapide ? Par exemple est-ce qu'il est possible de faire ça simplement avec du sql ?

Merci

lisarael
lisarael
Niveau 13
13 août 2015 à 12:08:09

Postgres a en interne deux outils spécifiquement faits pour ça : pgdump & pgrestore.
Tu trouveras la doc sur leur site.

thetalc
thetalc
Niveau 11
13 août 2015 à 14:11:13

J'ai regardé mais j'ai l'impression que pg_dump sauvegarde l'état de la table dans des fichiers non ?
Alors que je chercher à transférer des données d'une table vers une autre, ou alors il y a une option spéciale pour le faire mais je n'ai pas vu d'exemple associé

thetalc
thetalc
Niveau 11
13 août 2015 à 14:20:03

Je suis par contre tombé sur ça
INSERT INTO table2 SELECT * FROM table1;

Le problème c'est : si une des données copiée est déjà présente dans la table de destination est-ce qu'il est possible de faire en sorte que la donnée soit mise à jour (type update) ?

thetalc
thetalc
Niveau 11
13 août 2015 à 16:11:12

j'ai fait ça :

CREATE OR REPLACE FUNCTION deplacer_donnees_update() RETURNS VOID AS
$body$
DECLARE	
	curs refcursor;
	rowvar schema_test.test2%ROWTYPE;
BEGIN
	FOR rowvar IN SELECT * FROM schema_test.test2
	LOOP
		BEGIN
			INSERT INTO schema_test.test1 VALUES(rowvar.id, rowvar.nom);
		EXCEPTION WHEN unique_violation THEN
			UPDATE schema_test.test1 SET nom=rowvar.nom WHERE id=rowvar.id;
	        END;
	END LOOP;
END;
$body$
LANGUAGE plpgsql;

J'ai essayé sur 3 données ça fonctionne, est-ce que le fait de d'ouvrir un nouveau bloc (begin .. end) à chaque tour de boucle nuit beaucoup aux performances ?
Est-ce qu'il y a mieux à faire ?

Merci

Message édité le 13 août 2015 à 16:11:29 par thetalc
Darkandgel
Darkandgel
Niveau 10
13 août 2015 à 17:25:11

INSERT ON DUPLICATE KEY UPDATE

http://sql.sh/cours/insert-into/on-duplicate-key

thetalc
thetalc
Niveau 11
13 août 2015 à 21:15:07

J'étais tombé sur ça aussi mais cette fonctionnalité n'existe pas pour postgresql (enfin elle sera instaurée dans postgres 9.5) d'où le pl/pgsql ci-dessus :(

Message édité le 13 août 2015 à 21:16:21 par thetalc
Darkandgel
Darkandgel
Niveau 10
13 août 2015 à 22:19:36

Ah ouai... La vache, je pensais que c'eait beaucoup plus supporté que ça

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment