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

Функция в свою очередь ничего кроме
RETURN query SELECT ... не содержит. Почему ExclusiveLock? Postgresql 10.12
...
Рейтинг: 0 / 0
12.04.2020, 18:26
    #39946377
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Select устанавливает ExclusiveLock
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
12.04.2020, 19:48
    #39946387
Kr_Yury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Select устанавливает ExclusiveLock
Пытался создать индекс в режиме 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
13.04.2020, 03:46
    #39946474
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Select устанавливает ExclusiveLock
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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Почему Select устанавливает ExclusiveLock / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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