Thread: Removing NOT NULL Contraint

Removing NOT NULL Contraint

From
Matthew
Date:
I may be missing something simple here, but I have an attribute in a
table that was created as NOT NULL.  I now need to remove this
constraint.  I don't see a proper way to do this.  I think I can update
the pg_attribute table and change attnotnull from true to false.  Is
this an acceptable solution or is there a good reason that I should not
directly edit the system tables?

Maybe I'm missing something but I didn't see another way to do it other
then creating a new table, selecting into it and dropping the old table,
which seems like a lot of work for something so simple.

Thanks,

Matt

Re: Removing NOT NULL Contraint

From
"Vladimir V. Zolotych"
Date:
When I need to change table (e.g. adding new column or changing col attr)

I used the following:
1) dump the table: pg_dump -t my_table > my_table.out
2) edit my_table slightly (e.g. remain only COPY statement)
3) delete table my_table (also my_table's sequences if any)
4) create table as it should be
5) populate table, e.g. pgsql -e my_db < my_table.out
6) setting sequences, etc. (e.g. select setval('my_table_sequence', ...))

If you will know more convinient way, please let me now.

Matthew wrote:

> I may be missing something simple here, but I have an attribute in a
> table that was created as NOT NULL.  I now need to remove this
> constraint.  I don't see a proper way to do this.  I think I can update
> the pg_attribute table and change attnotnull from true to false.  Is
> this an acceptable solution or is there a good reason that I should not
> directly edit the system tables?
>
> Maybe I'm missing something but I didn't see another way to do it other
> then creating a new table, selecting into it and dropping the old table,
> which seems like a lot of work for something so simple.
>
> Thanks,
>
> Matt


RE: Removing NOT NULL Contraint

From
Matthew
Date:
I think in a lot of situations that process is necessary, but all I
wanted to do was change the not null flag from true to false.

I went ahead and test this out and it worked.  All I did was:
update pg_attributes set attnotnull = 'f' where oid =
oidofnotnullcolumn;
vacuum analyze;

Everything seemed to work and I have not had any problems stem from
this.


> -----Original Message-----
> From:    Vladimir V. Zolotych [SMTP:gsmith@eurocom.od.ua]
> Sent:    Thursday, May 04, 2000 1:44 AM
> To:    Matthew; pgsql-admin@postgresql.org
> Subject:    Re: [ADMIN] Removing NOT NULL Contraint
>
> When I need to change table (e.g. adding new column or changing col
> attr)
>
> I used the following:
> 1) dump the table: pg_dump -t my_table > my_table.out
> 2) edit my_table slightly (e.g. remain only COPY statement)
> 3) delete table my_table (also my_table's sequences if any)
> 4) create table as it should be
> 5) populate table, e.g. pgsql -e my_db < my_table.out
> 6) setting sequences, etc. (e.g. select setval('my_table_sequence',
> ...))
>
> If you will know more convinient way, please let me now.
>
> Matthew wrote:
>
> > I may be missing something simple here, but I have an attribute in a
> > table that was created as NOT NULL.  I now need to remove this
> > constraint.  I don't see a proper way to do this.  I think I can
> update
> > the pg_attribute table and change attnotnull from true to false.  Is
> > this an acceptable solution or is there a good reason that I should
> not
> > directly edit the system tables?
> >
> > Maybe I'm missing something but I didn't see another way to do it
> other
> > then creating a new table, selecting into it and dropping the old
> table,
> > which seems like a lot of work for something so simple.
> >
> > Thanks,
> >
> > Matt