Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Устанавливает характеристики текущей транзакции.
SET TRANSACTION [transaction_mode] [READ ONLY | READ WRITE]
SET TRANSACTION SNAPSHOT snapshot_id
SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode
[READ ONLY | READ WRITE]
[NOT] DEFERRABLE
где transaction_mode — один из следующих режимов:
ISOLATION LEVEL {SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED}
Команда SET TRANSACTION устанавливает характеристики текущей транзакции. Она не оказывает влияния на последующие транзакции.
Доступные характеристики транзакции включают уровень изоляции транзакции, режим доступа к транзакции (чтение/запись или только чтение) и откладываемые режимы.
Примечание: Откладываемая транзакция требует, чтобы транзакция была сериализуемой. База данных YMatrix не поддерживает сериализуемые транзакции, поэтому использование параметра DEFERRABLE является недопустимым. База данных YMatrix не поддерживает команду SET TRANSACTION SNAPSHOT.
Уровень изоляции транзакции определяет, какие данные транзакция может видеть при одновременном выполнении других транзакций.
Стандарт SQL определяет два дополнительных уровня — READ UNCOMMITTED и SERIALIZABLE. В базе данных YMatrix уровень READ UNCOMMITTED интерпретируется как READ COMMITTED. Если указано SERIALIZABLE, база данных YMatrix автоматически переключается на REPEATABLE READ.
Уровень изоляции транзакции нельзя изменить после выполнения первого запроса или оператора модификации данных в рамках транзакции (SELECT, INSERT, DELETE, UPDATE, FETCH или COPY).
Режим доступа к транзакции определяет, является ли транзакция режимом чтения/записи или только для чтения. По умолчанию используется режим чтения/записи. В режиме только для чтения запрещены следующие команды SQL: INSERT, UPDATE, DELETE и COPY FROM (если таблица, в которую производится запись, не является временной); все команды CREATE, ALTER и DROP; GRANT, REVOKE, TRUNCATE; если команды, выполняемые с помощью EXPLAIN ANALYZE и EXECUTE, не разрешены в перечисленных выше командах, они также запрещены. Это высокий уровень понимания «только для чтения», который не блокирует все операции записи на диск.
Атрибут DEFERRABLE недействителен, если транзакция не является одновременно SERIALIZABLE и READ ONLY. Когда все эти свойства установлены для транзакции, она может ожидать при получении снимка, после чего может выполняться без обычных накладных расходов сериализуемых транзакций и без риска возникновения ошибки сериализации или отмены из-за такой ошибки. Поскольку база данных YMatrix не поддерживает сериализуемые транзакции, атрибут DEFERRABLE недействителен в YMatrix.
SESSION CHARACTERISTICS
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
READ WRITE
READ ONLY
[NOT] DEFERRABLE
Если SET TRANSACTION выполняется без предварительной команды START TRANSACTION или BEGIN, будет выдано предупреждение, а команда будет проигнорирована.
SET TRANSACTION можно опустить, указав требуемый режим транзакции в командах BEGIN или START TRANSACTION.
Вы также можете установить режим транзакции по умолчанию для сессии, задав параметры конфигурации default_transaction_isolation, default_transaction_read_only и default_transaction_deferrable.
Установка уровня изоляции транзакции для текущей транзакции:
BEGIN;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Обе команды определены в стандарте SQL. SERIALIZABLE — уровень изоляции по умолчанию в стандарте. В базе данных YMatrix значением по умолчанию является READ COMMITTED. База данных YMatrix не полностью поддерживает уровень SERIALIZABLE из-за отсутствия предикатной блокировки, поэтому при указании SERIALIZABLE происходит переход на уровень REPEATABLE READ. По сути, система предикатной блокировки предотвращает фантомное чтение, ограничивая то, что может быть записано, тогда как модель многоверсионного управления конкурентным доступом (MVCC), используемая в базе данных YMatrix, предотвращает фантомное чтение, ограничивая то, что может быть прочитано.
PostgreSQL предоставляет истинный уровень сериализуемой изоляции, называемый изоляцией сериализуемого снимка (Serializable Snapshot Isolation, SSI), которая отслеживает параллельные транзакции и откатывает те, которые могут вызвать исключения сериализации. Этот режим изоляции не реализован в базе данных YMatrix.
В стандарте SQL другие характеристики транзакции можно задать с помощью команды: размер диагностической области. Эта концепция специфична для встроенного SQL и поэтому не реализована в сервере базы данных YMatrix.
Режим DEFERRABLE является расширением языка базы данных YMatrix.