2013-07-21 3 views
19

База данных Postgres 9.1 содержит таблицы yksus1 .. ykssu9 в общедоступной схеме. pgAdmin показывает эти определения, как в коде ниже. Как переместить эти таблицы в схему firma1?Как перемещать таблицы из общедоступной в другую схему в Postgres

Другие таблицы в схеме firma1 имеют ссылки на внешние ключи для этих ключей таблицы. Ссылки на внешние ключи к этим таблицам относятся только к таблицам в схеме firma1.

Некоторые из этих таблиц содержат данные. Если таблицы перенесены в схему firma1, ссылки на внешние ключи также будут обновлены до таблиц firma1.yksusn. Структуры таблиц не могут быть изменены.

Похоже, что первичные ключевые последовательности уже находятся в схеме firma1, поэтому они не должны перемещаться. версия строки PostgreSQL 9.1.2 на x86_64-неизвестно-Linux-гну, составленный GCC-4.4.real (Debian 4.4.5-8) 4.4.5, 64-битный

CREATE TABLE yksus1 
(
    yksus character(10) NOT NULL DEFAULT ((nextval('firma1.yksus1_yksus_seq'::regclass))::text || '_'::text), 
    veebis ebool, 
    nimetus character(70), 
    "timestamp" character(14) DEFAULT to_char(now(), 'YYYYMMDDHH24MISS'::text), 
    username character(10) DEFAULT "current_user"(), 
    klient character(40), 
    superinden character(20), 
    telefon character(10), 
    aadress character(50), 
    tlnr character(15), 
    rus character(60), 
    CONSTRAINT yksus1_pkey PRIMARY KEY (yksus) 
); 
ALTER TABLE yksus1 
    OWNER TO mydb_owner; 

CREATE TRIGGER yksus1_trig 
    BEFORE INSERT OR UPDATE OR DELETE 
    ON yksus1 
    FOR EACH STATEMENT 
    EXECUTE PROCEDURE setlastchange(); 

другие таблицы похожи:

CREATE TABLE yksus2 
(
    yksus character(10) NOT NULL DEFAULT ((nextval('firma1.yksus2_yksus_seq'::regclass))::text || '_'::text), 
    nimetus character(70), 
    "timestamp" character(14) DEFAULT to_char(now(), 'YYYYMMDDHH24MISS'::text), 
    osakond character(10), 
    username character(10) DEFAULT "current_user"(), 
    klient character(40), 
    superinden character(20), 
    telefon character(10), 
    aadress character(50), 
    tlnr character(15), 
    rus character(60), 
    CONSTRAINT yksus2_pkey PRIMARY KEY (yksus), 
    CONSTRAINT yksus2_osakond_fkey FOREIGN KEY (osakond) 
     REFERENCES yksus2 (yksus) MATCH SIMPLE 
     ON UPDATE CASCADE ON DELETE NO ACTION DEFERRABLE INITIALLY IMMEDIATE 
); 
ALTER TABLE yksus2 
    OWNER TO mydb_owner; 

CREATE TRIGGER yksus2_trig 
    BEFORE INSERT OR UPDATE OR DELETE 
    ON yksus2 
    FOR EACH STATEMENT 
    EXECUTE PROCEDURE setlastchange(); 

ответ

40
ALTER TABLE yksus1 
    SET SCHEMA firma1; 

Подробнее в руководстве: http://www.postgresql.org/docs/current/static/sql-altertable.html

Ассоциированные индексов, и S Также перемещаются элементы, принадлежащие столбцам таблицы.

Не уверен, что о функции запуска, хотя, но есть эквивалент ALTER FUNCTION .. SET SCHEMA ..., а также.

+1

Позаботьтесь о столкновениях имен, хотя. Если какая-либо из таблиц использует те же имена для индексов, ограничений и т. Д. В качестве целевой схемы, запрос будет терпеть неудачу. – Tim

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