在pgsql-http這個插件中,有一個非常好用的功能,就是urlencode函數,可以將字符串進行url編碼。如
# select urlencode('123中國');
urlencode
-----------------------
123%E4%B8%AD%E5%9B%BD
(1 row)
這個結果是正確的。但是我需要的是gbk字符集的urlencode結果。於是
# select urlencode(convert_to('123中中','gbk'));
ERROR: 42883: function urlencode(bytea) does not exist
LINE 1: select urlencode(convert_to('123中中','gbk'));
因爲參數不兼容,所以無法轉換。
於是,強制轉換
# select urlencode(convert_to('123中中','gbk')::text);
urlencode
--------------------
%5Cx313233d6d0d6d0
(1 row)
結果出來了,但是確是錯誤的結果。
---------------------------------------------------------------------------
解決辦法:
修改插件的http.sql文件.
增加一個重載函數。
CREATE OR REPLACE FUNCTION urlencode(string bytea)
RETURNS TEXT
AS 'MODULE_PATHNAME'
LANGUAGE 'c'
IMMUTABLE STRICT;
或者,直接在psql中執行:
CREATE OR REPLACE FUNCTION urlencode(string bytea)
RETURNS TEXT
AS '$libdir/http'
LANGUAGE 'c'
IMMUTABLE STRICT;
就可以了。
這時,再執行,結果就正確了。
# select urlencode(convert_to('123中中','gbk'));
urlencode
-----------------
123%D6%D0%D6%D0
(1 row)