powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Почему Select устанавливает ExclusiveLock
4 сообщений из 4, страница 1 из 1
Почему Select устанавливает ExclusiveLock
    #39946361
Kr_Yury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполняется
Код: sql
1.
SELECT * FROM function 

Функция в свою очередь ничего кроме
RETURN query SELECT ... не содержит. Почему ExclusiveLock? Postgresql 10.12
...
Рейтинг: 0 / 0
Почему Select устанавливает ExclusiveLock
    #39946377
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kr_Yury
Выполняется
Код: sql
1.
SELECT * FROM function 

Функция в свою очередь ничего кроме
RETURN query SELECT ... не содержит. Почему ExclusiveLock? Postgresql 10.12


А почему/откуда вы взяли что берется именно EXCLUSIVE Lock?

Особенно учитывая что он берется в базе только в одном случае
"
EXCLUSIVE
Conflicts with the ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, and ACCESS EXCLUSIVE lock modes. This mode allows only concurrent ACCESS SHARE locks, i.e., only reads from the table can proceed in parallel with a transaction holding this lock mode.

Acquired by REFRESH MATERIALIZED VIEW CONCURRENTLY.
"
...
Рейтинг: 0 / 0
Почему Select устанавливает ExclusiveLock
    #39946387
Kr_Yury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытался создать индекс в режиме concurently для одной из таблиц, вслючённых в select. Он никак не создавался. Посмотрел блокировки таким запросом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT blocked_locks.pid     AS blocked_pid,  -- связь заблокированого оператора с блокирующим
         blocked_activity.usename  AS blocked_user,
         blocking_locks.pid     AS blocking_pid,
         blocked_activity.usename AS blocking_user,
         blocked_activity.query    AS blocked_statement,
         blocking_activity.query   AS current_statement_in_blocking_process
   FROM  pg_catalog.pg_locks         blocked_locks
    JOIN pg_catalog.pg_locks         blocking_locks 
      ON blocking_locks.locktype = blocked_locks.locktype
        AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
        AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
        AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
        AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
        AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
        AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
        AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
        AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
        AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
        AND blocking_locks.pid != blocked_locks.pid 
    JOIN pg_catalog.pg_stat_activity blocked_activity  ON blocked_activity.pid = blocked_locks.pid
    JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
   WHERE NOT blocked_locks.GRANTED;

И увидел, что создание индекса заблокировано именно вызовом функции. В current_statement_in_blocking_process был запрос из первого моего сообщения.
...
Рейтинг: 0 / 0
Почему Select устанавливает ExclusiveLock
    #39946474
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kr_Yury,

Запрос идущий по таблице будет мешать созданию индекса с concurently потому что в конце надо "in addition it must wait for all existing transactions that could potentially modify or use the index to terminate".
https://www.postgresql.org/docs/12/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY

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


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