powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проверка, есть ли ссылка на таблицу
1 сообщений из 1, страница 1 из 1
Проверка, есть ли ссылка на таблицу
    #39254403
stim644
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Удаляю таблицу dict_okpd. Мне такая ошибка:
ОШИБКА: UPDATE или DELETE в таблице "dict_okpd" нарушает ограничение внешнего ключа "fk_dict_service_to_okpd" таблицы "dict_service"
DETAIL: На ключ (entry_id)=(1569050) всё ещё есть ссылки в таблице "dict_service".

С помощью запроса:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SELECT 
  tc.table_name,
  kcu.column_name,
  ccu.table_name AS references_table,
  ccu.column_name AS references_field

FROM information_schema.table_constraints tc

LEFT JOIN information_schema.key_column_usage kcu
  ON tc.constraint_catalog = kcu.constraint_catalog
  AND tc.constraint_schema = kcu.constraint_schema
  AND tc.constraint_name = kcu.constraint_name

LEFT JOIN information_schema.referential_constraints rc
  ON tc.constraint_catalog = rc.constraint_catalog
  AND tc.constraint_schema = rc.constraint_schema
  AND tc.constraint_name = rc.constraint_name

INNER JOIN information_schema.constraint_column_usage ccu
  ON rc.unique_constraint_catalog = ccu.constraint_catalog
  AND rc.unique_constraint_schema = ccu.constraint_schema
  AND rc.unique_constraint_name = ccu.constraint_name
 
WHERE  lower(tc.constraint_type) in ('foreign key')   and ccu.table_name = 'dict_okpd';


Я нашел, что на нее ссылаются таблицы dict_service и doc_contract_сomposition и собственно сама dict_okpd, т.к. в dict_okpd есть поле parent(т.е. это иерархичный справочник). Все бы хорошо, я бы нашел в каких полях таблиц dict_service и doc_contract_сomposition есть ссылки на dict_okpd. Но вот проблема. Так же в той ошибке, что я привел выше появляются parent_id. И причем не все, а лишь где то 10 строк. А остальные почему то postgres посчитал, что это не constraint.

Т.е. с таким запросом нормально удаляется:
Код: plsql
1.
2.
3.
delete from dict_okpd where entry_id <> 1569050 and entry_id <> 1233963 and entry_id <> 1232498 and entry_id <> 1231878 and entry_id <> 1231607 and entry_id <> 1231520
  and entry_id <> 1231500 and entry_id <> 1126365 and entry_id <> 1126297   and entry_id <> 1567829 and entry_id <> 1567392
  and entry_id <> 1567220  and entry_id <> 1567172 and entry_id <> 1567220



Вот собственно вопрос, можно как то найти все ошибки такие сразу?
И второй вопрос: почему мне постгрес вывел как ошибку только несколько строк, а не гораздо больше, т.к. у меня много родителей?
Спасибо
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проверка, есть ли ссылка на таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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