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 1kCbwC-0001Ni-Gw for pgsql-hackers@arkaria.postgresql.org; Mon, 31 Aug 2020 05:01:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kCbwB-0000qr-Ai for pgsql-hackers@arkaria.postgresql.org; Mon, 31 Aug 2020 05:00:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kCbwA-0000qj-TK for pgsql-hackers@lists.postgresql.org; Mon, 31 Aug 2020 05:00:59 +0000 Received: from mail-io1-xd30.google.com ([2607:f8b0:4864:20::d30]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1kCbw3-0004OO-OR for pgsql-hackers@postgresql.org; Mon, 31 Aug 2020 05:00:58 +0000 Received: by mail-io1-xd30.google.com with SMTP id h4so4603229ioe.5 for ; Sun, 30 Aug 2020 22:00:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telsasoft-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:mime-version:content-disposition :user-agent; bh=ytg6GRow+bwatUePXHXJTmgN6nbBSke1vCcHM89aNc4=; b=XCSeNIiRpDciNu0nyQhwKXYFw4szmFfC4P03lmIu/dJ9v6pGFafZpffnyff/5YRsDx x4kDto22nG6HZOcLxLfmR3HeVmNkMtboP2mGHdVXy7wJDrCbW9d2yJ789lZL7oVTRYJg o8AI8qfQjrfmW5u2S4uAu5qFR66gdxBl4HfAXo65farMFSrVc9f+5Iav25UpvU0IRma4 1/8Ah8fh+pUufalPAyFUzy4Yf3waGaw0tRWgd1mncGHyn9nEBft84/490+KZLkKWtYgI mXuZ8d0KoyVqgwsEZ3xN4Di1F2ws/sVgDITe9PhwQj1W6OQYHs+5IsivzXUeDnTMQk9r 3i/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:user-agent; bh=ytg6GRow+bwatUePXHXJTmgN6nbBSke1vCcHM89aNc4=; b=gwXwPCE1Eo4oMg5gHifRQn0E2dq5/1Rh4oorskpROP4IYKG8O+XrrQBn+JHd4bHEg8 qUCMwGvgy4AQbBLam586NVbI/8I8KKH/0pzS4BZ8qfDiX9U7fts+q3Cga9hYnYksghoX 2MdlPgkP/nu94qptXOxMZFfhmtVPTq2GAZ4UnTSITe0ZcJrKYm9MEcVsxT07icgd5tOu HhkeIgZBWjvF79fZnQT2UvFF8jBDpzBakjEwDBhoXqXgLFIbl35MilNDTGTuGyqw/U6+ CgCzrEpOpNxgxAijbpo6hCRRKLpcKCEEuS6jv1rIfbdM5lOJE1nhNYHIJI8APZGHokve pe1Q== X-Gm-Message-State: AOAM531kpjDvQ3NhmDSF2VoZnqxtG/JuYp6rW4vX1jp5zyCfdW9ez2Ob WdpUoaVT047jshVVD6yEWRIHlw== X-Google-Smtp-Source: ABdhPJxQGtRubdlIkcJf8i8P9VI9nSsCQ29GzTLwn39kvkJBWoofDmLwgeZ97ypimYodU1E+EzRW0g== X-Received: by 2002:a6b:d603:: with SMTP id w3mr2433188ioa.29.1598850049043; Sun, 30 Aug 2020 22:00:49 -0700 (PDT) Received: from pryzbyj.telsasoft (charmander.telsasoft.com. [50.244.222.1]) by smtp.gmail.com with ESMTPSA id d10sm3951797ilr.68.2020.08.30.22.00.48 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 30 Aug 2020 22:00:48 -0700 (PDT) Received: by pryzbyj.telsasoft (Postfix, from userid 1000) id 6310C8002D1; Mon, 31 Aug 2020 00:00:47 -0500 (CDT) Date: Mon, 31 Aug 2020 00:00:47 -0500 From: Justin Pryzby To: pgsql-hackers@postgresql.org Cc: Tomas Vondra , Tatsuro Yamada Subject: v13: show extended stats target in \d Message-ID: <20200831050047.GG5450@telsasoft.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="xesSdrSSBC0PokLI" Content-Disposition: inline User-Agent: Mutt/1.9.4 (2018-02-28) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --xesSdrSSBC0PokLI Content-Type: text/plain; charset=us-ascii Content-Disposition: inline The stats target can be set since commit d06215d03, but wasn't shown by psql. ALTER STATISISTICS .. SET STATISTICS n. Normal (1-D) stats targets are shown in \d+ table. Stats objects are shown in \d (no plus). Arguably, this should be shown only in "verbose" mode (\d+). --xesSdrSSBC0PokLI Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0001-Show-stats-target-of-extended-statistics.patch" From 60a4033a04fbaafbb01c2bb2d73bb2fbe4d1da75 Mon Sep 17 00:00:00 2001 From: Justin Pryzby Date: Sun, 30 Aug 2020 23:38:17 -0500 Subject: [PATCH 1/1] Show stats target of extended statistics This can be set since d06215d03, but wasn't shown by psql. Normal (1-D) stats targets are shown in \d+ table. --- src/bin/psql/describe.c | 8 +++++++- src/test/regress/expected/stats_ext.out | 18 ++++++++++++++++++ src/test/regress/sql/stats_ext.sql | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index d81f1575bf..73befa36ee 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -2683,10 +2683,12 @@ describeOneTableDetails(const char *schemaname, " a.attnum = s.attnum AND NOT attisdropped)) AS columns,\n" " 'd' = any(stxkind) AS ndist_enabled,\n" " 'f' = any(stxkind) AS deps_enabled,\n" - " 'm' = any(stxkind) AS mcv_enabled\n" + " 'm' = any(stxkind) AS mcv_enabled,\n" + " %s" "FROM pg_catalog.pg_statistic_ext stat " "WHERE stxrelid = '%s'\n" "ORDER BY 1;", + (pset.sversion >= 130000 ? "stxstattarget\n" : "-1\n"), oid); result = PSQLexec(buf.data); @@ -2732,6 +2734,10 @@ describeOneTableDetails(const char *schemaname, PQgetvalue(result, i, 4), PQgetvalue(result, i, 1)); + if (strcmp(PQgetvalue(result, i, 8), "-1") != 0) + appendPQExpBuffer(&buf, " STATISTICS %s", + PQgetvalue(result, i, 8)); + printTableAddFooter(&cont, buf.data); } } diff --git a/src/test/regress/expected/stats_ext.out b/src/test/regress/expected/stats_ext.out index 0ae779a3b9..4dea48a2e8 100644 --- a/src/test/regress/expected/stats_ext.out +++ b/src/test/regress/expected/stats_ext.out @@ -102,6 +102,15 @@ WARNING: statistics object "public.ab1_a_b_stats" could not be computed for rel ALTER TABLE ab1 ALTER a SET STATISTICS -1; -- setting statistics target 0 skips the statistics, without printing any message, so check catalog ALTER STATISTICS ab1_a_b_stats SET STATISTICS 0; +\d+ ab1 + Table "public.ab1" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+---------+-----------+----------+---------+---------+--------------+------------- + a | integer | | | | plain | | + b | integer | | | | plain | | +Statistics objects: + "public"."ab1_a_b_stats" (ndistinct, dependencies, mcv) ON a, b FROM ab1 STATISTICS 0 + ANALYZE ab1; SELECT stxname, stxdndistinct, stxddependencies, stxdmcv FROM pg_statistic_ext s, pg_statistic_ext_data d @@ -113,6 +122,15 @@ SELECT stxname, stxdndistinct, stxddependencies, stxdmcv (1 row) ALTER STATISTICS ab1_a_b_stats SET STATISTICS -1; +\d+ ab1 + Table "public.ab1" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+---------+-----------+----------+---------+---------+--------------+------------- + a | integer | | | | plain | | + b | integer | | | | plain | | +Statistics objects: + "public"."ab1_a_b_stats" (ndistinct, dependencies, mcv) ON a, b FROM ab1 + -- partial analyze doesn't build stats either ANALYZE ab1 (a); WARNING: statistics object "public.ab1_a_b_stats" could not be computed for relation "public.ab1" diff --git a/src/test/regress/sql/stats_ext.sql b/src/test/regress/sql/stats_ext.sql index 2834a902a7..d1d49948b4 100644 --- a/src/test/regress/sql/stats_ext.sql +++ b/src/test/regress/sql/stats_ext.sql @@ -72,12 +72,14 @@ ANALYZE ab1; ALTER TABLE ab1 ALTER a SET STATISTICS -1; -- setting statistics target 0 skips the statistics, without printing any message, so check catalog ALTER STATISTICS ab1_a_b_stats SET STATISTICS 0; +\d+ ab1 ANALYZE ab1; SELECT stxname, stxdndistinct, stxddependencies, stxdmcv FROM pg_statistic_ext s, pg_statistic_ext_data d WHERE s.stxname = 'ab1_a_b_stats' AND d.stxoid = s.oid; ALTER STATISTICS ab1_a_b_stats SET STATISTICS -1; +\d+ ab1 -- partial analyze doesn't build stats either ANALYZE ab1 (a); ANALYZE ab1; -- 2.17.0 --xesSdrSSBC0PokLI--