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 1nSESb-00021J-I6 for pgsql-hackers@arkaria.postgresql.org; Thu, 10 Mar 2022 08:47:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nSESa-0005pA-Cy for pgsql-hackers@arkaria.postgresql.org; Thu, 10 Mar 2022 08:47:48 +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 1nSESZ-0005p1-Th for pgsql-hackers@lists.postgresql.org; Thu, 10 Mar 2022 08:47:48 +0000 Received: from mail-vs1-xe2d.google.com ([2607:f8b0:4864:20::e2d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nSESV-0006ld-MH for pgsql-hackers@postgresql.org; Thu, 10 Mar 2022 08:47:46 +0000 Received: by mail-vs1-xe2d.google.com with SMTP id u82so5203623vsu.0 for ; Thu, 10 Mar 2022 00:47:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Ka1WXyYV9Vp8QvKJrKyGLYySRo5v56niM/TAnJYyIQE=; b=ILQoRDkXyClNXu2yB3oEraPj/xVLrJcEFkxDiiw3ew2Ve4IpO3UzHcTIOj25WZJuoE lsSSVLHKO6OhEuYgehQq4mN+wAMLrhYXffnK/zZghKpOUynGPhkqeZcs1JDj3DsRCbfQ qSIC0iq28RCqypyeCIP3bbl81Us2A1h0TWyz+iDzlQr7HOKG7Zfu4QQ3IqGBoFEew4js aymgrMn/hl2jGf3ZStpv0qUnLOBM4Dl4ETzI0Rg2UfKPxM+S/H4M+GqQxBQeWLbZ5WzI zcP3DEVtS5UFJEXXZ1MJ9yW6990HhzWJ44/B+FgmRKUjhi62gC2MXh9b9fBiHyrdeidh o46g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Ka1WXyYV9Vp8QvKJrKyGLYySRo5v56niM/TAnJYyIQE=; b=zf8l8w/KPzl6ZmVL+DBetFZ8sKlpIvHLP8DopGpnDDz0iMRj835AQARUbOoaetbVPP 7rhL+xS3RtKvwmfEtndsR7LPiSZbStGuOfnJbrNqMNkvAKwlA9VhLHy70V42hkkdDWD/ rjb7XcZoAS9ds0ssm8HJUhwtccjelOb4xBhcwz7xopLvPo/E9BESuowymepXnlLj2W/N ENKW3F3WsRaYIBjMq+R2XrJ9xKoLrFp4iaVgP3dunb7p0VWiS4gqJ9jjjfqORwVKrzEA 8yYlE2abpObBD8ZqzYE7kAMh1W/52hCrrAJ7JNZLN8TJCDXwObt88Pbz3HYihjZcFCEw xzZg== X-Gm-Message-State: AOAM532n+MZ9B27u7dzeCtGY1mVGmzugieO8qW5jFM3EK/43+E3wJ5YP eD2e5s+STa/DQK7r0oIz5GNWDioEaL1CbbZ6Kz0= X-Google-Smtp-Source: ABdhPJyXChETevKH5EQ3sI6A39znSxqFgghQ05gXGsEhDPXTvUJH4VP/+nyKVU8VU8okfpxeqq7YqDoLH7wgK4hldbw= X-Received: by 2002:a05:6102:b10:b0:320:b94:e402 with SMTP id b16-20020a0561020b1000b003200b94e402mr1827720vst.40.1646902062591; Thu, 10 Mar 2022 00:47:42 -0800 (PST) MIME-Version: 1.0 References: <224711f9-83b7-a307-b17f-4457ab73aa0a@sigaev.ru> In-Reply-To: From: Nikita Malakhov Date: Thu, 10 Mar 2022 11:47:32 +0300 Message-ID: Subject: Re: Pluggable toaster To: Teodor Sigaev Cc: Robert Haas , pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000006c1a0405d9d94468" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006c1a0405d9d94468 Content-Type: multipart/alternative; boundary="0000000000006c1a0205d9d94466" --0000000000006c1a0205d9d94466 Content-Type: text/plain; charset="UTF-8" Hi Hackers, In addition to original patch set for Pluggable Toaster, we have two more patches (actually, small, but important fixes), authored by Nikita Glukhov: 1) 0001-Fix-toast_tuple_externalize.patch This patch fixes freeing memory in case of new toasted value is the same as old one, this seems incorrect, and in this case the function just returns instead of freeing old value; 2) 0002-Fix-alignment-of-custom-TOAST-pointers.patch This patch adds data alignment for new varatt_custom data structure in building tuples, since varatt_custom must be aligned for custom toasters (in particular, this fix is very important to JSONb Toaster). These patches must be applied on top of the latter 4_bytea_appendable_toaster_v1.patch. Please consider them in reviewing Pluggable Toaster. Regards. On Wed, Feb 2, 2022 at 10:35 AM Teodor Sigaev wrote: > > I agree ... but I'm also worried about what happens when we have > > multiple table AMs. One can imagine a new table AM that is > > specifically optimized for TOAST which can be used with an existing > > heap table. One can imagine a new table AM for the main table that > > wants to use something different for TOAST. So, I don't think it's > > right to imagine that the choice of TOASTer depends solely on the > > column data type. I'm not really sure how this should work exactly ... > > but it needs careful thought. > > Right. that's why we propose a validate method (may be, it's a wrong > name, but I don't known better one) which accepts several arguments, one > of which is table AM oid. If that method returns false then toaster > isn't useful with current TAM, storage or/and compression kinds, etc. > > -- > Teodor Sigaev E-mail: teodor@sigaev.ru > WWW: http://www.sigaev.ru/ > > > -- Nikita Malakhov Postgres Professional https://postgrespro.ru/ --0000000000006c1a0205d9d94466 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

In addition to original patch set for Pluggable Toaster, we have two more= patches=C2=A0
(actually, small, but important fixes), authored b= y Nikita Glukhov:

1) 0001-Fix-toast_tuple_external= ize.patch
This patch fixes freeing memory in case of new toasted = value is the same as old one,=C2=A0
this seems incorrect, and in = this case the function just returns instead of freeing old value;

2) 0002-Fix-alignment-of-custom-TOAST-pointers.patch
<= div>This patch adds data alignment for new varatt_custom data structure in = building tuples,=C2=A0
since varatt_custom must be aligned for cu= stom toasters (in particular, this fix is very=C2=A0
important to= JSONb Toaster).

These patches must be applied on = top of the latter 4_bytea_appendable_toaster_v1.patch.
Please con= sider them in reviewing Pluggable Toaster.

Regards= .


On Wed, Feb 2, 2022 at 10:35 AM Teodor Sigaev <teodor@sigaev.ru> wrote:
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft:1px solid rgb(204,204,204);padding-left:1ex">> I agree ... but I'= ;m also worried about what happens when we have
> multiple table AMs. One can imagine a new table AM that is
> specifically optimized for TOAST which can be used with an existing > heap table. One can imagine a new table AM for the main table that
> wants to use something different for TOAST. So, I don't think it&#= 39;s
> right to imagine that the choice of TOASTer depends solely on the
> column data type. I'm not really sure how this should work exactly= ...
> but it needs careful thought.

Right. that's why we propose a validate method=C2=A0 (may be, it's = a wrong
name, but I don't known better one) which accepts several arguments, on= e
of which is table AM oid. If that method returns false then toaster
isn't useful with current TAM, storage or/and compression kinds, etc.
--
Teodor Sigaev=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 E-mail: teodor@sigaev.ru
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0WWW: http://w= ww.sigaev.ru/



--
N= ikita Malakhov
Postgres Profess= ional=C2=A0
--0000000000006c1a0205d9d94466-- --0000000000006c1a0405d9d94468 Content-Type: application/octet-stream; name="0001-Fix-toast_tuple_externalize.patch" Content-Disposition: attachment; filename="0001-Fix-toast_tuple_externalize.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l0kqwntt0 RnJvbSBjMTYxMTRiZjE3Y2VlNWI1NjQ5ZDNkZmE0NjJjNGE4YjU5NGZiMmYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdyZXNwcm8u cnU+CkRhdGU6IFR1ZSwgMjIgRmViIDIwMjIgMjA6NTI6NDUgKzAzMDAKU3ViamVjdDogW1BBVENI IDEvMl0gRml4IHRvYXN0X3R1cGxlX2V4dGVybmFsaXplKCkKCi0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL3RhYmxlL3RvYXN0X2hlbHBlci5jIHwgMyArKysKIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2Vy dGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdG9hc3RfaGVs cGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMKaW5kZXggYmZi ZTk0MWQ2YWMuLjExZDg3MDUzNWUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdG9hc3RfaGVscGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RvYXN0X2hl bHBlci5jCkBAIC0zNDUsNiArMzQ1LDkgQEAgdG9hc3RfdHVwbGVfZXh0ZXJuYWxpemUoVG9hc3RU dXBsZUNvbnRleHQgKnR0YywgaW50IGF0dHJpYnV0ZSwgaW50IG1heERhdGFMZW4sCiAJCQkJCQkJ CQkJIG1heERhdGFMZW4sIG9wdGlvbnMpCiAJCQkpOwogCisJaWYgKCp2YWx1ZSA9PSBvbGRfdmFs dWUpCisJCXJldHVybjsKKwogCWlmICgoYXR0ci0+dGFpX2NvbGZsYWdzICYgVE9BU1RDT0xfTkVF RFNfRlJFRSkgIT0gMCkKIAkJcGZyZWUoRGF0dW1HZXRQb2ludGVyKG9sZF92YWx1ZSkpOwogCWF0 dHItPnRhaV9jb2xmbGFncyB8PSBUT0FTVENPTF9ORUVEU19GUkVFOwotLSAKMi4yNS4xCgo= --0000000000006c1a0405d9d94468 Content-Type: application/octet-stream; name="0002-Fix-alignment-of-custom-TOAST-pointers.patch" Content-Disposition: attachment; filename="0002-Fix-alignment-of-custom-TOAST-pointers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l0kqwnu11 RnJvbSA2ZGI2NjMwOTQzYmUzOWVlZTMxY2IwNDExZTJhODQ5ZWM5N2JjNjZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdyZXNwcm8u cnU+CkRhdGU6IFdlZCwgMTIgSmFuIDIwMjIgMDE6MjM6MTggKzAzMDAKU3ViamVjdDogW1BBVENI IDIvMl0gRml4IGFsaWdubWVudCBvZiBjdXN0b20gVE9BU1QgcG9pbnRlcnMKCi0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2NvbW1vbi9oZWFwdHVwbGUuYyB8IDUgKysrKy0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy90dXBtYWNzLmggICAgICAgICAgfCAyICstCiAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0 aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv Y29tbW9uL2hlYXB0dXBsZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9oZWFwdHVwbGUu YwppbmRleCAwYjU2YjBmYTVhOS4uNDdjODA4ZDQ2MmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9jb21tb24vaGVhcHR1cGxlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1v bi9oZWFwdHVwbGUuYwpAQCAtMjQyLDcgKzI0MiwxMCBAQCBmaWxsX3ZhbChGb3JtX3BnX2F0dHJp YnV0ZSBhdHQsCiAJCQllbHNlCiAJCQl7CiAJCQkJKmluZm9tYXNrIHw9IEhFQVBfSEFTRVhURVJO QUw7Ci0JCQkJLyogbm8gYWxpZ25tZW50LCBzaW5jZSBpdCdzIHNob3J0IGJ5IGRlZmluaXRpb24g Ki8KKwkJCQlpZiAoVkFSQVRUX0lTX0NVU1RPTSh2YWwpKQorCQkJCQlkYXRhID0gKGNoYXIgKikg YXR0X2FsaWduX25vbWluYWwoZGF0YSwKKwkJCQkJCQkJCQkJCQkgIGF0dC0+YXR0YWxpZ24pOwor CQkJCS8qIGVsc2Ugbm8gYWxpZ25tZW50LCBzaW5jZSBpdCdzIHNob3J0IGJ5IGRlZmluaXRpb24g Ki8KIAkJCQlkYXRhX2xlbmd0aCA9IFZBUlNJWkVfRVhURVJOQUwodmFsKTsKIAkJCQltZW1jcHko ZGF0YSwgdmFsLCBkYXRhX2xlbmd0aCk7CiAJCQl9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvdHVwbWFjcy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1hY3MuaAppbmRleCA2NWFj MWVmM2ZjOC4uZGRiMTY0ZWYyYmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBt YWNzLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1hY3MuaApAQCAtMTA0LDcgKzEwNCw3 IEBACiAgKi8KICNkZWZpbmUgYXR0X2FsaWduX2RhdHVtKGN1cl9vZmZzZXQsIGF0dGFsaWduLCBh dHRsZW4sIGF0dGRhdHVtKSBcCiAoIFwKLQkoKGF0dGxlbikgPT0gLTEgJiYgVkFSQVRUX0lTX1NI T1JUKERhdHVtR2V0UG9pbnRlcihhdHRkYXR1bSkpKSA/IFwKKwkoKGF0dGxlbikgPT0gLTEgJiYg KCFWQVJBVFRfSVNfQ1VTVE9NKERhdHVtR2V0UG9pbnRlcihhdHRkYXR1bSkpICYmIFZBUkFUVF9J U19TSE9SVChEYXR1bUdldFBvaW50ZXIoYXR0ZGF0dW0pKSkpID8gXAogCSh1aW50cHRyX3QpIChj dXJfb2Zmc2V0KSA6IFwKIAlhdHRfYWxpZ25fbm9taW5hbChjdXJfb2Zmc2V0LCBhdHRhbGlnbikg XAogKQotLSAKMi4yNS4xCgo= --0000000000006c1a0405d9d94468--