微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 如何在Postgres中将表从public移动到其他模式

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

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

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

它看起来像主键序列已经在firma1模式,所以那些不应该移动.
版本字符串Postgresql 9.1.2 on 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),osakond character(10),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();

解决方法

ALTER TABLE yksus1
    SET SCHEMA firma1;

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

Associated indexes,constraints,and sequences owned by table columns are moved as well.

不知道触发功能,但是有一个等效的ALTER FUNCTION .. SET SCHEMA …以及.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐