【问题标题】:how to move tables from public to other schema in Postgres如何在 Postgres 中将表从公共模式移动到其他模式
【发布时间】:2013-07-20 03:46:45
【问题描述】:

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

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

其中一些表包含数据。 如果表移动到firma1 模式,外键引用也应该更新到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();

其他表类似:

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

【问题讨论】:

    标签: sql postgresql postgresql-9.1


    【解决方案1】:
    ALTER TABLE yksus1
        SET SCHEMA firma1;
    

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

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

    虽然不确定触发功能,但也有一个等效的ALTER FUNCTION .. SET SCHEMA ...

    【讨论】:

    • 请注意名称冲突。如果任何表使用与目标架构相同的索引、约束等名称,则查询将失败。
    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2022-07-26
    • 2011-08-20
    • 2020-06-03
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多