Я хотел бы сделать транзакцию двухфазного принятия с подготовкой транзакции для PostgreSQL.
Не могли бы вы помочь с ошибкой?
Я не могу понять, как подключиться к удаленной базе данных черезdblick с подготовкой транзакции?
create or replace function insert_into_table_a() returns void as $$
declare
trnxprepare text;
trnxcommit text;
trnxrollback text;
trnxid varchar;
begin
select uuid_generate_v4() into trnxid;
select 'prepare transaction ' || ' ''' || trnxid || ' ''' into trnxprepare;
select 'commit prepared ' || ' ''' || trnxid || ' ''' into trnxcommit;
select 'rollback prepared ' || ' ''' || trnxid || ' ''' into trnxrollback;
insert into table_a values ('test');
perform dblink_connect('cn','dbname=test2 user=test2user password=123456');
perform dblink_exec('cn','insert into table_b values (''test 2'');');
perform dblink_disconnect('cn');
execute trnxprepare;
execute trnxcommit;
exception
when others then
execute trnxrollback;
perform dblink_disconnect('cn');
raise notice '% %', sqlerrm, sqlstate;
end;
$$ language plpgsql;
select insert_into_table_a();
ОШИБКА: ОШИБКА: транзакции не могут быть запущены в PL / pgSQL
СОВЕТ: Вместо этого используйте блок BEGIN с предложением EXCEPTION.
CONTEXT: insert_into_table_a () Функция PL / pgSQL, строка 24, в EXECUTE
Состояние SQL: 0A000