Questions tagged «set-returning-functions»


1
多语句TVF与串联TVF性能
比较回文问题上的一些答案(仅限10k以上的用户,因为我删除了答案),结果令人困惑。 我提出了一个多语句,受模式约束的TVF,我认为它比运行标准功能要快。我也有一种印象,即多语句TVF将被“内联”,尽管在这一点上我是错的,如下所示。这个问题是关于这两种样式的TVF的性能差异。首先,您需要查看代码。 这是多语句TVF: IF OBJECT_ID('dbo.IsPalindrome') IS NOT NULL DROP FUNCTION dbo.IsPalindrome; GO CREATE FUNCTION dbo.IsPalindrome ( @Word NVARCHAR(500) ) RETURNS @t TABLE ( IsPalindrome BIT NOT NULL ) WITH SCHEMABINDING AS BEGIN DECLARE @IsPalindrome BIT; DECLARE @LeftChunk NVARCHAR(250); DECLARE @RightChunk NVARCHAR(250); DECLARE @StrLen INT; DECLARE @Pos INT; SET @RightChunk = …

1
错误:在无法接受集合的上下文中调用了set_valued函数。什么事啊
我在ubuntu 12.04上使用Postgresql 9.1。 克雷格的回答启发,我的问题类型SETOF或SETOF纪录的级联我以为我会使用顺利return query,setof record等一系列的发电机到这个PLPGSQL功能: create or replace function compute_all_pair_by_craig(id_obj bigint) returns setof record as $$ begin return query select o.id, generate_series(0,o.value) from m_obj as o; end; $$ language plpgsql; 在执行过程中,我得到了错误: ERROR: set_valued function called in context that cannot accept a set 怎么了 ?与Craig相反,我告诉函数返回setof record。 我可以实现与Craig完全一样的工作,即通过定义类型create type pair_id_value as …

2
数组integer []:如何获取表中所有不同的值并对其进行计数?
我对SQL(PostgreSQL)不太满意。这是我想做的: 我有一张桌子,字段: id SERIAL inet INET ports integer[] id | inet | ports ----+------------+------------ 2 | 1.2.2.1 | {80} 1 | 1.2.3.4 | {80,12} ... 我怎么能够 获取此表中所有使用的“端口”值:80、12 计算特定端口上有多少个Inet地址: 像这样: port | count --------+------------ 12 | 1 80 | 2 ... 如果有人在寻找它的Django版本: class Unnest(Func): function = 'UNNEST' Model.objects \ .annotate(port=Unnest('ports', distinct=True)) …

1
为什么Set Returning Function(SRF)在FROM子句中运行较慢?
这是数据库内部的问题。我使用的是PostgreSQL 9.5,我想知道为什么在FROM子句中设置返回函数(SRF)(也称为表值函数(TVF))运行速度较慢,例如当我执行这些命令时, CREATE TABLE foo AS SELECT * FROM generate_series(1,1e7); SELECT 10000000 Time: 5573.574 ms 它总是比 CREATE TABLE foo AS SELECT generate_series(1,1e7); SELECT 10000000 Time: 4622.567 ms 这里是否可以制定一条通用规则,以便我们应该始终在FROM子句之外运行Set-Returning Functions ?

1
了解SELECT列表中的集返回函数(SRF)
为什么在SELECT列表中使用Set Returning Function(SRF)与在FROM子句中使用SRF之间在行为上有区别? 例如,对于一个简单的SRF返回2行: CREATE OR REPLACE FUNCTION gen_series(out integer, out int) RETURNS SETOF record AS $$ SELECT 1,1 UNION SELECT 2,2; $$ LANGUAGE SQL; SELECT gen_series(); 返回两个单列行,每个行包含一条记录: => gen_series ------------ (1,1) (2,2) (2 rows) 而SELECT * FROM gen_series();返回记录扩展的两行: => column1 | column2 ---------+--------- 1 | 1 2 | 2 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.