Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1izPpx-0002xT-DM for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Feb 2020 18:55:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1izPpv-0003M8-Pa for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Feb 2020 18:55:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1izPpv-0003M1-7R for pgsql-hackers@lists.postgresql.org; Wed, 05 Feb 2020 18:55:43 +0000 Received: from mail-pl1-x643.google.com ([2607:f8b0:4864:20::643]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1izPpn-0001fv-Jo for pgsql-hackers@postgresql.org; Wed, 05 Feb 2020 18:55:41 +0000 Received: by mail-pl1-x643.google.com with SMTP id b22so1236377pls.12 for ; Wed, 05 Feb 2020 10:55:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=KdpeIb1CCTynzbgXa0rPDfFL653dmjoCgOeL+i87wvE=; b=dBHS9R7jjYwF/KScFC3U9W/KhVsmzIMhVeqJFEMORY6fW1MUKXd72xSheUeganj81P gV3ERaQfvJ7lF5sEFaxMELeXrzslm8qnrnJ/459GYhoQSOE6GpkONa2tjzOBvLEO/mm2 ja+re/wXhMj/kha60Q9kv9r8Iv97VK+jGDHNOmfAAHsKv7qJRpw6aMkx/H+Tbp2JFrYI TqhxaqFYhaFKAdsoWWFwUBo1w1ej4eAfSbWvqD3cJkFTALjDR+7TvRa2HIni1LYpTlCR k7Hfm/BZoGNCzqfp7zLsDQeaiirS0SxzUhTnB6MFqcDo8F6RM6RxrDovimr88nasYKvY WtcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=KdpeIb1CCTynzbgXa0rPDfFL653dmjoCgOeL+i87wvE=; b=GYAApAF8r4sysxvYprHDrYKthW5pp7lkBqFevXSuoqQFJ/lpNvWh/SrQcFS8liJZus ZPfOroWJ2qsEp9qpj3a0N/hNW+8qtQ+s2Z3oNuo6fKA6He3/ISXB7S+rIJI94tVzoEhj UHxFnDBq9Ft4N2tR8Hgp8+WCaPZtqiesqPFbOwk22aLYpC4YQM+huZl9Nmw28HkJhgjR KeLmvEfwkzmYwUqT1MfLjEHE70EVasD/5AGnrAqAvsHA/Os2ivCNb7lResmNzTnIdrwZ quRGkLwU06J1XTYqqXFTKp7x9dP2/YsPB/Qgxgs9HKGfPUDY57mTKAM6W7ktJ9VbAIag DQHQ== X-Gm-Message-State: APjAAAXts3OKzrZv/Wyuj0cuicxuGq7gUbo3k38fUGLTjNB7WjwiVymv 32/E1IZIWVMdFdB5VZqv/2tSEgKqHQ1ETIwuOF5fNgKOfyXPwJ7WD2KitQxMo1DA8rDOXInn29T 1P0xRtq32ZKUhTEZbqVxmmVtdih76rr/Hlgmkiy4R76aIgMXZHbfRqT+KvjEeLWImPZzI5CwaFB DEhP896V/c0oTZHWkCWz/cDVtb5gWvFQ== X-Google-Smtp-Source: APXvYqwPgl1NC7X/Hylix2on0grhBhxf0VPw8QUtTUxkrvDaZ3lvzyN/+Wyjn9lSWnHt/7FJzgN4NQ== X-Received: by 2002:a17:902:463:: with SMTP id 90mr38194777ple.213.1580928934280; Wed, 05 Feb 2020 10:55:34 -0800 (PST) Received: from [192.168.0.29] (24-113-193-150.wavecable.com. [24.113.193.150]) by smtp.gmail.com with ESMTPSA id e1sm211767pff.188.2020.02.05.10.55.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Feb 2020 10:55:33 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Subject: Re: [HACKERS] advanced partition matching algorithm for partition-wise join From: Mark Dilger In-Reply-To: Date: Wed, 5 Feb 2020 10:55:32 -0800 Cc: amul sul , Robert Haas , Thomas Munro , Amit Langote , Ashutosh Bapat , Rajkumar Raghuwanshi , Etsuro Fujita , Dmitry Dolgov <9erthalion6@gmail.com>, Antonin Houska , PostgreSQL-development Content-Transfer-Encoding: quoted-printable Message-Id: <768B0ED5-F2AA-4CB8-8DA3-41E2148CF42A@enterprisedb.com> References: <34362628-acdb-26d5-8edb-b579c34cb1a3@gmail.com> <4F6838E1-0FE8-4B92-B126-809866A064DE@enterprisedb.com> To: Etsuro Fujita X-Mailer: Apple Mail (2.3608.60.0.2.5) X-CLOUD-SEC-AV-Info: edb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk > On Feb 5, 2020, at 4:51 AM, Etsuro Fujita = wrote: >=20 > = The patches apply and pass all tests. A review of the patch vs. master = looks reasonable. The partition_join.sql test has multiple levels of partitioning, but = when your patch extends that test with =E2=80=9Cadvanced partition-wise = join=E2=80=9D, none of the tables for the new section have multiple = levels. I spent a little while reviewing the code and inventing = multiple level partitioning tests for advanced partition-wise join and = did not encounter any problems. I don=E2=80=99t care whether you use = this particular example, but do you want to have multiple level = partitioning in the new test section? CREATE TABLE alpha (a double precision, b double precision) PARTITION BY = RANGE (a); CREATE TABLE alpha_neg PARTITION OF alpha FOR VALUES FROM ('-Infinity') = TO (0) PARTITION BY RANGE (b); CREATE TABLE alpha_pos PARTITION OF alpha FOR VALUES FROM (0) TO = ('Infinity') PARTITION BY RANGE (b); CREATE TABLE alpha_nan PARTITION OF alpha FOR VALUES FROM ('Infinity') = TO ('NaN'); CREATE TABLE alpha_neg_neg PARTITION OF alpha_neg FOR VALUES FROM = ('-Infinity') TO (0); CREATE TABLE alpha_neg_pos PARTITION OF alpha_neg FOR VALUES FROM (0) TO = ('Infinity'); CREATE TABLE alpha_neg_nan PARTITION OF alpha_neg FOR VALUES FROM = ('Infinity') TO ('NaN'); CREATE TABLE alpha_pos_neg PARTITION OF alpha_pos FOR VALUES FROM = ('-Infinity') TO (0); CREATE TABLE alpha_pos_pos PARTITION OF alpha_pos FOR VALUES FROM (0) TO = ('Infinity'); CREATE TABLE alpha_pos_nan PARTITION OF alpha_pos FOR VALUES FROM = ('Infinity') TO ('NaN'); INSERT INTO alpha (a, b) (SELECT * FROM (VALUES (-1.0::float8), (0.0::float8), (1.0::float8), = ('Infinity'::float8)) a, (VALUES (-1.0::float8), (0.0::float8), (1.0::float8), = ('Infinity'::float8)) b ); ANALYZE alpha; ANALYZE alpha_neg; ANALYZE alpha_pos; ANALYZE alpha_nan; ANALYZE alpha_neg_neg; ANALYZE alpha_neg_pos; ANALYZE alpha_neg_nan; ANALYZE alpha_pos_neg; ANALYZE alpha_pos_pos; ANALYZE alpha_pos_nan; CREATE TABLE beta (a double precision, b double precision) PARTITION BY = RANGE (a, b); CREATE TABLE beta_lo PARTITION OF beta FOR VALUES FROM (-5, -5) TO (0, = 0); CREATE TABLE beta_me PARTITION OF beta FOR VALUES FROM (0, 0) TO (0, 5); CREATE TABLE beta_hi PARTITION OF beta FOR VALUES FROM (0, 5) TO (5, 5); INSERT INTO beta (a, b) (SELECT * FROM (VALUES (-1.0::float8), (0.0::float8), (1.0::float8)) a, (VALUES (-1.0::float8), (0.0::float8), (1.0::float8)) b ); ANALYZE beta; ANALYZE beta_lo; ANALYZE beta_me; ANALYZE beta_hi; EXPLAIN SELECT * FROM alpha INNER JOIN beta ON (alpha.a =3D beta.a AND = alpha.b =3D beta.b) WHERE alpha.a =3D 1 AND beta.b =3D 1; QUERY PLAN = --------------------------------------------------------------------------= ----- Nested Loop (cost=3D0.00..2.11 rows=3D1 width=3D32) -> Seq Scan on alpha_pos_pos alpha (cost=3D0.00..1.06 rows=3D1 = width=3D16) Filter: ((b =3D '1'::double precision) AND (a =3D '1'::double = precision)) -> Seq Scan on beta_hi beta (cost=3D0.00..1.04 rows=3D1 width=3D16) Filter: ((b =3D '1'::double precision) AND (a =3D '1'::double = precision)) (5 rows) =E2=80=94 Mark Dilger EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company