Каков наилучший способ засыпки таблицы разделов с использованием данных из однораздельной таблицы? (postgres 12) - PullRequest
0 голосов
/ 27 апреля 2020

Я преобразую однораздельную таблицу в многораздельную таблицу в postgres 12. Предполагается, что я настроил новую таблицу разделов и создал соответствующие триггеры для автоматического c создания разделов, что является лучшим способом обратно заполнить пустую таблицу разделов?

Подходит ли наивный

insert into partitioned_table(a,d,b,c) select a, d, b, c  from non_partitioned_table;
delete from non_partitioned_table;

? У нас в таблице ~ 250 миллионов строк, поэтому я немного обеспокоен удвоением требований к хранилищу.

Или, возможно,

WITH moved_rows AS (
    DELETE FROM non_partitioned_table
)
INSERT INTO partitioned_table
SELECT [DISTINCT] * FROM moved_rows;

или

COPY non_partitioned_table TO '/tmp/non_partitioned_table.csv' DELIMITER ',';

COPY partitioned_table FROM '/tmp/non_partitioned_table.csv' DELIMITER ',';

В любом случае передача данных может занять некоторое время. Я также обеспокоен тем, что это снизит производительность INSERT во время переноса данных, поэтому я предполагаю, что нам нужно будет блокировать вставки, пока это не будет сделано. Есть ли способ оценить, сколько времени займет копирование данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...