Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jLkN3-0006Uh-Lw for pgsql-performance@arkaria.postgresql.org; Tue, 07 Apr 2020 09:18:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jLkN2-00066G-Ar for pgsql-performance@arkaria.postgresql.org; Tue, 07 Apr 2020 09:18:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jLkN2-000668-1Q for pgsql-performance@lists.postgresql.org; Tue, 07 Apr 2020 09:18:12 +0000 Received: from mout.gmx.net ([212.227.15.18]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1jLkMy-0001vW-7A for pgsql-performance@lists.postgresql.org; Tue, 07 Apr 2020 09:18:10 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1586251084; bh=R07E7NYJiXALuWEpAvn7gxTvW4V9n+xFDLoqcK49ZUI=; h=X-UI-Sender-Class:Subject:To:References:From:Date:In-Reply-To; b=SLBVxM7X8NNSN1jjjQ2nBJtex8LHjdmccHuYwKUGgH0pdZSexNY0ZmHGcV3S6hfbY iokf4NFOrnURmO6uTHiLLyvayt5WqLO+MbUsy0OtfLIumkM+XsW9KzHSgxxQBfV3wo HNDJFBuTaacbV8UpBYm2ojSWaM5tSMk2jSAY+85c= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.178.25] ([188.174.165.126]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N6bk4-1jEiyw0Zxe-01872q for ; Tue, 07 Apr 2020 11:18:04 +0200 Subject: Re: Postgres not using index on views To: pgsql-performance@lists.postgresql.org References: <20200407045929.GJ2228@telsasoft.com> <26256.1586236149@sss.pgh.pa.us> From: Thomas Kellerer Message-ID: Date: Tue, 7 Apr 2020 11:18:04 +0200 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090812 Thunderbird/2.0.0.23 Mnenhy/0.7.6.666 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: de-DE Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:KdNqDIJqfFv0hHoRC0q0GgCmUV4gVyZW4KKl1sJpKZMYROypy6j xvZ1yrLLa4af/sI1ZLscF/ggx9ufg87li1KMr5eAhV2SVo0z4FIImsvsDtnp7x77JByDfAV j7DaNrUhhqCp912icY8hzcyCTQxgKQ1AyAKv8u4goB6lP+DAd7n4q4ne7HJf8vJT9BhmWRo X+RT9c2nRScjcY9vTQ9AA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:C/hvStht910=:IvflTENEHLtQEAGFb8bpk/ 0f5A6puAnRRJwO00LmRm/dfq1LXa3Tpr5BOnRSyOhFX6jj4ETrlz6CTj1X59eFce7flKtPfI9 cNGhct5aJPj0587p1P2OL2bm6OohhMecqUjI2/uoR+fvK9okg5pBwJgv7i7IonCQSM/0sBp3s crx+oBgJUDsDe39USOoEBMAfngLbEDBaWmbi5Bdf4Vq+vCO0URSSCDrFqgmARM7Z1C9ONbx4f AKd06EFFJ8kjwamPI6sKEEGQLLIsE1ukVHskcI1XNYQhL5ZeI9ahlkC+d8RKixv+h9Erxfy5E aJa7gEw4H04sj8tx0sQmaKijyaIYTR82qhvpuSJTcealOv2qTlZp2Wfq2nE2gWR5JQz5JX6zF 92UZU4nguPA1br7ui3oQ1xTKiaUxfu0Ym2ib3lOmnlW4Dn2lnI36QLe4K5x5PUL8EzcUkc6pl j9Lwa2hG2oapmjZqj12CtaPCgknZjAgCGD5h6QJCC+EBcFlCO1CLbalCwc77kNGwaMKQqSOSB J5jbhQorNakJajcpCLaWCiKz8B0qXUN3L0dkBSrXhSS5keDObI+OGEg8iIUGWKnzstVoddRWm icxA+tDT89E+UaIhpLRhfFw38bDbJ1NHA1jK/vBPRX/lrVwDoUjYagcXtsWIgkhirvOH7qzNq LZWAfgEBi0W4z4CLWTzFIwsRmyYfZaa3wS55tRKebgD17kGSTdh6dXCkm1EFFxqCynlI1lEMc RsBbTRf1qzZl5IhwE14JNvmXk/BumcWWhartYoDqeYOsTDH6HjKjlOmxNEfrBqCXMgfksA5nk vyx0PYAjRVjM1k2nMeoUdwQTQTJa5KksL/iMR3tOFJ1qmgua5juxN9hnW4tl6K9y+mV/d8BDw +aTgMh5DI4ntyV8+s7vJCdOamx9t4L6NvZt9EFWw3SmVwcbXVrt/6+qG3P8XjizwOpgODBs+Z Iy2O1LJySy1BtjVgodVeezmrjMHb0JU9N2HFTUnX1Nv0R4co1+ErhbZ9lHZn9klGmIcSwT4Zz jwmefUI57O+srwKE/djrvKYvCi5oFeaQEh9KFN1QdJ52n8Ou1/v3KWLbmWJVV3eoNmE8/gNg+ n9F99Xr9JrlKCXBKCKJH7zWgaVDni64iB4mWZTQus9U7whe1Px/Y2qcrvOpJV9G9kkzVJIPQH fis0zE1Y3+chTzchs2b0xR2oOmN2F3suqztAWSEjQp/D7k1hQw/nhNSdXPCyEhLNm/WsO3HUu SA7sbOpa2tpjAm4Gy List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk Rick Vincent schrieb am 07.04.2020 um 11:08: > The function is defined as below, so no use of VOLATILE. If you don't specify anything, the default is VOLATILE. So your function *is* volatile. =C2=A0 > CREATE OR REPLACE FUNCTION extractValueJS (sVar text, nfm INTEGER, nvm I= NTEGER) > RETURNS VARCHAR as $$ > declare > sRet text :=3D ''; > nSize int :=3D 0; > retVal int :=3D 0; > cVar text[] :=3D regexp_split_to_array(sVar,''); > idx int :=3D 1; > nStart int :=3D 0; > nEnd int :=3D 0; > begin > etc... > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return sRet; > end; > $$ LANGUAGE plpgsql; You haven't shown us your actual code, but if you can turn that into a "la= nguage sql" function (defined as immutable, or at least stable), I would e= xpect it to be way more efficient. Thomas