comment déplacer des tables de public vers un autre schéma dans Postgres
La base de données Postgres 9.1 contient les tables yksus1 .. ykssu9 dans le schéma public. pgAdmin montre ces définitions comme dans le code ci-dessous. Comment déplacer ces tables vers le schéma firma1 ?
Les autres tables du schéma firma1 ont des références de clé étrangère à ces clés de table primay. Les références de clé étrangère à ces tables proviennent uniquement des tables du schéma firma1.
Certaines de ces tables contiennent des données. Si tables est déplacé vers le schéma firma1, les références de clé étrangère doivent également être mises à jour vers firma1.yksusn table. Les structures de Table ne peuvent pas être modifiées.
Il semble que les séquences de clés primaires soient déjà dans le schéma firma1, donc celles-ci ne devraient pas être déplacées. Chaîne de Version PostgreSQL 9.1.2 sur x86_64-unknown-linux-gnu, compilé par gcc-4.4.réel (Debian 4.4.5-8) 4.4.5, 64 bits
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();
Les autres tableaux sont similaires:
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();
1 réponses
ALTER TABLE yksus1
SET SCHEMA firma1;
Plus de détails dans le manuel: http://www.postgresql.org/docs/current/static/sql-altertable.html
Les index associés, les contraintes et les séquences appartenant aux colonnes de la table sont également déplacés.
Pas sûr de la fonction de déclenchement, mais il existe également un ALTER FUNCTION .. SET SCHEMA ...
équivalent.