Обсуждение: Cannot add an column of type serial or bigserial

Поиск
Список
Период
Сортировка

Cannot add an column of type serial or bigserial

От
David Sigeti
Дата:
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



Re: Cannot add an column of type serial or bigserial

От
Christopher Kings-Lynne
Дата:
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


Re: Cannot add an column of type serial or bigserial

От
Ian Freislich
Дата:
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
> 


Re: Cannot add an column of type serial or bigserial

От
Andreas Pflug
Дата:
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




Re: Cannot add an column of type serial or bigserial

От
Christopher Kings-Lynne
Дата:
> 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


Re: Cannot add an column of type serial or bigserial

От
Andreas Pflug
Дата:
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




Re: Cannot add an column of type serial or

От
David Sigeti
Дата:
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



Re: Cannot add an column of type serial

От
Andreas Pflug
Дата:
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