The create table as
feature in PostgreSQL may now be the answer the OP was looking for.
https://www.postgresql.org/docs/9.5/static/sql-createtableas.html
create table my_table_copy as
select * from my_table
This will create an identical table with the data.
Adding with no data
will copy the schema without the data.
create table my_table_copy as
select * from my_table
with no data
This will create the table with all the data, but without indexes and triggers etc.
create table my_table_copy (like my_table including all)
The create table like syntax will include all triggers, indexes, constraints, etc. But not include data.