4.4. Транзакции #

pgpro_axe поддерживает транзакции с несколькими операторами. При этом существует одно ограничение, которое необходимо для обеспечения гарантий ACID: в одной транзакции невозможно записывать одновременно в таблицу Postgres Pro и DuckDB.

Аналогичным образом в транзакции можно использовать DDL-команды (например, CREATE/DROP TABLE) с таблицами DuckDB, но при этом подобные операторы нельзя объединять с DDL-командами, которые содержат объекты Postgres Pro.

Кроме того, это ограничение можно полностью отключить и разрешить в одной и той же транзакции запись как в DuckDB, так и в Postgres Pro. Для этого укажите true для duckdb.unsafe_allow_mixed_transactions. Однако этого делать не рекомендуется, так как в результате транзакция может быть зафиксирована в DuckDB, но не в Postgres Pro. Это может привести к несогласованности данных и их потере.

Пример 4.46.

В результате следующего запроса duckdb_table может быть удалена, и при этом её содержимое не будет скопировано в pg_table:

  BEGIN;
SET LOCAL duckdb.unsafe_allow_mixed_transactions TO true;
CREATE TABLE pg_table AS SELECT * FROM duckdb_table;
DROP TABLE duckdb_table;
COMMIT;