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