2015-04-14 2 views
3

У меня была таблица под названием pivot_device_user и имела последовательность на id как not null default nextval('pivot_device_user_id_seq'::regclass).Переименовать nextval ('...') в Postgres

Затем я решил переименовать свой стол в pivot_box_user, но nextval(...) по-прежнему nextval('pivot_device_user_id_seq'::regclass).

Я хотел бы изменить его на nextval('pivot_box_user_id_seq'::regclass). Как мне это сделать?

+0

Нет, потому что последовательность на самом деле разрешение который предоставляется пользователю. Поэтому в настоящее время postgres возвращает ошибку, говорящую, что пользователь не имеет правильного разрешения. – Kousha

ответ

2

Сначала вы должны понять, что на самом деле serial:

Столбец по умолчанию фактически не хранится в виде текста буквальным. То, что вы видите только человек-читаемого текст представление: nextval('pivot_device_user_id_seq'::regclass)

'pivot_device_user_id_seq'::regclass разрешен к OID внутренне (regclass быть точными) - идентификатор объект от базовой последовательности - и это то, что на самом деле хранится (раннее связывание). Если вы переименуете последовательность, ее 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'); 

Связанный:

Смежные вопросы