I am trying a simple UPDATE table SET column1 = 0
on a table with about 3 million rows on Postegres 8.4 but it is taking forever to finish. It has been running for more than 10 min.
Before, I tried to run a VACUUM and ANALYZE commands on that table and I also tried to create some indexes (although I doubt this will make any difference in this case) but none seems to help.
Any other ideas?
Update:
This is the table structure:
CREATE TABLE myTable ( id bigserial NOT NULL, title text, description text, link text, "type" character varying(255), generalFreq real, generalWeight real, author_id bigint, status_id bigint, CONSTRAINT resources_pkey PRIMARY KEY (id), CONSTRAINT author_pkey FOREIGN KEY (author_id) REFERENCES users (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT c_unique_status_id UNIQUE (status_id) );
I am trying to run UPDATE myTable SET generalFreq = 0;
Advertisement
Answer
Take a look at this answer: PostgreSQL slow on a large table with arrays and lots of updates
First start with a better FILLFACTOR, do a VACUUM FULL to force table rewrite and check the HOT-updates after your UPDATE-query:
SELECT n_tup_hot_upd, * FROM pg_stat_user_tables WHERE relname = 'myTable';
HOT updates are much faster when you have a lot of records to update. More information about HOT can be found in this article.
Ps. You need version 8.3 or better.