Clone schema
From PostgreSQL wiki
by Emanuel '3manuek'
Just remember to create language.
CREATE OR REPLACE FUNCTION clone_schema(source_schema text, dest_schema text) RETURNS void AS $BODY$ DECLARE objeto text; buffer text; BEGIN EXECUTE 'CREATE SCHEMA ' || dest_schema ; FOR objeto IN SELECT table_name::text FROM information_schema.TABLES WHERE table_schema = source_schema LOOP buffer := dest_schema || '.' || objeto; EXECUTE 'CREATE TABLE ' || buffer || ' (LIKE ' || source_schema || '.' || objeto || ' INCLUDING CONSTRAINTS INCLUDING INDEXES INCLUDING DEFAULTS)'; EXECUTE 'INSERT INTO ' || buffer || '(SELECT * FROM ' || source_schema || '.' || objeto || ')'; END LOOP; END; $BODY$ LANGUAGE plpgsql VOLATILE;
Execution is simple:
SELECT clone_schema('old_schema','new_schema');
