Re: postgres adapater problem with create_table :id => false

JeffV
Fri, 16 Oct 2009 05:53:21 -0000

We have 30-40 tables in a legacy db with no PKs. These tables hold
various logging events and may be searched by a given day, a given
user id, a given event, etc., but not by a particular row id. So there
are reasonable reasons to not have PKs on all tables. Unfortunately,
AR really like PKs...
If I set_primary_key nil I can''t do a create (I get an interning empty
string error). If I set the PK to an arbitrary integer column then
that column is set to NULL (on an insert), despite its value being
passed in the attributes hash... I don''t yet have a solution.

Jeff

On Sep 16, 6:48 pm, Marnen Laibow-Koser <rails-mailing-l...@andreas-
s.net> wrote:
> Howard Yeh wrote:
> > Hi All,
>
> > When saving a record to a table that doesn''t use primary key,
the
> > adapater raises
>
> > ActiveRecord::StatementInvalid: PGError: ERROR:  column "id"
does not
> > exist
>
> [....]
>
> > The problem is that ActiveRecord::Base.create
> > would pass in the primary_key "id" for the
> > parameter pk even though the ActiveRecord class
> > doesn''t have a primary key.
>
> When would you ever want to use an AR model without a primary key?  The
> only case I can think of where Rails doesn''t want a primary key is
on
> habtm join tables, which don''t have an associated model class.
>
> [...]
>
>
>
> > Or is there a way to set the primary key to nil?
>
> > class Foo < ActiveRecord::Base
> >  set_primary_key nil
> >  primary_key # => ""
> > end
>
> Seems like a really bad idea.  Without a primary key, there is no way to
> uniquely identify a record.  Why do you want to do this?
>
>
>
> > Howard
>
> Best,
> --
> Marnen Laibow-Koserhttp://www.marnen.org
> mar...-sbuyVjPbboAdnm+yROfE0A@public.gmane.org
> --
> Posted viahttp://www.ruby-forum.com/.