Это общие c операторы DDL, они являются операциями индекса и операциями секционирования, которые могут быть распараллелены.
Если вы посмотрите раздел Notes
оператора CREATE INDEX , вы увидите, что поддерживается параллельное построение индекса:
PostgreSQL can создавать индексы, используя несколько процессоров, чтобы быстрее обрабатывать строки таблицы. Эта функция известна как параллельный индекс сборки . Для методов индекса, которые поддерживают построение индексов параллельно (в настоящее время только B-дерево), maintenance_work_mem
указывает максимальный объем памяти, который может использоваться каждой операцией построения индекса в целом, независимо от того, сколько рабочих процессов было запущено. Как правило, модель затрат автоматически определяет, сколько рабочих процессов следует запрашивать, если таковые имеются.
Обновление
Я подозреваю, что real вопрос о CREATE TABLE ... AS
хотя.
Это, по сути, CREATE TABLE
, за которым следует INSERT .. SELECT
. Часть CREATE TABLE
не может быть распараллелена и не обязана - по сути, это операция метаданных. С другой стороны, SELECT
, можно легко распараллелить . INSERT
немного сложнее, но это вопрос реализации.
Как a_horse_with_no_name
объясняет в комментарий к этому вопросу , параллелизация для CREATE TABLE AS
была добавлена в PostgreSQL 11 :
Улучшения в параллелизме, включая:
- CREATE INDEX теперь может использовать параллельную обработку при построении индекса B-дерева
- Параллелизация теперь возможна в CREATE TABLE ... AS, CREATE МАТЕРИАЛИЗИРОВАННЫЙ ВИД, а также некоторые запросы с использованием UNION
- Распараллеленные объединения ha sh и параллельное последовательное сканирование теперь работают лучше