
Аггей
19.07.2017
09:07:22
А не подскажете в чем профит от json в рсубд?
Насколько я понимаю - все там хранят неструктурированные документы

Otto
19.07.2017
09:09:21
3 день не могу решить запрос... http://sqlinfo.ru/forum/viewtopic.php?pid=45793#p45793

Alexey
19.07.2017
09:18:45
А не подскажете в чем профит от json в рсубд?
вопрос скорее философский. есть мнение (и не только моё) что вся мода на NoSQL СУБД закончится, как только РСУБД сделают хранение и обработку неструктурированных данных 1) возможной и 2) удобной

Google

Alexey
19.07.2017
09:19:01
с 1) уже справились. теперь идёт работа над 2)
постгрес считает, что 2) нужно делать реализацией SQL/JSON стандарта. Который, на мой взгляд, неудобный и громоздкий
в мускле решили зайти с другой стороны — X Protocol и X DevAPI. посмотрели на API MongoDB и сделали что-то похожее

Fike
19.07.2017
11:41:14

Аггей
19.07.2017
11:42:23
У рсубд кажется ещё 3й недостаток - масштабирование

Fike
19.07.2017
11:45:51
спс, но не получаеться. если не сложно покажите 2 варианта... CTE вообще хз...
) tsya.ru
)
SELECT `transactions`.`base_id`, SUM(`transactions`.`amount_fee`) AS short_amount
FROM `transactions`
LEFT JOIN base ON (`base`.`id` = `transactions`.`base_id`)
WHERE `transactions`.`loan_type` = 1
GROUP BY `transactions`.`base_id`
SELECT `cte`.`base_id`, `cte`.`short_amount` FROM (
SELECT `transactions`.`base_id`, SUM(`transactions`.`amount_fee`) AS short_amount
FROM `transactions`
WHERE `transactions`.`loan_type` = 1
GROUP BY `transactions`.`base_id`
) AS cte
LEFT JOIN base ON (`base`.`id` = `cte`.`base_id`)
И, наконец, главный вопрос. Зачем делать джойн, который не используется (из таблицы не подтягивается вообще ничего)?


Аггей
19.07.2017
11:51:27
Просто выше было о том, что сделали обновление содержимого json не полной перезаписью... и о том, что в pg это по-другому. Я понимаю, почему и зачем в pg пишется целая новая запись в таблицу - для выполнения версионирования строк. И мне кажется это правильным. С другой стороны, я понимаю, что ради изменения 1 атрибута json в 1 поле таблицы - перезаписывать целиком строку - накладно. Но вижу в этом моменте некоторое противоречие.. Некоторое противоестественное применение рсубд... Кажется тут нужно что-то концептуально новое, а не просто вкорячивать json в бд.
И моё виденье будущего - sql like синтаксис для nosql.

Otto
19.07.2017
11:54:00

Fike
19.07.2017
11:55:38
я сейчас рвану. где в оригинальном запросе был апдейт, и какой магией он должен был появиться у меня?

Alexey
19.07.2017
11:57:01


Fike
19.07.2017
11:58:20
локи подходят лучше оптимистичной блокировки?

Google

Otto
19.07.2017
11:59:24
а так вроде помогли вот подправил немного, вроде работает...
UPDATE base b
JOIN (SELECT base_id, SUM(amount_fee) as amount_fee FROM transactions WHERE loan_type = 1 GROUP BY 1) t ON b.id=t.base_id
set b.short_amount = amount_fee;
UPDATE base b
JOIN (SELECT base_id, SUM(amount_fee) as amount_fee FROM transactions WHERE loan_type = 2 GROUP BY 1) t ON b.id=t.base_id
set b.long_amount = amount_fee;только на сколько верно по твоему? и можно ведь через 1 запрос сделать..., спс. конечно

Аггей
19.07.2017
12:02:43
snapshot to old же

Alexey
19.07.2017
12:03:00
snapshot to old же
это проблема с вакуумом на мастере или MVCC на репликах в постгресе, только сбоку. типичный компромисс при сборке мусора, к реализации не имеет отношения

Fike
19.07.2017
12:15:40
Эм, какие NoSQL отращивают себе SQL?

Alexey
19.07.2017
12:19:48
Tarantool?
Cassandra + CQL?

Fike
19.07.2017
12:20:37
в кассандре всегда был cql

Alexey
19.07.2017
12:24:32
"0.8, released Jun 2 2011, added the Cassandra Query Language (CQL), self-tuning memtables, and support for zero-downtime upgrades[9]"
а Column Family появился и того позже

Anton
19.07.2017
15:21:17
гайс, а мускул сам оживёт, если например в него пишут по 100метров в секунду инсертами, место кончилось, я докинул места в раздел где хранится всё(в нём всё и кончилось)? или трупъ и рестарт онли?

Alexey
19.07.2017
15:26:04

Anton
19.07.2017
15:26:29

Alexey
19.07.2017
15:26:37
да
я правда не уверен, что другие СУБД лучше поведут себя в такой ситуации. главная проблема в том, что когда мы поняли, что место на диске закончилось и транзакцию нужно откатить, на откат транзакции вполне может понадобится место на диске, которого уже нет

Oliver
19.07.2017
20:13:29
Всем привет! Помогите с этим разобраться.
Пытаюсь подключить БД(mysql) к LibreOffice через JDBC но вижу это ☝️

Google

Fike
19.07.2017
21:51:07
а jdbc драйвер загружен?

Yevhen
20.07.2017
08:55:34
написано что нет

Yaroslav
20.07.2017
09:22:33
привет, коллеги адекватно ли делать поле enum в одной таблице(таблица1), а потом делая это же поле в другой таблице(таблица2) и ссылаться на поле из таблицы1. Меня смущает тип поля. Как думаете?

Alexey
20.07.2017
09:31:06

Yaroslav
20.07.2017
09:31:44

Alexey
20.07.2017
09:32:29
я думал это отвечает на вопрос. ENUM использовать нежелательно, в том числе и в данном конкретном случае по тем же причинам, что и в статье

Yaroslav
20.07.2017
09:34:00

Oliver
20.07.2017
11:05:20
а jdbc драйвер загружен?
В этом то и проблема! Скачал, указал путь до папки, перезапустил LibreOffice все равно пишет, что не загружен..?

Ivan
20.07.2017
12:54:51
Товарищи, кто-нибудь использует event scheduler в Galera cluster?
Оно вообще работает?

Alexey
20.07.2017
13:04:04
какое-то время назад не работало. не знаю, как сейчас
но там нет красивого и универсального решения

Ivan
20.07.2017
13:09:10
То есть нельзя просто бахнуть event_scheduler = on и всё. Жаль.

Alexey
20.07.2017
13:10:05
кому-то нужно, чтобы ивенты выполнялись на всех нодах. кому-то нужно, чтобы ивенты выполнялись только один раз на originating node
а кому-то и то, и другое
я пытаюсь найти баг репорт с обсуждением
а вообще они что-то там исправляли в этом плане: https://bugs.launchpad.net/codership-mysql/+bug/1312618

Ринат
20.07.2017
13:14:52
чот с майскл на постгресс запрос переписать пытаюсь
INSERT INTO split_test_session
(uuid, test_name_id, test_value, user_id, started_at, ended_at)
VALUES
('156dce32a5f16ee2aafc3580ea230ab1', 18, 1, 0, '2017-07-03 17:00:00', '2017-07-03 17:00:01')
ON CONFLICT (uuid, test_name_id) DO UPDATE SET ended_at = GREATEST(ended_at, VALUE(ended_at));
[42702] ERROR: column reference "ended_at" is ambiguous

Google

Ринат
20.07.2017
13:15:30
типа двусмысленно
как ему тогда указать что записывать в ended_at правильно
чтобы он сравнил текущее значение с уже существующим

Ivan
20.07.2017
13:18:04
Надо потестить создание ивентов.

Fike
20.07.2017
13:24:11
INSERT INTO split_test_session
(uuid, test_name_id, test_value, user_id, started_at, ended_at)
VALUES
('156dce32a5f16ee2aafc3580ea230ab1', 18, 1, 0, '2017-07-03 17:00:00', '2017-07-03 17:00:01')
ON CONFLICT (uuid, test_name_id) DO UPDATE SET ended_at = GREATEST(ended_at, VALUE(ended_at));
GREATEST(split_test_session.ended_at, excluded.ended_at) ?
https://www.postgresql.org/docs/9.5/static/sql-insert.html#SQL-ON-CONFLICT
только как-то странно выглядит, что excluded называют новые значения

Ринат
20.07.2017
13:25:15
хм
а в первой части указания имени таблицы-тоже обязательный элемент?

Fike
20.07.2017
13:25:57
хз, только что гуглом это все нашел

Ринат
20.07.2017
13:26:15
проверил
без указания таблицы-пишет ту же ошибку

Alexey
20.07.2017
13:26:43
Надо потестить создание ивентов.
я залез в код — там пишут, что поведение event scheduler в галере соответствует поведению в обычной репликации в том виде, как описано здесь: https://dev.mysql.com/doc/refman/5.7/en/replication-features-invoked.html

Ринат
20.07.2017
13:26:48
хех, спасибо. Я видел про этот экслудед, но почему то решил что это не о том

Ivan
20.07.2017
13:45:58

Alexey
20.07.2017
13:47:19

Ivan
20.07.2017
13:47:48

Google

Alexey
20.07.2017
13:48:01
только не в галере

Yevhen
20.07.2017
15:04:55

Oliver
21.07.2017
00:53:53

Subb98
21.07.2017
03:41:21
Всем привет. Подскажите, пожалуйста, как решить следующую задачу. У меня есть таблица, в которой хранятся некоторые ключи и значение для них. Это значение по ключу записывается раз в месяц. Например:
id key value
1 item1 10
2 item2 5
3 item1 12
4 item2 7
Задача такая. Посчитать сумму value для каждого ключа за 12 месяцев (за год) и за всё время. Как это правильно сделать?

Fike
21.07.2017
03:45:15
даты-то есть в таблице?

Subb98
21.07.2017
03:45:27
+
MAX(date)
Это для посл. месяца.
То есть, поле называется date

Fike
21.07.2017
03:46:42
select sum(value) where (условие с date)

Subb98
21.07.2017
03:47:07
Благодарю.
Правильно ли я понимаю, чтобы посчитать сумму по item'ам, нужно добавить GROUP BY key?

Fike
21.07.2017
04:18:51
да

Subb98
21.07.2017
04:20:10
Спасибо =)
SELECT key, SUM(value) FROM table WHERE date >= (
SELECT MAX(date) - INTERVAL '12 MONTH' FROM table
) AND key='blah-blah' GROUP BY key;
Мб, кому пригодится: сумма значений по ключу за посл. 12 мес. Условие нужно немного скорректировать, конечно.
Я понимаю, что запрос простой. Другое дело, когда ты знаешь это в теории, а на практике с вложенными запросами не работал. Самое забавное: вчера просидел над запросом типа UPDATE from SELECT целый день.
Потерял много времени. Мб, кому-то это время сэкономлю.

Danil
21.07.2017
06:05:03
Оу...update/insert/delete с вложенным запросом плохая идея. Результат вложенного запроса- некая виртуальная/временная таблица (существует строго в рамках выполнения запроса), следовательно изминить этот результат ты не можешь. Но вот использовать его как указатель на то с цемента работаешь - вполне (типа Update 1 from 1 where 1.id in (select)

Subb98
21.07.2017
06:16:16
У меня задача такова, что нужно в поле одной таблице обновить данные из другой, предварительно произвести с данными из другой таблицы ещё и определённые действия.