2013-07-21 20 views
19

Postgres 9.1データベースには、パブリックスキーマ内のテーブルyksus1 .. ykssu9が含まれています。 pgAdminは以下のコードのような定義を表示します。 これらのテーブルをfirma1スキーマに移動する方法は?Postgresの公開スキーマから他のスキーマへの移動方法

firma1スキーマ内の他のテーブルには、これらのテーブルプライマリキーへの外部キーリファレンスがあります。これらのテーブルへの外部キー参照は、firma1スキーマ内のテーブルからのみです。

これらのテーブルには、データが含まれているものがあります。 テーブルをfirma1スキーマに移動すると、外部キーの参照もfirma1.yksusnテーブルに更新されます。 テーブル構造は変更できません。

主キーシーケンスはすでにfirma1スキーマにあるように見えますが、移動してはいけません。 GCC-4.4.realでコンパイルx86_64で、未知のLinux GNUで バージョンストリングのPostgreSQL 9.1.2(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表の列が所有するequencesも同様に移動されます。

トリガー機能についてはわかりませんが、等価のALTER FUNCTION .. SET SCHEMA ...もあります。

+1

ただし、名前の衝突には注意してください。いずれかの表が、宛先スキーマとして索引、制約などに同じ名前を使用している場合、照会は失敗します。 – Tim

関連する問題