You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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语句:

  1. 迁移序列到目标Schema:
ALTER SEQUENCE test.details_id_seq SET SCHEMA check;
  1. 更新表中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:45:37