Обсуждение: Changing from NOT NULL to NULL

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

Changing from NOT NULL to NULL

От
Rob Mosher
Дата:
Is there anyway I can change a field to allowing nulls without dumping
the table, dropping it, recreating it as desired, and filling all the
data back in?

Thanks,
Rob Mosher

Re: Changing from NOT NULL to NULL

От
joseph speigle
Дата:
> Is there anyway I can change a field to allowing nulls without dumping the table, dropping it,
> recreating it as desired, and filling all the data back in?

I hope this gets indexed correctly as I hosed the original and tried a cut-n-paste of the subject line,

For that, I have this which I didn't write myself but snagged from somewhere.  Maybe pgsql-general???


-- This function takes a table and column and will set the column
-- to allow NULLs.
--
-- $Id$
--
DROP FUNCTION kl_setnull(name, name);
CREATE FUNCTION kl_setnull(name, name) RETURNS boolean AS '
DECLARE
    tablename ALIAS FOR $1;
    colname ALIAS FOR $2;
    rec_affected int;
BEGIN
    -- If any params are NULL, return NULL - this means function
    -- can be defined isstrict.
    IF tablename IS NULL OR colname IS NULL THEN
        RETURN NULL;
    END IF;

    -- Lock table with standard ALTER TABLE locks
    EXECUTE ''LOCK TABLE '' || quote_ident(tablename) || '' IN ACCESS EXCLUSIVE MODE'';

    -- Update the system catalogs
    EXECUTE ''UPDATE pg_attribute SET attnotnull = false WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = ''
||quote_literal(tablename) || '') AND attname = '' || quote_literal(colname); 

    -- Get number of rows modified
    GET DIAGNOSTICS rec_affected = ROW_COUNT;

    -- Return number of rows modified
    RETURN (rec_affected = 1);

END;
' LANGUAGE 'plpgsql'
WITH (isstrict);
--
joe speigle
www.sirfsup.com

Re: Changing from NOT NULL to NULL

От
Michael Glaesemann
Дата:
On Feb 16, 2004, at 4:57 AM, Rob Mosher wrote:

> Is there anyway I can change a field to allowing nulls without dumping
> the table, dropping it, recreating it as desired, and filling all the
> data back in?

<http://www.postgresql.org/docs/current/static/sql-altertable.html>

Michael Glaesemann
grzm myrealbox com


Re: Changing from NOT NULL to NULL

От
Nabil Sayegh
Дата:
Rob Mosher wrote:
> Is there anyway I can change a field to allowing nulls without dumping
> the table, dropping it, recreating it as desired, and filling all the
> data back in?

ALTER TABLE tab ALTER COLUMN col DROP NOT NULL;

HTH
--
  e-Trolley Sayegh & John, Nabil Sayegh
  Tel.: 0700 etrolley /// 0700 38765539
  Fax.: +49 69 8299381-8
  PGP : http://www.e-trolley.de

Re: Changing from NOT NULL to NULL

От
Tom Lane
Дата:
Rob Mosher <mosher@andrews.edu> writes:
> Is there anyway I can change a field to allowing nulls without dumping
> the table, dropping it, recreating it as desired, and filling all the
> data back in?

ALTER TABLE ... DROP NOT NULL does the trick in recent releases.  Before
that, you could resort to manually poking the attnotnull flag in
the pg_attribute row for the field.

            regards, tom lane

Re: Changing from NOT NULL to NULL

От
Rob Mosher
Дата:
I will try this out as soon as I can. Thanks to all who replied.

Rob Mosher

Tom Lane wrote:

>Rob Mosher <mosher@andrews.edu> writes:
>
>
>>Is there anyway I can change a field to allowing nulls without dumping
>>the table, dropping it, recreating it as desired, and filling all the
>>data back in?
>>
>>
>
>ALTER TABLE ... DROP NOT NULL does the trick in recent releases.  Before
>that, you could resort to manually poking the attnotnull flag in
>the pg_attribute row for the field.
>
>            regards, tom lane
>
>