powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как можно добавить индекс к системной таблице pg_proc
4 сообщений из 4, страница 1 из 1
Как можно добавить индекс к системной таблице pg_proc
    #40004977
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

В 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
Как можно добавить индекс к системной таблице pg_proc
    #40004985
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swa111,

1)никак

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

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

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

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

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

Maxim Boguk3)что вы такое ужасное делаете что у вас 140.000 процедур в базе??
вся ужасная бизнес логика.
...
Рейтинг: 0 / 0
Как можно добавить индекс к системной таблице pg_proc
    #40005012
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как можно добавить индекс к системной таблице pg_proc
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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