Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как отключить все ключи (FK, PK)? / 16 сообщений из 16, страница 1 из 1
08.09.2017, 03:07
    #39517879
Vlad_567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Добрый день.

Как отключить все ключи на таблицах (FK, PK), а после экспорта-импорта включить их?


Нужно это вот для чего:
Пользователь работает с программой которая использует базу Firebird. У меня есть эта-же программа с базой (только данные в ней старые). Структура моей базы поменяется (я её доработаю, добавлю таблички, индексы, ...). А теперь пользователь должен из своей базы перегрузить свои данные в мою базу (перегрузку должна делать программа). Структура таблиц на 99% остаётся старой, т.е. добавится две-три новых таблички, или какая-то табличка разобъётся на две (часть полей останется в одной, часть в другой).
Таблиц в базе будет около 100-150, данных в табличках - не много, приблизительно до 10000-20000 записей.

Я хотел сделать так:
1. подключиться к своей базе, отключить все ключи (FK, PK)
2. удалить "почти" все (это и есть те одинаковые на 99% таблички для обоих баз) данные (удалить строки из таблиц).
3. в цикле пробежаться по "почти" всем табличкам и скопировать строки из базы пользователя в свою базу.
4. Оставшиеся данные (таблицы у которых поменялась структура) программа перенесёт по заложенному в неё алгоритму.
5. сделать на генераторах в своей базе - те-же значения, которые у пользователя, что-бы первичные ключи дальше генерировались правильно.
6. включить все ключи (FK, PK)

Пока при выключении FK индекса (ключ - это ссылка из таблички с данными, на табличку- справочник) столкнулся с ошибкой:
This operation is not defined for system tables.
unsuccessful metadata update.
ALTER INDEX @1 failed.
action cancelled by trigger (@1) to preserve data integrity.
Cannot deactivate index used by an integrity constraint.
...
Рейтинг: 0 / 0
08.09.2017, 06:55
    #39517897
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Vlad_567> Как отключить все ключи на таблицах (FK, PK),
Vlad_567> а после экспорта-импорта включить их?

Никак. Ни PK/FK, ни их индексы нельзя отключить.

> Нужно это вот для чего:
> А теперь пользователь должен из своей базы перегрузить
> свои данные в мою базу (перегрузку должна делать программа)

А почему программа и для чего это всё?
Почему нельзя просто скопировать его БД
(файл или бэкап) и просто все необходимые
изменения сделать над копией?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.09.2017, 10:23
    #39518014
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Vlad_567,

Не отключить/включить, а удалить/создать. Другого пути, похоже, нет.
...
Рейтинг: 0 / 0
08.09.2017, 10:29
    #39518018
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Другой путь очень даже может существовать, если задачу хорошенько обдумать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.09.2017, 11:47
    #39518052
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Похоже автору нужен репликатор.
...
Рейтинг: 0 / 0
08.09.2017, 11:58
    #39518060
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Репликатор со структурой БД не поможет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.09.2017, 11:58
    #39518061
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Да и операция у него, чую, разовая, а не регулярная.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.09.2017, 12:23
    #39518083
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Гаджимурадов РустамНикак. Ни PK/FK, ни их индексы нельзя отключить.
отключить-то можно, но в ФБ3 этот способ скорее всего работать не будет, хотя не проверял.
Собственно, сама идея отключить ПК и ФК, видимо, появилась из-за того, что автор не хочет выстраивать последовательность переноса данных. Понятно что без индексов заливка будет быстрее, но вряд-ли для автора сейчас это важный момент.

Vlad_5672. удалить "почти" все (это и есть те одинаковые на 99% таблички для обоих баз) данные (удалить строки из таблиц).
нафиг это надо делать, если вы можете своей базе сделать gbak -b -g -m, и получить пустой бэкап, а затем его отресторить. Будет пустая база, гораздо быстрее чем удалять записи.
Другой вариант - создать пустую базу из скрипта вашей (isql -x).
В общем, явно не хватает знаний об инструментарии.
...
Рейтинг: 0 / 0
08.09.2017, 12:44
    #39518105
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
kdv> отключить-то можно

Это хак. Да и разницы с удалением не будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.09.2017, 21:21
    #39518433
Старый плюшевый мишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Гаджимурадов РустамДругой путь очень даже может существовать, если задачу хорошенько обдумать.


Вот это надо высечь в камне.
...
Рейтинг: 0 / 0
08.09.2017, 21:27
    #39518434
Старый плюшевый мишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
kdvДругой вариант - создать пустую базу из скрипта вашей (isql -x).


Даже более того - сначала только той части скрипта, в которой create table, без констрайнтов и индексов. Потом заливка данных, потом оставшуюся часть скрипта. Правда, чует моя печень, потом будем объяснять почему не создаются FK :)
...
Рейтинг: 0 / 0
09.09.2017, 00:40
    #39518484
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
СПМ> Вот это надо высечь в камне.

Отлить в граните! (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.09.2017, 13:26
    #39527091
Vlad_567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Вопрос решил.
Сделал так:
В программе пользователь указывает файлы БД старый и новый. В новой базе удаляю все ключи (FK, UN). Из старой базы все записи копируются в новую базу, а потом все ключи восстанавливаются (создаются заново).

Нужно это было вот для чего: Пользователь работает со своей базой, через какое-то время я скидываю ему новую базу, пустую, в которой появились новые таблицы, индексы. Программа все данные переносит в новую базу и пользователь работает уже с новой базой и текущими данными (это будет после доработки программы). Если изменится структура - программа при переносе данных это уже учтёт. Сделать экспорт/импорт сам я не могу, т.к. к пользователю подключиться не могу, всё общение через третьих лиц, а доработки будут еще делаться.
...
Рейтинг: 0 / 0
27.09.2017, 13:42
    #39527101
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Vlad_567Пользователь работает со своей базой, через какое-то время я скидываю ему новую базу,
пустую, в которой появились новые таблицы, индексы.

А не проще ему скинуть скрипт создания новых таблиц и индексов в старой базе? Он будет
работать быстрее, чем переливка данных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.09.2017, 14:14
    #39527124
Василий №2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
+ за тулзу обновления. Сам так делаю.
...
Рейтинг: 0 / 0
28.09.2017, 15:05
    #39527702
o_v_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить все ключи (FK, PK)?
Аналогично на сотнях инсталляций нашей системы.
Эталонные метаданные вместе с новыми программами, генерация и выполнение на боевой базе разностного скрипта и замена программ.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как отключить все ключи (FK, PK)? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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