Когда клиенты переходят с коммерческих баз данных, таких как SQL Server, на Babelfish для Aurora PostgreSQL, они сталкиваются с заметным ограничением: отсутствием поддержки глобальных временных таблиц T-SQL (##table_name). Babelfish для Aurora PostgreSQL в настоящее время поддерживает только локальные временные таблицы, которые удаляются после завершения сеанса и не позволяют доступ к данным между сеансами. Чтобы адаптироваться, вам может потребоваться пересмотреть свой код, чтобы использовать локальные временные таблицы. Если это невозможно, в этой статье рассматривается, как реализовать поведение глобальной временной таблицы T-SQL в Babelfish для Aurora PostgreSQL с использованием постоянных таблиц.
Обзор глобальных временных таблиц T-SQL
Прежде чем углубляться в решение, давайте сначала обсудим, что такое глобальная временная таблица T-SQL. В SQL Server временные таблицы используются для хранения и обработки промежуточных данных. Существует два типа временных таблиц: локальные и глобальные. Локальная временная таблица (#local_table) видна только подключению, которое её создало, в то время как глобальная временная таблица видна всем подключениям и может использоваться в других сеансах. Глобальные временные таблицы T-SQL автоматически удаляются, когда сеанс, создавший таблицу, заканчивается и последний активный T-SQL запрос (не сеанс), ссылающийся на таблицу в других сеансах, завершён.
Глобальная временная таблица T-SQL имеет имя таблицы с префиксом из двойного знака решетки (##table_name). Существует два способа создания глобальной временной таблицы:
- Использование оператора CREATE:
CREATE TABLE ##tmp ( );
- Использование SELECT INTO, где создается временная таблица из существующей постоянной таблицы:
SELECT Column1, Column2...ColumnN INTO ##tmp FROM Source_Table WHERE Condition;
Вот несколько примеров использования глобальных временных таблиц:
- Если у вас есть несколько сеансов, выполняющих обработку одного и того же набора данных, вы можете использовать глобальные временные таблицы для поддержания статуса и обмена данными между сеансами.
- Глобальные временные таблицы могут использоваться для отладки длительных сеансов базы данных без постоянного хранения данных. Например, один сеанс может обрабатывать бизнес-логику, в то время как отдельный сеанс отладки временно манипулирует данными для анализа, не затрагивая постоянные таблицы.
Необходимые условия
Чтобы следовать за этой статьей, убедитесь, что у вас есть следующие условия:
- База данных SQL Server с образцом базы данных Northwind.
- Кластер Aurora PostgreSQL, поддерживающий Babelfish. Babelfish доступен в Aurora PostgreSQL версии 13.4 и выше. Мы рекомендуем использовать последнюю поддерживаемую версию Aurora PostgreSQL.
Реализация глобальных временных таблиц T-SQL в SQL Server
Этот раздел показывает пример работы глобальной временной таблицы в T-SQL. Процесс требует двух активных сеансов (сеанс 1 и сеанс 2) с разными идентификаторами пользователей.
Сеанс 1
Используйте сеанс 1 для выполнения следующих шагов:
- Создайте глобальную временную таблицу:
-- Создание глобальной временной таблицы DROP TABLE ##temp_customers GO CREATE TABLE ##temp_customers ( id VARCHAR(100), cust_name VARCHAR(100), city VARCHAR(100), country VARCHAR(100), ph