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 1lUTOe-0000kx-Ne for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Apr 2021 12:04:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lUTOc-0003co-C0 for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Apr 2021 12:04:26 +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 1lUTOb-0003cb-V3 for pgsql-hackers@lists.postgresql.org; Thu, 08 Apr 2021 12:04:26 +0000 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1lUTOZ-0004SB-2w for pgsql-hackers@postgresql.org; Thu, 08 Apr 2021 12:04:24 +0000 Received: by mail-pl1-x632.google.com with SMTP id ay2so930484plb.3 for ; Thu, 08 Apr 2021 05:04:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=roukfkj77PKJWRPOE9co+7q7QKujohrTtY+ehLnVark=; b=WVM+rikxtGte5c0MsIbuE0Pf26u+2bLfXi1+6NusIKNFkwbxT1alS6sUyK9Ea5WFt9 /pflgnpPhaK4+ZqN5jZD0YV74FkaGsCEIr2tVzQmzLNpoQNkl/gNszXDOYJBzikF6JrP cZN0bCmWOfd/T0C0L1ALRkW1RoSFJwZVgAsIn2tpx0VSlO2jH7zi/owXrzXKttYrUtc3 Q2kvpqUCdKfF3AsEKqfOYn3OEb6vrCSrdzKi5Cp33And7Vb6V6GyMxQjJWd5pT7yTrc8 trsEGqedsjLQKhxYitiFuzj8aRH1QRmE4QAUj0GRFtg8PguwCU1uHdQSd6OHjOczBp7W OAtg== 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:references :mime-version:content-disposition:in-reply-to; bh=roukfkj77PKJWRPOE9co+7q7QKujohrTtY+ehLnVark=; b=soRbHc7MejY8EgomSPgmAit2CUK3kdgu4mJ5Lx91ilR1vjvpIfi36LPJHpNp1l6bpy HbByGmkU9w6gGRTC3exgSuOyuc80fsvPGRMJ70YMc939dunwNXtQGU+3voxrHvDENeXh tca44Zwv1JQkJrjcDOu8PIePIM94RIXOncfD8Qab1/3iuHla9NF843TRqxnW46FtxeqO jZ9cjhhLurS+eAnlWvlhn0PydsziewiGHqZSD/Xu9VaC18sbikBqfIgSDT/J9AJPQKfr 9w83+JyGS9QQBaStiTYs/v7rQV+XobDitrEfYvZfUy2O7ghx2/dRpqRfDqAJ8ZwQrnZw jJ/A== X-Gm-Message-State: AOAM532unNLtnlqhcBRZJqTjP965jWP9ffd0k8hZT/ELaildBhaQ0qW5 QMvbGCwO2jKYHFbDW5qlxdw= X-Google-Smtp-Source: ABdhPJzL+cFkasxHK8Q1nxI2wv3wmYu23zfqL0lio//Kofq7Bjy0PmAAUJel090L7frIri4Lt1i0Lw== X-Received: by 2002:a17:902:7589:b029:e8:c011:1f28 with SMTP id j9-20020a1709027589b02900e8c0111f28mr7312030pll.35.1617883461759; Thu, 08 Apr 2021 05:04:21 -0700 (PDT) Received: from nol (2001-b011-0008-9647-4c71-2a6f-a895-f450.dynamic-ip6.hinet.net. [2001:b011:8:9647:4c71:2a6f:a895:f450]) by smtp.gmail.com with ESMTPSA id h4sm65611pfo.170.2021.04.08.05.04.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Apr 2021 05:04:20 -0700 (PDT) Date: Thu, 8 Apr 2021 20:05:05 +0800 From: Julien Rouhaud To: Magnus Hagander Cc: Sergei Kornilov , legrand legrand , "pgsql-hackers@postgresql.org" Subject: Re: pg_stat_statements oddity with track = all Message-ID: <20210408120505.7zinijtdexbyghvb@nol> References: <109201607072216@mail.yandex.ru> <20201204100913.GB76762@nol> <20201227083857.GA97249@nol> <20210307073936.mvhwxsol4rkt3c5v@nol> <20210309023954.tbvzds3dire5bcks@nol> <20210316153530.cesegc7knnqfn5ry@nol> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="d4luy2wmsp6cmvlf" Content-Disposition: inline In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --d4luy2wmsp6cmvlf Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Thu, Apr 08, 2021 at 10:30:53AM +0200, Magnus Hagander wrote: > > I agree. If those numbers are indeed representable, it seems like > better to pay that overhead than to pay the overhead of trying to > de-dupe it. > > Let's hope they are :) :) > Looking through ti again my feeling said the toplevel column should go > after the queryid and not before, but I'm not going to open up a > bikeshed over that. > > I've added in a comment to cover that one that you removed (if you did > send an updated patch as you said, then I missed it -- sorry), and > applied the rest. Oops, somehow I totally forgot to send the new patch, sorry :( While looking at the patch, I unfortunately just realize that I unnecessarily bumped the version to 1.10, as 1.9 was already new as of pg14. Honestly I have no idea why I used 1.10 at that time. Version numbers are not a scarce resource but maybe it would be better to keep 1.10 for a future major postgres version? If yes, PFA a patch to merge 1.10 in 1.9. --d4luy2wmsp6cmvlf Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v1-0001-Don-t-bump-pg_stat_statements-to-1.10-in-REL_14_S.patch" From b2b3102fa16d2b02d1838cf7853d0869dbb966cc Mon Sep 17 00:00:00 2001 From: Julien Rouhaud Date: Thu, 8 Apr 2021 19:52:33 +0800 Subject: [PATCH v1] Don't bump pg_stat_statements to 1.10 in REL_14_STABLE. --- contrib/pg_stat_statements/Makefile | 3 +- .../pg_stat_statements--1.8--1.9.sql | 53 +++++++++++++++++ .../pg_stat_statements--1.9--1.10.sql | 57 ------------------- .../pg_stat_statements/pg_stat_statements.c | 18 +++--- .../pg_stat_statements.control | 2 +- 5 files changed, 64 insertions(+), 69 deletions(-) delete mode 100644 contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql diff --git a/contrib/pg_stat_statements/Makefile b/contrib/pg_stat_statements/Makefile index cab4f626ad..3ec627b956 100644 --- a/contrib/pg_stat_statements/Makefile +++ b/contrib/pg_stat_statements/Makefile @@ -6,8 +6,7 @@ OBJS = \ pg_stat_statements.o EXTENSION = pg_stat_statements -DATA = pg_stat_statements--1.4.sql \ - pg_stat_statements--1.9--1.10.sql pg_stat_statements--1.8--1.9.sql \ +DATA = pg_stat_statements--1.4.sql pg_stat_statements--1.8--1.9.sql \ pg_stat_statements--1.7--1.8.sql pg_stat_statements--1.6--1.7.sql \ pg_stat_statements--1.5--1.6.sql pg_stat_statements--1.4--1.5.sql \ pg_stat_statements--1.3--1.4.sql pg_stat_statements--1.2--1.3.sql \ diff --git a/contrib/pg_stat_statements/pg_stat_statements--1.8--1.9.sql b/contrib/pg_stat_statements/pg_stat_statements--1.8--1.9.sql index 3504ca7eb1..c45223f888 100644 --- a/contrib/pg_stat_statements/pg_stat_statements--1.8--1.9.sql +++ b/contrib/pg_stat_statements/pg_stat_statements--1.8--1.9.sql @@ -16,3 +16,56 @@ CREATE VIEW pg_stat_statements_info AS SELECT * FROM pg_stat_statements_info(); GRANT SELECT ON pg_stat_statements_info TO PUBLIC; + +/* First we have to remove them from the extension */ +ALTER EXTENSION pg_stat_statements DROP VIEW pg_stat_statements; +ALTER EXTENSION pg_stat_statements DROP FUNCTION pg_stat_statements(boolean); + +/* Then we can drop them */ +DROP VIEW pg_stat_statements; +DROP FUNCTION pg_stat_statements(boolean); + +/* Now redefine */ +CREATE FUNCTION pg_stat_statements(IN showtext boolean, + OUT userid oid, + OUT dbid oid, + OUT toplevel bool, + OUT queryid bigint, + OUT query text, + OUT plans int8, + OUT total_plan_time float8, + OUT min_plan_time float8, + OUT max_plan_time float8, + OUT mean_plan_time float8, + OUT stddev_plan_time float8, + OUT calls int8, + OUT total_exec_time float8, + OUT min_exec_time float8, + OUT max_exec_time float8, + OUT mean_exec_time float8, + OUT stddev_exec_time float8, + OUT rows int8, + OUT shared_blks_hit int8, + OUT shared_blks_read int8, + OUT shared_blks_dirtied int8, + OUT shared_blks_written int8, + OUT local_blks_hit int8, + OUT local_blks_read int8, + OUT local_blks_dirtied int8, + OUT local_blks_written int8, + OUT temp_blks_read int8, + OUT temp_blks_written int8, + OUT blk_read_time float8, + OUT blk_write_time float8, + OUT wal_records int8, + OUT wal_fpi int8, + OUT wal_bytes numeric +) +RETURNS SETOF record +AS 'MODULE_PATHNAME', 'pg_stat_statements_1_9' +LANGUAGE C STRICT VOLATILE PARALLEL SAFE; + +CREATE VIEW pg_stat_statements AS + SELECT * FROM pg_stat_statements(true); + +GRANT SELECT ON pg_stat_statements TO PUBLIC; diff --git a/contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql b/contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql deleted file mode 100644 index f97d16497d..0000000000 --- a/contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql +++ /dev/null @@ -1,57 +0,0 @@ -/* contrib/pg_stat_statements/pg_stat_statements--1.9--1.10.sql */ - --- complain if script is sourced in psql, rather than via ALTER EXTENSION -\echo Use "ALTER EXTENSION pg_stat_statements UPDATE TO '1.10'" to load this file. \quit - -/* First we have to remove them from the extension */ -ALTER EXTENSION pg_stat_statements DROP VIEW pg_stat_statements; -ALTER EXTENSION pg_stat_statements DROP FUNCTION pg_stat_statements(boolean); - -/* Then we can drop them */ -DROP VIEW pg_stat_statements; -DROP FUNCTION pg_stat_statements(boolean); - -/* Now redefine */ -CREATE FUNCTION pg_stat_statements(IN showtext boolean, - OUT userid oid, - OUT dbid oid, - OUT toplevel bool, - OUT queryid bigint, - OUT query text, - OUT plans int8, - OUT total_plan_time float8, - OUT min_plan_time float8, - OUT max_plan_time float8, - OUT mean_plan_time float8, - OUT stddev_plan_time float8, - OUT calls int8, - OUT total_exec_time float8, - OUT min_exec_time float8, - OUT max_exec_time float8, - OUT mean_exec_time float8, - OUT stddev_exec_time float8, - OUT rows int8, - OUT shared_blks_hit int8, - OUT shared_blks_read int8, - OUT shared_blks_dirtied int8, - OUT shared_blks_written int8, - OUT local_blks_hit int8, - OUT local_blks_read int8, - OUT local_blks_dirtied int8, - OUT local_blks_written int8, - OUT temp_blks_read int8, - OUT temp_blks_written int8, - OUT blk_read_time float8, - OUT blk_write_time float8, - OUT wal_records int8, - OUT wal_fpi int8, - OUT wal_bytes numeric -) -RETURNS SETOF record -AS 'MODULE_PATHNAME', 'pg_stat_statements_1_10' -LANGUAGE C STRICT VOLATILE PARALLEL SAFE; - -CREATE VIEW pg_stat_statements AS - SELECT * FROM pg_stat_statements(true); - -GRANT SELECT ON pg_stat_statements TO PUBLIC; diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index fc2677643b..24b453adcb 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -120,7 +120,7 @@ typedef enum pgssVersion PGSS_V1_2, PGSS_V1_3, PGSS_V1_8, - PGSS_V1_10 + PGSS_V1_9 } pgssVersion; typedef enum pgssStoreKind @@ -299,7 +299,7 @@ PG_FUNCTION_INFO_V1(pg_stat_statements_reset_1_7); PG_FUNCTION_INFO_V1(pg_stat_statements_1_2); PG_FUNCTION_INFO_V1(pg_stat_statements_1_3); PG_FUNCTION_INFO_V1(pg_stat_statements_1_8); -PG_FUNCTION_INFO_V1(pg_stat_statements_1_10); +PG_FUNCTION_INFO_V1(pg_stat_statements_1_9); PG_FUNCTION_INFO_V1(pg_stat_statements); PG_FUNCTION_INFO_V1(pg_stat_statements_info); @@ -1414,7 +1414,7 @@ pg_stat_statements_reset(PG_FUNCTION_ARGS) #define PG_STAT_STATEMENTS_COLS_V1_2 19 #define PG_STAT_STATEMENTS_COLS_V1_3 23 #define PG_STAT_STATEMENTS_COLS_V1_8 32 -#define PG_STAT_STATEMENTS_COLS_V1_10 33 +#define PG_STAT_STATEMENTS_COLS_V1_9 33 #define PG_STAT_STATEMENTS_COLS 33 /* maximum of above */ /* @@ -1428,11 +1428,11 @@ pg_stat_statements_reset(PG_FUNCTION_ARGS) * function. Unfortunately we weren't bright enough to do that for 1.1. */ Datum -pg_stat_statements_1_10(PG_FUNCTION_ARGS) +pg_stat_statements_1_9(PG_FUNCTION_ARGS) { bool showtext = PG_GETARG_BOOL(0); - pg_stat_statements_internal(fcinfo, PGSS_V1_10, showtext); + pg_stat_statements_internal(fcinfo, PGSS_V1_9, showtext); return (Datum) 0; } @@ -1556,8 +1556,8 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, if (api_version != PGSS_V1_8) elog(ERROR, "incorrect number of output arguments"); break; - case PG_STAT_STATEMENTS_COLS_V1_10: - if (api_version != PGSS_V1_10) + case PG_STAT_STATEMENTS_COLS_V1_9: + if (api_version != PGSS_V1_9) elog(ERROR, "incorrect number of output arguments"); break; default: @@ -1651,7 +1651,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, values[i++] = ObjectIdGetDatum(entry->key.userid); values[i++] = ObjectIdGetDatum(entry->key.dbid); - if (api_version >= PGSS_V1_10) + if (api_version >= PGSS_V1_9) values[i++] = BoolGetDatum(entry->key.toplevel); if (is_allowed_role || entry->key.userid == userid) @@ -1790,7 +1790,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, api_version == PGSS_V1_2 ? PG_STAT_STATEMENTS_COLS_V1_2 : api_version == PGSS_V1_3 ? PG_STAT_STATEMENTS_COLS_V1_3 : api_version == PGSS_V1_8 ? PG_STAT_STATEMENTS_COLS_V1_8 : - api_version == PGSS_V1_10 ? PG_STAT_STATEMENTS_COLS_V1_10 : + api_version == PGSS_V1_9 ? PG_STAT_STATEMENTS_COLS_V1_9 : -1 /* fail if you forget to update this assert */ )); tuplestore_putvalues(tupstore, tupdesc, values, nulls); diff --git a/contrib/pg_stat_statements/pg_stat_statements.control b/contrib/pg_stat_statements/pg_stat_statements.control index 0747e48138..2f1ce6ed50 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.control +++ b/contrib/pg_stat_statements/pg_stat_statements.control @@ -1,5 +1,5 @@ # pg_stat_statements extension comment = 'track planning and execution statistics of all SQL statements executed' -default_version = '1.10' +default_version = '1.9' module_pathname = '$libdir/pg_stat_statements' relocatable = true -- 2.30.1 --d4luy2wmsp6cmvlf--