我已经阅读了其他帖子,在搜索时,这个问题的答案。
我正在使用 PostgreSQL 9.1,并使用 'citext' 创建了扩展名CREATE EXTENSION citext
,但是当我尝试创建任何类型为 'citext' 的列时,它会引发此错误
错误:类型“citext”不存在
我研究了但没有找到任何具体的答案?知道为什么吗?
我已经阅读了其他帖子,在搜索时,这个问题的答案。
我正在使用 PostgreSQL 9.1,并使用 'citext' 创建了扩展名CREATE EXTENSION citext
,但是当我尝试创建任何类型为 'citext' 的列时,它会引发此错误
错误:类型“citext”不存在
我研究了但没有找到任何具体的答案?知道为什么吗?
好的,想通了。我有几个数据库,CREATE EXTENSION citext
必须为每个数据库运行才能在该数据库中安装扩展。您必须在 psql 提示符下执行:
psql =# \c db_1
CREATE EXTENSION citext;
psql =# \c db_2
CREATE EXTENSION citext;
希望它可以帮助别人。谢谢你。
@NullException 是正确的,需要在每个数据库中创建扩展。如果你想自动创建一个扩展,你可以在template1
数据库中创建它(默认情况下,至少)是用作“创建数据库”模型的数据库,因此在 psql 中具有适当的权限:
\c template1
create extension citext;
然后新数据库将默认包含 citext。
要使用,请在第一次迁移操作之前citext
使用该操作在 PostgreSQLCITextExtension
中设置扩展。citext
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(),
...
]
类似于https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/operations/#create-postgresql-extensionsHStoreField
_
如果您使用 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 生成的测试数据库。