Thanks a lot. Drop and re-create views is not an option, because there is a
lot views, (and materialized views).
also nor index drop is an option, because I need re-create index as I use
this table in procedure, so index is necessary for  further queries. So
total runtime will not decreased.

Thanks  Olivier,  I will test out with second option, you mentioned.


On Wed, May 13, 2020 at 1:15 PM Olivier Gautherot <ogauthe...@gautherot.net>
wrote:

> Hi Otar,
>
> On Wed, May 13, 2020 at 10:15 AM otar shavadze <oshava...@gmail.com>
> wrote:
>
>> postgres version 12
>> I have very simple update query, like this:
>>
>> update my_table
>> set
>> col = NULL
>> where
>> col IS NOT NULL;
>>
>> my_table contains few million rows, col is indexed column
>>
>> Fastest way would be   alter table, drop column and then add column
>> again, but I can't do this just because on this column   depends bunch of
>> views and materialized views.
>>
>> No much hope, but still asking, Is there some another way to just reset
>> column all values? ( with NULL in my case)
>>
>
> If views depend on this column, you may need to drop them (in the right
> order...) and then recreate them. Now, if they depend on a column that will
> not contain significant data, you may wish to remove the column, or declare
> it as null if you need to maintain compatibility.
>
> Now, if you have time and down time of the database is an issue, you may
> run the UPDATE on lots of 1000 rows (or whatever that number fits you).
> UPDATE is typically a INSERT/DELETE/VACUUM sequence and this copying around
> is the killer - doing it in one go can temporarily increase the disk usage.
> I've had success with the following pseudo code:
>
> SELECT rowid FROM mytable WHERE col IS NOT NULL
>
> and fed the result to something like:
>
> FOR chunk IN chunk_in_1000_rows(query_result)
> DO
>     BEGIN
>     UPDATE my_table SET col = NULL WHERE rowid IN chunk
>     COMMIT
>     SLEEP(5)
> DONE
>
> You may wish to run a VACUUM FULL manually at the end.
>
> In my case, I had to compute individual numbers so the processing was a
> bit more complex but it happily processed over 60 millions rows in a few
> days.
>
> Hope it helps
> --
> Olivier Gautherot
>
>

Reply via email to