Как перемещать таблицы из общедоступной в другую схему в Postgres

База данных Postgres 9.1 содержит таблицы yksus1.. ykssu9 в общедоступной схеме. pgAdmin показывает эти определения, как в коде ниже. Как перенести эти таблицы в схему firma1?

Другие таблицы в схеме firma1 имеют ссылки на внешние ключи к этим ключевым символам таблицы. Ссылки на внешние ключи к этим таблицам относятся только к таблицам в схеме firma1.

Некоторые из этих таблиц содержат данные. Если таблицы перемещены в схему firma1, ссылки на внешние ключи также будут обновляться до таблиц firma1.yksusn. Структуры таблиц не могут быть изменены.

Похоже, что первичные ключевые последовательности уже находятся в схеме firma1, поэтому они не должны перемещаться. Строка версии PostgreSQL 9.1.2 на x86_64-unknown-linux-gnu, скомпилированная gcc-4.4.real(Debian 4.4.5-8) 4.4.5, 64-разрядная

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

другие таблицы аналогичны:

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

ALTER TABLE yksus1
    SET SCHEMA firma1;

Подробнее в руководстве: http://www.postgresql.org/docs/current/static/sql-altertable.html

Связанные индексы, ограничения и последовательности, принадлежащие столбцам таблицы, также перемещаются.

Однако не уверен в функции триггера, но есть эквивалент ALTER FUNCTION .. SET SCHEMA ....