My database background is with Oracle, so I was surprised to discover that Postgres includes schema changes in transactions - if you begin one, create a table and then rollb
As of version 9.1 of PosgreSQL, it appears that schema create statements are indeed transactional.
select * from pg_namespace where nspname = 'foo';
nspname | nspowner | nspacl
---------+----------+--------
(0 rows)
begin;
create schema foo;
rollback;
select * from pg_namespace where nspname = 'foo';
nspname | nspowner | nspacl
---------+----------+--------
(0 rows)
begin;
create schema foo;
commit;
select * from pg_namespace where nspname = 'foo';
nspname | nspowner | nspacl
---------+----------+--------
foo | 10 | NULL
(1 row)