
Evgeniy
07.05.2018
03:31:40
после удаления по схеме выше запрос заканчивается, но на базе видно нагрузку еще несколько минут.
по процессору и иопсам

Dmitry
07.05.2018
05:57:21
Коллеги, подскажите пожалуйста как заставить Postgresql 9.6 начать вести новый логфайл в /var/log/postgresql

Ilia
07.05.2018
07:29:44

Google

Dmitriy
07.05.2018
07:58:22
Приветствую.
Есть триггер
sql
before
insert or update ON PAYNET.DOCUMENTS
referencing new as new old as old
for each row
declare
v_rec paynet.documents%rowtype;
BEGIN
v_rec.kub_db := :new.kub_db;
--И тут еще дохера полей
p_formats_odb.check_requisites_rup(v_rec);
:new.status_description := v_rec.status_description;
END;
Можно ли как то в оракле v_rec инициализировать значениями из :new.* что бы не перечислять каждое поле

Vladislav
07.05.2018
07:58:41
верни как было

Vasiliy
07.05.2018
08:04:36

Dmitriy
07.05.2018
08:21:07
а как

Ilia
07.05.2018
08:21:53
Как бы перечислять поля все равно придется когда-то.
При обработке

Dmitriy
07.05.2018
08:22:29
я пока взял и сделал
select ' v_rec.' || column_name || ' := :new.' || column_name || ';' from user_tab_columns where table_name = upper('documents');И скопировал сформированный селект, облегчило от рукоблудия, но хотелось бы чтоб не было этой колбасы в тригере

Ilia
07.05.2018
08:23:03
Но вроде можно переменную типа record просто из той псевдотаблицы присвоить
Как не знаю, не помню уже

Dmitriy
07.05.2018
08:26:01
Типа так? v_rec := :new; - не катит

Ilia
07.05.2018
08:27:07
Но вообще перечисление полей - одна из главных работ программиста бд
Не понятно почему это вызывает такие трудности
SQL developer там, все дела
А так читай фейерштейн прибыл

Google

Ilia
07.05.2018
08:32:08
Может найдешь way

Dmitriy
07.05.2018
08:32:56

Ilia
07.05.2018
08:33:18
Это IDE такая

Dmitriy
07.05.2018
08:33:25
Но у нас экономят!

Ilia
07.05.2018
08:34:06
и оракле из экономии купили?

Dmitriy
07.05.2018
08:34:56

Evgeniy
07.05.2018
08:45:07

Ilia
07.05.2018
08:56:21
Не бывает

Evgeniy
07.05.2018
09:45:48
а подскажите, если в запросе на удаление есть условие (where) и есть limit100. будут удалены строки из условия, или не факт и можно удалить строки не подпадающие под условие?

Vladislav
07.05.2018
09:47:21
чё?
как это с условием удалятся без условия? о_0

Vasiliy
07.05.2018
09:52:29
в
оракле нет инструкции limit
или у вас 12с?

Evgeniy
07.05.2018
09:58:33

Vladislav
07.05.2018
09:58:36

Evgeniy
07.05.2018
09:59:16

Vladislav
07.05.2018
09:59:26
как обычно

Evgeniy
07.05.2018
09:59:41
и не кодер

Google

Vladislav
07.05.2018
09:59:50
а кто?

Evgeniy
07.05.2018
10:00:20

Vladislav
07.05.2018
10:00:35
если вы не дба, тогда зачем лезете в базу?
обычно where и limit работают
и точка
другое дело, что без сортировки вы можете первые 10 записей увидеть одни, а удалятся другие

Evgeniy
07.05.2018
10:01:55

Vladislav
07.05.2018
10:03:02

Evgeniy
07.05.2018
10:03:56
надо в цикле удалить много строк. поля с уникальным значением нету. отбор только по дате и идентификатору элемента. для одного элемента может быть много записей

Vladislav
07.05.2018
10:04:30
почему сисадмин чистит базу

Vladislav
07.05.2018
10:04:41
не лезьте туда, где у вас нет опыта как минимум

Evgeniy
07.05.2018
10:06:23

Vladislav
07.05.2018
10:07:26
ой, держите в курсе

Evgeniy
07.05.2018
10:09:20
не лезьте туда, где у вас нет опыта как минимум
можно гуглить и читать, как устроено where+limit. можно сделать тестовую бд и там проверить. это небыстро. это просто разовая задача. чтобы не терять времени на тонкости непрофильные - зашел спросить у профи. это возбраняется?

Vladislav
07.05.2018
10:09:55
нет нет, я вроде на вопрос ответил, жду занимательной истории

Evgeniy
07.05.2018
10:11:28

Vladislav
07.05.2018
10:11:44
тогда вам лимит не нужен

Evgeniy
07.05.2018
10:11:46

Google

Evgeniy
07.05.2018
10:12:14
https://mariadb.com/kb/en/library/big-deletes/
я пока для себя вижу вариант с удалением порциями
и как раз пробую написать тот самый цикл для своей ситуации

Vladislav
07.05.2018
10:14:12
там нет лимитов

Evgeniy
07.05.2018
10:14:15
тут в статье - удаление по уникальному полю. у меня такого поля нет

Vladislav
07.05.2018
10:15:01
там вообще какой-то выстрел в ногу себе
берете дату и по ней удаляете, интервал подбираете под себя оптимальный

Admin
ERROR: S client not available

Evgeniy
07.05.2018
10:16:10

lost
07.05.2018
10:16:11

Vladislav
07.05.2018
10:16:35
у него нет праймари

lost
07.05.2018
10:16:49
тогда это груздь

Vladislav
07.05.2018
10:16:57

Evgeniy
07.05.2018
10:17:31

Vladislav
07.05.2018
10:17:34
там лимиты используются для того, чтобы дернуть первые 1к айди, которые потом подставить в запрос на удаление
не понимаю проблемы удалить тупо по дате одним запросом

Evgeniy
07.05.2018
10:18:18

Vladislav
07.05.2018
10:18:20
типа лока избежать хотите длительного?
база в проде

Google

Vladislav
07.05.2018
10:18:30
?

Evgeniy
07.05.2018
10:18:34
по минут 40 может удалять некоторые элементы

Vladislav
07.05.2018
10:18:52
место есть?
для копии таблицы

Evgeniy
07.05.2018
10:19:18
если удалять простым запросом - основной сервис начинает тупить на вставке данных в базу

Vladislav
07.05.2018
10:19:46
делайте копию таблицы с нужными данными, потом подменяете таблицы и дропаете старую
без локов и по фасту
только перед дропом, но после подмены, проверить не забудьте, что все данные доехали в новую таблицу из старой

Evgeniy
07.05.2018
10:21:12

Vladislav
07.05.2018
10:21:18
а еще лучше, если бы там с партициями разобраться

Evgeniy
07.05.2018
10:22:08

Vladislav
07.05.2018
10:22:40
у вас есть шанс сразу двух кроликов поймать одним выстрелом

Evgeniy
07.05.2018
10:23:52
с чего вдруг
сейчас в бд пишется примерно 100-150 инсертов в секунду. копировать нужные данные - надо все-таки какое-то время. за это время набежит еще сколько-то данных в старую таблицу

Vladislav
07.05.2018
10:24:15
именно поэтому надо сделать это
только перед дропом, но после подмены, проверить не забудьте, что все данные доехали в новую таблицу из старой

Evgeniy
07.05.2018
10:24:37
надо или что-то, чтобы запись началась в новую таблицу прозрачно, или копия данных чтобы писалась в новую
так... кажись понял
делаю типа:
create table big_new like big;
потом
rename table big_new to big, big to big_old;
а потом уже можно лить данные по своим условиям (они по каждому свои)... типа
insert into big select * from big_old where itemid=111 and date > some_value;