Подтвердить что ты не робот

Postgresql: ОШИБКА: тип "citext" не существует

Я прочитал другие посты, при поиске, ответ на этот вопрос.

Я использую PostgreSQL 9.1 и создал расширение "citext" с помощью CREATE EXTENSION citext, но когда я пытаюсь создать столбцы типа "citext", он выдает эту ошибку

ОШИБКА: тип "citext" не существует

Я исследовал, но не нашел никаких конкретных ответов? Есть идеи почему?

4b9b3361

Ответ 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.