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

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

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

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

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

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

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

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

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

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

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

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

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

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

да он не понимает в БД. Какой смысл такие советы давать.
Этот топик из разряда "дайте я сам починю ядерный реактор".
...
Рейтинг: 0 / 0
Удаление записей за период времени
    #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
Удаление записей за период времени
    #39645995
karpov-ukg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvKreatorXXI,

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

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

Стопицот!

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

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


Навсякий: karpov-ukg , это шутка, не делай такого.
...
Рейтинг: 0 / 0
Удаление записей за период времени
    #39646250
karpov-ukg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понял, что с этим не так все просто, как на самом деле.
Благодарю всех откликнувшихся, извиняюсь за потраченное время.
Добра.
И ПыСы
YuRock
Догадался. По конечной дате.
И ПыСы2
А народ в этой ветке поотзывчевей, чем на иных форумах. Где меня постов 20 бы обливали дерьмом, прежде чем написать по делу.
...
Рейтинг: 0 / 0
Удаление записей за период времени
    #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
25 сообщений из 27, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Удаление записей за период времени
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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