I am trying to change a text column into a numeric one in a large table.

My idea was to add a new column, update it, drop the old column, and rename the new one to the old name.  I am hoping that that would make it faster and minimize locking time though I'm not sure that it would.

I am therefore trying to execute the following but I'm getting an error that the new column does not exist:

begin;
    alter table some_table
        add column if not exists amount_num numeric(30,12);

    update some_table
        set amount_num = amount_text::numeric(30,12);

    alter table some_table
        drop column amount_text;

    alter table some_table
        rename column amount_num to amount_text;

    alter table some_table
        drop column amount_num;

    commit;
end;

Am I missing something?  Is this supposed to work?

Would it have less locking than simply altering the column?

Thanks,

Igal




Reply via email to