it-swarm.com.de

Verschieben von Tabellen von einem öffentlichen in ein anderes Schema in Postgres

Die Postgres 9.1-Datenbank enthält die Tabellen yksus1 .. ykssu9 im öffentlichen Schema. pgAdmin zeigt diese Definitionen wie im folgenden Code an. Wie verschiebe ich diese Tabellen in das Schema firma1?

Andere Tabellen im Schema firma1 weisen Fremdschlüsselverweise auf diese Tabellenprimayschlüssel auf. Fremdschlüsselverweise auf diese Tabellen stammen nur aus Tabellen im Schema firma1.

Einige dieser Tabellen enthalten Daten. Wenn Tabellen in das Schema firma1 verschoben werden, müssen Fremdschlüsselverweise auch in die Tabellen firma1.yksusn aktualisiert werden. Tabellenstrukturen können nicht geändert werden.

Es sieht so aus, als ob sich Primärschlüsselsequenzen bereits im Schema firma1 befinden, sodass diese nicht verschoben werden sollten. Versionsstring PostgreSQL 9.1.2 auf x86_64-unknown-linux-gnu, kompiliert von 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();

andere Tabellen sind ähnlich:

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();
43
Andrus
ALTER TABLE yksus1
    SET SCHEMA firma1;

Weitere Details im Handbuch: http://www.postgresql.org/docs/current/static/sql-altertable.html

Zugehörige Indizes, Einschränkungen und Sequenzen, die zu Tabellenspalten gehören, werden ebenfalls verschoben.

Nicht sicher über die Trigger-Funktion, aber es gibt ein Äquivalent ALTER FUNCTION .. SET SCHEMA ... auch.

79