Re: Postgresql upgrade to 9.5.12/10.3 changes pg_dump format for cloning schemas

From: Aldrin Martoq Ahumada <aldrin(dot)martoq(at)gmail(dot)com>
To: Melvin Davidson <melvin6925(at)gmail(dot)com>
Cc: Andre Oliveira Freitas <afreitas(at)callixbrasil(dot)com>, "pgsql-generallists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org>, matt(dot)figg(at)internode(dot)on(dot)net
Subject: Re: Postgresql upgrade to 9.5.12/10.3 changes pg_dump format for cloning schemas
Date: 2018-03-13 15:35:29
Message-ID: C38EE328-CF14-491E-9680-D88333C75F34@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

> On Mar 9, 2018, at 12:15 PM, Melvin Davidson <melvin6925(at)gmail(dot)com> wrote:
> On Fri, Mar 9, 2018 at 10:00 AM, Aldrin Martoq Ahumada <aldrin(dot)martoq(at)gmail(dot)com <mailto:aldrin(dot)martoq(at)gmail(dot)com>> wrote:
> Yes, here is the issue: https://github.com/influitive/apartment/issues/532 <https://github.com/influitive/apartment/issues/532>
> It happens if you configured apartment with use_sql=true, which means it clones the schema from pg_dump. My first attempt was to “fix” the script generated by pg_dump, but I feel it will be a mess. We solved our issue going back to use_sql=false, which is the default (creates the schema from db/schema.rb). But there is people that have other requirements, like functions, so the easier way for them is to keep use_sql and replace strings in the script.
> >...how could be the best way to clone a schema into another?
>
> The safest way is to use pgdump -F p -n <the_schema_name> > schema.sql
> Then edit schema.sql and change all references to old_schema name to new_schema name.
> Finally, use psql < schema.sql to create the new_schema.
>
> That being said, a year ago I optimized a function originally written by Emanuel '3manuek'
> called clone_schema, which is added to the public schema. It clones all sequences, tables,
> indexes, rules, triggers, data(optional), views & functions from any existing schema to a
> new schema
> SAMPLE CALL:
> SELECT clone_schema('public', 'new_schema', TRUE);
>
> I've attached it for your convenience.
> disclaimer: I do not accept any responsibility for any unknow bugs in the function.
> Test first and use at your own risk.

Thank you Melvin, I forgot to mention I've already found your script before I asked here, but I didn’t think it was robust enough (please don't offend :-). Particularly, it didn't work well on PostgreSQL 10.

I think the solution for the long term is to add a flag to pg_dump, but in the short/mid term we’ll have to replicate some form of your script into the gem.

Cheers,
Aldrin.

PS: I’ve added initial support for PostgreSQL 10 to clone_schema here, but I have no time to test it well:
https://gist.github.com/aldrinmartoq/5df0aa03f86f3ad03982c793753c04a1 <https://gist.github.com/aldrinmartoq/5df0aa03f86f3ad03982c793753c04a1>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Melvin Davidson 2018-03-13 17:47:30 Re: Postgresql upgrade to 9.5.12/10.3 changes pg_dump format for cloning schemas
Previous Message Adrian Klaver 2018-03-13 15:06:33 Re: Programmatically duplicating a schema