powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема при попытке удаления таблицы
5 сообщений из 5, страница 1 из 1
Проблема при попытке удаления таблицы
    #39570169
MakPol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется 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.

Не могу понять, где он припомнил мне зависимости. Сносить каскадом, естественно не вариант, но главное понять, как так...
...
Рейтинг: 0 / 0
Проблема при попытке удаления таблицы
    #39570187
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MakPol,

сам сиквенс ещё через owned by привязывается. (не путайте с owner to) https://www.postgresql.org/docs/9.6/static/sql-altersequence.html
Код: sql
1.
alter sequence tablename_id_seq owned by none;
...
Рейтинг: 0 / 0
Проблема при попытке удаления таблицы
    #39570189
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя скорее не none лучше сделать, а перевесить на новую табличку
...
Рейтинг: 0 / 0
Проблема при попытке удаления таблицы
    #39570207
MakPol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот век живи, век учись.... И ведь 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, пока ее смысла не пойму
...
Рейтинг: 0 / 0
Проблема при попытке удаления таблицы
    #39570227
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MakPol,

рекомендую pg_dump -s (остальные параметры по вкусу) - там как раз есть вызов owned by
текущая привязка - да, именно в \d mytable_myid_seq в конце. Как это из каталога достаётся - посмотрите в psql -E какие запросы дёргаются.
Зачем нужно и где используется - ну кроме разве что отслеживания зависимостей и удаления сиквенса автоматически вместе с табличкой его изначально породившей - не знаю, надо ковыряться
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема при попытке удаления таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]