【发布时间】:2013-04-05 13:28:33
【问题描述】:
我已经阅读了其他帖子,在搜索时,这个问题的答案。
我使用的是 PostgreSQL 9.1,并使用 CREATE EXTENSION citext 创建了扩展名 'citext',但是当我尝试创建任何类型为 'citext' 的列时,它会引发此错误
错误:类型“citext”不存在
我进行了研究,但没有找到任何具体的答案?知道为什么吗?
【问题讨论】:
标签: postgresql-9.1
我已经阅读了其他帖子,在搜索时,这个问题的答案。
我使用的是 PostgreSQL 9.1,并使用 CREATE EXTENSION citext 创建了扩展名 'citext',但是当我尝试创建任何类型为 'citext' 的列时,它会引发此错误
错误:类型“citext”不存在
我进行了研究,但没有找到任何具体的答案?知道为什么吗?
【问题讨论】:
标签: postgresql-9.1
如果您使用 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 生成的测试数据库。
【讨论】:
要使用citext,请在第一次CreateModel 迁移操作之前使用CITextExtension 操作在PostgreSQL 中设置citext 扩展。
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
【讨论】:
@NullException 是正确的,需要在每个数据库中创建扩展。如果您想自动创建扩展,您可以在template1 数据库中创建它(默认情况下,至少)是用作“创建数据库”模型的数据库,因此具有适当的权限,在 psql:
\c template1
create extension citext;
那么新的数据库默认会包含 citext。
【讨论】:
好的,想通了。我有几个数据库,必须为每个数据库运行 CREATE EXTENSION citext 才能在该数据库中安装扩展。您必须在 psql 提示符下执行:
psql =# \c db_1
CREATE EXTENSION citext;
psql =# \c db_2
CREATE EXTENSION citext;
希望它可以帮助其他人。谢谢。
【讨论】:
CREATE EXTENSION citext; 然后您可以在此数据库中创建带有 citext 列的表。