Можно ли использовать хэш-разбиение для столбца с непервичным ключом в таблице PostgreSQL?

Я пытаюсь заменить существующую таблицу на ее разделенную версию. Я хочу, чтобы схема новой разделенной таблицы точно соответствовала существующей неразделенной таблице, чтобы я мог продолжать управлять таблицей с помощью миграций Django.

Моя первая попытка создать новую разделенную таблицу выглядела примерно так:

CREATE TABLE partition_test (
    row_index bigint,
    id character varying(128) PRIMARY KEY,
    vendor_id character varying(128)
) PARTITION BY HASH (vendor_id);

Что приводит к следующей ошибке:

ERROR:  unique constraint on partitioned table must include all partitioning columns
DETAIL:  PRIMARY KEY constraint on table "product_api_partition_test" lacks column "vendor_id" which is part of the partition key.

Я ищу обходной путь, который позволит мне создать разделение на vendor_id, сохранив row_index в качестве первичного ключа.

Я попробовал изменить первичный ключ следующим образом, однако Django требует первичного ключа и не поддерживает составные первичные ключи. Поэтому оба этих варианта приведут к несоответствию между истинной схемой и тем, что Django считает схемой.

CREATE TABLE partition_test (
    row_index bigint,
    id character varying(128),
    vendor_id character varying(128)
    PRIMARY KEY (row_index, vendor_id)
) PARTITION BY HASH (vendor_id);
CREATE TABLE api_partition_test (
    row_index bigint,
    id character varying(128),
    vendor_id character varying(128)
) PARTITION BY HASH (vendor_id);
Вернуться на верх