Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ссылка View на переименовываемую таблицу 
:(
    Опции темы
vadim245
Дата 25.3.2022, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.10.2008

Репутация: нет
Всего: нет



Некая система сериализует свои данные в таблицы PostgreSQL. Таблицы связей не имеют (разумеется можно в запросах связывать, для этого препятствий нет). Если изменяется структура сериализуемых данных для одной из таблиц (добавились поля, пропали поля, изменился тип поля и тд), система создает таблицу с таким же именем как и прежняя  с припиской окончания tmp и наполняет ее данными. По окончании синхронизации происходит переименование старой в *old а *tmp в оригинальное имя (без tmp). 
Для последующей работы с данными требуется писать view. Получили проблему - при автоматическом переименовании таблиц связи view убегают своими ссылками в старую таблицу *old. Выяснилась особенность Postgre - ссылаться по OID, а не по имени таблицы. В итоге представление продолжает использовать данные не актуальной таблицы. Вторая проблема - со временем таблицу *old при очередной итерации предстоит удалить, а у нее есть связи. Но это решается радикально каскадным удалением.
Есть ли какое-то решение? Как перестроить ссылки из View на новую таблицу с таким же именем как и в первой несмотря на то, что OID у нее теперь другой? Разумеется это убережет view и от каскадного удаления smile
PM MAIL   Вверх
Akina
Дата 26.3.2022, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 453



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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vadim245
Дата 27.3.2022, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.10.2008

Репутация: нет
Всего: нет



Цитата(Akina @ 26.3.2022,  15:25)
выгружать текст представления, а после внесения изменений пересоздавать его.

эмм... пересоздать view это половина дела, а как поймать новый oid, который система присвоила пересозданной таблице (которая была создана как "что-то-там-такое_tmp" и по готовности после полного заполнения превратилась просто в "что-то-там-такое" и заняла место прежней одноименной таблицы (а oid стал другим)?
PM MAIL   Вверх
Akina
Дата 28.3.2022, 09:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 453



Так представление при пересоздании оперирует именами, а не идентификаторами. Так что при пересоздании представления таблица будет опознана по имени, и в формализованное представление будет помещён её актуальный на момент пересоздания oid. Как-то я не понимаю сути проблемы...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.1145 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.