Size: a a a

pgsql – PostgreSQL

2021 March 10

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
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;                                                                                                    +
                                       |
Вы бы показали \sf каждой функции, а не эти "огрызки" (а то кажется, что функция создания написана "грязно", например — может создавать не там, где хотелось).
И, опять-таки, либо с форматированием, либо на paste site.
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
\sf delivery_order_metric_insert_trigger_func
CREATE OR REPLACE FUNCTION public.delivery_order_metric_insert_trigger_func()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
               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;
               $function$
источник

AL

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

DF

Dmitry Fomin in pgsql – PostgreSQL
Dmitry Fomin
\sf delivery_order_metric_insert_trigger_func
CREATE OR REPLACE FUNCTION public.delivery_order_metric_insert_trigger_func()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
               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;
               $function$
\sf create_delivery_order_metric_partition
CREATE OR REPLACE FUNCTION public.create_delivery_order_metric_partition(character varying)
RETURNS integer
LANGUAGE plpgsql
AS $function$
           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;
           $function$
источник

ДМ

Денис Морозов... in pgsql – PostgreSQL
Alexey Lesovsky
прям, имена колонок базы данных?, не какой-то конкретной таблицы, а именно базы данных??
Да Вы правы таблицы
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Денис Морозов
Эфекта ноль.
Т.е. запрос так и выводит "эффекта ноль"?
В базе данных нет "колонок", кстати (они есть в таблицах). С учётом этого — запрос правильный.
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Вы бы показали \sf каждой функции, а не эти "огрызки" (а то кажется, что функция создания написана "грязно", например — может создавать не там, где хотелось).
И, опять-таки, либо с форматированием, либо на paste site.
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
Денис Морозов
Да Вы правы таблицы
так используйте запрос по ссылке приведенной выше, там разве что модифицируйте его под себя, например у меня таблица pgbench_accounts
SELECT column_name
 FROM information_schema.columns
WHERE table_schema = 'public'
  AND table_name   = 'pgbench_accounts';
column_name
-------------
aid
bid
abalance
filler
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
Yaroslav Schekin
Т.е. запрос так и выводит "эффекта ноль"?
В базе данных нет "колонок", кстати (они есть в таблицах). С учётом этого — запрос правильный.
нет традиционного смайлика в конце... значит злой )))
источник

ДМ

Денис Морозов... in pgsql – PostgreSQL
Alexey Lesovsky
так используйте запрос по ссылке приведенной выше, там разве что модифицируйте его под себя, например у меня таблица pgbench_accounts
SELECT column_name
 FROM information_schema.columns
WHERE table_schema = 'public'
  AND table_name   = 'pgbench_accounts';
column_name
-------------
aid
bid
abalance
filler
Спасибо попробую
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
\sf create_delivery_order_metric_partition
CREATE OR REPLACE FUNCTION public.create_delivery_order_metric_partition(character varying)
RETURNS integer
LANGUAGE plpgsql
AS $function$
           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;
           $function$
Функции действительно написаны "грязно" (т.е. для кого-то, кроме owner/superuser не сработают, создавать могут вообще не в той схеме)... но вряд ли это всё имеет отношение к делу, казалось бы (хотя можете проверить, на всякий случай).
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Функции действительно написаны "грязно" (т.е. для кого-то, кроме owner/superuser не сработают, создавать могут вообще не в той схеме)... но вряд ли это всё имеет отношение к делу, казалось бы (хотя можете проверить, на всякий случай).
да код там далек от оптимального политкорректно выражаясь, да я проверял кол-во индексов до/после/вовремя
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexey Lesovsky
нет традиционного смайлика в конце... значит злой )))
Ах, Алексей, Вы же просто не понимаете, что я за человек:

"Смайлы и скобочки — костыль для умственных инвалидов. Неумение придавать эмоциональную окраску постам, используя лексический и фразеологический аппарат, весьма ярко показывает низкий уровень интеллекта индивида, демонстрируя его тупость, ограниченность и лень. Сегодня смайлы окончательно довершили разложение мозга нового поколения и русской словесности. Если раньше ограниченность алфавитом, ввиду отсутствия повсеместного засилья виртуальных просторов интернета смайлами и стикерами, вынуждала людишек упаковывать свои даже самые убогие мысли в слова, а слова складывать в предложения, то сейчас весь этот ставший непосильным для современного ското-быдла труд прекрасно заменяется использованием смайлов. Действительно, зачем лишний раз тревожить свой жиденький мозг, когда можно поставить скобочку или суррогатный жёлтый кружочек, выражающий какую-либо эмоцию. Это же касается и смишных картиночек, гифок и вебэмок, которые постят в ответ." ©

Так что куда уж мне злость-то выразить... или не выразить. ;)
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
Yaroslav Schekin
Ах, Алексей, Вы же просто не понимаете, что я за человек:

"Смайлы и скобочки — костыль для умственных инвалидов. Неумение придавать эмоциональную окраску постам, используя лексический и фразеологический аппарат, весьма ярко показывает низкий уровень интеллекта индивида, демонстрируя его тупость, ограниченность и лень. Сегодня смайлы окончательно довершили разложение мозга нового поколения и русской словесности. Если раньше ограниченность алфавитом, ввиду отсутствия повсеместного засилья виртуальных просторов интернета смайлами и стикерами, вынуждала людишек упаковывать свои даже самые убогие мысли в слова, а слова складывать в предложения, то сейчас весь этот ставший непосильным для современного ското-быдла труд прекрасно заменяется использованием смайлов. Действительно, зачем лишний раз тревожить свой жиденький мозг, когда можно поставить скобочку или суррогатный жёлтый кружочек, выражающий какую-либо эмоцию. Это же касается и смишных картиночек, гифок и вебэмок, которые постят в ответ." ©

Так что куда уж мне злость-то выразить... или не выразить. ;)
браво, я восхищен, честно. Не лень вам было искать этот абзац текста?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
да код там далек от оптимального политкорректно выражаясь, да я проверял кол-во индексов до/после/вовремя
Но, тем не менее, тогда что-то блокировало, и в современных версиях (если не пропустил) ShareLock накладывается только для того, для чего писал @knizhnik ... А сейчас это тоже происходит?
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
Я все-таки считаю что частично смайлики и скобочки со временем формируют стиль, как некий почерк человека. Но это все оффтоп, дальше не продолжаю.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexey Lesovsky
браво, я восхищен, честно. Не лень вам было искать этот абзац текста?
А я его для тестирования русского орфографического словаря использовал не так давно, так что он был недалеко (и как-то вспомнилось).
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Но, тем не менее, тогда что-то блокировало, и в современных версиях (если не пропустил) ShareLock накладывается только для того, для чего писал @knizhnik ... А сейчас это тоже происходит?
версия не совсем современная - 10.11,   такое поведение регистрируется во время тестов на qa окружении, сейчас тесты не выполняются
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Dmitry Fomin
версия не совсем современная - 10.11,   такое поведение регистрируется во время тестов на qa окружении, сейчас тесты не выполняются
да что-то блокировало, но пока не могу понять что. я тоже грешил на триггер если честно, но не смог это доказать себе :)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
версия не совсем современная - 10.11,   такое поведение регистрируется во время тестов на qa окружении, сейчас тесты не выполняются
Т.е. это и в тестах воспроизводится? Тогда должно же быть легко найти — казалось бы, выполняй и смотри... нет?
источник