2010-11-03 87 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