powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как отключить все ключи (FK, PK)?
16 сообщений из 16, страница 1 из 1
Как отключить все ключи (FK, PK)?
    #39517879
Vlad_567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Как отключить все ключи на таблицах (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
Как отключить все ключи (FK, PK)?
    #39517897
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad_567> Как отключить все ключи на таблицах (FK, PK),
Vlad_567> а после экспорта-импорта включить их?

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

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

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

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

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

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


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


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

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

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

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


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