PostgreSQL修改表所属Schema后,序列会自动创建到新Schema吗?
问题
假设存在名为test的Schema,其中有details表,表结构如下:
CREATE TABLE IF NOT EXISTS test.details ( id integer NOT NULL DEFAULT nextval('test.details_id_seq'::regclass), username character varying(50) COLLATE pg_catalog."default" NOT NULL )
关联的Sequencetest.details_id_seq已在test Schema中创建。现在创建新Schemacheck,并执行以下语句将表迁移至该Schema:
create schema check; alter table test.details set schema check;
请问此时Sequence会自动在check Schema中创建吗?
答案
不会,Sequence不会自动迁移到check Schema,它仍然保留在原来的test Schema中。
PostgreSQL的ALTER TABLE ... SET SCHEMA操作仅会移动表对象本身,不会自动处理表依赖的其他对象(比如序列、触发器、索引等)。如果需要将序列也迁移到check Schema,需要手动执行额外的SQL语句:
- 迁移序列到目标Schema:
ALTER SEQUENCE test.details_id_seq SET SCHEMA check;
- 更新表中id列的默认值,指向迁移后的序列(原默认值是硬编码的
test.details_id_seq,序列迁移后需要修正引用):
ALTER TABLE check.details ALTER COLUMN id SET DEFAULT nextval('check.details_id_seq'::regclass);
即便序列是通过SERIAL或IDENTITY自动创建的、和表存在OWNED BY关联,也不会让序列跟随表自动迁移,仍需手动执行上述步骤。
内容的提问来源于stack exchange,提问作者Abhishek K M
相关产品推荐
相关产品推荐

