这个select语句实际上做了什么?

时间:2017-12-21 16:36:43

标签: postgresql

我正在查看已执行的PostgreSQL语句的日志,并偶然发现一个我无法完全理解的语句。有人可以解释PostgreSQL在执行此类查询时实际执行的操作吗?什么是siq_query?

select * 
from siq_query('', '21:1', '', '("my search string")', False, True, 'http://siqfindex:8080/storediq/findex') 

我正在运行PostgreSQL 9.2

1 个答案:

答案 0 :(得分:1)

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