Можно ли использовать хэш-разбиение для столбца с непервичным ключом в таблице 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);