|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Добрый день! Начиналось все с того, что потребовалось сохранять в базе пользовательские настройки положения столбцов в гриде, их видимость и т.п. Появилась соответствующая таблица, в которой для определенного перечня наборов данных перечислены столбцы и из параметры, что-то типа: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Позднее появилась мастер-таблица для нее, в которую вынесены параметры самих наборов данных: Код: sql 1. 2. 3. 4. 5. 6.
Значительная часть НД относится к генерации отчетов и в них время от времени меняются поля. Возникло резонное желание автоматизировать процесс переноса информации об изменении метаданных о полях из таблиц в Subj в таблицу Columns, просится триггер AIUD на две системные таблицы. Есть ли подводные камни у такого решения и противопоказания? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2013, 11:02 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
эти триггера не переживут backup/restore ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2013, 11:11 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Триггеры на системные таблицы не бэкапятся и, соответственно, их не будет в отресторенной базе. Это как минимум. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2013, 11:12 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Кстати, если проверять наличие триггеров в триггере на ON CONNECT, то ведь можно их и создать при отсутствии. Какие косяки могут быть в этом случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2013, 11:17 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
dimitrэти триггера не переживут backup/restoreМ-да, тогда смысл теряется... Т.е. единственный вариант - ручной запуск некой ХП по факту внесения изменений? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2013, 11:20 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
IBExpert, что называется "пользуясь случаем": есть небольшое неудобство при создании SP в IBExpert, а именно dropdown-список доменов при выборе типа поля не отсортирован по умолчанию ни по имени, ни по другому признаку, что не очень удобно при объемном списке доменов :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2013, 11:23 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Kirill Razuvaevесть небольшое неудобство при создании SP в IBExpert, а именно dropdown-список доменов при выборе типа поля не отсортирован по умолчанию ни по имени, ни по другому признаку, что не очень удобно при объемном списке доменов :-) Там по любой колонке можно отсортировать, и сортировка запоминается. Посмотри внимательно, не отсортировано ли по какой-то другой колонке. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2013, 11:36 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
IBExpertТам по любой колонке можно отсортировать, и сортировка запоминается. Посмотри внимательно, неотсортировано ли по какой-то другой колонке.Кхм... Интересно, у меня почему-то там стояло по чарсету... Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2013, 11:47 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Kirill RazuvaevIBExpertТам по любой колонке можно отсортировать, и сортировка запоминается. Посмотри внимательно, неотсортировано ли по какой-то другой колонке.Кхм... Интересно, у меня почему-то там стояло по чарсету... Спасибо. Посмотрел у себя - то же самое. Сортировка стоит по чарсету.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2013, 12:22 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
IBExpert, и сортировка, кстати, не сохраняется. При создании новой процедуры опять по чарсету... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 12:07 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Kirill Razuvaevпросится триггер AIUD на две системные таблицы. Есть ли подводные камни у такого решения и противопоказания? dimitrэти триггера не переживут backup/restore 26.04.2011 12:30 ДЕ: "Еще лет 10 назад на всех углах кричали, что триггера на системные таблицы могут: а) вообще не работать (редко) б) не работать после переподключения (часто) в) теряться после рестора (всегда) И фиксить это никто не будет :-)" Пункты а и б уже не актуальны? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 12:37 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Евгений Килин, я озвучил лишь 100%-но гарантированный результат :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 12:46 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Конкретно по таблице RDB$RELATION_FIELDS в FIREBIRD 1.5 (разных сборок) никаких проблем с триггерами не было, ни после переподключения, ни после рестора, работали как часы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 18:15 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
ggreggoryв FIREBIRD 1.5 Однако, ты некрофил. С любой стороны. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 18:20 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
FB 3 уже не дает создавать триггеры. Пишет CREATE TRIGGER ... failed. no permission for ALTER access to TABLE RDB$RELATION_FIELDS. У кого-нибудь получилось обойти это ограничение? Также в новых версиях Firebird появился UNIQUE (RDB$FIELD_NAME, RDB$RELATION_NAME), но вшений ключ на него не добавляется. Пишет no permission for REFERENCES access to TABLE RDB$RELATION_FIELDS. Тоже засада. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 18:26 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Перестань мучить трупы и открой для себя DDL триггера. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 18:35 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Перестань мучить трупы и открой для себя DDL триггера. А как с их помощью них можно отследить изменение имени поля таблицы? Единственная переменная, в которой можно найти имя поля - rdb$get_context('DDL_TRIGGER', 'SQL_TEXT'). Но там SQL-запрос, его нужно парсить, а это не такая простая задача. Может я не догнал чего-то? Ткните, пожалуйста! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 18:43 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
ggreggoryА как с их помощью них можно отследить изменение имени поля таблицы? Сравнивая новое имя со старым. Но, собственно говоря, зачем? Поля идентифицируются по номеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 18:48 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
ggreggory, сама идея отследить какое поле переименовали бредовая, хотя бы потому что за одну DDL команду можно переименовать несколько полей. Да и вообще в чём задача то? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 19:05 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov ggreggoryА как с их помощью них можно отследить изменение имени поля таблицы? Сравнивая новое имя со старым. Но, собственно говоря, зачем? Поля идентифицируются по номеру. Правильно ли я понимаю, что речь о поле RDB$RELATION_FIELDS.RDB$FIELD_ID ? И Ваша идея заключается в том, что, например, в триггере BEFORE сохранить во временном контексте названия полей по их номеру из RDB$FIELD_ID. А потом в триггере AFTER сравнить новые имена полей с теми, что были сохранены в триггере BEFORE ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 19:12 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
Симонов Денис ggreggory, сама идея отследить какое поле переименовали бредовая, хотя бы потому что за одну DDL команду можно переименовать несколько полей. Да и вообще в чём задача то? Да-да, в том то и дело, что триггер срабатывает единократно, а внутри может быть куча изменений в таблице - и добавление, и удаление, и изменение полей и добавление ключей. Но тут выше предложили классную идею с идентификацией по номеру поля. Возможно, это выход! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 19:16 |
|
Триггеры на RDB$RELATION_FIELDS и RDB$RELATION_FIELDS
|
|||
---|---|---|---|
#18+
ggreggoryИ Ваша идея заключается в том, что, например, в триггере BEFORE сохранить во временном контексте названия полей по их номеру из RDB$FIELD_ID. А потом в триггере AFTER сравнить новые имена полей с теми, что были сохранены в триггере BEFORE ? Моя идея заключается в том, что тебе вообще не нужно отслеживать переименование полей. Ты либо даёшь полям осмысленные имена и тогда их переименование меняет их значение и старые атрибуты уже не должны применяться к полю с новым имененм, либо даёшь бессмысленные имена (как у Болтика) и никогда их не переименовываешь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 19:21 |
|
|
start [/forum/topic.php?fid=40&msg=38321567&tid=1560361]: |
0ms |
get settings: |
18ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
18ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 169ms |
0 / 0 |