@pgsql

Страница 925 из 1062
Yaroslav
08.08.2018
11:29:36
ну вот требование именно в бд хранить, может быть не настолько маловажное
Ах, требования? ;) Ладно, отлично. Посчитайте соотвествующие прогнозируемые объемы (и производительность — для backup-ов) хранилища, покажите эту цену в районе сотен тысяч $ тем, кто требовал — и "блаженство с рожи сойдёт", скорее всего. :)

Subb98
08.08.2018
11:30:51
как посчитали "сотни тысяч"? )

Yaroslav
08.08.2018
11:31:07
А, и Вы ещё упоминали про репликацию... её тоже посчитайте.

как посчитали "сотни тысяч"? )
Я просто предположил (на основании беспочвенных догадок о требуемых RTO/RPO), естественно. ;)

Google
Ilia
08.08.2018
11:35:36
Зависит от FS. В базе тоже ограничения есть, как и везде.
Именно. Поэтому это -- сложная и многогранная задача. И в чатах решать её как-то ....

Роман
08.08.2018
11:35:40
Yaroslav
08.08.2018
11:38:43
Именно. Поэтому это -- сложная и многогранная задача. И в чатах решать её как-то ....
Ну, основных подходов немного (Вы уже давали соотвествующую ссылку на wiki).

Jim
08.08.2018
11:39:12
Установлено, там много чего доаилено
я думаю стоит их поковырять, ни под один из форматов binaryfilesindb это не попадает

больше похоже на массив байтов в hex

Ilia
08.08.2018
11:41:06
больше похоже на массив байтов в hex
Интересно, как ты догалался? Это именно он!

Jim
08.08.2018
11:41:26
ba dum tss

Yaroslav
08.08.2018
11:49:36
А у кого какие мнения по CTE inlining patch? Например, похоже, что в основном пока многие склоняются к варианту: . WITH a(z, x) AS [MATERIALIZED] (...) . Никаких GUC-ов не давать, по умолчанию — inline.

Google
Yaroslav
08.08.2018
11:55:14
А зачем такое надо? Пусть сервак сам решает и план строит...
Все те, кто использовал это, как materialization hint, боюсь, не оценят такого новаторства. ;)

Darafei
08.08.2018
11:56:19
Undefined behavior надо время от времени ломать

Yaroslav
08.08.2018
11:56:43
Сори, за любопытство, а хинты уже встроили?
Да, просто мы о них не рассказываем. ? В самом деле, кое-что есть (и давно было), просто пользоваться этим по возможности не стоит...

Ilia
08.08.2018
11:58:45
Да, просто мы о них не рассказываем. ? В самом деле, кое-что есть (и давно было), просто пользоваться этим по возможности не стоит...
РСУБД на cost-based optimized доложна иметь возможность задавать хинты. Просто потому что не все 100% запросов возможно оптимиризовать автоматом.

Darafei
08.08.2018
11:59:29
А на каком оптимизаторе она может обойтись без хинтов?

Yaroslav
08.08.2018
11:59:46
Darafei
08.08.2018
12:00:38
Мне нравился индексный selectivity estimator для полигонов, что ли, в постгресе

return 0.000001 // user created index, let's use it

Или как-то так

Yaroslav
08.08.2018
12:05:46
Я в курсе, но я не согласен.
Почему конкретно?

Мне нравился индексный selectivity estimator для полигонов, что ли, в постгресе
Ну так default-ов много, к сожалению. :( Как говорится, patches w... ну, Вы знаете. ;)

Ilia
08.08.2018
12:08:03
Считается, что 20% современные CBO не могут оптимизировать по определению. Оценки, конечно, оценочные. Может 10. Может 30. может 5. Но не все. Принципиально это. CBO действуют на основе урезанных метаданных о данных, они не могут быть 100% точны

Yaroslav
08.08.2018
12:10:59
Ну выше же.
Ну, оптимизаторы вообще не предназначены для оптимизации 100% запросов автоматом. ;) (И hint-ами тут делу сильно не поможешь, кстати.) Проблема тут в том, что лекарство хуже болезни. :(

Ilia
08.08.2018
12:12:05
Ну, естественно.

Yaroslav
08.08.2018
12:12:31
Правильно, поэтому нуны хинты. Либо планы запросов, задаваемые пользователем.
Нет. Из того, что взрывчатка иногда необходима, не следует, что нужно раздавать её на улицах. ;)

Google
Yaroslav
08.08.2018
12:13:50
Я видел немало приложений, за-hint-ованных "вусмерть". :( Видимо, на основании "что там эти оптимизаторы, мы-то знаем, как надо!".

Heisenberg
08.08.2018
12:16:08
Всем привет. Такая проблема в постгре: в WHERE мне необходимо сделать два подселекта и вывести true, если у них есть хотя бы одна общая строка. Как это можно сделать грамотно?

Yaroslav
08.08.2018
12:18:42
Ну, я тоже. И тем не менее, 95% существующих СУБД имеют хинты. Кроме PG
А "95% населения — идиоты." Хмм... совпадение? Не думаю! ;) (Т.е. всякой очень популярной дряни много.) А если серьёзно, это не значит, что наличие hints — хорошее решение.

Heisenberg
08.08.2018
12:19:15
спасибо

Heisenberg
08.08.2018
12:20:10
да да

я именно так и сделаю щас

Ilia
08.08.2018
12:22:06
А "95% населения — идиоты." Хмм... совпадение? Не думаю! ;) (Т.е. всякой очень популярной дряни много.) А если серьёзно, это не значит, что наличие hints — хорошее решение.
Блин, я всё это знаю. Но блин ВСЕ ТАК ДЕЛАЮТ. Другого способа нет. Т.е. есть -- abstract query plans -- но это вам тоже не понравится. Я не сталкивался когда хинты в PG были бы нужны. База была простая и тупая, запрсы несложные и оптимизатор хороший реально. Но ... всё равно такая ситуация будет.

Gennady
08.08.2018
12:26:04
Это серьёзное заблуждение, что из серьёзных БД только в PG нет хинтов. Есть ещё teradata, там тоже нет хинтов.

Yaroslav
08.08.2018
12:26:35
Блин, я всё это знаю. Но блин ВСЕ ТАК ДЕЛАЮТ. Другого способа нет. Т.е. есть -- abstract query plans -- но это вам тоже не понравится. Я не сталкивался когда хинты в PG были бы нужны. База была простая и тупая, запрсы несложные и оптимизатор хороший реально. Но ... всё равно такая ситуация будет.
> Но блин ВСЕ ТАК ДЕЛАЮТ. Ну так пусть "все" используют какие-нибудь другие СУБД. > Другого способа нет. Есть, и даже несколько: . Улучшать оценки в оптимизаторе. . Расширять оптимизатор (hooks и т.п.). . Трансформировать запросы перед тем, как посылать их PostgreSQL (или просто писать их правильно/идиоматически). . Использовать процедурный код вместо SQL для решения конкретной задачи. Hints всё равно не дают Вам получить такой план, который планировщик сам не может построить.

Ilya
08.08.2018
12:29:10
Добрый день! Помогите пожалуйста составить запрос. Есть 3 таблицы: chats: | chat_id | client_id | operator_id | | 1 | 12 | 17 | | 2 | 13 | 22 | categories: | chat_id | category_id | | 1 | 178 | | 1 | 202 | | 1 | 300 | | 2 | 24 | messages: | message_id | chat_id | response | | 1 | 1 | 51 | | 2 | 1 | 12 | | 3 | 2 | 11 | | 4 | 2 | 30 | | 5 | 2 | 5 | Нужно одним запросом получить данные в виде: | chat_id | client_id | operator_id | cats | first_response | | 1 | 12 | 17 | [178, 202, 300] | 51 | | 2 | 13 | 22 | [24] | 11 | Проблема в полях categories и first_response. По отдельности их заполнить есть варианты: С categories: SELECT chats.*, JSON_AGG(categories.category_id) as cats FROM chats LEFT JOIN categories USING (chat_id) GROUP BY chats.chat_id ORDER BY chats.chat_id С first_response: SELECT DISTINCT ON (chats.id) chats.*, messages.first_response FROM chats LEFT JOIN messages USING (chat_id) ORDER BY chats.chat_id, messages.message_id А чтобы вместе - ничего не могу придумать.

Yaroslav
08.08.2018
12:29:18
Блин, я всё это знаю. Но блин ВСЕ ТАК ДЕЛАЮТ. Другого способа нет. Т.е. есть -- abstract query plans -- но это вам тоже не понравится. Я не сталкивался когда хинты в PG были бы нужны. База была простая и тупая, запрсы несложные и оптимизатор хороший реально. Но ... всё равно такая ситуация будет.
> Я не сталкивался когда хинты в PG были бы нужны. А я сталкивался, и обычно переписывал запросы (ну и hint-овал, сознаюсь, иногда...) :( >и оптимизатор хороший реально. Ну, скорее средний оптимизатор у PostgreSQL, по нынешним временам-то.

Это серьёзное заблуждение, что из серьёзных БД только в PG нет хинтов. Есть ещё teradata, там тоже нет хинтов.
А что, кстати, в exasol hint-ы есть? Если по-прежнему нет, то это как-то подкашивает утверждения в стиле "без них нельзя" и "все так делают". ;)

Ilya
08.08.2018
12:37:13
А fiddle можете показать?
Теоретически да

Yaroslav
08.08.2018
12:43:21
Теоретически да
Тогда мы теоретически можем Вам помочь.

Ilya
08.08.2018
12:57:14
А fiddle можете показать?
https://www.db-fiddle.com/f/bBo34U3KZBuWFYicp7Hd3r/0

artb1sh
08.08.2018
12:57:14
pg_dump через FETCH а не COPY плюсы и минусы?

Google
artb1sh
08.08.2018
12:58:34
pg_dump: COPY vs INSERT?

Yaroslav
08.08.2018
13:03:02
https://www.db-fiddle.com/f/bBo34U3KZBuWFYicp7Hd3r/0
О, хорошо, посмотрю....

pg_dump: COPY vs INSERT?
Смотря зачем.

artb1sh
08.08.2018
13:03:57
Смотря зачем.
падает приложение из-за COPY pg_dump

Yaroslav
08.08.2018
13:10:06
https://www.db-fiddle.com/f/bBo34U3KZBuWFYicp7Hd3r/0
Чисто формально, так: https://www.db-fiddle.com/f/bBo34U3KZBuWFYicp7Hd3r/2 Но! Вам лучше было бы, наверное, использовать LATERAL для "first message".

Vlad
08.08.2018
13:12:55
Посоветуйте, пожалуйста, pgsql провайдер для EF Core (.net core)

Ilya
08.08.2018
13:14:04
Чисто формально, так: https://www.db-fiddle.com/f/bBo34U3KZBuWFYicp7Hd3r/2 Но! Вам лучше было бы, наверное, использовать LATERAL для "first message".
Я может не так выразился, но под "одним запросом" подразумевал отсутствие вложенных запросов...

Admin
ERROR: S client not available

Yaroslav
08.08.2018
13:14:51
падает приложение из-за COPY pg_dump
Ну так используйте insert, если с ним не падает... что это у Вас за приложение такое?

Ilya
08.08.2018
13:17:30
Конечно, не так. А почему такое ограничение?
Там запрос намного сложнее. Я упростил для простоты понимания проблемы.

Yaroslav
08.08.2018
13:19:09
Там запрос намного сложнее. Я упростил для простоты понимания проблемы.
И неужели в нём нет ни одного вложенного запроса или подзапроса? Почему ограничение-то? ;)

Ilya
08.08.2018
13:20:57
И неужели в нём нет ни одного вложенного запроса или подзапроса? Почему ограничение-то? ;)
Там всё гораздо хуже, даже UNION ALL есть... А нельзя это ограничение просто принять как данность в контексте вопроса?)

The
08.08.2018
13:21:49
у кого-то есть дизайны БД под товары? сижу тут рисую уже какую версию, и вот думаю, бренд - это характеристика артикула или товара. С одной стороны - артикула, с другой, товара. Но если рассмотреть товары-комплекты, тогда два артикула могут быть разных брендов. Чето я подгрузился.

Yaroslav
08.08.2018
13:27:36
Там всё гораздо хуже, даже UNION ALL есть... А нельзя это ограничение просто принять как данность в контексте вопроса?)
Ну и что? Переписать-то всё равно можно. По-моему, Вы пытаетесь обойтись "малой кровью", а выйдет, скорее всего, всё куда хуже. :(

Ilia
08.08.2018
13:39:43
Это серьёзное заблуждение, что из серьёзных БД только в PG нет хинтов. Есть ещё teradata, там тоже нет хинтов.
Не, не ты говорил... Но не важно. Я не говорю, что обязательно использовать хинты. Я говорю, что проблема есть. Все проблему решают хинтами. PG не решает никак.

Google
The
08.08.2018
13:41:09
бренд - это тег
я бы сказал, что бренд - это характеристика товара, скорее. но опять таки, характеристики можно лепить на товар и на артикул. я конечно предпочитаю на артикул, но например есть товар у которого может быть 10+ артикулов, и появляется хоть и не существенная, но избыточность. а учитывая, что я хочу попробовать хранить это в JSON, выходит больно.

Yaroslav
08.08.2018
13:43:16
Там всё гораздо хуже, даже UNION ALL есть... А нельзя это ограничение просто принять как данность в контексте вопроса?)
Вообще, формально, какой-нибудь способ, скорее всего, есть... а толку (эффективным он и близко не будет)? ;)

The
08.08.2018
13:43:33
думал уже в json писать только k:v самих характеристик, т.е. {"brand":"samsung"}, а в другой табличке хранить всю инфу по характеристике со всеми её значениями, и локализациями/интернационализациями/мета информацией. Например, цвет можно писать тупо текстом на двух языках, но намного красивей когда на сайте есть цветовой "пиптик", сразу приятней выбирать фильтры.

короче, уже второй день думаю над реализацией, и не могу продвинуться никуда. за JSON зоопарком следить надо, а за таблицами (6NF) и прочим писать кучу бойлерплейта.

и типизация.. а ещё группировка фильтров, например у товара указан "Объем оперативной памяти: 6ГБ", а в фильтрах можно указать 6-8ГБ, т.е. фильтр - это уже комбинация из двух значений.

Yaroslav
08.08.2018
13:45:44
короче, уже второй день думаю над реализацией, и не могу продвинуться никуда. за JSON зоопарком следить надо, а за таблицами (6NF) и прочим писать кучу бойлерплейта.
А то Вы кучу boilerplate обычно не пишете (для обычных полей). ;) Всё равно что-то писать придётся, и какой-то подход к этому у Вас, скорее всего, уже есть.

The
08.08.2018
13:46:07
я стараюсь даже null поля не иметь

без лишней необходимости, тогда валидацию только делаю, и через орм можно писать в базу

хотя, я орм тут юзать не буду

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

Yaroslav
08.08.2018
13:50:06
да нет, у меня MVVM
(брюжжит) Понапридумали всякой фигни, проклятая молодежь! ;) А подробнее можете рассказать? Вот, например, добавляете вы поле в таблицу, и для того, чтобы оно попало в view/model, Вы делаете что?

The
08.08.2018
13:52:59
(брюжжит) Понапридумали всякой фигни, проклятая молодежь! ;) А подробнее можете рассказать? Вот, например, добавляете вы поле в таблицу, и для того, чтобы оно попало в view/model, Вы делаете что?
зависит от дизайна базы, но в данном случае я делаю под себя, а не под массовый рынок, а значит мне придется написать миграцию, и в представлении просто отрендерить данный столбец, input допустим. Дальше, зависит от логики, если ОРМ - тогда больше ничего. Если нет ОРМ, тогда поправить логику выборки, сохранения.

Про "накосячить" — запросто. А в чём заключаются быстрота и удобство?
удобство вот так делать ... WHERE feature @> '{"brand":"samsung","cores":8}'

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