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

Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !

10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …

Faire un don 

Retrouver nos membres bienfaiteurs

#1 Tue 28 February 2023 15:29

image95
Participant assidu
Date d'inscription: 6 Sep 2014
Messages: 259

Postgresql : Déplacer tous les éléments vers 1 nouveau schéma

Bonjour,
Je souhaite trouver un moyen de déplacer 100 tables d'un schema 'A' vers un schema 'B'. Non seulement les données. Mais également les index, les clef primaires, contraintes (en quelque sorte INCLUDING ALL). Sauf erreur de ma part, ce bout de code permettrait de déplacer les données en tant que tel. Mais comment faire pour déplacer également les index, contraintes, clef primaire...

Code:

DO
$$
DECLARE
    row record;
BEGIN
    FOR row IN SELECT tablename FROM pg_tables WHERE schemaname = 'A' -- and other conditions, if needed
    LOOP
        EXECUTE format('ALTER TABLE A.%I SET SCHEMA [b];', row.tablename);
    END LOOP;
END;
$$;

Merci.

Hors ligne

 

#2 Sun 23 April 2023 19:50

JLH
Participant actif
Date d'inscription: 7 Dec 2019
Messages: 69

Re: Postgresql : Déplacer tous les éléments vers 1 nouveau schéma

Bonjour,

Le plus simple serait d'utiliser psql.

En executant  :
psql: "CREATE SCHEMA nouveau_schema -- le nom du nouveau schéma
  AUTHORIZATION mon_utilisateur -- le nom du futur proprietaire
  LIKE ancien_schema;" -- le nom de votre ancien schéma.

Cela copira non seulement les données, mais aussi les index et les contraintes ( sauf les clés étrangères).

Si vous souhaitez faire quand même avec votre code  :

Dans votre exemple, la première requête sélectionne une table : "SELECT tablename..." puis la copie, le tout dans une boucle.

Vous pouvez effectuer la même logique sur les index's, les clés primaires etc...

En commençant par les tables bien-sûr.

En espérant que ça aide.

Dernière modification par Jean HUMBERT (Sun 23 April 2023 19:52)

Hors ligne

 

Pied de page des forums

Powered by FluxBB