我正在UPDATE table SET column1 = 0Postegres 8.4上尝试一个简单的约300万行的桌子,但它需要永远完成.它已运行超过10分钟.现在是我的最后一次尝试.
以前,我试图在该表上运行VACUUM和ANALYZE命令,我也尝试创建一些索引(虽然我怀疑这会在这种情况下有所不同)但似乎没有任何帮助.
还有其他想法吗?
谢谢,里卡多
更新:
这是表结构:
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)
);
Run Code Online (Sandbox Code Playgroud)
我想跑 UPDATE myTable SET generalFreq = 0;
在具有> 100k行的表中,如何有效地混洗特定列的值?
表定义:
CREATE TABLE person
(
id integer NOT NULL,
first_name character varying,
last_name character varying,
CONSTRAINT person_pkey PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)
为了匿名化数据,我必须将'first_name'列的值放在适当位置(我不允许创建新表).
我的尝试:
with
first_names as (
select row_number() over (order by random()),
first_name as new_first_name
from person
),
ids as (
select row_number() over (order by random()),
id as ref_id
from person
)
update person
set first_name = new_first_name
from first_names, ids
where id = ref_id;
Run Code Online (Sandbox Code Playgroud)
这需要几个小时才能完成.
有没有一种有效的方法呢?