
Mike Chuguniy
19.05.2017
15:14:58
Можно сказать люто-бешеная аналитика.

Артур
19.05.2017
15:16:07
Ну как бе по 6 таблицам сверка (selectы), потом получение нужных id, парсинг строк и их разбор, и инсерт записи с уже готовой информацией
Самая большая база 50кк записей без индекса

Darafei
19.05.2017
15:16:48
отменяй и иди переписывать

Google

Darafei
19.05.2017
15:17:10
с эксплейнами и нотисами

Артур
19.05.2017
15:17:19
Ок

Darafei
19.05.2017
15:19:07
https://gist.github.com/Komzpa/69fa1b7149f48e447c634b4bf171f1ce

Fedor
19.05.2017
15:31:34

Darafei
19.05.2017
15:35:16
вообще, 85 гигов вот сексканом прошлись за 463 секунды
так что если что и тормозит, то дополнительная логика

Fedor
19.05.2017
15:35:49
Таблица не в локе случайно ? может твой апдейт ждет чего то ?

Darafei
19.05.2017
15:36:28
ну, если там джоин шести таблиц и хотя бы две из них пойдут в секскан, то велик шанс, что запрос никогда не закончится

Артур
19.05.2017
16:25:46
Таблица не в локе случайно ? может твой апдейт ждет чего то ?
ничего не ждет. Все последобвательно работает.. Просто есть Like, просто есть join, просто все меделнно, просто без хранимок (все запросы от бэкенда)
И если сейчас скажете про индексы и то, что join и like юзать плохо, и то, что хранимки надо юзать я пойду и повешусь ибо сам это зною, но в рамках задачи ничего поделать не могу (потом этот же скрипт на продакшне надо будет применить)

Darafei
19.05.2017
16:31:44

Артур
19.05.2017
16:33:15
Я сейчас вопрос задаю про nextval специально, потому что доверять ли втроенному инструменту laravel 5 по модификации таблиц или запросом фигачить?

Google

Артур
19.05.2017
16:33:32
Насколько адекватно то ,что он не переименовал default в serial поле?
То есть вопрос даже не о фреймворке, а о том "менять ли nextval при переименовании таблицы?"

Nikolay
20.05.2017
15:08:52
Насколько адекватно то ,что он не переименовал default в serial поле?
У sequence есть доп. свойство OWNED BY, в котором указан столбец таблицы. Вот это главное, на что надо обращать внимание. Если owned by есть (а он есть, когда говорим "serial" при создании таблицы), при переименовании всё будет ок, секвенс будет "принадлежать" тому же столбцу. Резюме: На serial не надо внимания обращать при проверках, надо смотреть owned by у сиквенса

Sergey
21.05.2017
18:42:13
а у меня 1с с базой в десяточке завелась ?

Andrey
21.05.2017
18:47:06
Что завелась - не неожиданно.
Попробуйте сравнить лительность расчета увольнения в ЗУП, если не лень и есть тесткейс.
У меня все руки не доходят.

Sergey
21.05.2017
18:51:11
ну я же её в продакш не пихаю, так только тестовая база... да еще и постргес собрал с включенным дебагом. Тест Гилева показал чуть меньше чем на 9.6 с аналогичным конфигом на той же железяке, хотя это слабый показатель....
И вообще собирал чисто чтобы обкатать возможность адаптировать патч.... не для использования.

Andrey
21.05.2017
20:19:15

Darafei
21.05.2017
20:24:19
вообще, если дебаг-сборка становится медленнее, это может говорить, что в ней стало больше дебаг-сообщений и ассертов, что скорее хорошо :)

Артур
21.05.2017
21:19:27
Как срастить разбитые на части таблицы?
в фиас это addrobj01, addrobj02 и т.д.
Ну дико же. Всего по 300к записей, и писать теперь ради этого джойны
Понимаю что это партицированные таблицы. Но при импорте это просто таблицы без какких либо связей.

Алексей
21.05.2017
21:24:23
а как связаны импорт и джоины?
вообще не совсем понятно, с каого боку тут джоины?

Артур
21.05.2017
21:26:48

Алексей
21.05.2017
21:26:59
тем более не понятно

Google

Алексей
21.05.2017
21:27:37
если это партиции, именно честные партиции, то юнионы казалось бы совсем не нужны.

Артур
21.05.2017
21:27:39
SELECT * (SELECT * FROM house01 UNION SELECT * FROM house02 UNION SELECT * FROM house03) where ...

Алексей
21.05.2017
21:28:47
а, вот теперь объяснили.

Артур
21.05.2017
21:29:47
в итоге не совес оптимально и удобно юнионы юзать, тем более там, где надо быстро искать
Можно как вариант конечно еще их в одну таблицу перемещать, написав процедуру, но может есть решение проще?

Алексей
21.05.2017
21:30:44
а не имеет ли смысл импортировать эти данные в "свою" структуру?
ну в самом-самом крайнем случае нечто типа create table house00 as (SELECT * FROM house01 UNION SELECT * FROM house02 UNION SELECT * FROM house03) и потом уже работать с house0

Артур
21.05.2017
21:34:20
ну об этом как раз я и говорил, имея виду - переместить все в одну таблицу
Я думал может есть хитрая процедура для сбора таблиц в 1 партицированный массив
Ну или хотябы как применить INHERITS к существующим таблицам?
Согласно доке самый простой путь - это написать:
ALTER TABLE house01 INHERIT house;
Но тогда надо обёртывать в for
Жаль нет процедуры готовой типа: inherit_tables('house','house*')

Darafei
21.05.2017
22:27:41
не думай процедурами

Артур
21.05.2017
22:28:33

Darafei
21.05.2017
22:29:13
набор текста ALTER TABLE house01 INHERIT house; легко получить конкатенациями названий таблиц, и потом пайпом загнать в psql
как-нибудь вроде \copy (select 'alter table '|| table_name || ' inherit house;' from information_schema.tables where table_name like 'house%')
через полгода выйдет апдейт, будешь накатывать и забудешь в итераторе циферку поправить
в жизнь потом не отыщешь, отчего у тебя дома не находятся

Артур
21.05.2017
22:36:19
согласен. Жаль что эта собака всегда ращбитые табилцы грузит.
Но твой select лучше применим. думал об этом. Не знал как написать.
А почему copy?

Google

Артур
21.05.2017
22:39:21
Это же копирование данных

Darafei
21.05.2017
22:39:45
чтобы без рамочек и лишнего эскейпинга в консоль рисовалось

Артур
21.05.2017
22:40:02
ааа!

Darafei
21.05.2017
22:42:00
оно так легко разворачивается в
psql -c "\copy (select 'alter table '|| table_name || ' inherit house;' from information_schema.tables where table_name like 'house%') to stdout" | psql

Admin
ERROR: S client not available

Артур
22.05.2017
00:21:01
я конечно план по 40 млн записей не делаю, но судя по всему на каждую дочернюю таблицу нужен индекс. Потому что ооочень долго записи отбирает. При этом активно винт жрёт

Denis
22.05.2017
00:26:09

Артур
22.05.2017
00:28:28
Вайлдкард не знаю что такое, в varchar стандартный индекс, верно

Denis
22.05.2017
00:29:24
Wildcard - это поиск типа like '%...%' по текстовому полю. Оно?
Если оно, то обычный b-tree бесполезен, нужны триграммы. Их я и посоветовал

/dev/null
22.05.2017
04:19:04
Здравствуйте, можно ли посчитать количество записей, например:
select * from table where id=198
выведет соответственно запись где id=198
А можно ли вывести количество записей перед 198 записью?

Wom
22.05.2017
04:20:07
select count(1) from table where id < 198; ?

Vladimir
22.05.2017
04:25:13
не думаю что Вам нужен поиск по всем регионам сразу.

/dev/null
22.05.2017
04:28:10
нечто подобное нужно
select * from j_patient where id = 150
union ALL
select count(id) FROM j_patient where id < 150 order by id

Denis
22.05.2017
04:45:16

/dev/null
22.05.2017
04:52:23
Я понимаю что количество колонок в запросе должно быть ровно... В итоге нужно одним запросом вывести и все записи и count до id в условии

Denis
22.05.2017
04:54:44
смотрите, у вас много строк из таблицы и одно значение count. как вы это хотите упаковать? я бы положил в jsonb, но вот в конце последней строчкой добавлять количество - это какой-то немыслимый грязный хак

Google

/dev/null
22.05.2017
04:55:55
ну отдельным запросом на мой взгляд слишком дорого делать.

Denis
22.05.2017
04:57:29
посмотрите https://www.postgresql.org/docs/current/static/functions-json.html , особенно функцию jsonb_build_object - все можно одним запросом собрать

Vladislav
22.05.2017
05:08:07
Например так:
select *, count(*) over (partition by id) from table where id = 198;

Denis
22.05.2017
05:21:45

Vladislav
22.05.2017
05:23:18

/dev/null
22.05.2017
05:31:55

Артур
22.05.2017
05:42:19
Получется если мне нужен 16 регион, беру таблицу house16

Vladimir
22.05.2017
05:55:31

Артур
22.05.2017
05:56:22
с...ка (прошу прощения за эмоции), это же я вчера зря отбор делал еще по почти 90 таблицам!
С другой стороны практика в написании SQL запросов

Аггей
22.05.2017
05:57:08

Артур
22.05.2017
05:57:28
Ну это вообще неоспоримо :)
то ли 40млн записей, то ли 300тыс