小编Ale*_*nch的帖子

PRIMARY KEY 实际上意味着什么?我的表是否需要一个?

我有一个 PostgreSQL 9.3 数据库,其中有一个用户表,该表以保留大小写的格式存储用户名。所有查询都不区分大小写,因此我应该有一个支持它的索引。此外,无论大小写,用户名都必须是唯一的。

这就是我想出的:

forum=> \d users
                      Table "public.users"
   Column   |           Type           |       Modifiers
------------+--------------------------+------------------------
 name       | character varying(24)    | not null
Indexes:
    "users_lower_idx" UNIQUE, btree (lower(name::text))
Run Code Online (Sandbox Code Playgroud)

用标准 SQL 语法表示:

CREATE TABLE users (
    name varchar(24) NOT NULL
);
CREATE UNIQUE INDEX "users_lower_idx" ON users (lower(name));
Run Code Online (Sandbox Code Playgroud)

通过这个模式,我已经满足了所有的约束,尽管没有主键。SQL 标准不支持功能主键,因此我无法提升索引:

forum=> ALTER TABLE users ADD PRIMARY KEY USING INDEX users_lower_idx;
ERROR:  index "users_lower_idx" contains expressions
LINE 1: ALTER TABLE users ADD PRIMARY KEY USING INDEX users_lower_id...
                              ^
DETAIL:  Cannot create a …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql database-schema postgresql-9.3

3
推荐指数
1
解决办法
463
查看次数