From: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
---|---|
To: | pgsql-ru-general(at)lists(dot)postgresql(dot)org |
Subject: | А вот кстати, как быстро заполнить столбик? |
Date: | 2018-04-19 16:17:58 |
Message-ID: | 20180419161758.hbafsnj4hlwbf3gz@vdsl.uvw.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
Дано:
1. таблица 87 млн записей
2. добавляем столбик "c" TEXT DEFAULT 'abc';
- DEFAULT для новых записей, поле NULL
3. строим индекс по "id", WHERE "c" IS NULL
затем в цикле на perl пишем программу вызывающую запрос
WITH "lst" AS (
SELECT
"id"
FROM
"table"
WHERE
"c" IS NULL
ORDER BY
"id" DESC
LIMIT
100
)
UPDATE
"table"
SET
"c" = "d"
FROM
"lst"
WHERE
"table"."id" = "lst"."id";
но такой подход по расчетам показывает что будет заполнять 87 млн
записей где-то 14 с гаком дней.
варьируя LIMIT 1-1000 можно очень немного варьировать скоростью.
типа 14 дней может стать 18 или 12-ю.
Есть вариант неблокируя БД заполнить поле более быстро?
вот CREATE INDEX CONCURRENTLY по этой таблице строится за 5 минут
примерно.
я понимаю что заполнение столбика - запись, но 14 дней очень уж много.
есть идеи как быстрее сделать?
--
. ''`. Dmitry E. Oboukhov <unera(at)debian(dot)org>
: :’ :
`. `~’ GPG key: 4096R/08EEA756 2014-08-30
`- 71ED ACFC 6801 0DD9 1AD1 9B86 8D1F 969A 08EE A756
From | Date | Subject | |
---|---|---|---|
Next Message | Sergei Kornilov | 2018-04-19 17:30:28 | Re: А вот кстати, как быстро заполнить столбик? |
Previous Message | Dmitry E. Oboukhov | 2018-04-19 13:49:04 | Re: VARCHAR(32) в VARCHAR(64) или TEXT |