我有一个名为pivot_device_user
的表,其ID上的序列为not null default nextval('pivot_device_user_id_seq'::regclass)
。
然后我决定将我的表重命名为pivot_box_user
,但nextval(...)
仍为nextval('pivot_device_user_id_seq'::regclass)
。
我想将其更改为nextval('pivot_box_user_id_seq'::regclass)
。我该怎么做?
答案 0 :(得分:2)
首先,你必须了解serial
到底是什么:
列默认值实际上并不存储为文本文字。你看到的只是人类可读的文字表示:nextval('pivot_device_user_id_seq'::regclass)
'pivot_device_user_id_seq'::regclass
在内部被解析为OID
(确切地说是regclass
) - 基础序列的OID - 这就是实际存储的内容(早期绑定)。如果重命名序列,则其OID保持不变。所以你需要做的就是rename the sequence:
ALTER SEQUENCE pivot_device_user_id_seq RENAME TO pivot_box_user_id_seq;
使用以下方法检查成功:
SELECT pg_get_serial_sequence('pivot_box_user', 'id');
相关: