标签: citext

你在哪里可以找到 ubuntu 14.04 上 postgres 9.3 中的 citext 模块?

所以我正在尝试使用 citext,但它似乎是来自 ubuntu 14.04 postgres 安装的 MIA。你在哪里可以找到这个名为 citext for postgresql 9.3 的神秘野兽?

project_test=> CREATE TABLE "customers_addresstype" (
project_test(>     "id" serial NOT NULL PRIMARY KEY,
project_test(>     "customer_id" integer NOT NULL REFERENCES "customers_customer" ("id") DEFERRABLE INITIALLY DEFERRED,
project_test(>     "display" citext NOT NULL,
project_test(>     UNIQUE ("customer_id", "display")
project_test(> )
project_test-> ;
ERROR:  type "citext" does not exist
LINE 4:     "display" citext NOT NULL,
                      ^
project_test=> CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA ext;
ERROR:  could not open extension control file "/usr/share/postgresql/9.3/extension/citext.control": No …
Run Code Online (Sandbox Code Playgroud)

postgresql ubuntu postgresql-9.3 citext

7
推荐指数
1
解决办法
6046
查看次数

我如何解决 Postgresql 错误,“没有为可排序类型 citext 的列“foo”派生排序规则”?

就在最近,我从 Postgresql 8.4.11 升级到 9.1.3。我在这个过程中使用了 pg_dump。现在我收到一个错误:

错误:没有为可排序类型 citext 的列“vin”派生排序规则
提示:使用 COLLATE 子句显式设置排序规则。

这是我之前遇到问题的延续。发行说明中建议的修复似乎没有捕获自定义域。似乎8.4 中的CREATE DOMAIN语句甚至不支持该COLLATE子句。

这就是我创建vin类型的方式,

CREATE DOMAIN inventory.valid_vin AS citext
  CHECK ( inventory.valid_vin( VALUE ) );
Run Code Online (Sandbox Code Playgroud)

postgresql collation postgresql-9.1 citext

5
推荐指数
1
解决办法
1046
查看次数

我可以将 CITEXT 列更改为 VARCHAR 而不会遇到任何意外困难吗?

我在应用程序中的一个特别大的表上过度使用了 CITEXT 列。我想支持其中一些,因为如何触发所需索引的查找令人困惑。

我的问题是,我可以在不遇到任何重大困难的情况下做到这一点吗?如果我更改此设置,我是否需要重建这些字段上的任何索引?

朝这个方向发展会带来空间收益吗?

这些列不需要不区分大小写的查询。

我对该表进行了基于 2 列的计数,这些计数需要一个多小时。该表有 60 列。

我正在使用 Postgres 10.6。

我主要感兴趣的是,如果索引包含已从 CITEXT 更改为 VARCHAR 的列,是否需要重建索引。

postgresql postgresql-10 citext

5
推荐指数
1
解决办法
4930
查看次数

为什么 CITEXT 和 TEXT 之间的比较失败?

正如预期的那样,当进行这样的相等测试时,比较成功:

CREATE TABLE citext_test (
    value citext PRIMARY KEY
);

INSERT INTO citext_test VALUES ('one');
INSERT INTO citext_test VALUES ('two');

SELECT * FROM citext_test WHERE value = 'One';
Run Code Online (Sandbox Code Playgroud)

但是,如果要比较的值是“text”类型,则比较失败:

SELECT * FROM citext_test WHERE value = 'One'::text;
Run Code Online (Sandbox Code Playgroud)

使用 EXPLAIN,第一个示例中的原始值似乎被转换为 CITEXT:

Index Only Scan using citext_test_pkey on citext_test  (cost=0.15..8.17 rows=1 width=32)
  Index Cond: (value = 'One'::citext)
Run Code Online (Sandbox Code Playgroud)

我想与连接表中的 TEXT 列进行比较。我真的需要将这些列转换为 CITEXT 才能进行比较吗?我认为使用 CITEXT 的部分优点是不必记住添加这样的东西(例如 LOWER(some_value));

postgresql citext

4
推荐指数
1
解决办法
4991
查看次数