Пользователи переходят на Babelfish для Aurora PostgreSQL, сталкиваясь с ограничениями

Приложения и игры / Desktop / Пользователи переходят на Babelfish для Aurora PostgreSQL, сталкиваясь с ограничениями
04.07.2024

Когда клиенты переходят с коммерческих баз данных, таких как 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;

Вот несколько примеров использования глобальных временных таблиц:

  • Если у вас есть несколько сеансов, выполняющих обработку одного и того же набора данных, вы можете использовать глобальные временные таблицы для поддержания статуса и обмена данными между сеансами.
  • Глобальные временные таблицы могут использоваться для отладки длительных сеансов базы данных без постоянного хранения данных. Например, один сеанс может обрабатывать бизнес-логику, в то время как отдельный сеанс отладки временно манипулирует данными для анализа, не затрагивая постоянные таблицы.

Необходимые условия

Чтобы следовать за этой статьей, убедитесь, что у вас есть следующие условия:

  1. База данных SQL Server с образцом базы данных Northwind.
  2. Кластер Aurora PostgreSQL, поддерживающий Babelfish. Babelfish доступен в Aurora PostgreSQL версии 13.4 и выше. Мы рекомендуем использовать последнюю поддерживаемую версию Aurora PostgreSQL.

Реализация глобальных временных таблиц T-SQL в SQL Server

Этот раздел показывает пример работы глобальной временной таблицы в T-SQL. Процесс требует двух активных сеансов (сеанс 1 и сеанс 2) с разными идентификаторами пользователей.

Сеанс 1

Используйте сеанс 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
Обновлено: 04.07.2024