Postgres doesn’t have built in function to clone schema. However, may of backend developers would like to perform a number of operations at schema level directly from command line tools such as psql or any database developer tools (DBeaver). One of the common operation is to copy or clone the entire schema. While researching any existing solutions, I stumbled upon postgres-general thread where one of the developer(s) provided clone_schema.sql function. I uploaded the existing function provided in thread to my git repo here.
However, when I tried to use it, it was throwing error related to sequence. I updated the function to solve the error reported . Additionally, I added support to copy Materialized Views as well. I have uploaded the final working function here
I have tested the public.clone_schema function for complex schema and it seems to be working with copying schema ONLY or schema WITH DATA as well .
You can call function like this to copy schema with data:
select clone_schema('development', 'development_clone', true);
Alternatively, if you want to copy only schema without data:
select clone_schema('development', 'development_clone', false);
Hope this will help someone. If you have better or other easier approach, please don’t hesitate to put your comments so I can improve processes on my end!