2016-12-06 6 views
0

, когда я выполнить следующий SQL (который содержится на SQL файл, созданный с помощью pg_dump из Postgres9.4) в Greenplum:Как я должен иметь дело с моими UNIQUE ограничений во время моей миграции данных из Postgres9.4 в Greenplum

CREATE TABLE "public"."trm_concept" (
"pid" int8 NOT NULL, 
"code" varchar(100) NOT NULL, 
"codesystem_pid" int8, 
"display" varchar(400) , 
"index_status" int8, 
CONSTRAINT "trm_concept_pkey" PRIMARY KEY ("pid"), 
CONSTRAINT "idx_concept_cs_code" UNIQUE ("codesystem_pid", "code") 
); 

Я получил эту ошибку:

ERROR: Greenplum Database does not allow having both PRIMARY KEY and UNIQUE constraints 

почему Greenplum не позволяет это? Мне действительно нужно это уникальное ограничение, чтобы гарантировать какое-то правило, как я могу его исправить в greenplum?

+0

1), потому что Greenplum является калекой-версией Postgres 2) вы можете попробовать заменить уникальное ограничение уникальным индексом. – joop

+0

@joop Мне грустно сказать, что уникальный индекс действует одинаково с уникальным ограничением ... – XiangZzz

+0

Это гораздо лучший вопрос для http://dba.stackexchange.com –

ответ

0
  • UNIQUE ограничение сделано с индексом ВТКЕЕ
  • Первичные ключи подразумевают UNIQUE и NOT NULL
  • Greenplum раздает детям/осколками или что на что вы, как утверждают UNIQUE.

Для GreenTree реализовать UNIQUE ограничения - как вы хотите - этот показатель должен быть

  • скопированы каждый ребенок
  • обновленного в совместимом образом ACID

Выполнение этого полностью устранит преимущества запуска GreenPlum. Вы также можете вернуться к PostgreSQL.

From the docs about CREATE TABLE

When creating a table, there is an additional clause to declare the Greenplum Database distribution policy. If a DISTRIBUTED BY or DISTRIBUTED RANDOMLY clause is not supplied, then Greenplum assigns a hash distribution policy to the table using either the PRIMARY KEY (if the table has one) or the first column of the table as the distribution key. Columns of geometric or user-defined data types are not eligible as Greenplum distribution key columns. If a table does not have a column of an eligible data type, the rows are distributed based on a round-robin or random distribution. To ensure an even distribution of data in your Greenplum Database system, you want to choose a distribution key that is unique for each record, or if that is not possible, then choose DISTRIBUTED RANDOMLY.

же документ говорит, что это о PRIMARY KEY,

For a table to have a primary key, it must be hash distributed (not randomly distributed), and the primary key The column(s) that are unique must contain all the columns of the Greenplum distribution key.

Вот что документы на CREATE INDEX

In Greenplum Database, unique indexes are allowed only if the columns of the index key are the same as (or a superset of) the Greenplum distribution key. On partitioned tables, a unique index is only supported within an individual partition - not across all partitions.

+0

Tks, Ваши слова ** Выполнение этого полностью устранит преимущества запуска GreenPlum. Вы также можете вернуться к PostgreSQL.** заставьте меня понять что-то о зеленой планете. – XiangZzz

0

Многие (возможно, большинство) аналитические базы данных не поддерживают поддержку таких ограничений. Greenplum несколько уникален в поддержке принудительного исполнения PRIMARY KEY.

FWIW, в Redshift Я выполняю дополнительную логику после любого шага ETL, который изменяет данные, чтобы гарантировать, что мои ограничения все еще действительны.

Здесь вы можете попробовать тот же подход, но я настоятельно рекомендую вам разбить таблицу на столбцы, которые будут проверяться.

+0

Спасибо, я собираюсь удалить свой первичный ключ и сохранить свое уникальное ограничение. – XiangZzz