相关疑难解决方法(0)

在PostgreSQL数据库上缓慢简单的更新查询,有300万行

我正在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;

sql postgresql sql-update

31
推荐指数
4
解决办法
3万
查看次数

PostgreSQL shuffle列值

在具有> 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)

这需要几个小时才能完成.

有没有一种有效的方法呢?

sql postgresql performance shuffle

6
推荐指数
2
解决办法
1558
查看次数

标签 统计

postgresql ×2

sql ×2

performance ×1

shuffle ×1

sql-update ×1