테이블이 foo
입니다.관련된 시퀀스를 삭제하지 않고 PostgreSQL에서 테이블 삭제
create table tmp_foo (like foo including constraints including defaults including indexes);
이제 각 테이블처럼 보이는 PK id
열이 : 빠른 업그레이드의 목적을 위해/내 사이트의 배포, 나는 새 테이블, tmp_foo
을 수행하여, 새로운 데이터를 포함했다
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
가 더 이상 순서에 보이는 의존성이없는, 그러나 여전히 테이블과 함께 순서를 드롭을 시도 (분명히과 의지 새 테이블은 따라 달라 때문이 아니라). 이전 테이블에
- 왜 순서가 여전히 연결되어 : 그래서 질문이 두 부분입니까?
- 새 테이블을 를 포함하지 않는이 주변에 어떤 방법은 거기 신규 또는 다른 순서 (있는 경우 그 것조차 도움)에 따라인가?
아하를 사용하여 검색 할 수 있습니다. 그게 효과가 있었어. (실제로, 내가 편집증 환자 였기 때문에 나는 새 테이블을 소유자가 아닌 소유자로 만들었습니다.) 시퀀스의 소유자를 검사하는 방법을 알고 있습니까? '\ d'는 그것을 표시하지 않고'select * from foo_id_seq'도하지 않습니다. –
코멘트에서 SQL 문 형식을 올바르게 지정하는 방법을 모르겠으므로이 문을 내 대답에 추가했습니다. –