стол для удаления postgresql - PullRequest
3 голосов
/ 28 ноября 2011

У меня есть две таблицы (tbl и tbl_new), которые обе используют одну и ту же последовательность (tbl_id_seq).Я хотел бы бросить одну из этих таблиц.В tbl я удалил модификатор "notval по умолчанию nextval ('tbl_id_seq' :: regclass)", но этот модификатор остается в tbl_new.Я получаю следующую ошибку:

ОШИБКА: невозможно удалить таблицу tbl, потому что от нее зависят другие объекты. ПОДРОБНЕЕ: значение по умолчанию для идентификатора столбца таблицы tbl_new зависит от последовательности tbl_id_seq

После просмотра http://www.postgresql.org/docs/9.1/static/sql-droptable.html Похоже, есть только КАСКАД и ОГРАНИЧЕНИЕ в качестве опций.

Ответы [ 2 ]

6 голосов
/ 28 ноября 2011

Вам нужно отделить последовательность и таблицу, к которой она "принадлежит":

ALTER SEQUENCE "tbl_id_seq" OWNED BY NONE;

Я полагаю, она была создана автоматически (и "связана") путем определения поля tbl_id для tbl как SERIAL.

2 голосов
/ 28 ноября 2011

К поиск последовательностей и всех таблиц, которые зависят от них через столбец по умолчанию:

SELECT sn.nspname || '.' || s.relname AS seq
      ,tn.nspname || '.' || t.relname AS tbl
FROM   pg_class s
JOIN   pg_namespace sn ON sn.oid = s.relnamespace
LEFT   JOIN pg_depend d ON d.refobjid = s.oid AND d.deptype <> 'i'
LEFT   JOIN pg_attrdef ad ON ad.oid = d.objid
LEFT   JOIN pg_class t ON t.oid = ad.adrelid
LEFT   JOIN pg_namespace tn ON tn.oid = t.relnamespace
WHERE  s.relkind = 'S'
AND    s.relname ~~ '%part_of_seq_name%' -- enter search term here
ORDER  BY 1,2;

Теперь с LEFT JOIN, чтобы также показать "отдельно стоящие" последовательности.
Затем вы можете использовать метод @Milen разместил, чтобы сделать последовательность "отдельно стоящей".

Я отправил связанный ответ несколько дней назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...