Why does a DDL command starts a transaction ?!
try
# set autommit=off;
SET
# create table a (i int);
CREATE TABLE
# create table b (i int);
ERROR: current transaction is aborted, queries ignored until end of
transaction block
# commit;
COMMIT
# create table b (i int);
CREATE TABLE
# \d
List of relations
Schema | Name | Type | Owner
----------+---------------+-----------+-------
public | a | table | pgsql
public | b | sequence | pgsql
Dont you find curious a commiting of a DDL ?