Thanks so much for the verification, Ignacio, and for confirming my
suspicion. This was really my first foray into lifting the cover off the
migration-generation mechanism, so I wasn't quite sure what I was looking
for.

If you switch your test model to MySQL, does it still give you an index
name of *64* characters?

If so, then should Hobo really be enforcing *63* as the maximum (so that
migrations are portable between MySQL and Postgres)?

Best regards,
Tim




On Mon, Jan 27, 2014 at 7:55 AM, Ignacio Huerta <[email protected]> wrote:

> Hi Tim,
>
> It definitely looks like a historical problem (though very interesting,
> as it might happen to others in the future).
>
> I just tried in a Postgresql app to create a similar index, and this is
> what happened:
>
> ---------- Up Migration ----------
> create_table :other_related_instruments do |t|
>   t.datetime :created_at
>   t.datetime :updated_at
> end
>
> create_table :document_other_related_instruments do |t|
>   t.string   :name
>   t.datetime :created_at
>   t.datetime :updated_at
>   t.integer  :other_related_instrument_id
> end
> add_index :document_other_related_instruments,
> [:other_related_instrument_id], :name =>
> 'index_document_other_related_instruments_on_other_related_instr'
> ----------------------------------
>
>
> The index was created with 63 characteres instead of your 64 characters,
> and everything worked. I would suggest editing your schema.rb and fixint
> it manually, as it can be safely said the error was provoked when
> switching databases.
>
> Warm regards,
> Ignacio
>
> El 27/01/14 04:12, Tim Griffin escribió:
> > I should mention that this error is arising from my schema.rb when I try
> > to do a /rake db:schema:load/ to migrate to PostgreSQL:
> >
> >   create_table "document_other_related_instruments", :force => true do
> |t|
> >     t.datetime "created_at"
> >     t.datetime "updated_at"
> >     t.integer  "document_id"
> >     t.integer  "other_related_instrument_id"
> >   end
> >
> >   add_index "document_other_related_instruments", ["document_id"], :name
> > => "index_document_other_related_instruments_on_document_id"
> >   add_index "document_other_related_instruments",
> > ["other_related_instrument_id"], :name =>
> > "*index_document_other_related_instruments_on_other_related_instru*"
> >
> > And, the name here is quite definitely 64 characters.
> >
> > But, now I'm not sure if this is an /historical/ problem - an index
> > created in my MySQL database some time ago that has persisted as valid
> > for MySQL (being max of 64 characters long), but invalid for PostgreSQL
> > (which can't exceed 63 characters)?
> >
> > I see here
> > <
> http://postgresql.1045698.n5.nabble.com/NAME-maximum-length-in-bytes-td5695932.html
> >,
> > that PostgreSQL docs mention for the max length of an index name:
> >
> > /Its length is currently defined as 64 bytes (63 usable characters
> > plus terminator)./
> >
> > My obvious work-around is to change the name in my schema.rb file, so
> > perhaps I'm just chasing my tail.
> >
> > Tim
> >
> >
> >
> >
> >
> > On Sunday, January 26, 2014 3:32:38 PM UTC-5, Tim Griffin wrote:
> >
> >     Hi Ignacio;
> >
> >     I have *document.rb:*
> >     class Document < ActiveRecord::Base
> >       hobo_model
> >       ...
> >      # Other instruments referenced by this document
> >       has_many    :document_other_related_instruments, :accessible =>
> true
> >       has_many    :other_related_instruments, :class_name =>
> >     "Instrument", :through => :document_other_related_instruments
> >     end
> >
> >     and *document_other_related_instrument.rb*
> >     class DocumentOtherRelatedInstrument < ActiveRecord::Base
> >
> >       hobo_model
> >       ...
> >       belongs_to :document
> >       belongs_to    :other_related_instrument, :class_name =>
> "Instrument"
> >     ...
> >     end
> >
> >     Gives me:
> >
> >     -- add_index("document_other_related_instruments",
> >     ["other_related_instrument_id"],
> >
> {:name=>"index_document_other_related_instruments_on_other_related_instru"})
> >     rake aborted! Index name
> >     'index_document_other_related_instruments_on_other_related_instru'
> >     on table 'document_other_related_instruments' is too long; the limit
> >     is 63 characters
> >
> >
> >
> >     Tim
> >
> >
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Hobo Users" 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 http://groups.google.com/group/hobousers.
> > For more options, visit https://groups.google.com/groups/opt_out.
>
> --
> Ignacio Huerta Arteche
> http://www.ihuerta.net
> Teléfono: 0034 645 70 77 35
> Email realizado con software libre
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "Hobo Users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/hobousers/d7y2LydE1y8/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/hobousers.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" 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 http://groups.google.com/group/hobousers.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to