Postgresql 在Postgres中重命名nextval(';…';)

Postgresql 在Postgres中重命名nextval(';…';),postgresql,ddl,column-defaults,Postgresql,Ddl,Column Defaults,我有一个名为pivot\u device\u user的表,id上有一个序列作为notnull default nextval('pivot\u device\u user\u id\u seq'::regclass) 然后我决定将我的表重命名为pivot\u-box\u-user,但是nextval(…)仍然是nextval(pivot\u-device\u-user\u-id\u-seq'::regclass) 我想将其更改为nextval('pivot\u box\u user\u id\

我有一个名为
pivot\u device\u user
的表,id上有一个序列作为
notnull default nextval('pivot\u device\u user\u id\u seq'::regclass)

然后我决定将我的表重命名为
pivot\u-box\u-user
,但是
nextval(…)
仍然是
nextval(
pivot\u-device\u-user\u-id\u-seq'::regclass)


我想将其更改为
nextval('pivot\u box\u user\u id\u seq'::regclass)
。如何做到这一点?

首先,您必须了解什么是串行

列默认值实际上不是以文本文本形式存储的。您看到的只是人类可读的文本表示:
nextval('pivot\u device\u user\u id\u seq'::regclass)

'pivot\u device\u user\u id\u seq':regclass
在内部解析为一个
OID
,即底层序列的OID,这就是实际存储的内容(早期绑定)。如果重命名序列,其OID将保持不变。因此,您需要做的就是:

检查是否成功:

SELECT pg_get_serial_sequence('pivot_box_user', 'id');
相关的:


否,因为该序列实际上是授予用户的权限。因此,当前postgres返回一个错误,表示用户没有正确的权限。
SELECT pg_get_serial_sequence('pivot_box_user', 'id');