
The
11.08.2018
11:01:01
и так-же PK будет в сависимости от того, может ли там быть M:M или нет
поэтому NOT NULL там конечно по дефолту будет, спасибо

Yaroslav
11.08.2018
11:17:20
Вы вот нагенерировали данных... но с ними проблема в том, что вряд ли в жизни распределение свойств будет хоть сколько-нибудь похоже на равномерное (как у Вас получилось). :(
И в Вашем случае это важно, к сожалению.
Т.е. смотрите, по сочетанию всех выбранных свойств у Вас получается 130779 записей (из 3.2 M, верно)?
И PostgreSQL это прямо почти точно "угадывает", что и намекает мне, что в жизни всё будет не так гладко.

Google

Yaroslav
11.08.2018
11:54:06

The
11.08.2018
12:02:40
и будут таблицы с другими опциями, например size {s, m, l, xl}
и т.д.

Yaroslav
11.08.2018
12:06:58

The
11.08.2018
12:08:18
ну т.е. в реальных условиях все же проще базе будет, я правильно понял?

Yaroslav
11.08.2018
12:10:30

The
11.08.2018
12:12:11
я буду ещё допиливать дизайн базы, и потом попробую налить настоящих данных, но их будет совсем мало. товаров тысяч 20-30, артикулов может 50-70 тыс.
ещё прототип сайта надо набросать, оттуда станут ясны выборки какие будут, и какие поля у таблиц


Yaroslav
11.08.2018
12:14:08
В таком случае, я бы с запроса с LATERAL начал смотреть, всё же.
Т.е. фильтруем товары -> притягиваем цены -> сортируем и ограничиваем.
И даже чтобы на этом прототипе посмотреть, Вам нужно wholesale_price добавить...
ну т.е. в реальных условиях все же проще базе будет, я правильно понял?
-- Что-то вроде (после создания полей и ранее указанных индексов):
SELECT ...
FROM shop_product_sku AS sps
JOIN shop_product AS sp
ON sps.product_id = sp.id
CROSS JOIN LATERAL (
SELECT spso.seller_id, spso.wholesale_price, (
SELECT MAX(retail_price)
FROM shop_product_sku_offer AS spso_retail
WHERE spso_retail.sku_id = spso.sku_id
-- Index (sku_id, retal_price)
) AS max_retail
FROM shop_product_sku_offer AS spso
WHERE spso.sku_id = sps.id
ORDER BY spso.wholesale_price, spso.seller_id
LIMIT 1
-- Index (sku_id, wholesale_price, seller_id)
) AS best_seller
WHERE sps.is_available
AND EXISTS (
SELECT 1
FROM shop_feature_brand_sku sfbs
WHERE sfbs.sku_id = sps.id
AND sfbs.feature_value_code IN ('xiaomi', 'samsung', 'lg', 'huawei')
)
AND EXISTS (
SELECT 1
FROM shop_feature_cores_sku AS sfcs
WHERE sfcs.sku_id = sps.id
AND sfcs.feature_value_code = 2
)
AND EXISTS (
SELECT 1
FROM shop_feature_ram_sku AS sfrs
WHERE sfrs.sku_id = sps.id
AND sfrs.feature_value_code IN (2048, 4096)
)
ORDER BY spso.wholesale_price DESC, sps.id
LIMIT 30;

Google

The
11.08.2018
13:04:02
жесть)

Yaroslav
11.08.2018
13:08:52
жесть)
Да ладно. ;) Это ерунда, на самом деле.

Труба
11.08.2018
16:16:56
Всем привет, помогите, пожалуйста написать селект с джоином. Возможно я вообще не в том направлении думаю. Буду благодарен за любую помощь.
Table: posts(category/post_type)
Values: 'cats','image'
Table: post_fields(name/value/post_id)
Values: 'image_source','http://testsite.com'
Result
Columns(category/post_type/image_source)
Values: 'cats'/'image'/'http://testsite.com'
Я пробовал вот так, но не особо получилось =)
SELECT posts.*, post_fields.name AS post_fields.name
FROM posts
JOIN post_fields ON post_fields.post_id = posts.id;

Yaroslav
11.08.2018
16:21:23


Труба
11.08.2018
16:25:43
Почему у Вас поля через "/"? ;)
А чего вы хотели добиться и что не так?
Я просто для примера выбрал такой разделитель. У меня есть несколько типов постов, и у каждого свои дополнительные поля, который храняться в таблице post_fields. Когда я выполняю селект, хочу соединить эти поля вместе с постом чтобы во время селекта получилось вот так
post.category, post.post_type, post_field1_name, post_field2_name
'cats', 'image', post_field1_value, post_field2_value

Yaroslav
11.08.2018
16:27:36
Я просто для примера выбрал такой разделитель. У меня есть несколько типов постов, и у каждого свои дополнительные поля, который храняться в таблице post_fields. Когда я выполняю селект, хочу соединить эти поля вместе с постом чтобы во время селекта получилось вот так
post.category, post.post_type, post_field1_name, post_field2_name
'cats', 'image', post_field1_value, post_field2_value
Хмм... ну а в Вашем запросе что не так (если не считать того, что value не выбирается)?

Труба
11.08.2018
16:28:11
Я получаю 2 строки вместо одной =)

Yaroslav
11.08.2018
16:31:53
А Вы все возможные "поля" (значения post_fields.name) знаете?
Если да, то либо пишите кусок запроса для каждого (или генерируйте его динамически), либо собирайте их в какой-нибудь JSON/XML/hstore и т.п.
А почему у Вас именно такая модель (это прямо очень похоже на EAV)?

Труба
11.08.2018
16:32:20
Я стыбзил это из вордпрес =)
А как еще можно сделать посты с разными типами?
вообще можно в одну строку все записать. Только иногда поля будут пустые

Yaroslav
11.08.2018
16:33:35
Хмм... а где тут типы? Тут просто какие-то значения, кажется.

Труба
11.08.2018
16:36:33
Посты могут быть картинками, текстом и ссылками(которые потом можно будет вставлять на сайт, например youtube/embed/id) . Если мы вставляем картинку то будет post_type='image', если ссылку то post_type='link'. Я приводил пример с постом с типом 'image'
Спасибо за помощь, пойду пилить дальше.

The
11.08.2018
16:38:10
помоему у wp не очень оптимальный дизайн бд
там так сделано в угоду гибкости, чтобы плагинчиками можно было расширять

Труба
11.08.2018
16:38:58

Yaroslav
11.08.2018
16:39:07

Google

Труба
11.08.2018
16:40:31

Yaroslav
11.08.2018
16:42:11

Труба
11.08.2018
16:45:04

Yaroslav
11.08.2018
16:47:48
Вы предлагаете записать все посты в разные таблицы? post_image, post_link и post_text? Я потом смогу получить список всех постов? Мне нужно создать сайт, куда пользователи смогут загружать разный контент, затем будет формироваться фид из этих постов.
Я конкретного ничего не предлагаю, т.к. мне, например, непонятно, ни что у Вас есть, ни что Вам нужно. ;)
Если у Вас есть только 3 возможных "поля", можно сделать (самое простое):
posts(post_id, post_type, image NULL, link NULL, text NULL) + соответствующие constraints.

The
11.08.2018
16:48:37
не, он хочет чтобы контент был динамическим, т.е. пост - это и видео, и ссылка, и прочее.
можно что-то подобное у reddit глянуть, у них там есть
post
post_data
где у post есть id, url, excerpt
а у post_data - k:v все метаинформация

Yaroslav
11.08.2018
16:50:22

The
11.08.2018
16:50:26
по хорошему нужно определить точку слияния между всеми этими сущностями, т.е. у каждой из них есть заголовок, есть картинка (например) и маленькое описание. а там уже разделять по таблицам
ну во всяком случае в wp так сделано)

Yaroslav
11.08.2018
16:50:48

Труба
11.08.2018
16:52:06
Я плохо объясняю. =) Вадим прав, это то что мне нужно.
Сейчас посмотрю как там у реддита

The
11.08.2018
16:55:04
https://www.slideshare.net/carsonified/steve-huffman-lessons-learned-while-at-redditcom
8 слайд
но сразу скажу, презентация древняя, хз как у них сейчас сделано)

Труба
11.08.2018
16:58:21
Да, это как у вордпрес =)
Спасибо еще раз, я понял как сделать. =)

The
11.08.2018
17:00:21
везет вам

Terminator
11.08.2018
18:59:59
@Heitorfaria будет жить. Поприветствуем!

Heitor
11.08.2018
19:00:09
Hello guys, good afternoon. I'm a newbie. How do I subtract these two values in postgresql? 2017-05-25 11:56:46 | 2017-05-25 11:56:46
I'm trying SELECT DATEDIFF(second, starttime, endtime) from job;

Google

Александр
11.08.2018
19:07:18
Age(endtime, starttime)

Mike Chuguniy
11.08.2018
19:08:24
pg_user=> select '2017-05-25 11:56:46'::timestamp - '2017-05-25 11:56:46'::timestamp as timediff;
timediff
----------
00:00:00
(1 строка)
pg_user=>

Admin
ERROR: S client not available

Heitor
11.08.2018
19:14:21
Age(endtime, starttime)
SELECT age(endtime, starttime) from job;
ERROR: syntax error at or near "Age"
LINE 1: Age(endtime, starttime)
^
Thank you very mutch, btw
bacula=# select endtime::timestamp - starttime::timestamp as timediff from job;
timediff
----------
00:00:54
00:00:00
bacula=# select jobbytes::float/(endtime::timestamp - starttime::timestamp) from job;
ERROR: operator does not exist: double precision / interval
I actually need the average of jobbytes::int / (endtime::timestamp - starttime::timestamp)

Yaroslav
11.08.2018
20:03:47

Terminator
11.08.2018
20:42:40
@Dinogavrik будет жить. Поприветствуем!
@museiko будет жить. Поприветствуем!
Nikolay Trubeko будет жить. Поприветствуем!

Slach
12.08.2018
09:56:51
Народ А зачем pg_restore выводит sql запросы из файла в ,stdout?

Artem
12.08.2018
10:04:52
а книги по postgres-pl/sql тут можно постить?

Dima
12.08.2018
10:20:10
Допустим я подыму на сервере бд постгрес. Я смогу к ней подключится с своего пк удаленно? (просто недоконца уверкн в этом)

Volodymyr Kostyrko
12.08.2018
10:20:44
Да.

Yukari
12.08.2018
10:44:53

Yaroslav
12.08.2018
11:30:55

Eagle Owl
12.08.2018
11:42:47

Google

elfiki
12.08.2018
12:10:19

Slach
12.08.2018
12:26:52
Наталья Мякушина:
ПОДСКАЗКА: No operator matches the given name and argument type(s). You might need to add explicit type casts.
ОПЕРАТОР: CREATE INDEX questions_main_section_dtime_key ON questions USING btree (dtime) WHERE (ARRAY[7629426] OPERATOR(tables_to_drop.<@) sections);
Народ а что это за оператор? Как его создать?

Anton [Mgn, az09@osm]
12.08.2018
12:40:53

Slach
12.08.2018
12:41:51
Оно на англиском кроме пары слов
Там даже sql запрос есть который фейлится
Суть того чтотнапиисано типа нет оператора котрый матчится на array и поле sections которое interger[] масиивом обьявлено
Типа скастуйте типы
Вот только я в упор не понимаю какие типы надо кастовать

Anton [Mgn, az09@osm]
12.08.2018
12:45:52
А оператор я думаю в каком-то из этих смыслов https://en.wikipedia.org/wiki/Operator_(computer_programming)

Mike Chuguniy
12.08.2018
12:48:57
Оператор доступа к индексу? А это не вот отсюда: https://postgrespro.ru/docs/postgresql/10/indexam ?
Ну или таки покажите запрос и \d <tablename>