2013-07-21 31 views
19

Cơ sở dữ liệu Postgres 9.1 chứa bảng yksus1 .. ykssu9 trong lược đồ công khai. pgAdmin hiển thị các định nghĩa như trong mã bên dưới. Làm thế nào để chuyển các bảng đó sang lược đồ firma1?cách di chuyển bảng từ công khai sang giản đồ khác trong Postgres

Các bảng khác trong lược đồ firma1 có tham chiếu khóa ngoài với các khóa primay bảng. Tham chiếu khóa ngoài cho các bảng này chỉ từ các bảng trong lược đồ firma1.

Một số bảng có chứa dữ liệu. Nếu các bảng được chuyển sang lược đồ firma1, các tham chiếu khóa ngoài shouuld cũng được cập nhật thành các bảng firma1.yksusn. Cấu trúc bảng không thể thay đổi.

Dường như chuỗi khóa chính đã có trong lược đồ firma1, vì vậy, các lược đồ đó không được di chuyển. Version chuỗi PostgreSQL 9.1.2 trên x86_64-biết-linux-gnu, biên soạn bởi gcc-4.4.real (Debian 4.4.5-8) 4.4.5, 64-bit

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(); 

bảng khác cũng tương tự như:

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(); 

Trả lời

40
ALTER TABLE yksus1 
    SET SCHEMA firma1; 

Xem thêm chi tiết trong cuốn hướng dẫn: http://www.postgresql.org/docs/current/static/sql-altertable.html

Associated chỉ số, hạn chế, và s các phương trình thuộc sở hữu của các cột trong bảng cũng được di chuyển.

Không chắc chắn về chức năng kích hoạt, mặc dù cũng có tương đương ALTER FUNCTION .. SET SCHEMA ....

+1

Hãy quan tâm đến các xung đột tên. Nếu bất kỳ bảng nào đang sử dụng cùng tên cho các chỉ mục, các ràng buộc, vv làm lược đồ đích, truy vấn sẽ thất bại. – Tim

Các vấn đề liên quan