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

问题描述 投票:-2回答:1

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

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

我正在运行PostgreSQL 9.2

postgresql
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.