Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2017, 13:24   #1
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию Postgres. Не даёт редактировать представление

Доброго времени суток.
Нужно отредактировать представление, редактирую - не хочет его компилировать, пишет:
Код:
ERROR:  cannot drop view v_all_zakazchik because other objects depend on it
DETAIL:  function "allZakazchik"() depends on type v_all_zakazchik
function "allZakazchikOfDog"(bigint) depends on type v_all_zakazchik
function "getZakazchikByID"(bigint) depends on type v_all_zakazchik
HINT:  Use DROP ... CASCADE to drop the dependent objects too.
Это получается мне нужно дропнуть 3 функции, изменить вьюшку и создать функции заново?
Ну, а если этих функций не 3, а 33 - это ж сколько гемора?
Может можно это сделать адекватно как ни будь?
Подскажите, кто чем может, пожалуйста.
Artsiom вне форума Ответить с цитированием
Старый 17.07.2017, 17:50   #2
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Да ну. Никто не сталкивался с этим?(
Artsiom вне форума Ответить с цитированием
Старый 17.07.2017, 23:10   #3
Haric_110
Форумчанин
 
Регистрация: 03.03.2013
Сообщений: 102
По умолчанию

ну, написано же, что есть зависимости...
лично мне редактировать представления ещё не приходилось, но когда возникают такие ситуации с таблицами, последовательностями и другими элементами, это означает, что перед удалением объекта необходимо либо разорвать связи (удалить ссылки на этот объект), либо удалить объекты ссылающиеся на него вместе с ним:
Код:
DROP VIEW v_all_zakazchik CASCADE;
У вас не просто 3 функции, а 3 функции, связанные непосредственно с этой вьюхой. Должно быть, эти функции как-то реагируют на запросы представления. Если удалить представление, функции ни к чему не будут привязаны, поэтому PostgreSQL говорит, что сначала функции удалять надо, а потом само представление.

Изменять вьюшку вам никто не запрещает:
Код:
ALTER VIEW ...
а вот дропать нельзя.

Цитата:
Сообщение от Artsiom Посмотреть сообщение
Да ну. Никто не сталкивался с этим?(
Кажется, на этом форуме SQL - непопулярная тема...
надо поднимать её

Последний раз редактировалось Аватар; 18.07.2017 в 16:54.
Haric_110 вне форума Ответить с цитированием
Старый 18.07.2017, 16:29   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ну так целостность же структуры базы. Исходники функций есть же, придется по-новой создать, хоть и 33 )) Да и ALTER VIEW может помочь, жаль что не для любых изменений вьюхи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.07.2017, 17:29   #5
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Получается как, есть функции где тип данных это представление.
Пример:
Код:
DECLARE --***--
ret v_all_zakazchik;	--возвращаемая строка типа выборки
zak zakazchik;			--обрабатываемая строка типа таблицы
naimreg VARCHAR(30);	--наименование региона заказчика
naimsob VARCHAR(150);	--наименование типа собственности
BEGIN --***--
-- перебираем всех заказчиков
FOR "zak" IN (SELECT * FR и т.д.
И собственно сама вьюха:
Код:
CREATE OR REPLACE VIEW public.v_all_zakazchik(
    "ID",
    naimzak,
    adres, и т.д.
Так, сволочь, в таблицу zakazchik даёт создать ещё одно поле, а в представлении нет. Хочет что бы функции были дропнуты.
Где логика?

Последний раз редактировалось Artsiom; 18.07.2017 в 17:33.
Artsiom вне форума Ответить с цитированием
Старый 18.07.2017, 18:05   #6
Haric_110
Форумчанин
 
Регистрация: 03.03.2013
Сообщений: 102
По умолчанию

Да, похоже, единственный путь - пересоздание вьюхи и всех функций, связанных с ней...
Но если есть исходный код, как отметил Аватар, это не сложно, можно вынести в отдельный скрипт.
Haric_110 вне форума Ответить с цитированием
Старый 18.07.2017, 19:04   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Где логика?
Наверно в том, что ALTER TABLE может добавить поле, а ALTER VIEW нет. Только DROP И CREATE
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не даёт покоя TFileStream и fmShareDenyNone. avd Общие вопросы Delphi 14 30.10.2020 11:33
postgres курсоры SkrudjMakdak SQL, базы данных 1 08.03.2014 14:12
Запрос даёт не то что надо Zercon Помощь студентам 0 13.11.2012 22:15
Удаление в dataGridView даёт ошибку. KatruKot C# (си шарп) 2 07.05.2012 10:21
Программа не даёт выключить компьютер Shouldercannon Общие вопросы Delphi 3 22.08.2011 11:12