Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как можно добавить индекс к системной таблице pg_proc / 4 сообщений из 4, страница 1 из 1
02.10.2020, 18:22
    #40004977
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно добавить индекс к системной таблице pg_proc
Здравствуйте!

В IDE dbeaver для получения помощником списка функций в выпадающем списке используется запрос такого плана
Код: plsql
1.
SELECT DISTINCT x.oid,x.proname,x.pronamespace FROM pg_catalog.pg_proc x WHERE x.proname ILIKE '%GetRow%' AND x.proname NOT LIKE '\_%' AND x.pronamespace IN (202587921,11) ORDER BY x.proname LIMIT 2



На БД под этот запрос не подходит ни один индекс поэтому запрос получается довольно тяжелым и порой подвисает на пару секунд

План запроса:
Limit (cost=116752.53..116752.53 rows=2 width=72) (actual time=896.384..896.385 rows=2 loops=1)
-> Sort (cost=116752.53..116752.86 rows=133 width=72) (actual time=896.382..896.383 rows=2 loops=1)
Sort Key: proname
Sort Method: quicksort Memory: 25kB
-> HashAggregate (cost=116749.87..116751.20 rows=133 width=72) (actual time=896.319..896.320 rows=2 loops=1)
Group Key: proname, oid, pronamespace
-> Seq Scan on pg_proc x (cost=0.00..116748.87 rows=133 width=72) (actual time=488.756..896.290 rows=2 loops=1)
Filter: ((proname ~~* '%GetRow%'::text) AND (proname !~~ '\_%'::text) AND (pronamespace = ANY ('{202587921,11}'::oid[])))
Rows Removed by Filter: 142499
Planning time: 2.397 ms
Execution time: 896.510 ms


в целом прям напрашивается индекс
Код: plsql
1.
CREATE INDEX ix_pg_proc_nsp_proname ON pg_catalog.pg_proc USING btree (pronamespace, proname)



Но создать его не получается так как: ERROR: permission denied: "pg_proc" is a system catalog

Как можно добавить индекс к системной таблице pg_proc?

Если я правильно понял настройку allow_system_table_mods то ее можно применять только во время создания БД и изменить обратно нельзя.
...
Рейтинг: 0 / 0
02.10.2020, 18:57
    #40004985
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно добавить индекс к системной таблице pg_proc
Swa111,

1)никак

2)указанный вами индекс не поможет для вашего запроса никак (особенно учитывая п3)

3)что вы такое ужасное делаете что у вас 140.000 процедур в базе??

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
02.10.2020, 20:03
    #40005004
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно добавить индекс к системной таблице pg_proc
Maxim Boguk,

Maxim Boguk1)никак
Понятно, значит будем менять dbeaver

Maxim Boguk2)указанный вами индекс не поможет для вашего запроса никак (особенно учитывая п3)
Индекс даже очень бы помог, потому что эта БД результат миграции с оракла и схемы используются вместо пакетов, т.е. все эти функции разбросаны по примерно 4000 схем.

Maxim Boguk3)что вы такое ужасное делаете что у вас 140.000 процедур в базе??
вся ужасная бизнес логика.
...
Рейтинг: 0 / 0
02.10.2020, 20:35
    #40005012
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно добавить индекс к системной таблице pg_proc
Swa111
Maxim Boguk,

Maxim Boguk1)никак

Понятно, значит будем менять dbeaver

Maxim Boguk2)указанный вами индекс не поможет для вашего запроса никак (особенно учитывая п3)
Индекс даже очень бы помог, потому что эта БД результат миграции с оракла и схемы используются вместо пакетов, т.е. все эти функции разбросаны по примерно 4000 схем.

Maxim Boguk3)что вы такое ужасное делаете что у вас 140.000 процедур в базе??
вся ужасная бизнес логика.

Если и помог бы то максимум по pronamespace (кусок с proname - бесполезен)
не верите - сделайте копию таблицы и поиграйтесь с индексами и запросами...
зачем вам там часть "proname" в индексе?

ps: 4000 схем - к проблемам (ну вот вы одну собрали)... много чего внутри базы на такое использование не особо рассчитано (например размер памяти процесса базы когда они все эти 140.000 хранимок в себя втянет - я боюсь представить).

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как можно добавить индекс к системной таблице pg_proc / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]