私はテーブルを持っていますfoo
。サイトの迅速なアップグレード/展開のために、次のtmp_foo
ようにして、新しいデータを含む新しいテーブル を作成しました。
create table tmp_foo (like foo including constraints including defaults including indexes);
各テーブルには、id
次のような PK 列があります。
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
そのため、シーケンスへの目に見える依存関係はなくなりましたが、テーブルとともにシーケンスを削除しようとします (新しいテーブルがそれに依存しているため、明らかにそうしません) 。
したがって、質問は2部構成です。
- シーケンスがまだ古いテーブルにリンクされているのはなぜですか?
- 新しいテーブルを新しいシーケンスまたは別のシーケンスに依存させることを伴わない、これを回避する方法はありますか (それが役立つ場合)?
(PostgreSQL 8.4 の場合)