Обсуждение: Alter column / array
Hi list,
I can't find out why the following command give different results:
database-# CREATE TABLE "test1" (dev_id int, dev_slots integer[] DEFAULT
'{0,0,0,0,0}');
CREATE
If you display (\d test1) the table-structure all looks good - even the
DEFAULTs.
...but if you have an existing table and want to add a column of type array,
it doesn't
work:
database-# CREATE TABLE "test2" (dev_id int);
CREATE
database-# ALTER TABLE "test2" ADD COLUMN dev_slots integer[] DEFAULT
'{0,0,0,0,0}');
ALTER
If you now display the table-structure, the DEFAULT-statement is not listed
and
UPDATE-commands on the ARRAY do strange things.
Any clou?
Regards
R. Lüttecke (IT)
MICHAELTELECOM AG
Bruchheide 34
49163 Bohmte
+49 5471 8060
http://www.michael-telecom.de
			
		On Thu, 11 Oct 2001, [iso-8859-1] Rolf L�ttecke wrote:
> Hi list,
>
> I can't find out why the following command give different results:
>
> database-# CREATE TABLE "test1" (dev_id int, dev_slots integer[] DEFAULT
> '{0,0,0,0,0}');
> CREATE
>
> If you display (\d test1) the table-structure all looks good - even the
> DEFAULTs.
>
> ...but if you have an existing table and want to add a column of type array,
> it doesn't
> work:
>
> database-# CREATE TABLE "test2" (dev_id int);
> CREATE
> database-# ALTER TABLE "test2" ADD COLUMN dev_slots integer[] DEFAULT
> '{0,0,0,0,0}');
> ALTER
>
> If you now display the table-structure, the DEFAULT-statement is not listed
> and
> UPDATE-commands on the ARRAY do strange things.
If I remember correctly, defaults are currently ignored on add
column.  I think you can use alter table alter column to add the default.
And, what do you mean by updates doing strange things?
			
		=?iso-8859-1?Q?Rolf_L=FCttecke?= <rolf.luettecke@michael-telecom.de> writes:
> I can't find out why the following command give different results:
ALTER TABLE ADD COLUMN doesn't support adding a default.  (There is a
test in the code that's supposed to kick out an error message telling
you so, but it doesn't seem to be working.  Need to look at that.)
You can use ALTER TABLE SET DEFAULT to add the default after you add
the column.
Hmm ... I wonder why ADD COLUMN doesn't just call the SET DEFAULT
routine to handle adding the default ...
            regards, tom lane
			
		=?iso-8859-1?Q?Rolf_L=FCttecke?= <rolf.luettecke@michael-telecom.de> writes:
>> I can't find out why the following command give different results:
> ALTER TABLE ADD COLUMN doesn't support adding a default.  (There is a
> test in the code that's supposed to kick out an error message telling
> you so, but it doesn't seem to be working.  Need to look at that.)
I've committed fixes for that problem in 7.2.
> Hmm ... I wonder why ADD COLUMN doesn't just call the SET DEFAULT
> routine to handle adding the default ...
On looking at the archives (see pgsql-hackers around 17-Jul-01),
I see that this wasn't done because it's not an SQL92-compliant
behavior.  Our current implementation of ADD COLUMN can't support
setting the new column's entries to anything except NULL, but the
spec says that if there's a DEFAULT then the column should initially
be filled with that value.
            regards, tom lane
			
		Hi Tom, > You can use ALTER TABLE SET DEFAULT to add the default after you add > the column. Works. > Hmm ... I wonder why ADD COLUMN doesn't just call the SET DEFAULT > routine to handle adding the default ... I'm wondering too. But all programs do only those things they were told to do - mostly, not always ;-) Hi Stephan, > And, what do you mean by updates doing strange things? Follow-up-errors caused by updating an uninitialized array. Now it is clear why it couldn't work. Thanx and regards R. Lüttecke (IT) MICHAELTELECOM AG Bruchheide 34 49163 Bohmte +49 5471 8060 http://www.michael-telecom.de