タグ付けされた質問 「set-returning-functions」


1
マルチステートメントTVFとインラインTVFパフォーマンス
Palindromeの質問に対する回答の一部を比較すると(回答を削除したため、1万人以上のユーザーのみ)、紛らわしい結果が得られています。 複数のステートメント、スキーマにバインドされたTVFを提案しました。これは、標準関数を実行するよりも高速だと思いました。また、以下に示すように、マルチステートメントTVFは「インライン化」されるという印象もありましたが、その点では間違っています。この質問は、TVFのこれら2つのスタイルのパフォーマンスの違いに関するものです。まず、コードを確認する必要があります。 次に、複数ステートメントの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
FROM句でSet Returning Function(SRF)の実行が遅くなるのはなぜですか?
これはデータベース内部の質問です。私はPostgreSQL 9.5を使用FROMしています。たとえば、これらのコマンドを実行するときのように、句の中でSet Returning Functions(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 ここで作成できる一般的なルールはありますか?たとえば、節の外で常に Set-Returning関数を実行する必要がありFROMますか?

1
SELECTリストのセットリターン関数(SRF)について
SELECTリストでSet Returning Function(SRF)を使用する場合とFROM句でSRFを使用する場合で、動作に違いがあるのはなぜですか? たとえば、2つの行を返す単純なSRFの場合: 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(); それぞれがレコードを含む2つの単一列の行を返します。 => gen_series ------------ (1,1) (2,2) (2 rows) 一方SELECT * FROM gen_series();、レコードが展開された2つの行を返します。 => column1 | column2 ---------+--------- 1 | 1 2 | 2 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.