If Hypersonic throws an exception when you try to drop a nonexistent table, this is a problem with Postgres.
1. You might check for the existance of the table with DatabaseMetaData.getTables before you try to drop it.
2. Any mixing of DDL and DML in the same transaction is not likely to be very portable between rdbms. As another example besides Postgre's behavior, Firebird/Interbase executes all DDL at the end of a transaction, after all DML is complete.