Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Удаление записей за период времени / 25 сообщений из 27, страница 1 из 2
16.05.2018, 15:42
    #39645613
karpov-ukg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
Здравствуйте.
Есть программа стороннего разработчика под FireBird 1.5.
В одной таблице накопилось большое количество записей. Но в программе не предусмотрено групповое удаление записей. Подключил ее в IBExpert. Думаю, что можно удалить все записи за определенный период при помощи запроса.
О БД имею теоретические знания. Но предполагаю, что запрос должен начинаться как-то так:
DELETE FROM TABLE_NAME WHERE ... дальше не знаю что писать. По-русски он звучит так: УДАЛИТЬ В ТАБЛИЦЕ ЗАПИСИ ОТ 01.01.2005 ДО 01.01.2015
Понимаю всю наглость своей просьбы, но так как задача одноразовая...
Может кто-то напишет мне шаблон запроса? Как для блондинки.
Или в IBExpert есть такая штатная функция?
К пинкам, плевкам и анальному выпилу из реальности готов.
...
Рейтинг: 0 / 0
16.05.2018, 15:58
    #39645625
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukg,

DELETE FROM TABLE_NAME WHERE date between '2005-01-01' and '2014-12-31'.
...
Рейтинг: 0 / 0
16.05.2018, 15:59
    #39645626
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukgесть такая штатная функция?
Нет.
Если нет специального поля типа "ДатаСозданияЗаписи" - то нельзя никак.
Да и если есть - откуда ты знаешь, важна ли эта запись.
Нужно искать этого стороннего разработчика.
...
Рейтинг: 0 / 0
16.05.2018, 16:04
    #39645630
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
KreatorXXI,

спасибо, добрый человек!
...
Рейтинг: 0 / 0
16.05.2018, 16:08
    #39645634
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukg,

И не забыть подтвердить транзакцию (кнопка с зелёной галкой).
...
Рейтинг: 0 / 0
16.05.2018, 16:12
    #39645635
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukg, и до кучи KreatorXXI

в базе не всегда можно что-то удалить, казалось-бы "лишнее". Например, в бухгалтерской БД нельзя просто удалить что-то за прошлый год. Должна быть специальная процедура "свёртки".
Кроме того, определенные данные невозможно удалить из-за связей с другими данными.
Допустим, в 1С можно удалить адресный классификатор. Но в результате потом нельзя по конторам напечатать конверты, приходится опять грузить часть классификатора по индексу.
И так далее.

Так что см. ответ YuRock.

А потом - "большое количество записей" - это какое? Программа тормозит, или что?
...
Рейтинг: 0 / 0
16.05.2018, 16:15
    #39645638
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukgЗдравствуйте.
Есть программа стороннего разработчика под FireBird 1.5.
В одной таблице накопилось большое количество записей. Но в программе не предусмотрено групповое удаление записей. Подключил ее в IBExpert. Думаю, что можно удалить все записи за определенный период при помощи запроса.
О БД имею теоретические знания. Но предполагаю, что запрос должен начинаться как-то так:
DELETE FROM TABLE_NAME WHERE ... дальше не знаю что писать. По-русски он звучит так: УДАЛИТЬ В ТАБЛИЦЕ ЗАПИСИ ОТ 01.01.2005 ДО 01.01.2015
Понимаю всю наглость своей просьбы, но так как задача одноразовая...
Может кто-то напишет мне шаблон запроса? Как для блондинки.
Или в IBExpert есть такая штатная функция?
К пинкам, плевкам и анальному выпилу из реальности готов.

будь готов что пользователи тебе что-нибудь оторвут после удалений таких...
...
Рейтинг: 0 / 0
16.05.2018, 16:21
    #39645645
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukgК пинкам, плевкам и анальному выпилу из реальности готов.
1. Тихой темной ночью добавь поле "признак архива" и сделай вьюху, которая берет только не архивные записи. Переделай все селекты на вьюху.
2. Опять же темной и тихой ночью создай таблицу-двойника, перенеси в нее архивные данные и сделай вьюху, которая объединяет эти таблицы.

Я-бы так сделал, если архитектура кривая и иного не предусматривает.
...
Рейтинг: 0 / 0
17.05.2018, 08:43
    #39645865
karpov-ukg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
YuRockЕсли нет специального поля типа "ДатаСозданияЗаписи" - то нельзя никак.
Да и если есть - откуда ты знаешь, важна ли эта запись.
Нужно искать этого стороннего разработчика.
Поле есть.
Разраб говорит: давай базу - посмотрим. А начальство не разрешает.
kdvКроме того, определенные данные невозможно удалить из-за связей с другими данными.

А потом - "большое количество записей" - это какое? Программа тормозит, или что?
От таблицы зависят только триггеры (хз, что за зверь). Удаление записей может повлиять на них?
Подсчет записей в программе вызывает ее зависание, а как сделать это в IBExpert я не нашел. Большое, короче, количество. И да, программа тормозит, жутко, до полного зависания. Именно, когда некоторые пользователи переходят в программе на эту таблицу.
Я не совсем понял:
KreatorXXIkarpov-ukg,
DELETE FROM TABLE_NAME WHERE date between '2005-01-01' and '2014-12-31'.
это тру запрос? А то в высказываниях некоторых участников мне послышался сарказм в его адрес.
...
Рейтинг: 0 / 0
17.05.2018, 09:16
    #39645881
fraks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukgЯ не совсем понял:
KreatorXXIkarpov-ukg,
DELETE FROM TABLE_NAME WHERE date between '2005-01-01' and '2014-12-31'.
это тру запрос? А то в высказываниях некоторых участников мне послышался сарказм в его адрес.

Теоретически запрос верен. Если в базе всего одна таблица и в ней есть поле date по которому ставится условие удаления.

Но в реальной жизни как правило все совсем не так.
На реальной базе он в лучшем случае не сработает из-за отсутствия поля date в этой таблице,
а в худшем - повредит данные так что в одной таблице перестанет соответстсвовать в другой.
Или, к примеру, пересчитает какие-то суммы в других таблицах, непредственно сейчас или когда-то в будущем, когда программа натолкнется на несовпадение.
Еще один страшный сценарий - удаление записей повлечет за собой каскадное удаление записей в других таблицах, чего ты не планировал.

После гигантских delete останется куча мусора который нужно будет собрать. Хотя бы перебэкапом.

Зависание при обращении к таблице может быть вызвано не только большим количеством записей, но и к примеру поломкой нужного для этого запроса индекса. Или другой случай - при разработке запроса план запроса был один. Увеличилось количество записей - и план запроса поменялся, и может так случиться что не в лучшую сторону. Тут без разработчика не обойтись.
И ему нужна база с реальным количеством данных, о чем он и просит.
...
Рейтинг: 0 / 0
17.05.2018, 09:43
    #39645889
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukg,

Запрос-то тру. А Вы рассказали бы - что за таблица, есть ли связи. Действительно, может толку от запроса никакого, стоит, например, защита по форейн-ключу. Может лучше посмотреть какие индексы сделать. Нужен сам запрос, который тормозит.
...
Рейтинг: 0 / 0
17.05.2018, 09:48
    #39645891
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukgПодсчет записей в программе вызывает ее зависание, а как сделать это в IBExpert я не нашел. Большое, короче, количество.
Код: sql
1.
SELECT COUNT(*) FROM TABLE_NAME
...
Рейтинг: 0 / 0
17.05.2018, 10:12
    #39645910
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukgРазраб говорит: давай базу - посмотрим. А начальство не разрешает.
Если разработчик, прежде чем дать инструкции по удалению, просит посмотреть базу, значит лучше ему ее дать.
А если начальство не разрешает, значит ничего удалять не нужно.
...
Рейтинг: 0 / 0
17.05.2018, 10:13
    #39645911
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
KreatorXXIkarpov-ukg,

Запрос-то тру. А Вы рассказали бы - что за таблица, есть ли связи. Действительно, может толку от запроса никакого, стоит, например, защита по форейн-ключу. Может лучше посмотреть какие индексы сделать. Нужен сам запрос, который тормозит.

Для начала можно DDL искомой таблицы привести (в Эксперте закладка "Скрипт" или "DDL").

А подсчёт количества записей во всей таблице, как правило, не имеет смысла, таблица может быть огромной. Смысл имеет подсчёт количества записей по какому-нибудь критерию (например, за период времени), а здесь нужно смотреть наличие индексов. Если их нет, или нужных нет, то перебирается вся таблица, что не есть хорошо.
...
Рейтинг: 0 / 0
17.05.2018, 11:13
    #39645966
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
KreatorXXI,

да он не понимает в БД. Какой смысл такие советы давать.
Этот топик из разряда "дайте я сам починю ядерный реактор".
...
Рейтинг: 0 / 0
17.05.2018, 11:51
    #39645993
karpov-ukg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
310354
KreatorXXIДля начала можно DDL искомой таблицы привести (в Эксперте закладка "Скрипт" или "DDL").

Вкладки DDL не нашел,
скопировал из вкладки скрипт
/******************************************************************************/
/*** Generated by IBExpert 17.05.2018 11:09:07 ***/
/******************************************************************************/

/******************************************************************************/
/*** Following SET SQL DIALECT is just for the Database Comparer ***/
/******************************************************************************/


/******************************************************************************/
/*** Tables ***/
/******************************************************************************/



CREATE TABLE HISTORY (
IDHIST INTEGER NOT NULL,
IDCUST INTEGER NOT NULL,
IDUSER INTEGER,
DATECR DATE,
HISTORY CHAR(1) COLLATE PXW_CYRL,
NOTE VAR4096 COLLATE PXW_CYRL /* VAR4096 = VARCHAR(4096) */,
ACCESS CHAR(1),
PRIOR CHAR(1) default "-" COLLATE PXW_CYRL,
BUDIL CHAR(1) default "-" COLLATE PXW_CYRL,
IDHISTTYPE INTEGER NOT NULL,
IDCONTACTS ID_NULL /* ID_NULL = INTEGER */,
FILEPATH VAR255 COLLATE PXW_CYRL /* VAR255 = VARCHAR(255) */,
IDCREATOR INTEGER
);




/******************************************************************************/
/*** Primary keys ***/
/******************************************************************************/

ALTER TABLE HISTORY ADD PRIMARY KEY (IDHIST);


/******************************************************************************/
/*** Foreign keys ***/
/******************************************************************************/

ALTER TABLE HISTORY ADD CONSTRAINT FK_HISTORY_TO_CONTACTS FOREIGN KEY (IDCONTACTS) REFERENCES CONTACTS (IDCONTACTS) ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE HISTORY ADD CONSTRAINT FK_HISTORY_TO_CUSTOMER FOREIGN KEY (IDCUST) REFERENCES CUSTOMER (IDCUST) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE HISTORY ADD CONSTRAINT FK_HISTORY_TO_HISTTYPE FOREIGN KEY (IDHISTTYPE) REFERENCES HISTTYPE (IDHISTTYPE) ON UPDATE CASCADE;
ALTER TABLE HISTORY ADD CONSTRAINT FK_HISTORY_TO_USERS FOREIGN KEY (IDUSER) REFERENCES USERS (IDUSER) ON UPDATE CASCADE;


/******************************************************************************/
/*** Indices ***/
/******************************************************************************/

CREATE DESCENDING INDEX HISTORY_DATECR ON HISTORY (DATECR);


/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/

Скрин полей
Скрин индексов
Экспорт метаданных - и это наверно будет самая полная информация.
Чего бы еще вам показать... Говорю ж, в БД я - бландынка.
...
Рейтинг: 0 / 0
17.05.2018, 11:53
    #39645995
karpov-ukg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
kdvKreatorXXI,

да он не понимает в БД. Какой смысл такие советы давать.
Этот топик из разряда "дайте я сам починю ядерный реактор".
Нереально?
...
Рейтинг: 0 / 0
17.05.2018, 11:54
    #39645996
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukg... UPDATE CASCADE

ужас
...
Рейтинг: 0 / 0
17.05.2018, 12:05
    #39646008
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukgDATECR DATE,
Дата создания есть... Но все равно, отстрелит себе обе ноги, одну руку и хорошо, если голову не заденет.
...
Рейтинг: 0 / 0
17.05.2018, 12:21
    #39646022
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukgНереально?
ну вот я не чиню трактора, потому что не умею. И не испытываю по этому поводу никаких сожалений.
Вам руководство на каком основании дало задание "уменьшить базу данных"? Вы админ? Или сами проявляете инициативу (которая обычно наказуема)?
Ваша задача была найти автора программы. Нашли. Руководство "давать" базу данных не хочет. А удаленный доступ даст? К другому компу с копией этой базы? Нет? Ну тогда сообщите руководству, что иначе удалить записи нельзя. Или пусть оно само (руководство) удалит эти записи.
Или пусть покупает ssd для хранения базы, тогда всё будет работать гораздо быстрее.
Впрочем, про размер базы мы так ничего и не услышали.
...
Рейтинг: 0 / 0
17.05.2018, 12:23
    #39646025
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
kdv> Впрочем, про размер базы мы так ничего и не услышали.

Стопицот!

Какая разница? Важно не сколько там гиг, а как
написана - если размер небольшой, но написана
пер-анус - всё равно тормозить будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.05.2018, 12:34
    #39646033
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukg,

нормальная таблица. И индекс по дате есть. А чего тормозит? Какую инфу пытаетесь вытащить из таблицы?
В принципе считаю, можно записи грохнуть по дате создания записи (DATECR). Некая история, никому уже не нужна.
...
Рейтинг: 0 / 0
17.05.2018, 12:50
    #39646049
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
KreatorXXIВ принципе считаю, можно записи грохнуть по дате создания записи (DATECR)
Можно сразу так:
Код: sql
1.
WHERE CURRENT_TIMESTAMP BETWEEN '2001-01-01' AND '2101-01-01'


Навсякий: karpov-ukg , это шутка, не делай такого.
...
Рейтинг: 0 / 0
17.05.2018, 16:28
    #39646250
karpov-ukg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
Я понял, что с этим не так все просто, как на самом деле.
Благодарю всех откликнувшихся, извиняюсь за потраченное время.
Добра.
И ПыСы
YuRock
Догадался. По конечной дате.
И ПыСы2
А народ в этой ветке поотзывчевей, чем на иных форумах. Где меня постов 20 бы обливали дерьмом, прежде чем написать по делу.
...
Рейтинг: 0 / 0
18.05.2018, 04:26
    #39646455
fraks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записей за период времени
karpov-ukgИ ПыСы
YuRock
Догадался. По конечной дате.

У меня такое ощущение что догадался, но неправильно :)

Код: plsql
1.
2.
DELETE FROM TABLE_NAME 
WHERE CURRENT_TIMESTAMP BETWEEN '2001-01-01' AND '2101-01-01'


CURRENT_TIMESTAMP - это текущее дата-время.
Т.е. если эту команду выполнить в период с 2001 года по 2101 год - то она просто удаляет ВСЕ ЗАПИСИ из таблицы :)
А если каким-то образом текущая дата не поопадает в вилку годов - то просто ничего не делает.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Удаление записей за период времени / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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