Postgresql: ОШИБКА: тип "citext" не существует
Я прочитал другие посты, при поиске, ответ на этот вопрос.
Я использую PostgreSQL 9.1 и создал расширение "citext" с помощью CREATE EXTENSION citext
, но когда я пытаюсь создать столбцы типа "citext", он выдает эту ошибку
ОШИБКА: тип "citext" не существует
Я исследовал, но не нашел никаких конкретных ответов? Есть идеи почему?
Ответы
Ответ 1
Хорошо понял. У меня есть несколько баз данных и CREATE EXTENSION citext
должен быть запущен для каждого db для установки расширения в этой БД. Вы должны сделать в подсказке psql:
psql =# \c db_1
CREATE EXTENSION citext;
psql =# \c db_2
CREATE EXTENSION citext;
Надеюсь, это поможет другим. Спасибо.
Ответ 2
@NullException верна, что расширение необходимо создать в каждой базе данных. Если вы хотите автоматически создать добавочный номер, вы можете создать его в базе данных template1
, которая (по крайней мере, по умолчанию) является базой данных, используемой в качестве модели для "создания базы данных", поэтому с соответствующими разрешениями в psql:
\c template1
create extension citext;
Затем новые базы данных будут включать citext по умолчанию.
Ответ 3
Чтобы использовать citext
, используйте операцию CITextExtension
для настройки расширения citext
в PostgreSQL перед первой операцией миграции CreateModel
.
https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/fields/#citext-fields
from django.contrib.postgres.operations import CITextExtension
class Migration(migrations.Migration):
...
operations = [
CITextExtension(),
...
]
аналогично HStoreField
какhttps://docs.djangoproject.com/en/2.2/ref/contrib/postgres/operations/#create-postgresql-extensions
Ответ 4
Если вы используете Docker и хотите добавить это расширение в свою базу данных,
Я сделал следующее,
# Dockerfile
FROM postgres:11.3
# Adds the CIText Extension to our database
COPY ./compose/production/postgres/initdb_citext.sh /docker-entrypoint-initdb.d/citext.sh
И мой initdb_citext.sh:
#!/bin/sh
# Adds the citext extension to database and test database
"${psql[@]}" <<- 'EOSQL'
CREATE EXTENSION IF NOT EXISTS citext;
\c template1
CREATE EXTENSION IF NOT EXISTS citext;
EOSQL
Это применимо к тестовым базам данных, которые также генерирует django.