我的公司做新的政策,因为我的公司将有一些国际标准的认证。该策略是,DBA不允许直接查询数据库,例如:
select * from some_table, update some_table, etc. 我们必须使用存储过程来执行查询。
关于我在这里的最后一个问题:Postgres pl/pgsql ERROR: column "column_name" does not exist
我想知道,我们是否必须为每个表或每个条件创建一个存储过程?有没有更有效地创建存储过程的方法?
谢谢你之前的回答..。
为我糟糕的英语道歉..。:D
发布于 2012-03-01 14:56:26
使用存储过程的一些原因是:
security definer),但是拒绝底层tables.做了什么。
否则,您可能会在执行的每个查询中创建一个存储过程。
我不知道为什么您认为这样的效率很低,或者与编写查询相比特别费时。如果您所做的只是将查询放在存储过程中,那么额外的工作应该是最小的。
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;正如您在前面的问题中所使用的那样,通过将列/表作为参数传递并使用EXECUTE (虽然这会增加执行函数的人需要了解函数的工作方式,所以我尽量避免它),从而使函数更具动态性。
如果“效率较低”来自于函数中包含的附加逻辑,那么与仅仅使用查询进行比较是不公平的,因为该函数正在进行额外的工作。
https://stackoverflow.com/questions/9513778
复制相似问题