I''m using the postgresql adapter with ActiveRecord. When I execute this script, I get an error about the id sequence not existing even though i created the table without the id. require ''rubygems'' require ''active_record'' class Article < ActiveRecord::Base end ActiveRecord::Base.establish_connection( :adapter => "postgresql", :database => "mytestdb", :host => "localhost", :username => "xxxx", :password => "xxxx" ) ActiveRecord::Schema.define(:version => 0) do create_table :articles, :id => false do |t| t.column :title, :string end end art = Article.create( :title => "Green Eggs and Ham" ) Executing this script gives this error: /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/abstract_adapter.rb:120:in `log'': RuntimeError: ERROR C42P01 Mrelation "articles_id_seq" does not exist Fnamespace.c L200 RRangeVarGetRelid: SELECT currval(''articles_id_seq'') (ActiveRecord::StatementInvalid) Since I created the table with ":is => false", there is no articles_id_seq and so AR should not be looking for one. Am I missing something or is this a bug? Thanks in advance, Nick --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Answer: You need to set your primary key field and create it as a autoincrementing column in the database. create_table :articles, :id=>false, :primary_key=>''pkey_field'' do t.column ''pkey_field'', :serial t.column :title, :string end Explanation: When ActiveRecord defines the default primary key "id" on a table, it sets it''s type as "serial", so PostgreSQL automatically creates a primary key for it. You can use "bigserial" if you need more then 2,147,483,647 ids. See http://www.postgresql.org/docs/8.1/static/datatype.html for more information. Below is a test case which proves it works. Zach - ------- START TEST CASE --------- class ArticleWithId < ActiveRecord::Base set_table_name ''articles_with_id'' end def setup ActiveRecord::Schema.create_table :articles_without_id, :id=>false, :primary_key=>''pkey'' do |t| t.column :pkey, :serial, :null=>false t.column :title, :string end ActiveRecord::Schema.create_table :articles_with_id do |t| t.column :title, :string end end def teardown ActiveRecord::Schema.drop_table( :articles_without_id ) ActiveRecord::Schema.drop_table( :articles_with_id ) end def test_create assert ArticleWithId.create( :title => "Green Eggs and Ham" ) assert ArticleWithoutId.create( :title => "Green Eggs and Ham 2" ) end end class ArticleWithId < ActiveRecord::Base set_table_name ''articles_with_id'' end def setup ActiveRecord::Schema.create_table :articles_without_id, :id=>false, :primary_key=>''pkey'' do |t| t.column :pkey, :serial, :null=>false t.column :title, :string end ActiveRecord::Schema.create_table :articles_with_id do |t| t.column :title, :string end end def teardown ActiveRecord::Schema.drop_table( :articles_without_id ) ActiveRecord::Schema.drop_table( :articles_with_id ) end def test_create assert ArticleWithId.create( :title => "Green Eggs and Ham" ) assert ArticleWithoutId.create( :title => "Green Eggs and Ham 2" ) end end -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFFchpmMyx0fW1d8G0RApVOAJ977lNL2r6BeA/6W79VpI9hc6w8yQCdGq66 S4pjx6alnCb1JoGEH5XPdLI=HrCU -----END PGP SIGNATURE----- --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 My copy / paste cut off half of the test case. Below is the full test case... equire ''abstract_unit'' class PostgreSQLTest < Test::Unit::TestCase class ArticleWithoutId < ActiveRecord::Base set_table_name ''articles_without_id'' set_primary_key ''pkey'' end class ArticleWithId < ActiveRecord::Base set_table_name ''articles_with_id'' end def setup ActiveRecord::Schema.create_table :articles_without_id, :id=>false, :primary_key=>''pkey'' do |t| t.column :pkey, :serial, :null=>false t.column :title, :string end ActiveRecord::Schema.create_table :articles_with_id do |t| t.column :title, :string end end def teardown ActiveRecord::Schema.drop_table( :articles_without_id ) ActiveRecord::Schema.drop_table( :articles_with_id ) end def test_create assert ArticleWithId.create( :title => "Green Eggs and Ham" ) assert ArticleWithoutId.create( :title => "Green Eggs and Ham 2" ) end end -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFFchuZMyx0fW1d8G0RAm0yAJ45dmpMd2z4F3eIdPpebjbs4LzI8wCeJviY TyomPUqPBwI2Wc1kPPNuz70=URu8 -----END PGP SIGNATURE----- --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Even though what I posted to you works there may be a problem with ActiveRecord, by supplying the "primary_key" option it should have created a primary key in the database table for you, but the PostgreSQL adapter does not do this. It just creates an indexed and sequenced column. Zach -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFFck0yMyx0fW1d8G0RAg31AJ9pvRoxMVsYBg+kNrOCvBOZ9jbrfQCfeR9e Hbsy0/L3KjIb40f/hqZd930=HDpY -----END PGP SIGNATURE----- --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> Even though what I posted to you works there may be a problem with > ActiveRecord, by supplying the "primary_key" option it should have > created a primary key in the database table for you, but the PostgreSQL > adapter does not do this. It just creates an indexed and sequenced > column.It does for me... at least with rails 1.1.6, postgres 8.1.5, and the postgres 0.7.1 gem... I just checked one of my tables and it reports a primary key... otf_dev=> \d photos; Table "public.photos" Column | Type | Modifiers -------------+-----------------------------+----------------------------------------------------- id | integer | not null default nextval(''photos_id_seq''::regclass) name | character varying(255) | sku | character varying(255) | description | text | is_featured | boolean | default false created_at | timestamp without time zone | updated_at | timestamp without time zone | Indexes: "photos_pkey" PRIMARY KEY, btree (id) -philip --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Philip Hallstrom wrote:>> Even though what I posted to you works there may be a problem with >> ActiveRecord, by supplying the "primary_key" option it should have >> created a primary key in the database table for you, but the PostgreSQL >> adapter does not do this. It just creates an indexed and sequenced >> column. > > It does for me... at least with rails 1.1.6, postgres 8.1.5, and the > postgres 0.7.1 gem... > > I just checked one of my tables and it reports a primary key... >You have a "default" id generated primary key column. I am talking in reference to the OPs scenarios, where you have a different field then "id" be the primary key. I agree it does work when using the default "id" primary key field. Zach> otf_dev=> \d photos; > Table "public.photos" > Column | Type | > Modifiers > -------------+-----------------------------+----------------------------------------------------- > id | integer | not null default nextval(''photos_id_seq''::regclass) > name | character varying(255) | > sku | character varying(255) | > description | text | > is_featured | boolean | default false > created_at | timestamp without time zone | > updated_at | timestamp without time zone | > Indexes: > "photos_pkey" PRIMARY KEY, btree (id) > > -philip > > >-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFFcvZAMyx0fW1d8G0RAmeWAJ46JduJQvmfRU1CLIql+9MsrYkdBACfTMiI Vf8RetEWuE/LEYI53HD0tdk=CLPo -----END PGP SIGNATURE----- --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Philip Hallstrom wrote: >>> Even though what I posted to you works there may be a problem with >>> ActiveRecord, by supplying the "primary_key" option it should have >>> created a primary key in the database table for you, but the PostgreSQL >>> adapter does not do this. It just creates an indexed and sequenced >>> column. >> >> It does for me... at least with rails 1.1.6, postgres 8.1.5, and the >> postgres 0.7.1 gem... >> >> I just checked one of my tables and it reports a primary key... >> > > You have a "default" id generated primary key column. I am talking in > reference to the OPs scenarios, where you have a different field then > "id" be the primary key. > > I agree it does work when using the default "id" primary key field.Ah... I''d missed that part of the thread... I thought I''d read somewhere that if you specify your own primary key you''re on your own as far as setting up the sequence/next id stuff regardless of DB since Rails assumed if you''re doing that you had a good reason... but I coudl be wrong. And not sure it''s even relavant to what you two were talking about :) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---