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;