Обсуждение: Cannot add an column of type serial or bigserial
Dear Pgadmin Folks, I am using pgadminIII 1.0.2 with PostgreSQL 7.4 under W2K SP4 and Cygwin (current as of 2 or 3 weeks ago). The server is running locally. If I attempt to add an column of type serial or bigserial to a table, the operation fails with a message telling me that adding an column with a default value is not implemented. What is really weird is that one can, in fact, add a column with a default value, like an int4 with a default value or 0. The problem does not arise if the serial (or bigserial) column is created when the table is created (as a part of CREATE TABLE). Yours, David --- Dr. David E. Sigeti Phone: 505-667-9239 E-mail: sigeti@lanl.gov Surface mail: X-8, MS-F645, Los Alamos National Laboratory, Los Alamos, NM 87545 USA
You cannot add a serial column after table creation time in PostgreSQL. Chris David Sigeti wrote: > Dear Pgadmin Folks, > > I am using pgadminIII 1.0.2 with PostgreSQL 7.4 under W2K SP4 and Cygwin > (current as of 2 or 3 weeks ago). The server is running locally. > > If I attempt to add an column of type serial or bigserial to a table, > the operation fails with a message telling me that adding an column with > a default value is not implemented. What is really weird is that one > can, in fact, add a column with a default value, like an int4 with a > default value or 0. The problem does not arise if the serial (or > bigserial) column is created when the table is created (as a part of > CREATE TABLE). > > Yours, > David > > --- > Dr. David E. Sigeti > Phone: 505-667-9239 > E-mail: sigeti@lanl.gov > Surface mail: X-8, MS-F645, Los Alamos National Laboratory, > Los Alamos, NM 87545 USA > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org
Christopher Kings-Lynne wrote:
> You cannot add a serial column after table creation time in PostgreSQL.
But you can do the following from the query editor:
ALTER TABLE table ADD column INTEGER;
CREATE SEQUENCE table_column_seq;
ALTER TABLE table ALTER column SET DEFAULT nextval('"table_column_seq"'::text);
If you want the column to be NOT NULL as well, you will have to
populate that column for all the rows and then do:
ALTER TABLE table ALTER column SET NOT NULL;
Ian
> Chris
>
> David Sigeti wrote:
>
> > Dear Pgadmin Folks,
> >
> > I am using pgadminIII 1.0.2 with PostgreSQL 7.4 under W2K SP4 and Cygwin
> > (current as of 2 or 3 weeks ago). The server is running locally.
> >
> > If I attempt to add an column of type serial or bigserial to a table,
> > the operation fails with a message telling me that adding an column with
> > a default value is not implemented. What is really weird is that one
> > can, in fact, add a column with a default value, like an int4 with a
> > default value or 0. The problem does not arise if the serial (or
> > bigserial) column is created when the table is created (as a part of
> > CREATE TABLE).
> >
> > Yours,
> > David
> >
> > ---
> > Dr. David E. Sigeti
> > Phone: 505-667-9239
> > E-mail: sigeti@lanl.gov
> > Surface mail: X-8, MS-F645, Los Alamos National Laboratory,
> > Los Alamos, NM 87545 USA
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 6: Have you searched our list archives?
> >
> > http://archives.postgresql.org
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>
David Sigeti wrote: > Dear Pgadmin Folks, > > I am using pgadminIII 1.0.2 with PostgreSQL 7.4 under W2K SP4 and > Cygwin (current as of 2 or 3 weeks ago). The server is running locally. > > If I attempt to add an column of type serial or bigserial to a table, > the operation fails with a message telling me that adding an column > with a default value is not implemented. What is really weird is that > one can, in fact, add a column with a default value, like an int4 with > a default value or 0. The problem does not arise if the serial (or > bigserial) column is created when the table is created (as a part of > CREATE TABLE). > serial isn't a true datatype but a keyword that can be used only at creation time. Still, pgAdmin3 should create the commands necessary for this to make life easier; I added this as a TODO item. Regards, Andreas
> serial isn't a true datatype but a keyword that can be used only at > creation time. Still, pgAdmin3 should create the commands necessary for > this to make life easier; I added this as a TODO item. The problem will be recording the dependency properly in pg_depend... Chris
Christopher Kings-Lynne wrote: >> serial isn't a true datatype but a keyword that can be used only at >> creation time. Still, pgAdmin3 should create the commands necessary >> for this to make life easier; I added this as a TODO item. > > > The problem will be recording the dependency properly in pg_depend... That's no real problem, just an issue that should be thought of; thanks for mentioning. Regards, Andreas
At 12:21 PM 12/10/2003 +0100, Andreas Pflug wrote: >David Sigeti wrote: > >>I am using pgadminIII 1.0.2 with PostgreSQL 7.4 under W2K SP4 and Cygwin >>(current as of 2 or 3 weeks ago). The server is running locally. >> >>If I attempt to add an column of type serial or bigserial to a table, the >>operation fails with a message telling me that adding an column with a >>default value is not implemented. What is really weird is that one can, >>in fact, add a column with a default value, like an int4 with a default >>value or 0. The problem does not arise if the serial (or bigserial) >>column is created when the table is created (as a part of CREATE TABLE). >serial isn't a true datatype but a keyword that can be used only at >creation time. Still, pgAdmin3 should create the commands necessary for >this to make life easier; I added this as a TODO item. Adding this functionality would be great but I suggest that the error message be changed right away as it is seriously misleading. Thanks to everyone who took the time to help me out. Yours, David --- Dr. David E. Sigeti Phone: 505-667-9239 E-mail: sigeti@lanl.gov Surface mail: X-8, MS-F645, Los Alamos National Laboratory, Los Alamos, NM 87545 USA
David Sigeti wrote:
> At 12:21 PM 12/10/2003 +0100, Andreas Pflug wrote:
>
>> David Sigeti wrote:
>>
>>> I am using pgadminIII 1.0.2 with PostgreSQL 7.4 under W2K SP4 and
>>> Cygwin (current as of 2 or 3 weeks ago). The server is running
>>> locally.
>>>
>>> If I attempt to add an column of type serial or bigserial to a
>>> table, the operation fails with a message telling me that adding an
>>> column with a default value is not implemented. What is really
>>> weird is that one can, in fact, add a column with a default value,
>>> like an int4 with a default value or 0.
>>
pgAdmin breaks this into two steps for you; have a look at the SQL page.
>>> The problem does not arise if the serial (or bigserial) column is
>>> created when the table is created (as a part of CREATE TABLE).
>>
>> serial isn't a true datatype but a keyword that can be used only at
>> creation time. Still, pgAdmin3 should create the commands necessary
>> for this to make life easier; I added this as a TODO item.
>
>
> Adding this functionality would be great but I suggest that the error
> message be changed right away as it is seriously misleading.
>
The error message originates from the backend. I agree that this might
be confusing to newbies, who don't know that serial actually is int4
default nextval('...') (currently pgAdmin3 doesn't either :-)
I'm forwarding this to pgsql-hackers.
Regards,
Andreas