Size: a a a

pgsql – PostgreSQL

2021 March 10

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
я привел цитату из доки, там неправда?
Там правда, а Вы до сих пор путаете накладываемую и удерживаемую блокировки, что ли? ;)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
какого поля не хватет в этом запросе?
Я Вам уже дважды написал, нет?
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Ох, это даже не declarative partitioning.
Покажите "\d+ delivery_order_metric" (вообще, интересуют триггеры).
да система мигрирована с 9.6 работы по переходу на declarative partitioning еще не проведены
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Там правда, а Вы до сих пор путаете накладываемую и удерживаемую блокировки, что ли? ;)
вполне вероятно что путаю, если бы мне было все понятно я бы не обращался к уважаемому сообществу за советом :)
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Я Вам уже дважды написал, нет?
посмотрел все ваши ответы и не вижу чтобы выв указали какое именно нужное поле из pg_locks отсутсвует, извините если пропустил
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Ох, это даже не declarative partitioning.
Покажите "\d+ delivery_order_metric" (вообще, интересуют триггеры).
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
да система мигрирована с 9.6 работы по переходу на declarative partitioning еще не проведены
Так покажете "\d+ delivery_order_metric"? Или Вы уже нашли, в чём было дело?
Да текстом же...
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Так покажете "\d+ delivery_order_metric"? Или Вы уже нашли, в чём было дело?
Да текстом же...
текст не лезет по лимитам телеги, сейчас попробую очистить
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Ну и вон он тот самый "CREATE INDEX", и вся загадка.
В общем, как я и думал. ;)
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Ну и вон он тот самый "CREATE INDEX", и вся загадка.
В общем, как я и думал. ;)
нужная партиция уже есть и индекс не создается, функция не заходит в эту ветку кода. это праверял в первую очередь
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
нужная партиция уже есть и индекс не создается, функция не заходит в эту ветку кода. это праверял в первую очередь
Значит, заходит. По крайней мере, в том pid 31804 в Вашем примере — зашла.
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Значит, заходит. По крайней мере, в том pid 31804 в Вашем примере — зашла.
как видите из выовда определния таблицы - у таблицы всего 3 партиции, а проблема возникает у сотен и тысяч запросов. мысль в том что столько индексов не создается
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
посмотрел все ваши ответы и не вижу чтобы выв указали какое именно нужное поле из pg_locks отсутсвует, извините если пропустил
Подождите... я перепутал, извините (плохо видно без форматирования).
Дайте-ка я попробую... вот в урезанном виде (иначе всё равно ерунда получается):
       relation                | blocked_pid | blocked_mode | blocking_pid |   blocking_mode
-------------------------------+-------------+--------------+--------------+-------------------
delivery_order_metric_2021_03 |       10194 | ShareLock    |        31804 |  RowExclusiveLock
delivery_order_metric_2021_03 |       10194 | ShareLock    |        31804 |  ShareLock
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
как видите из выовда определния таблицы - у таблицы всего 3 партиции, а проблема возникает у сотен и тысяч запросов. мысль в том что столько индексов не создается
> у таблицы всего 3 партиции, а проблема возникает у сотен и тысяч запросов.

Так после того, как один запрос создал, за ним все повиснут.
Тем не менее, покажите определение триггера (и вложенных функций) текстом — так трудно читать.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
текст не лезет по лимитам телеги, сейчас попробую очистить
Можно же на любой paste site выложить и дать ссылку.
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Можно же на любой paste site выложить и дать ссылку.
amdelivery_prod=> select proname,prosrc from pg_proc where proname='delivery_order_metric_insert_trigger_func';
                 proname                  |                                       prosrc
-------------------------------------------+------------------------------------------------------------------------------------
delivery_order_metric_insert_trigger_func |                                                                                   +
                                          |                 DECLARE                                                           +
                                          |                     date_str VARCHAR;                                             +
                                          |                     partition_name VARCHAR;                                       +
                                          |                 BEGIN                                                             +
                                          |                     date_str := TO_CHAR(NEW.creation_date,'yyyy_mm');             +
                                          |                     partition_name := 'delivery_order_metric_' || date_str;       +
                                          |                     PERFORM create_delivery_order_metric_partition(date_str);     +
                                          |                     EXECUTE format('INSERT INTO %I VALUES ($1.*)', partition_name)+
                                          |                         USING NEW;                                                +
                                          |                     RETURN NULL;                                                  +
                                          |                 END;                                                              +
                                          |
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Dmitry Fomin
amdelivery_prod=> select proname,prosrc from pg_proc where proname='delivery_order_metric_insert_trigger_func';
                 proname                  |                                       prosrc
-------------------------------------------+------------------------------------------------------------------------------------
delivery_order_metric_insert_trigger_func |                                                                                   +
                                          |                 DECLARE                                                           +
                                          |                     date_str VARCHAR;                                             +
                                          |                     partition_name VARCHAR;                                       +
                                          |                 BEGIN                                                             +
                                          |                     date_str := TO_CHAR(NEW.creation_date,'yyyy_mm');             +
                                          |                     partition_name := 'delivery_order_metric_' || date_str;       +
                                          |                     PERFORM create_delivery_order_metric_partition(date_str);     +
                                          |                     EXECUTE format('INSERT INTO %I VALUES ($1.*)', partition_name)+
                                          |                         USING NEW;                                                +
                                          |                     RETURN NULL;                                                  +
                                          |                 END;                                                              +
                                          |
proname                 |                                                        prosrc
----------------------------------------+----------------------------------------------------------------------------------------------------------------------
create_delivery_order_metric_partition |                                                                                                                     +
                                       |             DECLARE                                                                                                 +
                                       |                 partition_name VARCHAR;                                                                             +
                                       |                 idx_name VARCHAR;                                                                                   +
                                       |                 next_date date;                                                                                     +
                                       |                 curdate date;                                                                                       +
                                       |             BEGIN                                                                                                   +
                                       |                 partition_name := 'delivery_order_metric_' || $1;                                                   +
                                       |                 idx_name := partition_name || '_idx';                                                               +
                                       |                 curdate := to_date($1, 'yyyy_mm');                                                                  +
                                       |                 next_date := to_date($1, 'yyyy_mm') + interval '1 month';                                           +
                                       |                 IF (SELECT EXISTS (SELECT 1 FROM information_schema.tables                                          +
                                       |                                    WHERE table_catalog = 'amdelivery' AND table_name=partition_name)) THEN          +
                                       |                 ELSE                                                                                                +
                                       |                     EXECUTE format('CREATE TABLE IF NOT EXISTS %I (                                                 +
                                       |                                       CHECK (creation_date >= date %L AND creation_date < date %L)                  +
                                       |                                       ) INHERITS (delivery_order_metric)', partition_name, curdate, next_date);     +
                                       |                     EXECUTE format('CREATE INDEX IF NOT EXISTS %I ON %I (creation_date)', idx_name, partition_name);+
                                       |                 END IF;                                                                                             +
                                       |                 RETURN NULL;                                                                                        +
                                       |             END;                                                                                                    +
                                       |
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
последняя партиция создана несколько дней назад (когда март начался) - те новые не должны создаваться и индексы соотвественно
источник

ДМ

Денис Морозов... in pgsql – PostgreSQL
Эфекта ноль.
источник

ДМ

Денис Морозов... in pgsql – PostgreSQL
Всем привет.подскажите пожалуйста а можно както через запрос получить имена колонок базы данных
источник