在Postgres重命名nextval('...')

时间:2015-04-14 23:04:03

标签: postgresql ddl column-defaults

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

1 个答案:

答案 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');

相关: