2013-07-21 10 views
19

Il database di Postgres 9.1 contiene le tabelle yksus1 .. ykssu9 nello schema pubblico. pgAdmin mostra quelle definizioni come nel codice qui sotto. Come spostare tali tabelle nello schema firma1?come spostare tabelle da pubblico ad altro schema in Postgres

Altre tabelle nello schema firma1 hanno riferimenti a chiavi esterne a quelle chiavi di prim'ordine. I riferimenti a chiavi esterne a tali tabelle provengono solo da tabelle nello schema firma1.

Alcune di queste tabelle contengono dati. Se le tabelle vengono spostate nello schema firma1, i riferimenti di chiavi esterne devono essere aggiornati anche alle tabelle firma1.yksusn. Le strutture di tabella non possono essere modificate.

Sembra che le sequenze di chiavi primarie siano già nello schema firma1, quindi non devono essere spostate. stringa di versione PostgreSQL 9.1.2 su x86_64-unknown-linux-gnu, compilato da gcc-4.4.real (Debian 4.4.5-8) 4.4.5, a 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(); 

altre tabelle sono simili:

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

risposta

40
ALTER TABLE yksus1 
    SET SCHEMA firma1; 

Maggiori dettagli nel manuale: http://www.postgresql.org/docs/current/static/sql-altertable.html

associati indici, i vincoli, e S anche le equazioni possedute dalle colonne della tabella vengono spostate.

Non è sicuro circa la funzione trigger, però, ma non c'è un equivalente ALTER FUNCTION .. SET SCHEMA ... pure.

+1

Attenzione però per gli scontri sul nome. Se una delle tabelle utilizza gli stessi nomi per indici, vincoli ecc. Come lo schema di destinazione, la query avrà esito negativo. – Tim

Problemi correlati