Как я могу разрешить ошибку PostgreSQL, «не было получено для столбца« foo »с совместным типом Citext»?
-
22-10-2019 - |
Вопрос
Совсем недавно я обновился с 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.