我有一個用PL/Python編寫的函數。它是在Python運行的數據庫功能,這是因爲通過安裝一個程序語言的許可:如何將這個PostgreSQL函數從PL/Py轉換爲PL/SQL?
CREATE PROCEDURAL LANGUAGE 'plpythonu' HANDLER plpython_call_handler
(我發現了一個很不錯的技巧,允許非管理員用戶權限運行,通過使用一個唯一的名稱,雖然它已經沒有太多與我的問題,我敢肯定你會有些奇怪我是怎麼做這個,所以下面是答案)
CREATE TRUSTED PROCEDURAL LANGUAGE 'plpythonu2' HANDLER plpython_call_handler
GRANT USAGE ON LANGUAGE plpythonu2 TO admin;
我們手頭上的問題,我的「黑客「以上對我有用,但如果我想使用Amazon的RDS服務,我不能安裝語言,而PL/Python不可用。 SQL,但是,是。
因此,我需要幫助將用Python編寫的以下函數轉換爲純SQL。
CREATE OR REPLACE FUNCTION "public"."human_readable_bits" (
"b" bigint = 0
)
RETURNS varchar AS
$body$
import math
if b:
exponent = math.floor(math.log(b)/math.log(1024))
val = b/pow(1024, math.floor(exponent))
val = round(val*2)/2 -- This rounds to the nearest HALF (X.5) B, Kb, Mb, Gb, etc.
return "%.2f %s" % (val, ('B','Kb','Mb','Gb','Tb','Pb','Eb','Zb','Yb')[int(exponent)])
else:
return "0 Gb"
$body$
LANGUAGE 'plpythonu2'
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY INVOKER
COST 100;
此功能允許我執行的查詢,如:
=> SELECT human_readable_bits(3285824466906);
human_readable_bits
---------------------
3.00 Tb
(1 row)
OR
=> SELECT human_readable_bits(5920466906);
human_readable_bits
---------------------
5.50 Gb
(1 row)
此外,作爲一個側面說明/次要的問題,之後我創建的函數時,我看DDL,它裏面有一句話說「SECURITY INVOKER」,有人知道這意味着什麼嗎?
第二個查詢將是Mb不是Gb我是對的? –