Dia*_*nto 5 postgresql stored-procedures
我的公司正在制定新政策,因为我的公司会获得一些国际标准的认证.该策略是,DBA不允许直接查询数据库,如:
select * from some_table, update some_table, etc.
Run Code Online (Sandbox Code Playgroud)
我们必须使用存储过程来执行查询.
关于我在这里的最后一个问题:Postgres pl/pgsql错误:列"column_name"不存在
我想知道,我们是否必须为每个表或每个条件创建一个存储过程?有没有办法更有效地创建存储过程?
谢谢你的回答..
抱歉我的英语不好..:D
使用存储过程的一些原因是:
security definer
)的权限,但拒绝对基础表的权限.您可能最终会为每个查询创建一个存储过程,否则您将执行该过程.
与仅编写查询相比,我不确定为什么你认为这样效率低,或者特别耗时.如果您所做的只是将查询放在存储过程中,那么额外的工作应该是最小的.
CREATE OR REPLACE FUNCTION aSchema.aProcedure (
IN var1 text,
IN var2 text,
OUT col1 text,
OUT col2 text
)
RETURNS setof record
LANGUAGE plpgsql
VOLATILE
CALLED ON NULL INPUT
SECURITY DEFINER
SET search_path = aSchema, pg_temp
AS $body$
BEGIN
RETURN QUERY /*the query you would have written anyway*/;
END;
$body$;
GRANT EXECUTE ON FUNCTION aSchema.aProcedure(text, text) TO public;
Run Code Online (Sandbox Code Playgroud)
正如您在上一个问题中所使用的那样,通过将列/表作为参数传递并使用EXECUTE,函数可以更加动态(虽然这会增加执行函数的人需要知道函数如何工作的程度,所以我尽量避免它).
如果"效率较低"来自函数中包含的其他逻辑,则仅使用查询的比较是不公平的,因为该函数正在执行其他工作.
归档时间: |
|
查看次数: |
3731 次 |
最近记录: |