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

Спасибо. Причина, по которой я хотел сделать это, состояла в том, что я уже подключен к базе данных в своем приложении. Мне кажется, что это немного неприятно, чтобы выйти из приложения, чтобы выполнить эту задачу. Кроме того, я вернусь к логике, которую приложение должно подключиться к db. Для других вы можете создать язык, необходимый для того, что я просил: http://goo.gl/uPREf –

+0

Создать или заменить функцию нужно запускать только один раз, после чего вы вызываете функцию из своего приложения. –

Смежные вопросы