|
Как можно добавить индекс к системной таблице pg_proc
|
|||
---|---|---|---|
#18+
Здравствуйте! В IDE dbeaver для получения помощником списка функций в выпадающем списке используется запрос такого плана Код: plsql 1.
На БД под этот запрос не подходит ни один индекс поэтому запрос получается довольно тяжелым и порой подвисает на пару секунд План запроса: 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.
Но создать его не получается так как: ERROR: permission denied: "pg_proc" is a system catalog Как можно добавить индекс к системной таблице pg_proc? Если я правильно понял настройку allow_system_table_mods то ее можно применять только во время создания БД и изменить обратно нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 18:22 |
|
Как можно добавить индекс к системной таблице pg_proc
|
|||
---|---|---|---|
#18+
Swa111, 1)никак 2)указанный вами индекс не поможет для вашего запроса никак (особенно учитывая п3) 3)что вы такое ужасное делаете что у вас 140.000 процедур в базе?? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 18:57 |
|
Как можно добавить индекс к системной таблице pg_proc
|
|||
---|---|---|---|
#18+
Maxim Boguk, Maxim Boguk1)никак Понятно, значит будем менять dbeaver Maxim Boguk2)указанный вами индекс не поможет для вашего запроса никак (особенно учитывая п3) Индекс даже очень бы помог, потому что эта БД результат миграции с оракла и схемы используются вместо пакетов, т.е. все эти функции разбросаны по примерно 4000 схем. Maxim Boguk3)что вы такое ужасное делаете что у вас 140.000 процедур в базе?? вся ужасная бизнес логика. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 20:03 |
|
Как можно добавить индекс к системной таблице pg_proc
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 20:35 |
|
|
start [/forum/topic.php?fid=53&msg=40004977&tid=1994443]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 301ms |
total: | 549ms |
0 / 0 |