W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
ALTER COLLATION — 更改一個(gè)排序規(guī)則的定義
ALTER COLLATION name
REFRESH VERSION
ALTER COLLATION name
RENAME TO new_name
ALTER COLLATION name
OWNER TO { new_owner
| CURRENT_USER | SESSION_USER }
ALTER COLLATION name
SET SCHEMA new_schema
ALTER COLLATION
更改一個(gè)排序規(guī)則的定義。
你必須擁有要對(duì)其使用ALTER COLLATION
的排序規(guī)則。要更改擁有者,你必須是新的擁有角色的直接或者間接成員,并且該角色必須在排序規(guī)則的模式上具有CREATE
特權(quán)(這些限制強(qiáng)制要求擁有者不能通過(guò)丟棄并重建該排序規(guī)則來(lái)做任何你不能做的事情。不過(guò),一個(gè)超級(jí)用戶可以更改任何排序規(guī)則的所有權(quán))。
name
一個(gè)現(xiàn)有排序規(guī)則的名稱(可以是模式限定的)。
new_name
排序規(guī)則的新名稱。
new_owner
排序規(guī)則的新?lián)碛姓摺?/p>
new_schema
排序規(guī)則的新模式。
REFRESH VERSION
更新排序規(guī)則的版本。 參閱下面的Notes。
使用ICU庫(kù)提供的排序規(guī)則時(shí),創(chuàng)建排序規(guī)則對(duì)象時(shí),系統(tǒng)目錄中會(huì)記錄排序規(guī)則的特定ICU版本。 使用排序規(guī)則時(shí),將根據(jù)記錄的版本檢查當(dāng)前版本,并在發(fā)生不匹配時(shí)發(fā)出警告,例如:
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.
排序規(guī)則定義的更改會(huì)導(dǎo)致索引損壞和其他問(wèn)題,因?yàn)閿?shù)據(jù)庫(kù)系統(tǒng)依賴于具有特定排序順序的存儲(chǔ)對(duì)象。 通常,應(yīng)該避免這種情況,但它可以在合法的情況下發(fā)生,例如使用pg_upgrade
升級(jí)到與更新版本的ICU鏈接的服務(wù)器二進(jìn)制文件。發(fā)生這種情況時(shí), 應(yīng)該重建所有依賴于該排序規(guī)則的對(duì)象,例如,使用REINDEX
。 完成后,使用命令ALTER COLLATION ... REFRESH VERSION
可以刷新排序規(guī)則版本。
這將更新系統(tǒng)目錄以記錄當(dāng)前的排序規(guī)則版本,并會(huì)使警告消失。請(qǐng)注意, 這實(shí)際上并不檢查是否所有受影響的對(duì)象都已正確重建。
使用 libc
提供的排序規(guī)則,并且 PostgreSQL 是使用GNU C庫(kù)構(gòu)建的,則將C庫(kù)的版本用作排序規(guī)則版本。由于排序規(guī)則定義通常僅隨GNU C庫(kù)發(fā)行版而更改, 因此可以提供一些防止損壞的防御措施,但它并不是完全可靠的。
當(dāng)前,沒(méi)有針對(duì)數(shù)據(jù)庫(kù)默認(rèn)排序規(guī)則的版本跟蹤。
以下查詢可用于識(shí)別當(dāng)前數(shù)據(jù)庫(kù)中需要刷新的所有排序規(guī)則以及依賴它們的對(duì)象:
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;
要把排序規(guī)則de_DE
重命名為german
:
ALTER COLLATION "de_DE" RENAME TO german;
要把排序規(guī)則en_US
的擁有者改成joe
:
ALTER COLLATION "en_US" OWNER TO joe;
在 SQL 標(biāo)準(zhǔn)中沒(méi)有ALTER COLLATION
語(yǔ)句。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: