|
Проблема при попытке удаления таблицы
|
|||
---|---|---|---|
#18+
Имеется PostgreSQL 9.5 и возникла необходимость секционировать таблицу, но в ней много лишних данных и процесс может затянуться надолго. В общем было решено переименовать старую и создать новую, секционировать и далее уже залить только те данные, которые нужны. Вроде все просто, но возникла трабла, которую хотел бы обсудить. Как я понимаю злой постгрес запомнил и забывать не хочет. Вот собственно таблица myBase=# \d mytable Table "public.mytable" Column | Type | Modifiers ---------------+-----------------------------+------------------------------------------------------------------------------- myid | bigint | not null default nextval('mytable_myid_seq'::regclass) col2 | numeric | col3 | numeric | col4 | numeric | col5 | numeric | col6 | numeric | not null col7 | timestamp without time zone | not null Переименую табличку и точно таким же DDL создаю новую mytable и секционирую ее ALTER TABLE public.mytable RENAME TO mytable_old ; Если пытаюсь дропнуть таблицу, то ругается на зависимости, но это и понятно, там же сиквенс имеется mytable_myid_seq myBase=# \d mytable_old Table "public.mytable_old" Column | Type | Modifiers ---------------+-----------------------------+------------------------------------------------------------------------------- myid | bigint | not null default nextval('mytable_myid_seq'::regclass) col2 | numeric | col3 | numeric | col4 | numeric | col5 | numeric | col6 | numeric | not null col7 | timestamp without time zone | not null Изменяю табличку, чтобы не ссылалась ALTER TABLE public.mytable_old ALTER COLUMN myid DROP DEFAULT ; Теперь табличка без упоминания сиквенса myBase=# \d mytable_old Table "public.mytable_old" Column | Type | Modifiers ---------------+-----------------------------+---------------- myid | bigint | not null col2 | numeric | col3 | numeric | col4 | numeric | col5 | numeric | col6 | numeric | not null col7 | timestamp without time zone | not null Но пробую удалить и получаю myBase=# drop table mytable_old; ERROR: cannot drop table mytable_old because other objects depend on it DETAIL: default for table mytable column myid depends on sequence mytable_myid_seq default for table mytable column myid depends on sequence mytable_myid_seq default for table mytable_1 column myid depends on sequence mytable_myid_seq ... default for table mytable_42 column myid depends on sequence mytable_myid_seq HINT: Use DROP ... CASCADE to drop the dependent objects too. Не могу понять, где он припомнил мне зависимости. Сносить каскадом, естественно не вариант, но главное понять, как так... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 10:44 |
|
Проблема при попытке удаления таблицы
|
|||
---|---|---|---|
#18+
MakPol, сам сиквенс ещё через owned by привязывается. (не путайте с owner to) https://www.postgresql.org/docs/9.6/static/sql-altersequence.html Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 10:59 |
|
Проблема при попытке удаления таблицы
|
|||
---|---|---|---|
#18+
Хотя скорее не none лучше сделать, а перевесить на новую табличку ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 10:59 |
|
Проблема при попытке удаления таблицы
|
|||
---|---|---|---|
#18+
Вот век живи, век учись.... И ведь DDL генерил и там не было указано что owned by... Это один сиквенс к двум таблицам прикрутить захочется и надо про особенность такую помнить. А я что-то не глянул А заселектить куда сиквенс owned by не подскажете как можно? Или именно ArbCompiler=# \d mytable_myid_seq Sequence "public.mytable_myid_seq" Column | Type | Value ---------------+---------+----------------------------------------- sequence_name | name | mytable_myid_seq last_value | bigint | 4654516 start_value | bigint | 1 increment_by | bigint | 1 max_value | bigint | 9223372036854775807 min_value | bigint | 1 cache_value | bigint | 1 log_cnt | bigint | 0 is_cycled | boolean | f is_called | boolean | f Owned by: public.mytable_old.myid Еще бы понять нужно ли это owned by, пока ее смысла не пойму ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 11:20 |
|
Проблема при попытке удаления таблицы
|
|||
---|---|---|---|
#18+
MakPol, рекомендую pg_dump -s (остальные параметры по вкусу) - там как раз есть вызов owned by текущая привязка - да, именно в \d mytable_myid_seq в конце. Как это из каталога достаётся - посмотрите в psql -E какие запросы дёргаются. Зачем нужно и где используется - ну кроме разве что отслеживания зависимостей и удаления сиквенса автоматически вместе с табличкой его изначально породившей - не знаю, надо ковыряться ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 11:46 |
|
|
start [/forum/topic.php?fid=53&fpage=62&tid=1996041]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 28ms |
total: | 160ms |
0 / 0 |