cómo mover tablas de public a otro esquema en Postgres


La base de datos Postgres 9.1 contiene tablas yksus1 .. ykssu9 en esquema público. pgAdmin muestra esas definiciones como en el código a continuación. ¿Cómo mover esas tablas al esquema firma1 ?

Otras tablas en el esquema firma1 tienen referencias de clave foránea a esas claves primay de tabla. Las referencias de clave foránea a esas tablas son solo de tablas en el esquema firma1.

Algunas de esas tablas contienen datos. Si las tablas se mueven al esquema firma1, las referencias de claves foráneas también deben actualizarse a firma1.yksusn tabla. Las estructuras de las tablas no se pueden cambiar.

Parece que las secuencias de clave primaria ya están en el esquema firma1, por lo que no deben moverse. Versión string PostgreSQL 9.1.2 en x86_64-unknown-linux-gnu, compilado por 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();

Otras tablas son similares:

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();
Author: Andrus, 2013-07-21

1 answers

ALTER TABLE yksus1
    SET SCHEMA firma1;

Más detalles en el manual: http://www.postgresql.org/docs/current/static/sql-altertable.html

Los índices asociados, las restricciones y las secuencias propiedad de las columnas de tabla también se mueven.

No estoy seguro acerca de la función de disparo, pero hay un equivalente ALTER FUNCTION .. SET SCHEMA ... también.

 49
Author: a_horse_with_no_name,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-21 07:42:05