我正在查看已执行的PostgreSQL语句的日志,并偶然发现一个我无法完全理解的语句。有人可以解释PostgreSQL在执行此类查询时实际执行的操作吗?什么是siq_query?
select *
from siq_query('', '21:1', '', '("my search string")', False, True, 'http://siqfindex:8080/storediq/findex')
我正在运行PostgreSQL 9.2
siq_query(...)
是一个服务器端函数,它接受7个输入参数(或更多)。它不是我所知道的任何标准Postgres发行版的一部分(当然不是主流Postgres 9.2),所以它必须是用户定义的,或者是你安装的某个扩展的一部分。它执行函数中定义的任何操作。这基本上可以包括Postgres用户可以做的任何事情。除非它是SECURITY DEFINER
function,否则它可以执行函数所有者允许的任何操作。
它的调用方式(SELECT * FROM
)只有在返回多行和/或列时才有意义,很可能是一组行,使其成为"set-returning function",几乎可以像SQL查询中的表一样使用。
由于函数名称不是模式限定的,因此它必须驻留在可见模式中。看到:
简而言之,您需要查看函数定义以了解它的确切功能。您可以使用psql(\df+ siq_query
),pgAdmin(浏览并选择它以在SQL窗格中查看其定义)或任何其他客户端工具来查找它。或直接查询系统目录pg_proc
:
SELECT * FROM pg_proc WHERE proname = 'siq_query';
要特别注意prosrc
列,它包含某些语言的函数体,如plpgsql。
可能有该名称的多个变体,Postgres允许function overloading。