I wrote:
> That's a bug: the physical file for the relation has already been
> created by the time the failure in creating the index occurs, and
> although all the updates to system tables get backed out, the empty
> file is not removed during the transaction abort.
After further investigation, the above is wrong, or at least obsolete:
the physical file for the table that couldn't be created *is* removed
when the transaction is cleaned up. (At least it is in current 6.5
code; didn't try older versions.) There's still a bug though ---
apparently the system still has an entry for the failed table in its
"relation cache", and that prevents a subsequent CREATE TABLE for the
same table name from succeeding.
A workaround is to exit your psql session and start a new one; the
new backend won't have the erroneous cache entry. This needs to be
fixed though.
regards, tom lane