Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 为什么安全定义使我的函数在Postgres中变慢?_Performance_Postgresql_Security - Fatal编程技术网

Performance 为什么安全定义使我的函数在Postgres中变慢?

Performance 为什么安全定义使我的函数在Postgres中变慢?,performance,postgresql,security,Performance,Postgresql,Security,经过大量的实验,我把它缩小到一个场景,在这个场景中,没有安全定义器的同一个函数在几毫秒内运行,并且运行了大约半个小时 这是一个顶级函数,它调用其他函数并将结果与几个表连接在一起,因此有很多事情要做。 所有较低的函数都是在没有安全定义的情况下定义的 安全定义人具体做什么?安全定义函数的性能是否以任何方式取决于它使用的函数/表返回的行数或列数 我们从函数和表中获取了大量数据——我们注意到,减少返回的列数会使查询更快。是否安全定义者会多次检查某些权限,而对于大型数据集,它的影响更大?安全定义者只会将执

经过大量的实验,我把它缩小到一个场景,在这个场景中,没有安全定义器的同一个函数在几毫秒内运行,并且运行了大约半个小时

这是一个顶级函数,它调用其他函数并将结果与几个表连接在一起,因此有很多事情要做。 所有较低的函数都是在没有安全定义的情况下定义的

安全定义人具体做什么?安全定义函数的性能是否以任何方式取决于它使用的函数/表返回的行数或列数


我们从函数和表中获取了大量数据——我们注意到,减少返回的列数会使查询更快。是否安全定义者会多次检查某些权限,而对于大型数据集,它的影响更大?

安全定义者只会将执行查询的用户设置为函数的所有者。这类似于为某个用户设置会话授权。也许可以尝试与该用户执行单独的查询,看看什么需要这么长时间。您也可能在不同的模式中使用相同的函数/表,并且根据用户执行它们的方式使用不同的版本。@ŁukaszKamiński感谢您的响应!所以这相当于在查询之前只运行一个命令?它从不做其他事情?是的,它只是在改变角色。我想更正确的等价物应该是
设置角色
,因为安全定义者不会更改
会话用户
@ukaszKamiński再次感谢!这是一个更大的谜团。我确信它总是命中相同的函数和表-我作为测试的所有者用户运行它-只需更改安全定义器选项。调查仍在继续。。。