У меня есть стол, foo
. В целях быстрого обновления / развертывания моего сайта я создал новую таблицу, tmp_foo
, для хранения некоторых новых данных, выполнив:
create table tmp_foo (like foo including constraints including defaults including indexes);
Теперь у каждой таблицы есть столбец PK id
, который выглядит следующим образом:
Column | Type | Modifiers
-------------+-----------------------+--------------------------------------------------------------------------
id | integer | not null default nextval('foo_id_seq'::regclass)
Важным моментом является то, что обе таблицы опираются на одну и ту же последовательность foo_id_seq
. Там нет tmp_foo_id_seq
. Это кажется нормальным для моих целей.
После этого я загрузил tmp_foo
новыми данными и переименовал таблицы, так что tmp_foo
стал реальным foo
, а исходный foo
стал foo_old
. Сейчас я пытаюсь сбросить foo_old
:
db=> drop table foo_old ;
ERROR: cannot drop table foo_old because other objects depend on it
DETAIL: default for table foo_old column id depends on sequence foo_id_seq
Достаточно справедливо, значение столбца id
по-прежнему зависит от последовательности.
db=> alter table foo_old alter column id drop default;
Вот кикер.
db=> drop table foo_old ;
ERROR: cannot drop table foo_old because other objects depend on it
DETAIL: default for table foo column id depends on sequence foo_id_seq
Так что foo_old
больше не имеет видимой зависимости от последовательности, но все же пытается отбросить последовательность вместе с таблицей (и, очевидно, не будет, потому что от нее зависит новая таблица).
Итак, вопрос состоит из двух частей:
- Почему последовательность все еще связана
со старой таблицей?
- есть ли
способ обойти это, что не связано с
сделать новую таблицу зависит от
новая или другая последовательность (если это
бы даже помочь)?
(в PostgreSQL 8.4)