94 votes

comment déplacer des tables du schéma public vers un autre schéma dans Postgres ?

La base de données Postgres 9.1 contient des tables yksus1 ykssu9 dans le schéma public. pgAdmin affiche ces définitions comme dans le code ci-dessous. Comment déplacer ces tables vers le schéma firma1 ?

D'autres tables du schéma firma1 ont des références de clés étrangères aux clés primaires de ces tables. Les références aux clés étrangères de ces tables proviennent uniquement des tables du schéma firma1.

Certains de ces tableaux contiennent des données. Si les tables sont déplacées vers le schéma firma1, les références aux clés étrangères doivent également être mises à jour vers les tables firma1.yksusn. Les structures des tables ne peuvent pas être modifiées.

Il semble que les séquences de clés primaires sont déjà dans le schéma firma1 donc elles ne devraient pas être déplacées. Version string PostgreSQL 9.1.2 sur x86_64-unknown-linux-gnu, compilé par 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();

Les autres tables 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();

194voto

a_horse_with_no_name Points 100769
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, contraintes et séquences associés appartenant aux colonnes de la table sont également déplacés.

Je ne suis pas sûr de la fonction de déclenchement, mais il existe un équivalent. ALTER FUNCTION .. SET SCHEMA ... également.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X