2013-07-21 36 views
19

Postgres 9.1數據庫包含公共架構中的表yksus1 .. ykssu9。 pgAdmin以下面的代碼顯示了這些定義。 如何將這些表移動到firma1模式?如何在Postgres中將公共表移動到其他架構

firma1模式中的其他表具有對這些表主鍵的外鍵引用。對這些表的外鍵引用僅來自firma1模式中的表。

其中一些表包含數據。 如果表移動到firma1模式,那麼外鍵引用也應更新爲firma1.yksusn表。 表結構不能更改。

它看起來像主鍵序列已經在firma1模式,所以這些不應該移動。 版串的PostgreSQL 9.1.2在x86_64未知-Linux的GNU,與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

相關問題