如何在Postgres中将表从公共表移动到其他模式

And*_*rus 46 sql postgresql postgresql-9.1

Postgres 9.1数据库包含公共模式中的表yksus1 .. ykssu9.pgAdmin显示这些定义,如下面的代码所示.如何将这些表移动到firma1架构?

firma1模式中的其他表具有对这些表primay键的外键引用.对这些表的外键引用仅来自firma1模式中的表.

其中一些表包含数据.如果将表移动到firma1模式,则外键引用shouuld也会更新为firma1.yksusn表.表结构不能改变.

看起来主键序列已经在firma1架构中,因此不应移动它们.x86_64-unknown-linux-gnu上的版本字符串PostgreSQL 9.1.2,由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();
Run Code Online (Sandbox Code Playgroud)

其他表格类似:

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();
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 85

ALTER TABLE yksus1
    SET SCHEMA firma1;
Run Code Online (Sandbox Code Playgroud)

手册中的更多细节:http://www.postgresql.org/docs/current/static/sql-altertable.html

表列所拥有的关联索引,约束和序列也会被移动.

虽然不确定触发器功能,但也有相同的功能ALTER FUNCTION .. SET SCHEMA ....

  • 但要注意名字冲突.如果任何表使用相同的索引,约束等名称作为目标模式,则查询将失败. (4认同)