私はテーブルを持っています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 の場合)