Size: a a a

pgsql – PostgreSQL

2020 August 03

М

Максим in pgsql – PostgreSQL
datetime не совсем порядковое ) так как загружаю из csv пачки данных
источник

AS

Alexey Steklov in pgsql – PostgreSQL
поле datetime привести к дате ::date и по этому выражению построить индекс
источник

V

Valery in pgsql – PostgreSQL
Максим
datetime не совсем порядковое ) так как загружаю из csv пачки данных
Покажите описание таблицы и имеющиеся индексы
источник

V

Valery in pgsql – PostgreSQL
И запрос
источник

М

Максим in pgsql – PostgreSQL
Valery
Покажите описание таблицы и имеющиеся индексы
crm=# \d ivr.autoringup_call
                                           Table "ivr.autoringup_call"
  Column   |            Type             | Collation | Nullable |                     Default                    
------------+-----------------------------+-----------+----------+-------------------------------------------------
id         | integer                     |           | not null | nextval('ivr.autoringup_call_id_seq'::regclass)
abon       | character varying(13)       |           | not null |
datetime   | timestamp without time zone |           | not null |
dialtime   | integer                     |           |          |
waittime   | integer                     |           |          |
abmsgtime  | integer                     |           |          |
msgtime    | integer                     |           |          |
dialsignal | character varying(50)       |           |          |
ringup     | character varying(5)        |           |          |
status     | character varying(1)        |           |          |
pc_id      | character varying(8)        |           |          |
project    | character varying(10)       |           |          |
type       | integer                     |           |          |
Indexes:
   "autoringup_call_pk" PRIMARY KEY, btree (id)
   "autoringup_call_pc_id_datetime_idx" btree (pc_id, datetime DESC NULLS LAST)
источник

М

Максим in pgsql – PostgreSQL
explain (analyze, buffers)
select date(datetime), ringup, count(*) from ivr.autoringup_call where date(datetime) >= date(now()) - interval '30 day' group by date(datetime), ringup

GroupAggregate  (cost=2283349.55..2414194.74 rows=3579621 width=17) (actual time=10101.071..11409.279 rows=62 loops=1)
 Group Key: (date(datetime)), ringup
 Buffers: shared hit=359 read=394237, temp read=38991 written=39105
 ->  Sort  (cost=2283349.55..2304874.53 rows=8609993 width=9) (actual time=10085.966..10785.262 rows=6343210 loops=1)
       Sort Key: (date(datetime)), ringup
       Sort Method: external merge  Disk: 121896kB
       Buffers: shared hit=359 read=394237, temp read=38991 written=39105
       ->  Seq Scan on autoringup_call  (cost=0.00..997295.51 rows=8609993 width=9) (actual time=0.016..7966.136 rows=6343210 loops=1)
             Filter: (date(datetime) >= (date(now()) - '30 days'::interval))
             Rows Removed by Filter: 19452488
             Buffers: shared hit=359 read=394237
Planning Time: 0.094 ms
Execution Time: 11446.395 ms
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Максим
explain (analyze, buffers)
select date(datetime), ringup, count(*) from ivr.autoringup_call where date(datetime) >= date(now()) - interval '30 day' group by date(datetime), ringup

GroupAggregate  (cost=2283349.55..2414194.74 rows=3579621 width=17) (actual time=10101.071..11409.279 rows=62 loops=1)
 Group Key: (date(datetime)), ringup
 Buffers: shared hit=359 read=394237, temp read=38991 written=39105
 ->  Sort  (cost=2283349.55..2304874.53 rows=8609993 width=9) (actual time=10085.966..10785.262 rows=6343210 loops=1)
       Sort Key: (date(datetime)), ringup
       Sort Method: external merge  Disk: 121896kB
       Buffers: shared hit=359 read=394237, temp read=38991 written=39105
       ->  Seq Scan on autoringup_call  (cost=0.00..997295.51 rows=8609993 width=9) (actual time=0.016..7966.136 rows=6343210 loops=1)
             Filter: (date(datetime) >= (date(now()) - '30 days'::interval))
             Rows Removed by Filter: 19452488
             Buffers: shared hit=359 read=394237
Planning Time: 0.094 ms
Execution Time: 11446.395 ms
сделайте просто where "datetime" >= now() - interval '30 days'
источник

VY

Victor Yegorov in pgsql – PostgreSQL
ну и индекс по "datetime" нужен
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Максим
crm=# \d ivr.autoringup_call
                                           Table "ivr.autoringup_call"
  Column   |            Type             | Collation | Nullable |                     Default                    
------------+-----------------------------+-----------+----------+-------------------------------------------------
id         | integer                     |           | not null | nextval('ivr.autoringup_call_id_seq'::regclass)
abon       | character varying(13)       |           | not null |
datetime   | timestamp without time zone |           | not null |
dialtime   | integer                     |           |          |
waittime   | integer                     |           |          |
abmsgtime  | integer                     |           |          |
msgtime    | integer                     |           |          |
dialsignal | character varying(50)       |           |          |
ringup     | character varying(5)        |           |          |
status     | character varying(1)        |           |          |
pc_id      | character varying(8)        |           |          |
project    | character varying(10)       |           |          |
type       | integer                     |           |          |
Indexes:
   "autoringup_call_pk" PRIMARY KEY, btree (id)
   "autoringup_call_pc_id_datetime_idx" btree (pc_id, datetime DESC NULLS LAST)
Вы неправильно используете типы для работы с датой/временем, см. https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_timestamp_.28without_time_zone.29

И ещё, зачем сделан индекс, в котором (pc_id, datetime DESC NULLS LAST)?

А по ускорению — Вы писали про MIN(), а тут COUNT(*) — индексом Вы сможете ускорить только выбор диапазона timestamp-ов, по большому счёту.
источник

М

Максим in pgsql – PostgreSQL
Yaroslav Schekin
Вы неправильно используете типы для работы с датой/временем, см. https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_timestamp_.28without_time_zone.29

И ещё, зачем сделан индекс, в котором (pc_id, datetime DESC NULLS LAST)?

А по ускорению — Вы писали про MIN(), а тут COUNT(*) — индексом Вы сможете ускорить только выбор диапазона timestamp-ов, по большому счёту.
>А по ускорению — Вы писали про MIN(), а тут COUNT(*)

Это потому что сейчас для ускорения я офлайном складываю min(id) группируя по дате, но я хочу уйти от этого. Это бред. Сейчас запрос примерно такой

select date(t1.datetime), ringup, count(*)
from ivr.autoringup_call ac
join ivr.autoringup_dates ad on ac.id >= ad.id
where ad.dt >= date(now()) - interval ’30 day’
источник

P

Plus in pgsql – PostgreSQL
как смерджить инкременты в full %) если копии не вышли за рамки политики хранения бекапов ?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Victor Yegorov
сделайте просто where "datetime" >= now() - interval '30 days'
Это совсем не то же самое, нет?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Максим
>А по ускорению — Вы писали про MIN(), а тут COUNT(*)

Это потому что сейчас для ускорения я офлайном складываю min(id) группируя по дате, но я хочу уйти от этого. Это бред. Сейчас запрос примерно такой

select date(t1.datetime), ringup, count(*)
from ivr.autoringup_call ac
join ivr.autoringup_dates ad on ac.id >= ad.id
where ad.dt >= date(now()) - interval ’30 day’
И ещё раз: Вы неправильно используете типы данных для работы с датой/временем!
Почему?
И то, что Вам можно сделать для ускорения в этой ситуации, зависит от того, будете ли Вы исправлять эту ошибку, или "и так сойдёт". ;)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Yaroslav Schekin
Это совсем не то же самое, нет?
да, вы правы, конечно, поторопился
источник

A

Aleksey in pgsql – PostgreSQL
Подскажите, пожалуйста, как из patroni-кластера удалить ноды? По ошибке закатал в существующий кластер дополнительные ноды
источник

s

sexst in pgsql – PostgreSQL
Yaroslav Schekin
Это совсем не то же самое, нет?
Ну я бы сказал мягче: не совсем то же самое)
Cheap'n'dirty было бы функциональный индекс по date(datetime) повесить. Ну и да, тип на timestamptz нужно поправить.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
sexst
Ну я бы сказал мягче: не совсем то же самое)
Cheap'n'dirty было бы функциональный индекс по date(datetime) повесить. Ну и да, тип на timestamptz нужно поправить.
Результат-то получится другой.
Так вот если не менять тип, то такой индекс повесить получится, а если изменить — то нет.
Я потому и написал https://t.me/pgsql/242825
источник

A

Aleksey in pgsql – PostgreSQL
Aleksey
Подскажите, пожалуйста, как из patroni-кластера удалить ноды? По ошибке закатал в существующий кластер дополнительные ноды
Блин, достаточно patroni остановить
источник

Z

ZHU in pgsql – PostgreSQL
select * from dblink('host=____
           dbname=____
           user=erguser port=5432 password=___’,
    'select package_id, volume, density, mass, level, temperature,
    water_level, record_time, timestamp, core_tank.obj_id as tank
                    from public.core_tankdata
     INNER JOIN public.core_tank ON (tank_id = public.core_tank.id) limit 100'
                 ) as core_tankdata(
      package_id character varying(1000),
      volume double precision,
      density double precision,
      mass double precision,
      level double precision,
      temperature double precision,
      water_level double precision,
      record_time timestamp with time zone,
      timestamp timestamp with time zone,
      tank integer
   );

выходит ошибка
ERROR:  column reference "volume" is ambiguous
CONTEXT:  while executing query on unnamed dblink connection
именно когда подключаю INNER JOIN
источник

AM

Alexey Mishagin in pgsql – PostgreSQL
Подскажите, в patroni двух серверов достаточно или три минимум?
источник