Postgresql

使用帶有 utf-8 的 text_pattern_ops 的文本索引與帶有 C 的預設運算符類?

  • October 12, 2017
  1. 每個運算符類發生了什麼,為什麼在使用 utf-8 時必須使用 text_pattern_ops?
  2. 在 C 中使用預設運算符類時,如果將數據庫轉儲到另一個使用 utf-8 的 Postgres,文本列索引會發生什麼情況?這僅僅是創建新索引的問題text_pattern_ops嗎?
  3. 使用 C 的預設運算符類的性能是否比 text_pattern_ops 更好或更差?

我正在考慮將 RDSclient_encoding參數更改為,C以便不必在text_pattern_ops任何地方使用,但我想了解是否存在任何缺點(除了不支持表情符號和其他語言)或併發症。

相關文件:https ://www.postgresql.org/docs/current/static/indexes-opclass.html

這不是關於編碼,而是關於整理。

考慮一下:

select * from (values ('1,z'),('1,2j'),('12q'),('13 apples')) foo(x)
 order by x collate "en_US";

給出:

    x
-----------
1,2j
12q
13 apples
1,z

如果您使用該排序規則進行索引,您將如何有效地支持x like '1,%'查詢?並非所有以“1”開頭的事物在索引中都是相鄰的。這是 text_pattern_ops(或 C 排序規則)解決的問題。

您可以使用 UTF8 編碼但 C 排序規則創建數據庫。這意味著您不必將 text_pattern_ops 撒在所有索引上,並且您在文本列上建構的索引會更快(以及您所做的任何排序合併連接)。但是您仍然可以儲存非 ASCII 字元,儘管它們會很有趣。

此外,設置client_encoding不會有任何區別。重要的是伺服器的編碼和整理,而不是客戶端的。

引用自:https://dba.stackexchange.com/questions/188344