PL/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은 그렇습니다.
따라서 파이썬으로 작성된 다음 함수를 순수 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을 보았습니다. "보안 인보커"라는 줄이 있습니다. 그 사람이 의미 /하는 것이 무엇인지 알고 있습니까?
두 번째 쿼리는 Mb가 아니며 Gb가 맞습니다. 맞습니까? –