Comments 16
для хеширования текста есть встроенная функция hashtext, только почему-то не в документации
круто, не знал. Правда, недокументированные функции страшновато использовать
Официальное мнение по этому вопросу звучит примерно так: "не надо лазать, куда не надо".
Что не мешает желающим использовать множество внутренних hash-функций, чтобы получить дополнительные +40% производительности.
Это как? вот у меня есть 100500 файлов. Таблиц может вообще нет. Как мне закладываться на имя таблицы?
Обычно подобную обработку на advlock с монопольным захватом ресурса делают на PG, когда им является уже существующая таблица/запись. Ну и таблицу-то найти можно всегда - хотя бы и системную pg_class.
А вот зачем использовать блокировки на БД для обработки каких-то файлов, если "таблиц вообще нет" - вопрос.
Обычно подобную обработку на advlock с монопольным захватом ресурса делают на PG, когда им является уже существующая таблица/запись.
Не обязательно. Можно исполььзовать advlock для монопольного доступа вообще к любому ресурсу, в том числе находящемуся вне базы.
Главное, чтобы этому ресурсу можно было сопоставить некое уникальное название/идентификатор, которое и используется для взятия лока.
Конечно, можно, но - зачем? То есть СУБД это явно не наилучший механизм для абстрактной синхронизации каких-то процессов. И если это ее единственное применение на проекте, то это странно.
Но если постгресс уже всё равно есть для данных, то почему бы и локи не сделать через него? Понятно, что в этом случае какие-то таблицы всё-таки будут, но они могут никак не соотноситься с локами.
Ну, я про это и написал - что если у нас уже есть данные в какой-то таблице, и мы для разруливания их обработки используем advlock, то проще закладываться на имя этой таблицы в качестве одного из пары ID рекомендательной блокировки.
Ну или пару (tableoid::oid, PK::integer)
, если нам нужна блокировка не на всю таблицу, а до конкретной записи - например, при конкурентной обработке очередей.
Думал что-то новенькое, ан нет, повторение старой статьи
PgBouncer может работать в двух режимах: сессионный и транзакционный.
В 3 режимах - есть ещё statement.
Сразу скажу, что под сессией здесь мы понимаем tcp-соединение к PostgreSQL, не к pgBouncer, это важно. Чуть ниже расскажу об этом подробнее.
как advisory locks работают, когда скажем есть несколько инстансов postgresql?
Синхронизируем приложения с помощью Advisory Locks (postgresql). Что это, зачем, и нюансы работы с pgBouncer