Postgres“编码“UTF8”的排序规则“NOCASE”不存在”

问题描述 投票:0回答:1

我正在尝试在新系统上设置新的数据库,但出现此错误:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedObject) collation "NOCASE" for encoding "UTF8" does not exist
LINE 4:  email VARCHAR(120) COLLATE "NOCASE" NOT NULL, 
                            ^

[SQL: 
CREATE TABLE users (
    id SERIAL NOT NULL, 
    email VARCHAR(120) COLLATE "NOCASE" NOT NULL,
    password VARCHAR(128) NOT NULL
)
]

我没有更改任何内容,但这适用于两台不同的计算机,其中一台运行 Postgresql 10。我使用 SqlAlchemy 升级运行此查询只是为了提供信息。

我用这个创建了数据库:

CREATE DATABASE db
    WITH 
    OWNER = postgres
    ENCODING = 'UTF8'
    LC_COLLATE = 'tr_TR.utf8'
    LC_CTYPE = 'tr_TR.utf8'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1;
postgresql sqlalchemy sqlalchemy-migrate
1个回答
0
投票

您可以使用“CITEXT”代替“NOCASE”

因此,在您的情况下,使用“CITEXT”代替“NOCASE_UTF8”,并在此之前添加一行 - CREATE EXTENSION IF NOT EXISTS citext;

与 Postgres 中一样,您通常会使用不同的排序规则来实现不区分大小写的比较。

Postgres 提供了 citext 数据类型用于不区分大小写的文本比较,您可以直接将其用于您的列。以下是如何使用 citext 创建表格

© www.soinside.com 2019 - 2024. All rights reserved.