Как я могу разрешить ошибку PostgreSQL, «не было получено для столбца« foo »с совместным типом Citext»?

dba.stackexchange https://dba.stackexchange.com/questions/17609

Вопрос

Совсем недавно я обновился с PostgreSQL 8.4.11 до 9.1.3. Я использовал pg_dump в процессе. Теперь я получаю ошибку:

Ошибка: для столбца не было получено.
Подсказка: используйте пункт COLLATE, чтобы явно установить сопоставление.

Это продолжение Проблема, которую я имел ранее. Анкет Кажется, что исправление, предложенное в примечаниях по выпуску пользовательские домены. Анкет Кажется, как будто Создать домен Заявление в 8.4 даже не подтвердило COLLATE пункт.

Вот как я создал vin тип,

CREATE DOMAIN inventory.valid_vin AS citext
  CHECK ( inventory.valid_vin( VALUE ) );
Это было полезно?

Решение

Для получения дополнительной информации об этом найдите нашу переписку в этой теме:

Проблема

Проблема возникает прямо от устья лошадей, Том Лейн,

Ну, если вы создаете CITEXT *, то да, это сломано. По состоянию на 9.1 тип CITEXT должен быть создан с помощью атрибута "collatable = true". Предлагаемые операторы обновления являются средством исправления неспособности сделать это после факта, но Они не охватывают никаких доменов, которые уже были созданы поверх CITEXT.

Источник: http://archives.postgresql.org/pgsql-general/2012-05/msg00262.php

* Я создавал Citext, однако мой конкретный свал с его созданием, не было ничего особенного.

Таким образом, дамп/восстановление из 8.3 -> 9.1 не поддерживается, если у вас есть домен на Citext.

Решение

Вы можете обойти эту проблему, сначала выполняя:

  • CREATE EXTENSION citext Прежде чем загрузить свалку.
  • Или, взломать патч, чтобы работать на DOMAINS над citext.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top