SQL COMMAND · 类型与运算符
ALTER COLLATION
更改排序规则的定义
change the definition of a collation
ALTER类型与运算符引入 9.1现存至 20 devel3 次语法变更
- 动词
ALTER- 对象
COLLATION- 分组
- 类型与运算符
- 引入版本
- 9.1
- 状态
- 现存
- 语法变更次数
- 3
- 手册小节数
- 6
版本轨迹
相对 PostgreSQL 17 无变化。
语法铁道图 PostgreSQL 18
沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。
ALTER COLLATION · 语法 2
ALTER COLLATION · 语法 3
ALTER COLLATION · 语法 4
语法概要
ALTER COLLATION name REFRESH VERSION ALTER COLLATION name RENAME TO new_name ALTER COLLATION name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER COLLATION name SET SCHEMA new_schema
描述
ALTER COLLATION 更改排序规则的定义。
要使用 ALTER COLLATION,你必须拥有该排序规则。要更改拥有者,你必须能够对新的拥有角色执行 SET ROLE,并且该角色必须在该排序规则所在模式上具有 CREATE 权限。(这些限制确保更改拥有者不会做出任何你无法通过删除并重新创建该排序规则来完成的事情。不过,超级用户无论如何都可以更改任何排序规则的所有权。)
参数
name一个现有排序规则的名称(可以是模式限定的)。
new_name排序规则的新名称。
new_owner排序规则的新拥有者。
new_schema排序规则的新模式。
REFRESH VERSION刷新排序规则版本。参阅下面的注解。
注解
创建排序规则对象时,会在系统目录中记录由提供程序确定的排序规则版本。使用该排序规则时,会将当前版本与记录的版本进行比较;如果二者不匹配,就会发出警告,例如:
WARNING: collation "xx-x-icu" has version mismatch DETAIL: The collation in the database was created using version 1.2.3.4, but the operating system provides version 2.3.4.5. HINT: Rebuild all objects affected by this collation and run ALTER COLLATION pg_catalog."xx-x-icu" REFRESH VERSION, or build PostgreSQL with the right library version.
排序规则定义的变化可能导致索引损坏及其他问题,因为数据库系统依赖已存储对象具有特定的排序顺序。一般来说应避免这种情况,但在某些合理情形下仍可能发生,例如将操作系统升级到新的主版本,或者使用
pg_upgrade 升级到链接了较新 ICU 版本的服务器二进制文件时。出现这种情况时,应重建所有依赖该排序规则的对象,例如使用
REINDEX。完成后,可以使用命令
ALTER COLLATION ... REFRESH VERSION 刷新排序规则版本。这样会更新系统目录,使其记录当前的排序规则版本,并让该警告消失。请注意,这实际上并不会检查所有受影响对象是否都已被正确重建。
当使用 libc 提供的排序规则时,在使用 GNU C 库(大多数 Linux 系统)、FreeBSD 和 Windows 的系统上会记录版本信息。当使用 ICU 提供的排序规则时,版本信息由 ICU 库提供,并且在所有平台上都可用。
注意
当使用 GNU C 库提供的排序规则时,C 库版本会被用作排序规则版本的代理。许多 Linux 发行版只有在升级 C 库时才会更改排序规则定义,但这种方法并不完美,因为维护人员也可以自由地将较新的排序规则定义回移植到较旧的 C 库版本中。
在 Windows 上使用排序规则时,版本信息仅适用于用 BCP 47 语言标签定义的排序规则,例如 en-US。
对于数据库默认排序规则,有一个对应的命令
ALTER DATABASE ... REFRESH COLLATION VERSION。
以下查询可用于识别当前数据库中所有需要刷新的排序规则,以及依赖它们的对象:
SELECT pg_describe_object(refclassid, refobjid, refobjsubid) AS "Collation",
pg_describe_object(classid, objid, objsubid) AS "Object"
FROM pg_depend d JOIN pg_collation c
ON refclassid = 'pg_collation'::regclass AND refobjid = c.oid
WHERE c.collversion <> pg_collation_actual_version(c.oid)
ORDER BY 1, 2;
示例
要将排序规则 de_DE 重命名为 german:
ALTER COLLATION "de_DE" RENAME TO german;
要将排序规则 en_US 的拥有者改为 joe:
ALTER COLLATION "en_US" OWNER TO joe;
兼容性
SQL 标准中没有 ALTER COLLATION 语句。
另见
语法演化
相邻大版本之间的差异,新的在前。版本号链接到对应快照。
PostgreSQL 16← 15正文更新
正文更新PostgreSQL 15← 14正文更新
正文更新PostgreSQL 14← 13语法变化
+ ALTER COLLATION name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }正文更新PostgreSQL 13← 12正文更新
正文更新PostgreSQL 10← 9.6语法变化
+ ALTER COLLATION name REFRESH VERSION正文更新PostgreSQL 9.5← 9.4语法变化
+ ALTER COLLATION name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }PostgreSQL 9.1← 9.0新增此命令
同组命令
| 命令 | 动词 | 对象 | 版本变动 | 最近变更 |
|---|---|---|---|---|
CREATE CAST | CREATE | CAST | 104 次 | |
| 定义一种新的类型转换 | 现存 | |||
DROP CAST | DROP | CAST | 9.02 次 | |
| 移除一个类型转换 | 现存 | |||
CREATE COLLATION | CREATE | COLLATION | 163 次 | |
| 定义一种新排序规则 | 现存 | |||
ALTER COLLATION | ALTER | COLLATION | 143 次 | |
| 更改排序规则的定义 | 现存 | |||
DROP COLLATION | DROP | COLLATION | — | |
| 删除一个排序规则 | 现存 | |||
CREATE CONVERSION | CREATE | CONVERSION | 9.02 次 | |
| 定义一个新的编码转换 | 现存 | |||
ALTER CONVERSION | ALTER | CONVERSION | 145 次 | |
| 更改一个转换的定义 | 现存 | |||
DROP CONVERSION | DROP | CONVERSION | 8.22 次 | |
| 移除一个转换 | 现存 | |||
CREATE DOMAIN | CREATE | DOMAIN | 174 次 | |
| 定义一个新域 | 现存 | |||
ALTER DOMAIN | ALTER | DOMAIN | 145 次 | |
| 更改一个域的定义 | 现存 | |||
DROP DOMAIN | DROP | DOMAIN | 8.22 次 | |
| 移除一个域 | 现存 | |||
CREATE OPERATOR | CREATE | OPERATOR | 198 次 | |
| 定义一个新的操作符 | 现存 | |||
ALTER OPERATOR | ALTER | OPERATOR | 176 次 | |
| 更改一个操作符的定义 | 现存 | |||
DROP OPERATOR | DROP | OPERATOR | 148 次 | |
| 移除一个操作符 | 现存 | |||
CREATE OPERATOR CLASS | CREATE | OPERATOR CLASS | 9.15 次 | |
| 定义一个新的操作符类 | 现存 | |||
ALTER OPERATOR CLASS | ALTER | OPERATOR CLASS | 145 次 | |
| 更改一个操作符类的定义 | 现存 | |||
DROP OPERATOR CLASS | DROP | OPERATOR CLASS | 8.22 次 | |
| 移除一个操作符类 | 现存 | |||
CREATE OPERATOR FAMILY | CREATE | OPERATOR FAMILY | — | |
| 定义一个新的操作符族 | 现存 | |||
ALTER OPERATOR FAMILY | ALTER | OPERATOR FAMILY | 146 次 | |
| 更改一个操作符族的定义 | 现存 | |||
DROP OPERATOR FAMILY | DROP | OPERATOR FAMILY | — | |
| 移除一个操作符族 | 现存 | |||
CREATE TYPE | CREATE | TYPE | 1413 次 | |
| 定义一种新数据类型 | 现存 | |||
ALTER TYPE | ALTER | TYPE | 148 次 | |
| 更改类型的定义 | 现存 | |||
DROP TYPE | DROP | TYPE | 8.24 次 | |
| 移除一个数据类型 | 现存 | |||