2010-11-03 5 views
0

J'essaie de trouver un moyen de copier un schéma sous un nom différent. Il y a manyways pour ce faire. Une façon est de travailler sur la ligne de commande, mais cela commence à se compliquer à cause des parties en mouvement (what user am I running as?).Comment utiliser des extraits de code PostgreSQL?

Si je peux simplement appeler une fonction dans la base de données, ce serait parfait. C'est à ce moment-là que j'ai vu this page.


CREATE OR REPLACE FUNCTION clone_schema(source_schema text, dest_schema text) RETURNS void AS 
$BODY$ 
DECLARE 
    objeto text; 
    buffer text; 
BEGIN 
    EXECUTE 'CREATE SCHEMA ' || dest_schema ; 


    FOR objeto IN 
     SELECT table_name::text FROM information_schema.TABLES WHERE table_schema = source_schema 
    LOOP   
     buffer := dest_schema || '.' || objeto; 
     EXECUTE 'CREATE TABLE ' || buffer || ' (LIKE ' || source_schema || '.' || objeto || ' INCLUDING CONSTRAINTS INCLUDING INDEXES INCLUDING DEFAULTS)'; 
     EXECUTE 'INSERT INTO ' || buffer || '(SELECT * FROM ' || source_schema || '.' || objeto || ')'; 
    END LOOP; 

END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE; 
Execution is simple: 
SELECT clone_schema('old_schema','new_schema'); 

Mais, je ne sais pas comment installer ces extraits. Comment je m'y prend? Il vous dit également "N'oubliez pas de créer la langue" mais je ne sais pas ce que c'est.

Merci d'avance!

Répondre

1

Vous utilisez la console PSQL pour cela. Connectez-vous et copiez-collez le script ou créez un fichier texte et dites à PSQL de le lire.

+0

Merci. La raison pour laquelle je voulais le faire de cette façon était parce que je suis déjà connecté à la base de données dans mon application. Je trouve un peu malodorant de sortir de l'application pour faire cette tâche. Aussi, je piggy back sur la logique de l'application doit se connecter à la base de données. Pour les autres, voici comment vous pouvez créer la langue nécessaire pour ce que j'ai demandé: http://goo.gl/uPREf –

+0

Créer ou remplacer la fonction doit être exécuté une seule fois, après que vous appelez la fonction de votre application. –

Questions connexes