sql - 如何将表从公共(public)模式移动到 Postgres 中的其他模式

标签 sql postgresql postgresql-9.1

Postgres 9.1 数据库在公共(public)模式中包含表 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),
  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();

最佳答案

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 ...

关于sql - 如何将表从公共(public)模式移动到 Postgres 中的其他模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17770117/

相关文章:

sql - 从 ISO Week (201905) BigQuery 中提取日期

mysql - 在Mysql查询浏览器中将结果集转换为表或.sql文件?

python - 使用新值更新 Enum 后,无法使用 psycopg2 插入该值

sql - 错误 : permission denied for sequence cities_id_seq using Postgres

sql - 这个sql算法的性能更好?

sql - 在 Oracle 上与 INSERT INTO 结合使用时,有效的 GROUP BY 查询不起作用

php - SQL注入(inject)语句

regex - 从 regexp_matches 中检索结果作为一行

ubuntu-12.04 - Ubuntu 12.04、PostgreSQL-9.1 - 无法访问 $libdir/postgis-2.0

hibernate - postgresql:将 bytea 转换为 bigint