官术网_书友最值得收藏!

Custom sort orders

The last example in this chapter, is about using functions for different ways of sorting.

Say we are given a task to sort words by their vowels only, and in addition to this, to make the last vowel the most significant one when sorting. While this task may seem really complicated at first, it can be easily solved with functions:

CREATE OR REPLACE FUNCTION reversed_vowels(word text) 
    RETURNS text AS $$
  vowels = [c for c in word.lower() if c in 'aeiou']
  vowels.reverse()
  return ''.join(vowels)
$$ LANGUAGE plpythonu IMMUTABLE;

postgres=# select word,reversed_vowels(word) from words order by reversed_vowels(word);
    word     | reversed_vowels
-------------+-----------------
 Abracadabra | aaaaa
 Great       | ae
 Barter      | ea
 Revolver    | eoe
(4 rows)

Note

Before performing this code, please make sure you have Python 2.x installed. We will discuss PL/Python in much detail in the later chapters of this book.

The best part is that you can use your new function in an index definition:

postgres=# CREATE INDEX reversed_vowels_index ON words (reversed_vowels(word));
CREATE INDEX

The system will automatically use this index whenever the reversed_vowels(word) function is used in the WHERE or ORDER BY clause.

主站蜘蛛池模板: 靖宇县| 宁陵县| 潮安县| 清涧县| 荆州市| 东乌珠穆沁旗| 海南省| 扶沟县| 莱阳市| 乌兰浩特市| 左贡县| 临邑县| 策勒县| 上饶市| 保定市| 阳城县| 行唐县| 温宿县| 醴陵市| 星子县| 西吉县| 延吉市| 盐亭县| 沈阳市| 木兰县| 武川县| 伊吾县| 兴山县| 百色市| 马龙县| 盖州市| 连江县| 金华市| 开化县| 安庆市| 万载县| 新野县| 逊克县| 神池县| 庄浪县| 叙永县|