4

我有一个名为的表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). 我该怎么做呢?

4

1 回答 1

4

首先,您必须了解 a 的serial真正含义:

列默认值实际上并未存储为文本文字。您看到的只是人类可读的文本表示:nextval('pivot_device_user_id_seq'::regclass)

'pivot_device_user_id_seq'::regclass被解析为OID内部(regclass准确地说) - 底层序列的 OID - 这就是实际存储的内容(早期绑定)。如果重命名序列,其 OID 保持不变。所以你需要做的就是重命名序列

ALTER SEQUENCE pivot_device_user_id_seq RENAME TO pivot_box_user_id_seq;

通过以下方式检查成功:

SELECT pg_get_serial_sequence('pivot_box_user', 'id');

有关的:

于 2015-04-15T01:31:29.317 回答