Postgresql:错误:类型“citext”不存在

时间:2013-04-12 21:32:54

标签: postgresql-9.1

在搜索时,我已阅读其他帖子,回答了这个问题。

我正在使用PostgreSQL 9.1,并使用CREATE EXTENSION citext创建了扩展名'citext',但是当我尝试创建任何类型为'citext'的列时,它会抛出此错误

  

错误:类型“citext”不存在

我研究过但没有找到具体的答案?知道为什么吗?

4 个答案:

答案 0 :(得分:69)

好的想通了。我有几个数据库,并且必须为每个数据库运行CREATE EXTENSION citext以在该数据库中安装扩展。您必须在psql提示符上执行:

psql =# \c db_1
CREATE EXTENSION citext;

psql =# \c db_2
CREATE EXTENSION citext;

希望它能帮助别人。谢谢。

答案 1 :(得分:15)

@NullException是正确的,需要在每个数据库中创建扩展。如果要自动创建扩展,可以在template1数据库中创建它(默认情况下,至少)是用作"创建数据库"的模型的数据库,所以适当的权限,在psql中:

\c template1
create extension citext;

然后默认情况下新数据库将包含citext。

答案 2 :(得分:1)

要使用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

答案 3 :(得分:0)

如果您使用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生成的测试数据库。