@pgsql

Страница 977 из 1062
elfiki
10.09.2018
13:39:10
а есть какой-нибудь инструмент, чтобы построил структуру базы диаграммкой? ну типа связи таблиц и тд и тп?

MikaelBox
10.09.2018
13:39:57
pgModeler

Но он своеобразный

Google
Yaroslav
10.09.2018
13:40:27
Dmitry
10.09.2018
13:40:35
MikaelBox
10.09.2018
13:40:43
ЕМС умеет, кстати

Yaroslav
10.09.2018
13:40:45
ORDER BY
Ну и что?

MikaelBox
10.09.2018
13:40:51
И годно делает

Dmitry
10.09.2018
13:40:54
Ну и что?
Ну и то.

Yaroslav
10.09.2018
13:41:09
Ну и то.
Что "то"?

Dmitry
10.09.2018
13:41:35
Что "то"?
When using LIMIT, it is a good idea to use an ORDER BY clause that constrains the result rows into a unique order. Otherwise you will get an unpredictable subset of the query's rows

Vladislav
10.09.2018
13:42:07
простите, а разве оффсет/лимит работают до аггрегации?

Vadim
10.09.2018
13:42:18
ребят какой из joinov работает быстрей?

Dmitry
10.09.2018
13:42:20
И как это влияет на данный конкретный запрос? ;)
Ничего не знаю. Говорю в соответствии с документацией. Не определён.

Eugeny
10.09.2018
13:42:40
Во, какая жаркая дискуссия. Мне это и надо )

Google
Yaroslav
10.09.2018
13:42:50
I
10.09.2018
13:43:47
В конечном итоге OFFSET исключит единственную результирующую строку из выборки

Dmitry
10.09.2018
13:44:08
I
10.09.2018
13:44:15
простите, а разве оффсет/лимит работают до аггрегации?
Именно после аггрегации, поэтому и ничего не будет

Vladislav
10.09.2018
13:44:54
ааа, значит не показалось

Yaroslav
10.09.2018
13:45:36
Да ладно? Где?
Вот здесь: Otherwise you will get an unpredictable subset of the query's rows. Здесь есть (максимум) 1 row в результате, затем [в произвольном порядке] пропускается 2, и выводится 4. Какой будет result set?

Yaroslav
10.09.2018
13:48:42
Какая именно строка в результате?
Не имеет значения, разве нет? Возьмите, например, два объекта, расставьте их в произвольном порядке, затем отбростьте 3 и выдайте 5. Какой будет результат?

Eugeny
10.09.2018
13:48:59
ребят какой из joinov работает быстрей?
для двух больших сетов merge иначе nested loop

Dmitry
10.09.2018
13:49:54
Не имеет значения, разве нет? Возьмите, например, два объекта, расставьте их в произвольном порядке, затем отбростьте 3 и выдайте 5. Какой будет результат?
Ну так если Вы не можете назвать конкретную строку, значит результата Вы не знаете. Значит он неопределён. Ч.т.д.

elfiki
10.09.2018
13:51:03
просто интересно

можно даже парочку вариантов ответов возможных

Yaroslav
10.09.2018
13:51:33
Ну так если Вы не можете назвать конкретную строку, значит результата Вы не знаете. Значит он неопределён. Ч.т.д.
Е-р-у-н-д-а. Перечитайте мой пример. Я Вам больше скажу, SQL стоит на / состоит из unspecified behaviour в значительной степени... и, тем не менее, запросы-то мы как-то пишем. ;)

Dmitry
10.09.2018
13:52:11
а что, например, может вернуть запрос с картинки по вашему? ну например?
Результат неопределён. Это не по-моему, это согласно документации.

elfiki
10.09.2018
13:53:01
Ну так пишем же мы с ORDER BY.
как переписать запрос, чтобы результат был опеределен?

Dmitry
10.09.2018
13:53:17
Добавить ORDER BY.

Google
Dmitry
10.09.2018
13:54:35
Пусть ?

elfiki
10.09.2018
13:54:55
от этого результат как-то поменяется?

Eugeny
10.09.2018
13:55:10
нет )

Yaroslav
10.09.2018
13:55:10
Ну так пишем же мы с ORDER BY.
В данном случае, это не имеет значения.

elfiki
10.09.2018
13:55:36
нет )
мне интересна цепочка рассуждений от молодого человека выше)

ну или это просто бот-статический анализатор кода

Eugeny
10.09.2018
14:00:57
я не бот )

elfiki
10.09.2018
14:04:52
я не бот )
запрос-то что вернет?

вон там и ордер есть

Dmitry
10.09.2018
14:05:47
от этого результат как-то поменяется?
Вы, видимо не поняли. Без ORDER BY хоть пусть будет OFFSET 100500 - результат неопрелён. Не важно, сколько записей отфильтрутся. Пустое множество - это тоже множество ?

Eugeny
10.09.2018
14:05:48
ничего он не вернет, даже если отсортировать по part все равно перед обрезкой будет одна запись

Vitality
10.09.2018
14:05:58
Вернёт два поля 1 и 110

А стлп

Блядь

1 и 40

Кто вообще пишет offset до limit?

elfiki
10.09.2018
14:07:42
Вы, видимо не поняли. Без ORDER BY хоть пусть будет OFFSET 100500 - результат неопрелён. Не важно, сколько записей отфильтрутся. Пустое множество - это тоже множество ?
тут вполне определенные данные и ответ вполне себе определен, и не важно, есть тут order by или его нет. более того, даже если в конкретно данном случае убрать оффсеты, то ордер бай все-равно не удет играть никакой роли. это как считать, что select count(*) from table будет давать разные результаты при разной сортировке

Vitality
10.09.2018
14:08:20
А, нет, все верно, 1 и 110

Alexey
10.09.2018
14:08:21
Вы, видимо не поняли. Без ORDER BY хоть пусть будет OFFSET 100500 - результат неопрелён. Не важно, сколько записей отфильтрутся. Пустое множество - это тоже множество ?
Выглядит так, что в рамках этого запроса результат всегда опередлён. Т.е. сколько бы раз вы не запускали этот код, результат будет один и тот же.

Google
Vitality
10.09.2018
14:09:02
А разве он сначала не отберёт поля по лимиту а потом просуммирует?

Vitality
10.09.2018
14:10:49
Да, точно. Я писал такие запросы. Сначала посчитает сумму, а потом уже будет брать лимиты

elfiki
10.09.2018
14:11:05
Это не ко мне вопрос. Вот что говорит документация - When using LIMIT, it is a good idea to use an ORDER BY clause that constrains the result rows into a unique order. Otherwise you will get an unpredictable subset of the query's rows
да чего вы прикопались к этой строчке? тут не говорится, что ответ будет неопределен, а говорится что "может быть разным", но при этом может быть и одинаковым

Alexey
10.09.2018
14:11:31
Это не ко мне вопрос. Вот что говорит документация - When using LIMIT, it is a good idea to use an ORDER BY clause that constrains the result rows into a unique order. Otherwise you will get an unpredictable subset of the query's rows
Даже не знаю, что вам сказать. Может быть посоветовать вам ещё раз посмотреть запрос, ведь там есть фильтрация и группировка по фильтрации и offset со значением > 1.

elfiki
10.09.2018
14:11:46
нет

elfiki
10.09.2018
14:12:16
Но ORDER BY то нет.
я добавил в запрос order by. ответ становится определенным?

или это троллинг такой?

Alexey
10.09.2018
14:12:32
Но ORDER BY то нет.
Ну ок, теперь я могу только сказать: ? Удачи

Dmitry
10.09.2018
14:12:41
нет
Нет? Ну 2 + 2 = 4. Без всяких "может быть". Это детерминированный результат. Факт объективной реальности. Доказанный.

elfiki
10.09.2018
14:12:54
Но ORDER BY то нет.
вот тут ответ определен? select part, sum(value) from table t where part=1 group by part order by part offset 2 limit 4

elfiki
10.09.2018
14:13:59
Dmitry
10.09.2018
14:14:21
и какой же?
Пустое множество.

Yaroslav
10.09.2018
14:14:28
Вы, видимо не поняли. Без ORDER BY хоть пусть будет OFFSET 100500 - результат неопрелён. Не важно, сколько записей отфильтрутся. Пустое множество - это тоже множество ?
Это Вы неправильно понимаете, к сожалению. Здесь Вам не С, понятия undefined behavior в SQL нет. Вот что написано в стандарте, например: Implementation-dependent: Possibly differing between SQL-implementations, but not specified by this International Standard and not required to be specified by the implementor for any particular SQL-implementations. When the ordering of a cursor is not defined by an <ORDER BY clause>, the relative position of two rows is implementation-dependent.

Google
Dmitry
10.09.2018
14:15:46
Вообще, этот спор бессмысленный.

elfiki
10.09.2018
14:16:08
я так и вижу как делаю выборку по примари кею и обязательно вставляю сортировку, а то вдруг какая-то херня придет

elfiki
10.09.2018
14:17:14
сразу после сортировки

Dmitry
10.09.2018
14:17:25
конечно, limit 1 offset 0
По первичному ключу?

Yaroslav
10.09.2018
14:17:26
Вообще, этот спор бессмысленный.
Ничего подобного! И высказывание это не говорит, что в этих случаях PostgreSQL может Вам возвращать всякий бред, который с запросом никак не сзязан. Более того, ISO SQL прямо запрещает такие шутки, как мне помнится.

elfiki
10.09.2018
14:19:02
По первичному ключу?
как будто так делать нельзя

Dmitry
10.09.2018
14:21:32
Ничего подобного! И высказывание это не говорит, что в этих случаях PostgreSQL может Вам возвращать всякий бред, который с запросом никак не сзязан. Более того, ISO SQL прямо запрещает такие шутки, как мне помнится.
PostgreSQL выдаст неопрелённый результат в случае LIMIT без ORBER BY. Нет, ну если, как говорит коллега, сделать SELECT * FROM foo WHERE id = 10 LIMIT 1 OFFSET 0, то тут PostgreSQL деваться будет некуда, хотя формально, результат будет неопределён. Правда я честно не понимаю зачем его тут делать неопределённым с помощью LIMIT...

Alexey
10.09.2018
14:23:31
Хм... интересно, если в таблице test есть колонки a, b, c. И я делаю такой запрос: selec ctid, a,b,c from test order by a, b, c offset 5 limit 10 Всегда одно одно и то же будет?

Dmitry
10.09.2018
14:24:08
Dmitry
10.09.2018
14:24:20
Который сын ошибок всмысле )

Yaroslav
10.09.2018
14:24:56
Не "неопределённый результат", а результат LIMIT-а, кторый применён к rows, отсортированным в произвольном порядке. Т.е. если у Вас, например, есть: "... LIMIT 3;" и без LIMIT возвращается больше трёх rows, возрат двух — это, безусловно, bug в СУБД. И ещё раз, здесь Вам не C. ;)

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