Thread: PostgreSQL primary (sequence) key issue (Ruby/Rails)

PostgreSQL primary (sequence) key issue (Ruby/Rails)

From
"Andrew Madu"
Date:
Hi Guys,
I'm completely stumped with this one!

I've included ActiveRecord::Base.set_sequence_name in my environment.rb, and in my user.rb I've placed the following code:

class Usertbl < ActiveRecord::Base
    set_primary_key "user_id"
    set_sequence_name "seq_user_mytable"
    validates_uniqueness_of :userpassword, :username, :scope => :user_id
end

From http://localhost:3000/usertbl/new I then attempt to enter a new a record and receive the following error message:

RuntimeError: ERROR C23502 Mnull value in column "user_id" violates not-null constraint

FexecMain.c L1795 RExecConstraints: INSERT INTO usertbl


Oh my head hurts!!


--
Regards

Andrew


On 01/03/07, Andrew Madu < andrewmadu@gmail.com> wrote:
Hi Dave,
my apologies for contacting you off list but i'm having a spot of bother with postgreSQL sequence setup in rails. In addition to what is mentioned below, I have place the following line of code in my environment.rb document:

# Include your application configuration below
ActiveRecord::Base.pluralize_table_names = false
ActiveRecord::Base.set_sequence_name

What I am overlooking here?

--
Regards

Andrew

---------- Forwarded message ----------
From: Andrew Madu < andrewmadu@gmail.com>
Date: 01-Mar-2007 15:28
Subject: Re: PostgreSQL primary (sequence) key issue
To: rubyonrails-talk@googlegroups.com

Hi,
I've followed the example given here:

http://ar.rubyonrails.com/classes/ActiveRecord/Base.html#M000367

and implemented set_sequence_name "seq_name" in my class. When I try to update the user table with a new row from:
 
http://localhost:3000/usertbl/new

I get the following error message:

RuntimeError: ERROR	C23502	Mnull value in column "user_id" violates not-null constraint	



FexecMain.c L1795 RExecConstraints: INSERT INTO usertbl

What am I overlooking here?

Also coud possibly give me any clues on how to setup an 'assigned' primary key in an ActiveRecord class?


--
Regards

Andrew


On 01/03/07, Andrew Madu <andrewmadu@gmail.com> wrote:
Hi,
I have a sequence set up on one of my tables called seq_user_mytable. I tried the following with no joy:

set_primary_key "user_id", :sequence => "seq_user_mytable" and:

ActiveRecord:: Base.seq_user_mytable

again with no joy. How do I implement a sequence in Rails/ActiveRecord?

--
Regards

Andrew


Re: PostgreSQL primary (sequence) key issue (Ruby/Rails)

From
"Joshua D. Drake"
Date:
> On 01/03/07, Andrew Madu < andrewmadu@gmail.com> wrote:
>>
>> Hi Dave,
>> my apologies for contacting you off list but i'm having a spot of bother
>> with postgreSQL sequence setup in rails. In addition to what is mentioned
>> below, I have place the following line of code in my

The definition of primary key explicitly states that it can't be null.
You are trying to pass a null to user_id which won't work.

Joshua D. Drkae


>> environment.rbdocument:
>>
>> # Include your application configuration below
>> ActiveRecord::Base.pluralize_table_names = false
>> ActiveRecord::Base.set_sequence_name
>>
>> What I am overlooking here?
>>
>> --
>> Regards
>>
>> Andrew
>>
>> ---------- Forwarded message ----------
>> From: Andrew Madu < andrewmadu@gmail.com>
>> Date: 01-Mar-2007 15:28
>> Subject: Re: PostgreSQL primary (sequence) key issue
>> To: rubyonrails-talk@googlegroups.com
>>
>> Hi,
>> I've followed the example given here:
>>
>> http://ar.rubyonrails.com/classes/ActiveRecord/Base.html#M000367
>>
>> and implemented set_sequence_name "seq_name" in my class. When I try to
>> update the user table with a new row from:
>>
>> http://localhost:3000/usertbl/new
>>
>> I get the following error message:
>>
>> RuntimeError: ERROR    C23502    Mnull value in column "user_id"
>> violates not-null constraint
>>
>>
>> FexecMain.c    L1795    RExecConstraints: INSERT INTO usertbl
>>
>>
>> What am I overlooking here?
>>
>> Also coud possibly give me any clues on how to setup an 'assigned'
>> primary
>> key in an ActiveRecord class?
>>
>> --
>> Regards
>>
>> Andrew
>>
>> On 01/03/07, Andrew Madu <andrewmadu@gmail.com> wrote:
>> >
>> > Hi,
>> > I have a sequence set up on one of my tables called seq_user_mytable. I
>> > tried the following with no joy:
>> >
>> > set_primary_key "user_id", :sequence => "seq_user_mytable" and:
>> >
>> > ActiveRecord:: Base.seq_user_mytable
>> >
>> > again with no joy. How do I implement a sequence in Rails/ActiveRecord?
>> >
>> > --
>> > Regards
>> >
>> > Andrew
>> >
>>
>>
>


--

      === The PostgreSQL Company: Command Prompt, Inc. ===
Sales/Support: +1.503.667.4564 || 24x7/Emergency: +1.800.492.2240
Providing the most comprehensive  PostgreSQL solutions since 1997
             http://www.commandprompt.com/

Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
PostgreSQL Replication: http://www.commandprompt.com/products/


Re: PostgreSQL primary (sequence) key issue (Ruby/Rails)

From
Russ Brown
Date:
Joshua D. Drake wrote:
>> On 01/03/07, Andrew Madu < andrewmadu@gmail.com> wrote:
>>> Hi Dave,
>>> my apologies for contacting you off list but i'm having a spot of bother
>>> with postgreSQL sequence setup in rails. In addition to what is mentioned
>>> below, I have place the following line of code in my
>
> The definition of primary key explicitly states that it can't be null.
> You are trying to pass a null to user_id which won't work.
>
> Joshua D. Drkae
>

In MySQL that is traditionally how you tell the RDBMS to use the
auto_increment to generate the value. Postgres correctly doesn't allow
that (since you might actually try to set a field to NULL accidentally
in which case an error is expected).

The portable (and correct) way to do it is to use the DEFAULT keyword
like this:

INSERT INTO some_table (id_field) VALUES (DEFAULT);

I just tested on MySQL 5.0.32 and that syntax works fine.

--

Russ.

Re: PostgreSQL primary (sequence) key issue (Ruby/Rails)

From
Scott Ribe
Date:
> The portable (and correct) way to do it is to use the DEFAULT keyword
> like this:
>
> INSERT INTO some_table (id_field) VALUES (DEFAULT);

Alternatively, for columns for which you have no value, don't specify them
at all in the insert.

--
Scott Ribe
scott_ribe@killerbytes.com
http://www.killerbytes.com/
(303) 722-0567 voice