Глава 40. Настройка видимости объектов

Вы можете выполнять транзакционные хранимые процедуры над объектами pgpro_metastore. Для изоляции процедур, как и в Postgres Pro, используются snapshots. Снимки — это монотонно возрастающие последовательности чисел. У каждого объекта есть номер снимка, который связан с созданием и удалением этого объекта.

В хранимых процедурах номера снимков используются для определения видимости объектов pgpro_metastore. По умолчанию для чтения текущего состояния pgpro_metastore используется номер последнего снимка. Например, можно запросить список Parquet-файлов аналитической таблицы, выполнив следующую команду:

Пример 40.1.

  SELECT data.path AS data_file_path
  FROM ducklake_data_file AS data
  WHERE
      data.table_id = TABLE_ID AND
      SNAPSHOT_ID >= data.begin_snapshot AND
      (SNAPSHOT_ID < data.end_snapshot OR data.end_snapshot IS NULL)
  ORDER BY file_order;

Если в результате хранимой процедуры добавляется или удаляется объект pgpro_metastore, для него создаётся новый снимок и номер снимка указывается в качестве значений begin_snapshot или end_snapshot объекта в зависимости от типа операции.

Несмотря на то, что таблицы метаданных хранятся на сервере с каталогом метаданных, снимки каталога не связаны со снимками транзакций Postgres Pro. За счёт этого можно продолжить выполнение хранимой процедуры, даже если сервер с каталогом метаданных временно недоступен после перезагрузки. Недостатком использования независимых отдельных снимков является то, что для разрешения конфликтов, при которых два снимка изменяют один и тот же объект, требуется отдельный механизм.

pgpro_metastore также использует снимки сервера Postgres Pro, где выполняются хранимые процедуры. В настоящее время выполнение нескольких процедур в одном блоке транзакции не поддерживается. Даже если исходные таблицы Postgres Pro остаются согласованными в течение транзакции, они будут добавлены в pgpro_metastore в разных снимках.