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/