Thread: automatic incrementation
hello, I have a table with the field 'id' which i would like to increment at each insert automatically. The idea is to create a function which determines the max(id) and then a rule to insert instead the real insertion instruction, with the next id value. -- table create table toto ( id int4 primary key, project char(8) not null, comments text ); insert into toto values (1,'PTest','ndfjSHJG'); insert into toto values (2,'PTest','ndfjSHJG'); insert into toto values (3,'PTest','ndfjSHJG'); -- function create function nextid(toto) returns int4 as ' select max($1.id)+1 as id ; ' language 'sql'; **** ERROR: type id lookup of 12 failed This is my first problem -- rule create rule r_id as on insert to toto do instead insert into toto (id, project, comments) values (nextid(), new.project, new.comments); **** The next problem may be the rule writing !!! I would like to have , even some other suggestions to make it works. I can't use a sequence table because I've already one in the database. Thanks, Nuch
Nuchanard Chiannilkulchai ha scritto: > hello, > > I have a table with the field 'id' which i would like to increment at > each insert automatically. > The idea is to create a function which determines the max(id) and then a > rule to insert instead > the real insertion instruction, with the next id value. > > -- table > create table toto ( > id int4 primary key, > project char(8) not null, > comments text > ); > insert into toto values (1,'PTest','ndfjSHJG'); > insert into toto values (2,'PTest','ndfjSHJG'); > insert into toto values (3,'PTest','ndfjSHJG'); > > -- function > create function nextid(toto) returns int4 > as ' select max($1.id)+1 as id ; ' > language 'sql'; > > **** ERROR: type id lookup of 12 failed > This is my first problem > > -- rule > create rule r_id as on insert to toto > do instead > insert into toto (id, project, comments) values (nextid(), > new.project, new.comments); > > **** The next problem may be the rule writing !!! > I would like to have , even some other suggestions to make it works. > I can't use a sequence table because I've already one in the database. > > Thanks, > Nuch What about a SERIAL data type ? create table toto ( id SERIAL, project char(8) not null, comments text); -- ______________________________________________________________ PostgreSQL 6.5.0 on i586-pc-linux-gnu, compiled by gcc 2.7.2.3 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Jose'
----- Original Message ----- From: José Soares <jose@sferacarta.com> To: Nuchanard Chiannilkulchai <nuch@valigene.com> Cc: <pgsql-sql@hub.org> Sent: 09 Þíè 1999 ã. 16:15 Subject: Re: [SQL] automatic incrementation > > > Nuchanard Chiannilkulchai ha scritto: > > > hello, > > > > I have a table with the field 'id' which i would like to increment at > > each insert automatically. > > The idea is to create a function which determines the max(id) and then a > > rule to insert instead > > the real insertion instruction, with the next id value. > > > > -- table > > create table toto ( > > id int4 primary key, > > project char(8) not null, > > comments text > > ); > > insert into toto values (1,'PTest','ndfjSHJG'); > > insert into toto values (2,'PTest','ndfjSHJG'); > > insert into toto values (3,'PTest','ndfjSHJG'); > > > > -- function > > create function nextid(toto) returns int4 > > as ' select max($1.id)+1 as id ; ' > > language 'sql'; > > > > **** ERROR: type id lookup of 12 failed > > This is my first problem > > > > -- rule > > create rule r_id as on insert to toto > > do instead > > insert into toto (id, project, comments) values (nextid(), > > new.project, new.comments); > > > > **** The next problem may be the rule writing !!! > > I would like to have , even some other suggestions to make it works. > > I can't use a sequence table because I've already one in the database. > > > > Thanks, > > Nuch > > What about a SERIAL data type ? > > create table toto ( > id SERIAL, > project char(8) not null, > comments text); > > -- > ______________________________________________________________ > PostgreSQL 6.5.0 on i586-pc-linux-gnu, compiled by gcc 2.7.2.3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > Jose' > > What about sequence??? i use some alike... create sequence toto_seq(.....); create table toto ( id integer primary key default nextval("toto_seq"), project char(8) not null, comments text ); insert into toto(project, comments) values ('PTest','ndfjSHJG'); (may be there are SQL errors, but they are syntax only:)))) Niki