@pgsql

Страница 785 из 1062
Nikita
29.04.2018
22:06:39
попробуйте добавить ветку ELSE пустую, или return null, что там у вас по бизнесу должно быть

Vitality
29.04.2018
22:07:31
не важно, есть ли else или нет) В офф примере с доки есть else, но там тоже самое происходит

Nikita
29.04.2018
22:07:49
без указания символов, на которых ошибка?

скиньте, что за пример

Google
Darafei
29.04.2018
22:07:59
а в mysql нынче такие же кавычки?

Vitality
29.04.2018
22:08:34
другие тоже пробовал

Darafei
29.04.2018
22:09:00
а в каких кавычках текст этой хранимой процедуры?

Vitality
29.04.2018
22:09:24
https://dev.mysql.com/doc/refman/8.0/en/if.html

Это функция)

Точно так же ругается на первый END IF;

Darafei
29.04.2018
22:10:32
ну ты ж не в запрос этот иф пишешь?

Vitality
29.04.2018
22:11:07
Да, все верно. Я кинул ссылку на пример с документации

там точно такая же ошибка

может кто у себя на базе попробовать создать такую процедуру?

Darafei
29.04.2018
22:11:59
у нас постгрес

хочешь перейти на постгрес? :)

Vitality
29.04.2018
22:12:45
У меня на всех проектах постгрес, но тут ТЗ от заказчка указывает, что надо использовать MySQL

Google
Vitality
29.04.2018
22:13:11
Собственно проект изначально был написан на posgtres и теперь он мигрирует в MySQL

lenar
29.04.2018
22:14:15
причины?

Vitality
29.04.2018
22:16:37
не вдавался в подробности. Просто есть четкое тз написать миграционные скрипты с PostgreSQL 9.5 на MySQL 5.6

Сейчас занят тем, что переписываю функции и вот столкнулся с проблемой вот этой, что не работают условия)

Taras ?
29.04.2018
22:19:19
https://en.wikibooks.org/wiki/Converting_MySQL_to_PostgreSQL об отличиях кавычек и тд там ниже таблица

Vitality
29.04.2018
22:22:37
Да, но вот только с кавычками то все ок. Пробовал и другие, но результат тот же

К тому же это просто строка возврата из функции

Daniel
01.05.2018
17:40:32
всем привет! подскажите куда копнуть. делается выборка с 4 последовательными join'ами. нужно лимитировать второй и третий джойн. т.е. чтобы на каждую запись первой выборки джойнилось не больше 5 записей из второй, к ним не больше 5 записей на каждую из третьей и т.д.

т.е. лимитировать нужно записи после проверки на пригодность для джойна, а не перед

Subb98
01.05.2018
17:51:01
Задать общий лимит для select?

Daniel
01.05.2018
17:51:39
тогда отлимитируется итоговый результат

а мне нужно джойнить не больше N строк на каждую строку другой выборки

Subb98
01.05.2018
17:53:17
Это я понял из вашего вопроса. Просто, обычно, джойн не увеличивает кол-во результатов выборки. Ну, если это не декартово произведение, например )

Как вариант - сделать подзапросы, если приемлемо.

Daniel
01.05.2018
17:56:11
выбираем 5 строк. к ним джойним 50 с общим лимитом 10. в результате получим только одну первоначальную строку из 5 с 10 приджойненными

Как вариант - сделать подзапросы, если приемлемо.
не подойдут, т.к. нужно выбрать строки к которым мы точно найдем, что джойнить. а с подзапросами так не выйдет. если я правильно понял то, что вы предлагаете

Maksim
01.05.2018
18:00:01
Как вариант - сделать подзапросы, если приемлемо.
+1, попробуйте коррелирующие подзапросы для второй и последующих выборок с лимитами для для этих выборок, а потом кросс-джоин

Daniel
01.05.2018
18:04:30
+1, попробуйте коррелирующие подзапросы для второй и последующих выборок с лимитами для для этих выборок, а потом кросс-джоин
двойная выборка получится, если через Exists делать, например. я правилтно понимаю ваш замысел?

Maksim
01.05.2018
18:23:45
двойная выборка получится, если через Exists делать, например. я правилтно понимаю ваш замысел?
я предполагаю использование lateral c лимитом во внутреннем подзапросе https://www.postgresql.org/docs/current/static/queries-table-expressions.html#QUERIES-LATERAL

Daniel
01.05.2018
18:24:32
спасибо, почитаю. если у кого есть еще мысли буду рад услышать

Google
Yaroslav
01.05.2018
19:05:51
спасибо, почитаю. если у кого есть еще мысли буду рад услышать
То же самое, наверное, можно сделать с nested query + ROW_NUMBER(). Но вариант с LATERAL, скорее всего, проще.

Aleksey
01.05.2018
19:36:38
Помогите решить вопрос по sql)

вторых изменить так, чтобы s4 возвращало не минимальную закупочную цену(выделено красным), а закупочную цену последнего прихода данного товара. Дата прихода в поле DayFirst, надо делать через join дополнительной таблицы, в которой находим эти цены для каждого DrugsID (кода товара)

Aleksey
01.05.2018
19:57:23
не особо уверен подсказали обратиться сюда)

Danil
01.05.2018
21:09:38
@sqlru

Олег
01.05.2018
22:09:53
Привет всем Подскажите, кто на 10.3 юзал нативное партицирование, не сталкивались ли с Out of shared memory?

У меня эти партиция плодятся и заполняются адскими темпами, типа свечки с разных бирж, каждый график в своей партиции. На серваке памяти до жопы, но постгрес о ней не знает. Больше 3-4 гиг не видел чтоб было занято. Может, подскажете, что в conf писать?

Олег
01.05.2018
22:26:39
Примерно 25к

Они для того, чтобы в отдельных таблицах все таймсерии были. До этого данных было меньше, все падало в одну таблицу с двумя индексами и она стала неподъёмной. Решили порезать ее на части, сначала все пошло хорошо, но как только начали заполнять данными, начало падать.

Yaroslav
01.05.2018
22:29:45
Примерно 25к
Это ответ на какой из вопросов? И 25k чего?

> Они для того, чтобы в отдельных таблицах все таймсерии были. С какой целью?

Олег
01.05.2018
22:30:06
Это про количество партиций

Чтобы была не одна гигантская таблица, а много маленьких

С планом самые тяжелые куда-то ещё вынести.

Когда старая таблица за сотню гигов перевалила, запросы стали неприемлемо долгими, от полминуты до полторы. Поэтому грешили на неё

Yaroslav
01.05.2018
22:32:42
Это про количество партиций
Ну так это и не должно было работать. :( Вы предупреждение в конце https://www.postgresql.org/docs/current/static/ddl-partitioning.html читали? Вот это, конкретно: Partitioning using these techniques will work well with up to perhaps a hundred partitions; don't try to use many thousands of partitions.

Олег
01.05.2018
22:33:19
Щит. Эту строчку пропустил, конечно же.

Yaroslav
01.05.2018
22:35:12
Когда старая таблица за сотню гигов перевалила, запросы стали неприемлемо долгими, от полминуты до полторы. Поэтому грешили на неё
А индексировать пробовали? Партиционирование —- это вовсе не magic fairy dust, и им не так уж просто даже немного улучшить производительность (по сравнению с индексированием), а вот провалить её —- запросто (как вы сами и убедились, к сожалению). :(

Google
Олег
01.05.2018
22:35:19
Может, надо добавить памяти где-то в конфиге? Или эта история вообще не вписывается в постгрес и надо что-то иное?

Да, так и вышло. На паре сотен работало идеально, даже локально.

Ну и сам концепт - каждый график в своей таблице и кроме как начало и конец периода ничего не надо фильтровать чтобы графики строить

Yaroslav
01.05.2018
22:37:28
Может, надо добавить памяти где-то в конфиге? Или эта история вообще не вписывается в постгрес и надо что-то иное?
По нынешним временам это даже не очень большая таблица... может, у вас железо "не тянет" (или, опять-таки, см. выше про индексы)?

Может, надо добавить памяти где-то в конфиге? Или эта история вообще не вписывается в постгрес и надо что-то иное?
Вам надо решать проблемы нормальными средствами, а не надеяться на волшебную пыль, IMHO. ;)

Олег
01.05.2018
22:38:40
Индекс сейчас только один, по таймстампу, по которому выборки идут

Ну так и индексируйте соответственно...
То есть разумнее сделать условные индексы, но таблицу сделать монолитной?

Yaroslav
01.05.2018
22:40:06
Индекс сейчас только один, по таймстампу, по которому выборки идут
Очевидно, он не подходит для ваших запросов. Какие они у вас (можете примерно показать)?

Yaroslav
01.05.2018
22:40:41
То есть разумнее сделать условные индексы, но таблицу сделать монолитной?
Так вы пробовали делать обычные, подходящие под запросы индексы?

Yaroslav
01.05.2018
22:41:16
Для каждой таблицы один свой собственный
Для той монолитной таблицы, я имел в виду.

Олег
01.05.2018
22:41:38
Yaroslav
01.05.2018
22:42:17
Для той один индекс был.
Ясно. Так запросы примерно какие?

Олег
01.05.2018
22:44:00
Иными словами мне нужно сделать единую таблицу и индивидуальные индексы? Там запросы в основном содержат биржу, пару, время начала и конца периода. По каждому индексы были, по ночам даже вакуум кроном запускался.

Но это мне уже как легаси досталось. А сейчас новые источники данных добавляются, и в ту же таблицу писать не вариант было.

Поэтому обновили с 9.6 до 10.3 и сделали партиции

Yaroslav
01.05.2018
22:46:21
Олег
01.05.2018
22:48:04
Именно так. С order, но без группировок. Хотя может и был где-то запрос с группировками.

Google
Yaroslav
01.05.2018
22:48:21
Поэтому обновили с 9.6 до 10.3 и сделали партиции
Вы бы хоть сначала спросили где-нибудь (так, на будущее, есть же и mailing lists, и #postgresql (IRC), и SQL.RU, и этот канал). ;)

Именно так. С order, но без группировок. Хотя может и был где-то запрос с группировками.
Ну так и был(и) у вас соответствующие составные индексы, т.е. CREATE INDEX ON table(биржа, пара, timestamp), как минимум?

Олег
01.05.2018
22:49:58
Момент

вот такие индексы были ["index_pair_histories_on_created_at", "index_pair_histories_on_data_point_kind", "index_pair_histories_on_pair_id", "index_pair_histories_on_pair_id_and_timestamp_at", "index_pair_histories_on_source", "index_pair_histories_on_timestamp_at"]

сейчас такие ["okex_spot_rcn_btc_20mins", "okex_spot_light_eth_20mins", "okex_spot_fair_btc_20mins"]

по одному на каждую партицию

Yaroslav
01.05.2018
22:59:08
вот такие индексы были ["index_pair_histories_on_created_at", "index_pair_histories_on_data_point_kind", "index_pair_histories_on_pair_id", "index_pair_histories_on_pair_id_and_timestamp_at", "index_pair_histories_on_source", "index_pair_histories_on_timestamp_at"]
Ну это же просто названия... ну ладно, если они были созданы без явного указания имени, то единственный составной здесь index_pair_histories_on_pair_id_and_timestamp_at (наверное: (pair_id, timestamp_at))... и где в нём биржа? И некоторые из остальных, скорее всего, не подойдут для большинства запросов. :(

Страница 785 из 1062