2010-11-03 89 views
0

我試圖找到一種方法來複制一個架構下不同的名稱。有manyways這樣做。一種方法是在命令行上工作,但由於移動部分(what user am I running as?),它開始變得複雜。如何使用PostgreSQL代碼片段?

如果我可以簡單地調用數據庫中的函數,那將是完美的。那時我看到了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'); 

但是,我不知道如何安裝這些片段。 我該如何去做?它也告訴你「只記得創建語言」但我不知道那是什麼。

提前致謝!

回答

1

您使用PSQL控制檯爲此。登錄並複製粘貼腳本或創建一個文本文件並告訴PSQL讀取它。

+0

謝謝。我想這樣做的原因是因爲我已經連接到我的應用程序中的數據庫。我覺得走出應用程序來完成這項任務有點臭。此外,我捎帶應用程序必須連接到數據庫的邏輯。對於其他人,這是如何創建所需的語言爲我所要求的:http://goo.gl/uPREf – 2010-11-03 11:05:03

+0

創建或替換功能需要運行一次,之後,你從你的應用程序調用函數。 – 2010-11-03 11:14:42