Is there a way to copy the structure of a table into a new table, without data, including all keys and constraints?
Not sure about postgres, but in sql server you can generate the create script and rename it to the new table you would like to make. Perhaps theres a similar way of doing things in postgres?
This previous SO question may be of help:
http://stackoverflow.com/questions/198141/copy-a-table-including-indexes-in-postgres
Take a look at pgAdmin - by far the easiest way to do what you want.
Right-click on table, Scripts - Create.
Well, the closest you can get with SQL is:
create table new (
like old
including defaults
including constraints
including indexes
);
But it will not copy everything. The most important things that are missing are FOREIGN KEYs. Also - triggers are also not copied. Not sure about other things.
Another way is to dump the table structure, change it's name in dump, and load it again:
pg_dump -s -t old databases | sed 's/old/new/g' | psql
But beware, that such simplistic sed will also change old to new in other places (for example if you have in your table column named "is_scolded" it will become "is_scnewed").
The question really is rather: why do you need it - because for various purposes, I would use different techniques.