Given this:
create table z ( i int not null primary key, zzz int not null );
Try both(one at a time) alter table z drop column aaa; and alter table z add column zzz int;, your code can detect the DDL exceptions
do $$
begin
-- alter table z drop column aaa;
alter table z add column zzz int;
exception when others then
raise notice 'The transaction is in an uncommittable state. '
'Transaction was rolled back';
raise notice 'Yo this is good! --> % %', SQLERRM, SQLSTATE;
end;
$$ language 'plpgsql';
Here are the errors, both kind of errors are catchable:
alter table z add zzz int;
begin try
begin transaction
-- alter table z drop column aaa;
alter table z add zzz int;
commit tran;
end try
begin catch
print 'hello';
SELECT
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;
IF (XACT_STATE()) = -1
BEGIN
PRINT
N'The transaction is in an uncommittable state. ' +
'Rolling back transaction.'
ROLLBACK TRANSACTION;
END;
end catch
print 'reached';
Here are the errors for SQL Server:
Catchable error:
Uncatchable error:
No comments:
Post a Comment