Size: a a a

pgsql – PostgreSQL

2020 August 04

EK

Evgeni Kontsevoy in pgsql – PostgreSQL
Коллеги подскажите плиз , есть запрос необходимо после 'phone' добавить ещё attribute. как в jsonb это сделать не новой строкой
sum(case (data->>'auth_method'='phone','attribute')when true then 1 else 0 end) as "Authorization_by_phone",
источник

ZN

Zamira Norova in pgsql – PostgreSQL
Evgeni Kontsevoy
Коллеги подскажите плиз , есть запрос необходимо после 'phone' добавить ещё attribute. как в jsonb это сделать не новой строкой
sum(case (data->>'auth_method'='phone','attribute')when true then 1 else 0 end) as "Authorization_by_phone",
Склеивать разные значения из jsonb в одну строку типа?
источник

EK

Evgeni Kontsevoy in pgsql – PostgreSQL
Zamira Norova
Склеивать разные значения из jsonb в одну строку типа?
да
источник

NB

Nick Belous in pgsql – PostgreSQL
Я получил права суперпользователя на удаленном сервере, но при добавлении новой таблицы возникает permission denied.
PostgreSQL v12.
источник

NB

Nick Belous in pgsql – PostgreSQL
Можете подсказать, в чем может быть проблема?
источник

🕵

🕵🏻 Макс in pgsql – PostgreSQL
подскажите, как оптимизировать запрос можно:

Aggregate  (cost=1838981.55..1838981.56 rows=1 width=4) (actual time=27125.428..27125.428 rows=1 loops=1)
 Buffers: shared hit=533088 read=630002
 CTE cte
   ->  Append  (cost=0.57..1819066.50 rows=885113 width=12) (actual time=0.022..27125.406 rows=31 loops=1)
         Buffers: shared hit=533088 read=630002
         ->  Index Scan using url_relation_child_id_idx on url_relation  (cost=0.57..100.38 rows=101 width=12) (actual time=0.022..0.055 rows=31 loops=1)
               Index Cond: (child_id = 2173753)
               Buffers: shared hit=33 read=1
         ->  Gather  (cost=1000.00..1805689.43 rows=885012 width=12) (actual time=27125.346..27125.423 rows=0 loops=1)
               Workers Planned: 4
               Workers Launched: 0
               Buffers: shared hit=533055 read=630001
               ->  Parallel Seq Scan on url_relation rel  (cost=0.00..1716188.23 rows=221253 width=12) (actual time=27125.146..27125.146 rows=0 loops=1)
                     Filter: (child_id = parent_id)
                     Rows Removed by Filter: 177029041
                     Buffers: shared hit=533055 read=630001
 ->  CTE Scan on cte  (cost=0.00..17702.26 rows=885113 width=4) (actual time=0.024..27125.419 rows=31 loops=1)
       Buffers: shared hit=533088 read=630002
Planning Time: 0.121 ms
Execution Time: 27125.536 ms

Капец медленный.
Я так понимаю, что "Parallel Seq Scan" в первую очередь создает проблемы?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Nick Belous
Я получил права суперпользователя на удаленном сервере, но при добавлении новой таблицы возникает permission denied.
PostgreSQL v12.
Покажите что делаете и ошибку целиком.
источник

NB

Nick Belous in pgsql – PostgreSQL
Создаю таблицу с правами суперпользователя =>
[2020-08-04 14:44:11] [42501] ERROR: permission denied for schema esse
[2020-08-04 14:44:11] Позиция: 14
[2020-08-04 14:44:11] Summary: 1 of 1 statements executed, 1 failed in 75 ms (4072 symbols in file)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Nick Belous
Создаю таблицу с правами суперпользователя =>
[2020-08-04 14:44:11] [42501] ERROR: permission denied for schema esse
[2020-08-04 14:44:11] Позиция: 14
[2020-08-04 14:44:11] Summary: 1 of 1 statements executed, 1 failed in 75 ms (4072 symbols in file)
Почти наверняка это или не superuser (он вообще игнорирует почти все проверки прав), или это вообще не PostgreSQL (а какой-нибудь fork, в "облаках" подобное где-то есть, например, насколько я помню).
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
🕵🏻 Макс
подскажите, как оптимизировать запрос можно:

Aggregate  (cost=1838981.55..1838981.56 rows=1 width=4) (actual time=27125.428..27125.428 rows=1 loops=1)
 Buffers: shared hit=533088 read=630002
 CTE cte
   ->  Append  (cost=0.57..1819066.50 rows=885113 width=12) (actual time=0.022..27125.406 rows=31 loops=1)
         Buffers: shared hit=533088 read=630002
         ->  Index Scan using url_relation_child_id_idx on url_relation  (cost=0.57..100.38 rows=101 width=12) (actual time=0.022..0.055 rows=31 loops=1)
               Index Cond: (child_id = 2173753)
               Buffers: shared hit=33 read=1
         ->  Gather  (cost=1000.00..1805689.43 rows=885012 width=12) (actual time=27125.346..27125.423 rows=0 loops=1)
               Workers Planned: 4
               Workers Launched: 0
               Buffers: shared hit=533055 read=630001
               ->  Parallel Seq Scan on url_relation rel  (cost=0.00..1716188.23 rows=221253 width=12) (actual time=27125.146..27125.146 rows=0 loops=1)
                     Filter: (child_id = parent_id)
                     Rows Removed by Filter: 177029041
                     Buffers: shared hit=533055 read=630001
 ->  CTE Scan on cte  (cost=0.00..17702.26 rows=885113 width=4) (actual time=0.024..27125.419 rows=31 loops=1)
       Buffers: shared hit=533088 read=630002
Planning Time: 0.121 ms
Execution Time: 27125.536 ms

Капец медленный.
Я так понимаю, что "Parallel Seq Scan" в первую очередь создает проблемы?
Просто подходящего индекса нет, похоже. Какая это версия PostgreSQL? И неплохо бы увидеть сам запрос.
источник

🕵

🕵🏻 Макс in pgsql – PostgreSQL
Yaroslav Schekin
Просто подходящего индекса нет, похоже. Какая это версия PostgreSQL? И неплохо бы увидеть сам запрос.
Блин, я понял... реально индекс куда-то делся ((

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

EK

Evgeni Kontsevoy in pgsql – PostgreSQL
Переслано от Evgeni Kontsevoy
Коллеги подскажите плиз , есть запрос необходимо после 'phone' добавить ещё attribute. как в jsonb это сделать не новой строкой
sum(case (data->>'auth_method'='phone','attribute')when true then 1 else 0 end) as "Authorization_by_phone",
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Evgeni Kontsevoy
Переслано от Evgeni Kontsevoy
Коллеги подскажите плиз , есть запрос необходимо после 'phone' добавить ещё attribute. как в jsonb это сделать не новой строкой
sum(case (data->>'auth_method'='phone','attribute')when true then 1 else 0 end) as "Authorization_by_phone",
Я не понял вопроса. Может, покажете пример (был такой-то jsonb, в него нужно добавить то-то, должен получиться этакий)?
источник

EK

Evgeni Kontsevoy in pgsql – PostgreSQL
Yaroslav Schekin
Я не понял вопроса. Может, покажете пример (был такой-то jsonb, в него нужно добавить то-то, должен получиться этакий)?
select
 current_date as date_time,
 ewents_pap,
 sum(case (data->>'auth_method'='phone')when true then 1 else 0 end) as "Authorization_by_phone"
from
 ewints   - было вот так и сюда нужно добавить в 'auth_method'='phone' ещё и 'attribute' чтобы и phone и attribute считалось вместе
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Evgeni Kontsevoy
select
 current_date as date_time,
 ewents_pap,
 sum(case (data->>'auth_method'='phone')when true then 1 else 0 end) as "Authorization_by_phone"
from
 ewints   - было вот так и сюда нужно добавить в 'auth_method'='phone' ещё и 'attribute' чтобы и phone и attribute считалось вместе
Понятнее не стало. :(
Что там за JSON-ы, в этом поле data?
источник

EK

Evgeni Kontsevoy in pgsql – PostgreSQL
Yaroslav Schekin
Понятнее не стало. :(
Что там за JSON-ы, в этом поле data?
jsonb
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Да неужели?! ;)
Вы пример значений покажите! А то непонятно, что это за 'attribute' вообще, при чём он тут и откуда взялся.
источник

EK

Evgeni Kontsevoy in pgsql – PostgreSQL
Yaroslav Schekin
Да неужели?! ;)
Вы пример значений покажите! А то непонятно, что это за 'attribute' вообще, при чём он тут и откуда взялся.
сейчас. вот строка jsonb по запросу выбирается сколько человек зашли по телефону и сюда нужно ещё сложить сколько людей зашли по атрибуту, необходимо сложить строки с "auth_method": "phone" и "auth_method": "attribute". Есть строки с phone и есть строки с attribute
{"site": {"id": "1111111", "url": "https://111111", "name": "111111"}, "client": {"id": "111111111", "owner": {"id": "111111111", "unp": "11111111", "name": "ЗАО \"11111\""}, "tariff": null, "client_id": "111111111", "locale_name": "1111111", "default_name": "11111111"}, "scopes": "1111111", "request": {"uri": "https://o111111", "lang": "ru", "port":33333, "user_agent": "1111 (1111)"}, "event_id": null, "alias_ids": ["11111111", "11111111"], "expires_in": 0, "grant_type": "111111", "token_hash": "1111111111", "auth_method": "phone", "session_uuid": "111111111"}
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Evgeni Kontsevoy
сейчас. вот строка jsonb по запросу выбирается сколько человек зашли по телефону и сюда нужно ещё сложить сколько людей зашли по атрибуту, необходимо сложить строки с "auth_method": "phone" и "auth_method": "attribute". Есть строки с phone и есть строки с attribute
{"site": {"id": "1111111", "url": "https://111111", "name": "111111"}, "client": {"id": "111111111", "owner": {"id": "111111111", "unp": "11111111", "name": "ЗАО \"11111\""}, "tariff": null, "client_id": "111111111", "locale_name": "1111111", "default_name": "11111111"}, "scopes": "1111111", "request": {"uri": "https://o111111", "lang": "ru", "port":33333, "user_agent": "1111 (1111)"}, "event_id": null, "alias_ids": ["11111111", "11111111"], "expires_in": 0, "grant_type": "111111", "token_hash": "1111111111", "auth_method": "phone", "session_uuid": "111111111"}
WITH ewints(data) AS (   
VALUES
('{"site": {"id": "1111111", "url": "https://111111", "name": "111111"}, "client": {"id": "111111111", "owner": {"id": "111111111", "unp": "11111111", "name": "ЗАО \"11111\""}, "tariff": null, "client_id": "111111111", "locale_name": "1111111", "default_name": "11111111"}, "scopes": "1111111", "request": {"uri": "https://o111111", "lang": "ru", "port":33333, "user_agent": "1111 (1111)"}, "event_id": null, "alias_ids": ["11111111", "11111111"], "expires_in": 0, "grant_type": "111111", "token_hash": "1111111111", "auth_method": "phone", "session_uuid": "111111111"}'::jsonb),
('{"site": {"id": "1111111", "url": "https://111111", "name": "111111"}, "client": {"id": "111111111", "owner": {"id": "111111111", "unp": "11111111", "name": "ЗАО \"11111\""}, "tariff": null, "client_id": "111111111", "locale_name": "1111111", "default_name": "11111111"}, "scopes": "1111111", "request": {"uri": "https://o111111", "lang": "ru", "port":33333, "user_agent": "1111 (1111)"}, "event_id": null, "alias_ids": ["11111111", "11111111"], "expires_in": 0, "grant_type": "111111", "token_hash": "1111111111", "auth_method": "attribute", "session_uuid": "111111111"}'::jsonb)
)
SELECT SUM(CASE (data->>'auth_method'='phone') WHEN true THEN 1 ELSE 0 END) AS "Authorization_by_phone",
      COUNT(*) FILTER (WHERE data->>'auth_method' = 'phone') AS authorization_by_phone_simpler,
      COUNT(*) FILTER (WHERE data->>'auth_method' IN ('phone', 'attribute')) AS "like this?"
 FROM ewints;
Так? Или что-то другое нужно?
источник

EK

Evgeni Kontsevoy in pgsql – PostgreSQL
Yaroslav Schekin
WITH ewints(data) AS (   
VALUES
('{"site": {"id": "1111111", "url": "https://111111", "name": "111111"}, "client": {"id": "111111111", "owner": {"id": "111111111", "unp": "11111111", "name": "ЗАО \"11111\""}, "tariff": null, "client_id": "111111111", "locale_name": "1111111", "default_name": "11111111"}, "scopes": "1111111", "request": {"uri": "https://o111111", "lang": "ru", "port":33333, "user_agent": "1111 (1111)"}, "event_id": null, "alias_ids": ["11111111", "11111111"], "expires_in": 0, "grant_type": "111111", "token_hash": "1111111111", "auth_method": "phone", "session_uuid": "111111111"}'::jsonb),
('{"site": {"id": "1111111", "url": "https://111111", "name": "111111"}, "client": {"id": "111111111", "owner": {"id": "111111111", "unp": "11111111", "name": "ЗАО \"11111\""}, "tariff": null, "client_id": "111111111", "locale_name": "1111111", "default_name": "11111111"}, "scopes": "1111111", "request": {"uri": "https://o111111", "lang": "ru", "port":33333, "user_agent": "1111 (1111)"}, "event_id": null, "alias_ids": ["11111111", "11111111"], "expires_in": 0, "grant_type": "111111", "token_hash": "1111111111", "auth_method": "attribute", "session_uuid": "111111111"}'::jsonb)
)
SELECT SUM(CASE (data->>'auth_method'='phone') WHEN true THEN 1 ELSE 0 END) AS "Authorization_by_phone",
      COUNT(*) FILTER (WHERE data->>'auth_method' = 'phone') AS authorization_by_phone_simpler,
      COUNT(*) FILTER (WHERE data->>'auth_method' IN ('phone', 'attribute')) AS "like this?"
 FROM ewints;
Так? Или что-то другое нужно?
вот это вы разложили конечно_)))))))))) я хотел узнать как можно в мой запрос
sum(case (data->>'auth_method'='phone')when true then 1 else 0 end) as "Authorization_by_phone"
вставить attribute на подобе как вы сделали с data->>'auth_method' IN ('phone', 'attribute')
источник