On Tuesday, June 27, 2017 at 2:11:50 PM UTC-7, Avi Flax wrote:
>
> > On Friday, June 23, 2017 at 7:33:56 PM UTC-4, Jeremy Evans wrote: 
> > 
> > In order to troubleshoot this, you need to prepare a minimal, self 
> contained example migration file that shows the issue. 
>
> This shows the issue: 
>
> Sequel.migration do 
>   change do 
>     create_table(:stuff, ignore_index_errors: true) do 
>       Integer :id, null: false 
>
>       index [:id], name: :idx_by_id 
>     end 
>
>     create_table(:things, ignore_index_errors: true) do 
>       Integer :id, null: false 
>
>       index [:id], name: :idx_by_id 
>     end 
>   end 
> end 
>
> > In general, the error you are seeing should only happen if you are 
> rescuing an earlier exception that caused the transaction to abort. 
>
> Indeed, I was inadvertently rescuing an earlier exception via the option 
> `ignore_index_errors: true` being passed to `create_table`. 
>
> It took me some time to figure that out and I think it was partly because 
> I didn’t personally decide to specify that option; the migration at hand 
> was generated by the `schema_dumper` extension; it appears that 
> `dump_schema_migration` includes that option, set to true, by default. 
> Because the option was included in the default output of 
> `dump_schema_migration` I assumed that it was a best practice for some 
> reason. 
>
> So that’s why the root cause was being occluded. The root cause itself was 
> revealed immediately once I removed the `ignore_index_errors` option: 
> ERROR: relation "idx_by_id" already exists. 
>
> So, the schema dumped by `dump_schema_migration` included duplicate index 
> names. The source database was a SQL Server DB, and the target database 
> PostgreSQL; it would appear that in SQL Server index names need be unique 
> only within a given table, whereas apparently in PostgreSQL they must be 
> unique within the schema. Good to know! 
>
> I’m still curious why `dump_schema_migration` includes 
> `ignore_index_errors: true` by default in `create_table` — given my 
> experience, it would seem to be at least somewhat problematic. Is this 
> something that should possibly be changed? 


Not all indexes can be dumped cross database.  If your are not using the 
:same_db option when dumping, you are dumping indexes, and there are 
indexes on the table, :ignore_index_errors=>true is added to make it more 
likely the migration can be restored.  Here's the commit that added this 
code: 
https://github.com/jeremyevans/sequel/commit/09214bc4bd15f6dc4499d6e6ef7c6e5807b048fb

Thanks,
Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to