@pgsql

Страница 1042 из 1062
Terminator
18.10.2018
14:37:56
@Seempoke будет жить. Поприветствуем!

Sab0
18.10.2018
15:01:46
ребят, а постгрес после установки смотрит в мир? по какому порту?

Mike Chuguniy
18.10.2018
15:02:40
ребят, а постгрес после установки смотрит в мир? по какому порту?
А это надо смотреть на ваши файрвол и listen_addresses в конфиге.

Alex
18.10.2018
15:08:01
по дефолту не смотрит

Google
Sab0
18.10.2018
15:09:13
я просто пытаюсь настроить omnidb и не понимаю какой порт указать(

Mike Chuguniy
18.10.2018
15:09:39
Да

Terminator
18.10.2018
15:37:55
@amelkor будет жить. Поприветствуем!

Alexey
18.10.2018
15:39:13
Может кто-нибудь пояснить фичу jit compilation в 11-ой версии? или ссылку дать на ресурс, где можно прочитать про это. Т.е. как это работает и почему это даёт прирост производительности.

Darafei
18.10.2018
15:41:11
они пишут сишный код, который выполняет твой запрос, и компилируют

а потом проход оптимизирующего компилятора вырезает все однозначные для твоего случая ифы

Alexey
18.10.2018
15:42:41
Т.е. там до 10-ой была интерпретация

Darafei
18.10.2018
15:44:14
http://www.pgcon.org/2017/schedule/attachments/467_PGCon%202017-05-26%2015-00%20ISPRAS%20Dynamic%20Compilation%20of%20SQL%20Queries%20in%20PostgreSQL%20Using%20LLVM%20JIT.pdf

Alexey
18.10.2018
15:45:02
@Komzpa, спасибо

Хм... а почему тогда всякие питоны, перлы, руби и т.д. так не делают?)

На сколько я знаю они все компилируют/транслируют в интерпретируемый байткод

Stanislav
18.10.2018
15:47:36
ну pl\sql тоже конвертирует/упаковывает, но всегда можно и обратно распаковать.

Google
Darafei
18.10.2018
15:48:17
Хм... а почему тогда всякие питоны, перлы, руби и т.д. так не делают?)
как это не делают? а что же тогда делает pypy или v8?

Fike
18.10.2018
15:49:13
Хм... а почему тогда всякие питоны, перлы, руби и т.д. так не делают?)
Потому что там не хватает рук и мозгов для такого, плюс у JIT есть серьезные пенальти на первое выполнение, там по-хорошему надо интерпретировать и в параллель компилить. Жаба так делает, и там реально огромное болото подводных камней, через которое пришлось пройти, чтобы добиться текущих результатов.

Подозреваю, что в БД будет чуть проще, чем в ЯП, потому что не нужно никакого escape analysis и прочего, глубина инлайнинга заранее известна и т.п.

Darafei
18.10.2018
15:51:24
у тебя ровно один вызов функции, и требуется "как можно быстрее" (а не "поинтерактивнее", "без замираний", "без долгого старта")

Alexey
18.10.2018
15:51:47
как это не делают? а что же тогда делает pypy или v8?
Т.е. вы хотите сказать в процессе выполнения они компилируют? я не уверен в этом.

Fike
18.10.2018
15:53:46
При желании можно любой повторяющийся паттерн перегнать в чистый машинный код, которому не нужно контролировать интерпретатор вообще. Насколько понимаю, v8 так делает, и hidden classes именно оттуда и берут свое начало.

Terminator
18.10.2018
15:54:23
@johnspade будет жить. Поприветствуем!

Alexey
18.10.2018
15:55:45
но вы ведь можете погуглить :)
Да, вы правы. Видимо pypy быстрее, чем cpython.

Fike
18.10.2018
15:56:00
С "не нужно контролировать интерпретатор" наверное перегнул, но многие вещи можно легко делать в обход рантайма, экономля как на структурах данных, так и на скорости выполнения, e.g. локальные переменные можно вообще на регистрах хранить.

Alexey
18.10.2018
15:56:05
Хотя как посмотреть. Там время старта дольше

Darafei
18.10.2018
15:56:48
Alexey
18.10.2018
15:57:50
Моём? я не пользуюсь pypy. Просто вроде как логично, что в случае cpython там транслирование, а в случае pypy там транслирование в си и компилирование.

Ладно, всем спасибо

Зачем в что-то транислировать. Почему бы не сразу компилировать?

Может потому что компиляторы c/с++ имеют свои оптимизаторы всякие, которые накладно писать?

Alexey
18.10.2018
16:18:22
вам не в этот чатик
Это последний вопрос ? этой темы

Terminator
18.10.2018
16:38:32
@Trey55 будет жить. Поприветствуем!

Google
F
18.10.2018
18:21:05
Как и было запланировано, 18 октября вышла 11 версия PostgreSQL. Основные нововведения: ✓ Партицирование по хешу ✓ Поддержка первичных и внешних ключей, индексов на партицированных таблицах ✓ UPDATE строки по ключу партицирования перемещает данные в нужную партицию ✓ Улучшение производительности SELECT запросов на партицированных таблицах (доработан planner и executor) ✓ B-Tree индекс теперь может создаваться в несколько потоков ✓ CREATE TABLE ... AS, CREATE MATERIALIZED VIEW и некоторые запросы с UNION теперь также могут распараллеливаться ✓ Улучшена производительность параллельных hash join и seq scan ✓ Можно управлять транзакцией внутри хранимой процедуры ✓ JIT компиляция SQL кода ✓ Оконные функции теперь поддерживают некоторые нововведения стандарта SQL:2011 ✓ Поддержка INCLUDE для покрывающий индексов ✓ Размер WAL сегмента теперь можно задавать во время инициализации кластера ✓ Многочисленные улучшения производительности И многое, многое другое.

Sergey
18.10.2018
19:35:54
Даешь докер-образ!



Oleg ?
19.10.2018
04:44:23
SELECT discussions.id, count(discussions_answers.id) AS answers, discussions_topics.text, user_forms.name, discussions.user_id, discussions.status, discussions_topics.updated_at FROM (((discussions LEFT JOIN discussions_answers ON ((discussions_answers.discussions_id = discussions.id))) JOIN discussions_topics ON ((discussions_topics.discussions_id = discussions.id))) LEFT JOIN user_forms ON ((user_forms.user_id = discussions.user_id))) WHERE (discussions.status = 1) GROUP BY discussions.id, user_forms.name, discussions_topics.updated_at, discussions_topics.text

LEFT JOIN user_forms ON ((user_forms.user_id = discussions.user_id))) как указать, чтобы он брало только последнюю строку из всех ассоциаций?

Ivan
19.10.2018
05:14:03
order by x desc limit 1?

Oleg ?
19.10.2018
05:14:55
а как вставить правильно в запрос?

я впервые их пишу

Ivan
19.10.2018
05:15:59
Они вставляются в конец запроса. Приятного изучения документации https://postgrespro.ru/docs/postgrespro/10/sql-select

Oleg ?
19.10.2018
05:16:48
мммм

я именно в джоин не оч понима.

у меня ошибку возвращает

я вроде прочитал и правильно сделал

сейчас вот сижу читаю как джоины работают, а то я достаточно абстрактно представляю

Ivan
19.10.2018
05:19:25
Скобочек столько можно не ставить в условиях, читаться проще будет

Oleg ?
19.10.2018
05:20:32
ой да

спасибо

LEFT JOIN ( SELECT "name" FROM user_forms ORDER BY "user_forms.id" DESC LIMIT 1 ) ON "public".user_forms."user_id" = "public".discussions."user_id" AS user_forms

не работает

ERROR: subquery in FROM must have an alias LINE 13: LEFT JOIN ( SELECT "name" FROM user_forms ORDER BY "user_f...

Google
Oleg ?
19.10.2018
05:46:51
не понимаю как именно это делать?

Yaroslav
19.10.2018
06:04:04
не понимаю как именно это делать?
Написано же: > subquery in FROM must have an alias Вообще любой subquery в FROM должен как-то называться. Но у Вас всё равно неправильно, похоже — Вы отбираете первую запись в порядке "user_forms.id", а потом пытаетесь её JOIN-ить.

Yaroslav
19.10.2018
06:06:44
а как правильно?
Наверное, как-то так: LEFT JOIN LATERAL (SELECT name FROM user_forms WHERE user_forms.user_id = discussions.user_id ORDER BY user_forms.id DESC LIMIT 1) AS something

Oleg ?
19.10.2018
06:07:25
а вот as something - это как использовать? мне в гропу писать что-то типа something.name?

Alexey
19.10.2018
06:08:35
Если я вас правильно понял, то вам нужно что-то вроде такого: SELECT discussions.id, count(discussions_answers.id) AS answers, discussions_topics.text, user_forms.name, discussions.user_id, discussions.status, discussions_topics.updated_at FROM discussions LEFT JOIN discussions_answers ON discussions_answers.discussions_id = discussions.id JOIN discussions_topics ON discussions_topics.discussions_id = discussions.id lateral LEFT JOIN ( select user_forms.* from user_forms where user_forms.user_id = discussions.user_id order by user_forms.user_id desc limit 1 ) as user_forms WHERE discussions.status = 1 GROUP BY discussions.id, user_forms.name, discussions_topics.updated_at, discussions_topics.text

Oleg ?
19.10.2018
06:10:22
я вот уже сижу и разбираю на куски, что прочитать )

сейчас тест прогоню и пойду понимать, как это работает

как раз об этом, да?

Alexey
19.10.2018
06:11:44
Видимо

Oleg ?
19.10.2018
06:12:18
Видимо
а если как Ярослав, то ERROR: syntax error at or near "WHERE" LINE 18: WHERE discussions.status = 1 ^

Alexey
19.10.2018
06:13:59
Условие нету

нужно ещё on true написать

SELECT discussions.id, count(discussions_answers.id) AS answers, discussions_topics.text, user_forms.name, discussions.user_id, discussions.status, discussions_topics.updated_at FROM discussions LEFT JOIN discussions_answers ON discussions_answers.discussions_id = discussions.id JOIN discussions_topics ON discussions_topics.discussions_id = discussions.id LEFT JOIN lateral ( select user_forms.* from user_forms where user_forms.user_id = discussions.user_id order by user_forms.user_id desc limit 1 ) as user_forms on true WHERE discussions.status = 1 GROUP BY discussions.id, user_forms.name, discussions_topics.updated_at, discussions_topics.text

Oleg ?
19.10.2018
06:15:49
вроде работает

Google
Oleg ?
19.10.2018
06:15:59
у меня ещё сработало, когда я на cross join поменял

SELECT discussions.id, count(discussions_answers.id) AS answers, discussions_topics.text, user_forms.name, discussions.user_id, discussions.status, discussions_topics.updated_at FROM discussions LEFT JOIN discussions_answers ON discussions_answers.discussions_id = discussions.id JOIN discussions_topics ON discussions_topics.discussions_id = discussions.id CROSS JOIN LATERAL ( select user_forms.* from user_forms where user_forms.user_id = discussions.user_id order by user_forms.user_id desc limit 1 ) as user_forms WHERE discussions.status = 1 GROUP BY discussions.id, user_forms.name, discussions_topics.updated_at, discussions_topics.text

вот так

а как правильней?

Alexey
19.10.2018
06:17:59
Зависит от того, что вам нужно ?, Вам нужен left join или inner join?

Oleg ?
19.10.2018
06:19:14
сама задача у меня - это сделать db view к которой потом обращаться из откуда-то и я честно говоря вчера узнал только что такое бывает

Alexey
19.10.2018
06:19:24
Возможно тут как раз без разницы)

Oleg ?
19.10.2018
06:19:59
до этого всегда как-то так получалось, но там овер 200 запросов если через Элокнет на страницу из 30 топиков

А тут как бы один

хорошо, буду пользоваться так

спасибо большое

❤️

Alexey
19.10.2018
06:28:37
Возможно тут как раз без разницы)
Есть разница: test=# create table x(a int); CREATE TABLE test=# create table y(x int); CREATE TABLE test=# insert into x values (1); INSERT 0 1 test=# select * from x left outer join lateral ( select * from y where x.a = y.x) as t on true; a | x ---+--- 1 | (1 row) test=# select * from x cross join lateral ( select * from y where x.a = y.x) as t; a | x ---+--- (0 rows) test=#

Сергей
19.10.2018
06:37:37
Всем привет, а кто администратор в чате? Есть вопрос)

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