public inbox for [email protected]  
help / color / mirror / Atom feed
Re: TR:  pgadmin not displaying data from postgresql_fdw
16+ messages / 8 participants
[nested] [flat]

* Re: TR:  pgadmin not displaying data from postgresql_fdw
@ 2018-09-03 14:06  Alvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Alvaro Herrera @ 2018-09-03 14:06 UTC (permalink / raw)
  To: Olivier Leprêtre <[email protected]>; +Cc: [email protected]

On 2018-Aug-31, Olivier Leprêtre wrote:

> Hi,
> 
>  
> 
> Please find a question that didn't get an answer in the pgsql-sql list. I
> hope I'll get an answer here.

This seems a question for pgadmin-users instead:


> So everything seems fine, except the pgadmin tree which does not display any
> table under the fdw_prod01 branch, even if it's possible to query it's
> tables with sql.


-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v5 07/12] consistent language: to which
@ 2019-05-21 00:02  Justin Pryzby <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Justin Pryzby @ 2019-05-21 00:02 UTC (permalink / raw)

XXX: should have trailing period in tables?
---
 doc/src/sgml/monitoring.sgml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml
index cba36c0..df5df62 100644
--- a/doc/src/sgml/monitoring.sgml
+++ b/doc/src/sgml/monitoring.sgml
@@ -602,12 +602,12 @@ postgres   27093  0.0  0.0  30096  2752 ?        Ss   11:34   0:00 postgres: ser
     <row>
      <entry><structfield>datid</structfield></entry>
      <entry><type>oid</type></entry>
-     <entry>OID of the database this backend is connected to</entry>
+     <entry>OID of the database to which this backend is connected</entry>
     </row>
     <row>
      <entry><structfield>datname</structfield></entry>
      <entry><type>name</type></entry>
-     <entry>Name of the database this backend is connected to</entry>
+     <entry>Name of the database to which this backend is connected</entry>
     </row>
     <row>
      <entry><structfield>pid</structfield></entry>
@@ -2099,7 +2099,7 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i
      <entry><type>text</type></entry>
      <entry>
       Host of the <productname>PostgreSQL</productname> instance
-      this WAL receiver is connected to. This can be a host name,
+      to which this WAL receiver is connected. This can be a host name,
       an IP address, or a directory path if the connection is via
       Unix socket.  (The path case can be distinguished because it
       will always be an absolute path, beginning with <literal>/</literal>.)
@@ -2110,7 +2110,7 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i
      <entry><type>integer</type></entry>
      <entry>
       Port number of the <productname>PostgreSQL</productname> instance
-      this WAL receiver is connected to.
+      to which this WAL receiver is connected.
      </entry>
     </row>
     <row>
@@ -3375,7 +3375,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
      <row>
       <entry><literal><function>pg_stat_get_backend_dbid(integer)</function></literal></entry>
       <entry><type>oid</type></entry>
-      <entry>OID of the database this backend is connected to</entry>
+      <entry>OID of the database to which this backend is connected</entry>
      </row>
 
      <row>
-- 
2.7.4


--FkmkrVfFsRoUs1wW
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
 filename="v5-0008-Consistent-language-contains.patch"



^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57  Alvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)

---
 src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e08ca1c68..7234cb3da6 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
 		result = lappend_oid(result, index->indexrelid);
 
 		/*
-		 * Invalid, non-unique, non-immediate or predicate indexes aren't
-		 * interesting for either oid indexes or replication identity indexes,
-		 * so don't check them.
+		 * Non-unique, non-immediate or predicate indexes aren't interesting
+		 * for either oid indexes or replication identity indexes, so don't
+		 * check them.
 		 */
-		if (!index->indisvalid || !index->indisunique ||
+		if (!index->indisunique ||
 			!index->indimmediate ||
 			!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
 			continue;
 
-		/* remember primary key index if any */
-		if (index->indisprimary)
+		/*
+		 * Remember primary key index, if any.  We do this only if the index
+		 * is valid; but if the table is partitioned, then we do it even if
+		 * it's invalid.
+		 *
+		 * The reason for returning invalid primary keys for foreign tables is
+		 * because of pg_dump of NOT NULL constraints, and the fact that PKs
+		 * remain marked invalid until the partitions' PKs are attached to it.
+		 * If we make rd_pkindex invalid, then the attnotnull flag is reset
+		 * after the PK is created, which causes the ALTER INDEX ATTACH
+		 * PARTITION to fail with 'column ... is not marked NOT NULL'.  With
+		 * this, dropconstraint_internal() will believe that the columns must
+		 * not have attnotnull reset, so the PKs-on-partitions can be attached
+		 * correctly, until finally the PK-on-parent is marked valid.
+		 *
+		 * Also, this doesn't harm anything, because rd_pkindex is not a
+		 * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+		 */
+		if (index->indisprimary &&
+			(index->indisvalid ||
+			 relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
 			pkeyIndex = index->indexrelid;
 
+		if (!index->indisvalid)
+			continue;
+
 		/* remember explicitly chosen replica index */
 		if (index->indisreplident)
 			candidateIndex = index->indexrelid;
-- 
2.39.2


--u5bqxbslpyv5rwih
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v17-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"



^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57  Alvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)

---
 src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e08ca1c68..7234cb3da6 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
 		result = lappend_oid(result, index->indexrelid);
 
 		/*
-		 * Invalid, non-unique, non-immediate or predicate indexes aren't
-		 * interesting for either oid indexes or replication identity indexes,
-		 * so don't check them.
+		 * Non-unique, non-immediate or predicate indexes aren't interesting
+		 * for either oid indexes or replication identity indexes, so don't
+		 * check them.
 		 */
-		if (!index->indisvalid || !index->indisunique ||
+		if (!index->indisunique ||
 			!index->indimmediate ||
 			!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
 			continue;
 
-		/* remember primary key index if any */
-		if (index->indisprimary)
+		/*
+		 * Remember primary key index, if any.  We do this only if the index
+		 * is valid; but if the table is partitioned, then we do it even if
+		 * it's invalid.
+		 *
+		 * The reason for returning invalid primary keys for foreign tables is
+		 * because of pg_dump of NOT NULL constraints, and the fact that PKs
+		 * remain marked invalid until the partitions' PKs are attached to it.
+		 * If we make rd_pkindex invalid, then the attnotnull flag is reset
+		 * after the PK is created, which causes the ALTER INDEX ATTACH
+		 * PARTITION to fail with 'column ... is not marked NOT NULL'.  With
+		 * this, dropconstraint_internal() will believe that the columns must
+		 * not have attnotnull reset, so the PKs-on-partitions can be attached
+		 * correctly, until finally the PK-on-parent is marked valid.
+		 *
+		 * Also, this doesn't harm anything, because rd_pkindex is not a
+		 * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+		 */
+		if (index->indisprimary &&
+			(index->indisvalid ||
+			 relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
 			pkeyIndex = index->indexrelid;
 
+		if (!index->indisvalid)
+			continue;
+
 		/* remember explicitly chosen replica index */
 		if (index->indisreplident)
 			candidateIndex = index->indexrelid;
-- 
2.39.2


--u5bqxbslpyv5rwih
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v17-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"



^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v15 1/2] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57  Alvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)

---
 src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e28335915..7c3bfde571 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
 		result = lappend_oid(result, index->indexrelid);
 
 		/*
-		 * Invalid, non-unique, non-immediate or predicate indexes aren't
-		 * interesting for either oid indexes or replication identity indexes,
-		 * so don't check them.
+		 * Non-unique, non-immediate or predicate indexes aren't interesting
+		 * for either oid indexes or replication identity indexes, so don't
+		 * check them.
 		 */
-		if (!index->indisvalid || !index->indisunique ||
+		if (!index->indisunique ||
 			!index->indimmediate ||
 			!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
 			continue;
 
-		/* remember primary key index if any */
-		if (index->indisprimary)
+		/*
+		 * Remember primary key index, if any.  We do this only if the index
+		 * is valid; but if the table is partitioned, then we do it even if
+		 * it's invalid.
+		 *
+		 * The reason for returning invalid primary keys for foreign tables is
+		 * because of pg_dump of NOT NULL constraints, and the fact that PKs
+		 * remain marked invalid until the partitions' PKs are attached to it.
+		 * If we make rd_pkindex invalid, then the attnotnull flag is reset
+		 * after the PK is created, which causes the ALTER INDEX ATTACH
+		 * PARTITION to fail with 'column ... is not marked NOT NULL'.  With
+		 * this, dropconstraint_internal() will believe that the columns must
+		 * not have attnotnull reset, so the PKs-on-partitions can be attached
+		 * correctly, until finally the PK-on-parent is marked valid.
+		 *
+		 * Also, this doesn't harm anything, because rd_pkindex is not a
+		 * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+		 */
+		if (index->indisprimary &&
+			(index->indisvalid ||
+			 relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
 			pkeyIndex = index->indexrelid;
 
+		if (!index->indisvalid)
+			continue;
+
 		/* remember explicitly chosen replica index */
 		if (index->indisreplident)
 			candidateIndex = index->indexrelid;
-- 
2.39.2


--icqk4nrzalktuh5g
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v15-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"



^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v13 1/2] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57  Alvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)

---
 src/backend/utils/cache/relcache.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8a08463c2b..b5a99b4edc 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4788,19 +4788,28 @@ RelationGetIndexList(Relation relation)
 		result = lappend_oid(result, index->indexrelid);
 
 		/*
-		 * Invalid, non-unique, non-immediate or predicate indexes aren't
-		 * interesting for either oid indexes or replication identity indexes,
-		 * so don't check them.
+		 * Non-unique, non-immediate or predicate indexes aren't interesting
+		 * for either oid indexes or replication identity indexes, so don't
+		 * check them.
 		 */
-		if (!index->indisvalid || !index->indisunique ||
+		if (!index->indisunique ||
 			!index->indimmediate ||
 			!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
 			continue;
 
-		/* remember primary key index if any */
-		if (index->indisprimary)
+		/*
+		 * Remember primary key index, if any.  We do this only if the index
+		 * is valid; but if the table is partitioned, then we do it even if
+		 * it's invalid.  XXX does this cause other problems?
+		 */
+		if (index->indisprimary &&
+			(index->indisvalid ||
+			 relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
 			pkeyIndex = index->indexrelid;
 
+		if (!index->indisvalid)
+			continue;
+
 		/* remember explicitly chosen replica index */
 		if (index->indisreplident)
 			candidateIndex = index->indexrelid;
-- 
2.39.2


--57gotikuhuh4be5c
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"



^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v14 1/2] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57  Alvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)

---
 src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e28335915..7c3bfde571 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
 		result = lappend_oid(result, index->indexrelid);
 
 		/*
-		 * Invalid, non-unique, non-immediate or predicate indexes aren't
-		 * interesting for either oid indexes or replication identity indexes,
-		 * so don't check them.
+		 * Non-unique, non-immediate or predicate indexes aren't interesting
+		 * for either oid indexes or replication identity indexes, so don't
+		 * check them.
 		 */
-		if (!index->indisvalid || !index->indisunique ||
+		if (!index->indisunique ||
 			!index->indimmediate ||
 			!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
 			continue;
 
-		/* remember primary key index if any */
-		if (index->indisprimary)
+		/*
+		 * Remember primary key index, if any.  We do this only if the index
+		 * is valid; but if the table is partitioned, then we do it even if
+		 * it's invalid.
+		 *
+		 * The reason for returning invalid primary keys for foreign tables is
+		 * because of pg_dump of NOT NULL constraints, and the fact that PKs
+		 * remain marked invalid until the partitions' PKs are attached to it.
+		 * If we make rd_pkindex invalid, then the attnotnull flag is reset
+		 * after the PK is created, which causes the ALTER INDEX ATTACH
+		 * PARTITION to fail with 'column ... is not marked NOT NULL'.  With
+		 * this, dropconstraint_internal() will believe that the columns must
+		 * not have attnotnull reset, so the PKs-on-partitions can be attached
+		 * correctly, until finally the PK-on-parent is marked valid.
+		 *
+		 * Also, this doesn't harm anything, because rd_pkindex is not a
+		 * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+		 */
+		if (index->indisprimary &&
+			(index->indisvalid ||
+			 relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
 			pkeyIndex = index->indexrelid;
 
+		if (!index->indisvalid)
+			continue;
+
 		/* remember explicitly chosen replica index */
 		if (index->indisreplident)
 			candidateIndex = index->indexrelid;
-- 
2.39.2


--6opfqulj2xnxqhkn
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v14-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"



^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v15 1/2] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57  Alvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)

---
 src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e28335915..7c3bfde571 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
 		result = lappend_oid(result, index->indexrelid);
 
 		/*
-		 * Invalid, non-unique, non-immediate or predicate indexes aren't
-		 * interesting for either oid indexes or replication identity indexes,
-		 * so don't check them.
+		 * Non-unique, non-immediate or predicate indexes aren't interesting
+		 * for either oid indexes or replication identity indexes, so don't
+		 * check them.
 		 */
-		if (!index->indisvalid || !index->indisunique ||
+		if (!index->indisunique ||
 			!index->indimmediate ||
 			!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
 			continue;
 
-		/* remember primary key index if any */
-		if (index->indisprimary)
+		/*
+		 * Remember primary key index, if any.  We do this only if the index
+		 * is valid; but if the table is partitioned, then we do it even if
+		 * it's invalid.
+		 *
+		 * The reason for returning invalid primary keys for foreign tables is
+		 * because of pg_dump of NOT NULL constraints, and the fact that PKs
+		 * remain marked invalid until the partitions' PKs are attached to it.
+		 * If we make rd_pkindex invalid, then the attnotnull flag is reset
+		 * after the PK is created, which causes the ALTER INDEX ATTACH
+		 * PARTITION to fail with 'column ... is not marked NOT NULL'.  With
+		 * this, dropconstraint_internal() will believe that the columns must
+		 * not have attnotnull reset, so the PKs-on-partitions can be attached
+		 * correctly, until finally the PK-on-parent is marked valid.
+		 *
+		 * Also, this doesn't harm anything, because rd_pkindex is not a
+		 * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+		 */
+		if (index->indisprimary &&
+			(index->indisvalid ||
+			 relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
 			pkeyIndex = index->indexrelid;
 
+		if (!index->indisvalid)
+			continue;
+
 		/* remember explicitly chosen replica index */
 		if (index->indisreplident)
 			candidateIndex = index->indexrelid;
-- 
2.39.2


--icqk4nrzalktuh5g
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v15-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"



^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v16 1/3] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57  Alvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)

---
 src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e28335915..7c3bfde571 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
 		result = lappend_oid(result, index->indexrelid);
 
 		/*
-		 * Invalid, non-unique, non-immediate or predicate indexes aren't
-		 * interesting for either oid indexes or replication identity indexes,
-		 * so don't check them.
+		 * Non-unique, non-immediate or predicate indexes aren't interesting
+		 * for either oid indexes or replication identity indexes, so don't
+		 * check them.
 		 */
-		if (!index->indisvalid || !index->indisunique ||
+		if (!index->indisunique ||
 			!index->indimmediate ||
 			!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
 			continue;
 
-		/* remember primary key index if any */
-		if (index->indisprimary)
+		/*
+		 * Remember primary key index, if any.  We do this only if the index
+		 * is valid; but if the table is partitioned, then we do it even if
+		 * it's invalid.
+		 *
+		 * The reason for returning invalid primary keys for foreign tables is
+		 * because of pg_dump of NOT NULL constraints, and the fact that PKs
+		 * remain marked invalid until the partitions' PKs are attached to it.
+		 * If we make rd_pkindex invalid, then the attnotnull flag is reset
+		 * after the PK is created, which causes the ALTER INDEX ATTACH
+		 * PARTITION to fail with 'column ... is not marked NOT NULL'.  With
+		 * this, dropconstraint_internal() will believe that the columns must
+		 * not have attnotnull reset, so the PKs-on-partitions can be attached
+		 * correctly, until finally the PK-on-parent is marked valid.
+		 *
+		 * Also, this doesn't harm anything, because rd_pkindex is not a
+		 * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+		 */
+		if (index->indisprimary &&
+			(index->indisvalid ||
+			 relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
 			pkeyIndex = index->indexrelid;
 
+		if (!index->indisvalid)
+			continue;
+
 		/* remember explicitly chosen replica index */
 		if (index->indisreplident)
 			candidateIndex = index->indexrelid;
-- 
2.39.2


--arayebouu3vhq6bx
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v16-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"



^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid
@ 2023-07-12 16:57  Alvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Alvaro Herrera @ 2023-07-12 16:57 UTC (permalink / raw)

---
 src/backend/utils/cache/relcache.c | 34 ++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8e08ca1c68..7234cb3da6 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -4789,19 +4789,41 @@ RelationGetIndexList(Relation relation)
 		result = lappend_oid(result, index->indexrelid);
 
 		/*
-		 * Invalid, non-unique, non-immediate or predicate indexes aren't
-		 * interesting for either oid indexes or replication identity indexes,
-		 * so don't check them.
+		 * Non-unique, non-immediate or predicate indexes aren't interesting
+		 * for either oid indexes or replication identity indexes, so don't
+		 * check them.
 		 */
-		if (!index->indisvalid || !index->indisunique ||
+		if (!index->indisunique ||
 			!index->indimmediate ||
 			!heap_attisnull(htup, Anum_pg_index_indpred, NULL))
 			continue;
 
-		/* remember primary key index if any */
-		if (index->indisprimary)
+		/*
+		 * Remember primary key index, if any.  We do this only if the index
+		 * is valid; but if the table is partitioned, then we do it even if
+		 * it's invalid.
+		 *
+		 * The reason for returning invalid primary keys for foreign tables is
+		 * because of pg_dump of NOT NULL constraints, and the fact that PKs
+		 * remain marked invalid until the partitions' PKs are attached to it.
+		 * If we make rd_pkindex invalid, then the attnotnull flag is reset
+		 * after the PK is created, which causes the ALTER INDEX ATTACH
+		 * PARTITION to fail with 'column ... is not marked NOT NULL'.  With
+		 * this, dropconstraint_internal() will believe that the columns must
+		 * not have attnotnull reset, so the PKs-on-partitions can be attached
+		 * correctly, until finally the PK-on-parent is marked valid.
+		 *
+		 * Also, this doesn't harm anything, because rd_pkindex is not a
+		 * "real" index anyway, but a RELKIND_PARTITIONED_INDEX.
+		 */
+		if (index->indisprimary &&
+			(index->indisvalid ||
+			 relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
 			pkeyIndex = index->indexrelid;
 
+		if (!index->indisvalid)
+			continue;
+
 		/* remember explicitly chosen replica index */
 		if (index->indisreplident)
 			candidateIndex = index->indexrelid;
-- 
2.39.2


--u5bqxbslpyv5rwih
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v17-0002-Add-pg_constraint-rows-for-NOT-NULL-constraints.patch"



^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* Avoid switching between system-user and system-username in the doc
@ 2024-02-19 08:52  Bertrand Drouvot <[email protected]>
  0 siblings, 1 reply; 16+ messages in thread

From: Bertrand Drouvot @ 2024-02-19 08:52 UTC (permalink / raw)
  To: [email protected]

Hi hackers,

While working on [1] it has been mentioned that this page
https://www.postgresql.org/docs/current/auth-username-maps.html is switching
between system-user and system-username.

Please find attached a tiny patch to clean that up.

[1]: https://www.postgresql.org/message-id/CAOBaU_Yp08MQOK7_k4QVyxL6sf7TURGpjX3tn1Z%2BWxJo2x7%2BGQ%40mail...

Regards,

-- 
Bertrand Drouvot
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com


Attachments:

  [text/x-diff] v1-0001-Use-system-username-instead-of-system-user-in-doc.patch (1.4K, ../../[email protected]/2-v1-0001-Use-system-username-instead-of-system-user-in-doc.patch)
  download | inline diff:
From 379473a4d7172042107ef587e430f168bc133ad5 Mon Sep 17 00:00:00 2001
From: Bertrand Drouvot <[email protected]>
Date: Mon, 19 Feb 2024 08:31:45 +0000
Subject: [PATCH v1] Use system-username instead of system-user in
 documentation

system-username was used most of the time but system-user was used too. Using
system-username everywhere for consistency.
---
 doc/src/sgml/client-auth.sgml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
 100.0% doc/src/sgml/

diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml
index 56747c0e36..0b7100d9d8 100644
--- a/doc/src/sgml/client-auth.sgml
+++ b/doc/src/sgml/client-auth.sgml
@@ -965,8 +965,8 @@ local   db1,db2,@demodbs  all                                   md5
    external authentication system with the database user name that the
    user has requested to connect as. The value <literal>all</literal>
    can be used as the <replaceable>database-username</replaceable> to specify
-   that if the <replaceable>system-user</replaceable> matches, then this user
-   is allowed to log in as any of the existing database users. Quoting
+   that if the <replaceable>system-username</replaceable> matches, then this
+   user is allowed to log in as any of the existing database users. Quoting
    <literal>all</literal> makes the keyword lose its special meaning.
   </para>
   <para>
-- 
2.34.1



^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* Re: Avoid switching between system-user and system-username in the doc
@ 2024-02-19 17:00  Jelte Fennema-Nio <[email protected]>
  parent: Bertrand Drouvot <[email protected]>
  0 siblings, 1 reply; 16+ messages in thread

From: Jelte Fennema-Nio @ 2024-02-19 17:00 UTC (permalink / raw)
  To: Bertrand Drouvot <[email protected]>; +Cc: [email protected]

On Mon, 19 Feb 2024 at 09:52, Bertrand Drouvot
<[email protected]> wrote:
> Please find attached a tiny patch to clean that up.

LGTM






^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* Re: Avoid switching between system-user and system-username in the doc
@ 2024-02-19 23:06  Michael Paquier <[email protected]>
  parent: Jelte Fennema-Nio <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Michael Paquier @ 2024-02-19 23:06 UTC (permalink / raw)
  To: Jelte Fennema-Nio <[email protected]>; +Cc: Bertrand Drouvot <[email protected]>; [email protected]

On Mon, Feb 19, 2024 at 06:00:11PM +0100, Jelte Fennema-Nio wrote:
> On Mon, 19 Feb 2024 at 09:52, Bertrand Drouvot
> <[email protected]> wrote:
>> Please find attached a tiny patch to clean that up.
> 
> LGTM

Looks like a mistake from me in efb6f4a4f9b6, will fix and backpatch
for consistency.
--
Michael


Attachments:

  [application/pgp-signature] signature.asc (833B, ../../[email protected]/2-signature.asc)
  download

^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v20 8/8] Allow to print raw parse tree.
@ 2024-05-24 02:26  Tatsuo Ishii <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Tatsuo Ishii @ 2024-05-24 02:26 UTC (permalink / raw)

---
 src/backend/tcop/postgres.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 45a3794b8e..ecbf8e7999 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -653,6 +653,10 @@ pg_parse_query(const char *query_string)
 	}
 #endif
 
+	if (Debug_print_parse)
+		elog_node_display(LOG, "raw parse tree", raw_parsetree_list,
+						  Debug_pretty_print);
+
 	TRACE_POSTGRESQL_QUERY_PARSE_DONE(query_string);
 
 	return raw_parsetree_list;
-- 
2.25.1


----Next_Part(Fri_May_24_11_39_19_2024_763)----





^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v3a] edit comments and stuff
@ 2026-01-05 14:26  Álvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Álvaro Herrera @ 2026-01-05 14:26 UTC (permalink / raw)

---
 src/backend/utils/sort/tuplesort.c     |   2 +-
 src/include/executor/instrument_node.h | 146 ++++++++++++-------------
 src/include/utils/tuplesort.h          |  15 ---
 3 files changed, 73 insertions(+), 90 deletions(-)

diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c
index 473d31188b8..9e4cd816137 100644
--- a/src/backend/utils/sort/tuplesort.c
+++ b/src/backend/utils/sort/tuplesort.c
@@ -200,7 +200,7 @@ struct Tuplesortstate
 	int64		maxSpace;		/* maximum amount of space occupied among sort
 								 * of groups, either in-memory or on-disk */
 	bool		isMaxSpaceDisk; /* true when maxSpace is value for on-disk
-								 * space, false when its value for in-memory
+								 * space, false when it's value for in-memory
 								 * space */
 	TupSortStatus maxSpaceStatus;	/* sort status when maxSpace was reached */
 	LogicalTapeSet *tapeset;	/* logtape.c object for tapes in a temp file */
diff --git a/src/include/executor/instrument_node.h b/src/include/executor/instrument_node.h
index 75520008c36..49627eb4a27 100644
--- a/src/include/executor/instrument_node.h
+++ b/src/include/executor/instrument_node.h
@@ -1,8 +1,12 @@
 /*-------------------------------------------------------------------------
  *
  * instrument_node.h
- *	  Definitions for node-specific instrumentation
+ *	  Definitions for node-specific support for parallel query instrumentation
  *
+ * These structs purposely contain no pointers because they are copied
+ * across processes during parallel query execution.  Each worker copies its
+ * individual information into the container struct at executor shutdown time,
+ * to allow the leader to display the information in EXPLAIN ANALYZE.
  *
  * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
@@ -15,32 +19,30 @@
 #define INSTRUMENT_NODE_H
 
 
-
 /* ---------------------
- * per-worker aggregate information
+ *	Instrumentation information for aggregate function execution
  * ---------------------
  */
 typedef struct AggregateInstrumentation
 {
-	Size	hash_mem_peak; /* peak hash table memory usage */
-	uint64	hash_disk_used; /*kB of disk space used */
-	int		hash_batches_used; /* batches used during entire execution */
+	Size		hash_mem_peak;	/* peak hash table memory usage */
+	uint64		hash_disk_used; /* kB of disk space used */
+	int			hash_batches_used;	/* batches used during entire execution */
 } AggregateInstrumentation;
 
-/* ----------------
- *    Shared memory container for per-worker aggregate information
- * ----------------
+/*
+ * Shared memory container for per-worker aggregate information
  */
 typedef struct SharedAggInfo
 {
-	int	num_workers;
+	int			num_workers;
 	AggregateInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
 } SharedAggInfo;
-/*
- * Struct for statistics maintained by amgettuple and amgetbitmap
- *
- * Note: IndexScanInstrumentation can't contain any pointers, since it is
- * copied into a SharedIndexScanInstrumentation during parallel scans
+
+
+/* ---------------------
+ *	Instrumentation information for indexscans (amgettuple and amgetbitmap)
+ * ---------------------
  */
 typedef struct IndexScanInstrumentation
 {
@@ -49,7 +51,7 @@ typedef struct IndexScanInstrumentation
 } IndexScanInstrumentation;
 
 /*
- * Struct for every worker's IndexScanInstrumentation, stored in shared memory
+ * Shared memory container for per-worker information
  */
 typedef struct SharedIndexScanInstrumentation
 {
@@ -57,11 +59,13 @@ typedef struct SharedIndexScanInstrumentation
 	IndexScanInstrumentation winstrument[FLEXIBLE_ARRAY_MEMBER];
 } SharedIndexScanInstrumentation;
 
-/*
- *	 BitmapHeapScanInstrumentation information
+
+/* ---------------------
+ *	Instrumentation information for bitmap heap scans
  *
  *		exact_pages		   total number of exact pages retrieved
  *		lossy_pages		   total number of lossy pages retrieved
+ * ---------------------
  */
 typedef struct BitmapHeapScanInstrumentation
 {
@@ -70,11 +74,7 @@ typedef struct BitmapHeapScanInstrumentation
 } BitmapHeapScanInstrumentation;
 
 /*
- *	 Instrumentation data for a parallel bitmap heap scan.
- *
- * A shared memory struct that each parallel worker copies its
- * BitmapHeapScanInstrumentation information into at executor shutdown to
- * allow the leader to display the information in EXPLAIN ANALYZE.
+ * Shared memory container for per-worker information
  */
 typedef struct SharedBitmapHeapInstrumentation
 {
@@ -83,25 +83,27 @@ typedef struct SharedBitmapHeapInstrumentation
 } SharedBitmapHeapInstrumentation;
 
 
+/* ---------------------
+ *	Instrumentation information for Memoize
+ * ---------------------
+ */
 typedef struct MemoizeInstrumentation
 {
-	uint64 cache_hits;		/* number of rescans where we've found the
-							 * scan parameters values to be cached */
-	uint64 cache_misses;	/* number of rescans where we've not found the
-							 * scan parameters values to be cached */
-	uint64 cache_evictions;	/* number of cache entries removed due to
-							 * the need to free memory */
-	uint64 cache_overflows;	/* number of times we've had to bypass the
-							 * cache when filling it due to not being
-							 * able to free enough space to store the
-							 * current scan's tuples */
-	uint64	mem_peak;		/* peak memory usage in bytes */
-
+	uint64		cache_hits;		/* number of rescans where we've found the
+								 * scan parameters values to be cached */
+	uint64		cache_misses;	/* number of rescans where we've not found the
+								 * scan parameters values to be cached */
+	uint64		cache_evictions;	/* number of cache entries removed due to
+									 * the need to free memory */
+	uint64		cache_overflows;	/* number of times we've had to bypass the
+									 * cache when filling it due to not being
+									 * able to free enough space to store the
+									 * current scan's tuples */
+	uint64		mem_peak;		/* peak memory usage in bytes */
 } MemoizeInstrumentation;
 
-/* ----------------
- *  Shared memory container for per-worker memoize information
- *  ----------------
+/*
+ * Shared memory container for per-worker memoize information
  */
 typedef struct SharedMemoizeInfo
 {
@@ -110,27 +112,25 @@ typedef struct SharedMemoizeInfo
 } SharedMemoizeInfo;
 
 
-/*
- * Data structures for reporting sort statistics.  Note that
- * TuplesortInstrumentation can't contain any pointers because we
- * sometimes put it in shared memory.
- *
- * The parallel-sort infrastructure relies on having a zero TuplesortMethod
- * to indicate that a worker never did anything, so we assign zero to
- * SORT_TYPE_STILL_IN_PROGRESS.  The other values of this enum can be
- * OR'ed together to represent a situation where different workers used
- * different methods, so we need a separate bit for each one.  Keep the
- * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
+/* ---------------------
+ *	Instrumentation information for Sorts.
+ * ---------------------
  */
 
-#define NUM_TUPLESORTMETHODS 4
-
 typedef enum
 {
 	SORT_SPACE_TYPE_DISK,
 	SORT_SPACE_TYPE_MEMORY,
 } TuplesortSpaceType;
 
+/*
+ * The parallel-sort infrastructure relies on having a zero TuplesortMethod
+ * to indicate that a worker never did anything, so we assign zero to
+ * SORT_TYPE_STILL_IN_PROGRESS.  The other values of this enum can be
+ * OR'ed together to represent a situation where different workers used
+ * different methods, so we need a separate bit for each one.  Keep the
+ * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
+ */
 typedef enum
 {
 	SORT_TYPE_STILL_IN_PROGRESS = 0,
@@ -139,40 +139,40 @@ typedef enum
 	SORT_TYPE_EXTERNAL_SORT = 1 << 2,
 	SORT_TYPE_EXTERNAL_MERGE = 1 << 3
 } TuplesortMethod;
+#define NUM_TUPLESORTMETHODS 4
 
 typedef struct TuplesortInstrumentation
 {
-	TuplesortMethod sortMethod;		/* sort algorithm used */
+	TuplesortMethod sortMethod; /* sort algorithm used */
 	TuplesortSpaceType spaceType;	/* type of space spaceUsed represents */
-	int64       spaceUsed;			/* space consumption, in kB */
+	int64		spaceUsed;		/* space consumption, in kB */
 } TuplesortInstrumentation;
 
-/* ----------------
- *  Shared memory container for per-worker sort information
- *  ----------------
+/*
+ * Shared memory container for per-worker sort information
  */
 typedef struct SharedSortInfo
 {
-	int num_workers;
+	int			num_workers;
 	TuplesortInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
 } SharedSortInfo;
 
-/* ----------------
- *   Values displayed by EXPLAIN ANALYZE
- * ----------------
+
+/* ---------------------
+ *   Instrumentation information for nodeHash.c
+ * ---------------------
  */
 typedef struct HashInstrumentation
 {
-	int		nbuckets;			/* number of buckets at end of execution */
-	int		nbuckets_original;	/* planned number of buckets */
-	int		nbatch;				/* number of batches at end of execution */
-	int		nbatch_original;	/* planned number of batches */
-	Size	space_peak;			/* peak memory usage in bytes */
+	int			nbuckets;		/* number of buckets at end of execution */
+	int			nbuckets_original;	/* planned number of buckets */
+	int			nbatch;			/* number of batches at end of execution */
+	int			nbatch_original;	/* planned number of batches */
+	Size		space_peak;		/* peak memory usage in bytes */
 } HashInstrumentation;
 
-/* ----------------
- *   Shared memory container for per-worker hash information
- * ----------------
+/*
+ * Shared memory container for per-worker information
  */
 typedef struct SharedHashInfo
 {
@@ -180,9 +180,10 @@ typedef struct SharedHashInfo
 	HashInstrumentation hinstrument[FLEXIBLE_ARRAY_MEMBER];
 } SharedHashInfo;
 
-/* ----------------
+
+/* ---------------------
  *   Instrumentation information for IncrementalSort
- * ----------------
+ * ---------------------
  */
 typedef struct IncrementalSortGroupInfo
 {
@@ -200,10 +201,7 @@ typedef struct IncrementalSortInfo
 	IncrementalSortGroupInfo prefixsortGroupInfo;
 } IncrementalSortInfo;
 
-/* ----------------
- *   Shared memory container for per-worker incremental sort information
- * ----------------
- */
+/* Shared memory container for per-worker incremental sort information */
 typedef struct SharedIncrementalSortInfo
 {
 	int			num_workers;
diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h
index a7e867f36b8..943a2b7dc93 100644
--- a/src/include/utils/tuplesort.h
+++ b/src/include/utils/tuplesort.h
@@ -62,21 +62,6 @@ typedef struct SortCoordinateData
 
 typedef struct SortCoordinateData *SortCoordinate;
 
-/*
- * Data structures for reporting sort statistics.  Note that
- * TuplesortInstrumentation can't contain any pointers because we
- * sometimes put it in shared memory.
- *
- * The parallel-sort infrastructure relies on having a zero TuplesortMethod
- * to indicate that a worker never did anything, so we assign zero to
- * SORT_TYPE_STILL_IN_PROGRESS.  The other values of this enum can be
- * OR'ed together to represent a situation where different workers used
- * different methods, so we need a separate bit for each one.  Keep the
- * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
- */
-
-#define NUM_TUPLESORTMETHODS 4
-
 /* Bitwise option flags for tuple sorts */
 #define TUPLESORT_NONE					0
 
-- 
2.47.3


--xs5il3t73pzvzpq7--





^ permalink  raw  reply  [nested|flat] 16+ messages in thread

* [PATCH v3a] edit comments and stuff
@ 2026-01-05 14:26  Álvaro Herrera <[email protected]>
  0 siblings, 0 replies; 16+ messages in thread

From: Álvaro Herrera @ 2026-01-05 14:26 UTC (permalink / raw)

---
 src/backend/utils/sort/tuplesort.c     |   2 +-
 src/include/executor/instrument_node.h | 146 ++++++++++++-------------
 src/include/utils/tuplesort.h          |  15 ---
 3 files changed, 73 insertions(+), 90 deletions(-)

diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c
index 473d31188b8..9e4cd816137 100644
--- a/src/backend/utils/sort/tuplesort.c
+++ b/src/backend/utils/sort/tuplesort.c
@@ -200,7 +200,7 @@ struct Tuplesortstate
 	int64		maxSpace;		/* maximum amount of space occupied among sort
 								 * of groups, either in-memory or on-disk */
 	bool		isMaxSpaceDisk; /* true when maxSpace is value for on-disk
-								 * space, false when its value for in-memory
+								 * space, false when it's value for in-memory
 								 * space */
 	TupSortStatus maxSpaceStatus;	/* sort status when maxSpace was reached */
 	LogicalTapeSet *tapeset;	/* logtape.c object for tapes in a temp file */
diff --git a/src/include/executor/instrument_node.h b/src/include/executor/instrument_node.h
index 75520008c36..49627eb4a27 100644
--- a/src/include/executor/instrument_node.h
+++ b/src/include/executor/instrument_node.h
@@ -1,8 +1,12 @@
 /*-------------------------------------------------------------------------
  *
  * instrument_node.h
- *	  Definitions for node-specific instrumentation
+ *	  Definitions for node-specific support for parallel query instrumentation
  *
+ * These structs purposely contain no pointers because they are copied
+ * across processes during parallel query execution.  Each worker copies its
+ * individual information into the container struct at executor shutdown time,
+ * to allow the leader to display the information in EXPLAIN ANALYZE.
  *
  * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
@@ -15,32 +19,30 @@
 #define INSTRUMENT_NODE_H
 
 
-
 /* ---------------------
- * per-worker aggregate information
+ *	Instrumentation information for aggregate function execution
  * ---------------------
  */
 typedef struct AggregateInstrumentation
 {
-	Size	hash_mem_peak; /* peak hash table memory usage */
-	uint64	hash_disk_used; /*kB of disk space used */
-	int		hash_batches_used; /* batches used during entire execution */
+	Size		hash_mem_peak;	/* peak hash table memory usage */
+	uint64		hash_disk_used; /* kB of disk space used */
+	int			hash_batches_used;	/* batches used during entire execution */
 } AggregateInstrumentation;
 
-/* ----------------
- *    Shared memory container for per-worker aggregate information
- * ----------------
+/*
+ * Shared memory container for per-worker aggregate information
  */
 typedef struct SharedAggInfo
 {
-	int	num_workers;
+	int			num_workers;
 	AggregateInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
 } SharedAggInfo;
-/*
- * Struct for statistics maintained by amgettuple and amgetbitmap
- *
- * Note: IndexScanInstrumentation can't contain any pointers, since it is
- * copied into a SharedIndexScanInstrumentation during parallel scans
+
+
+/* ---------------------
+ *	Instrumentation information for indexscans (amgettuple and amgetbitmap)
+ * ---------------------
  */
 typedef struct IndexScanInstrumentation
 {
@@ -49,7 +51,7 @@ typedef struct IndexScanInstrumentation
 } IndexScanInstrumentation;
 
 /*
- * Struct for every worker's IndexScanInstrumentation, stored in shared memory
+ * Shared memory container for per-worker information
  */
 typedef struct SharedIndexScanInstrumentation
 {
@@ -57,11 +59,13 @@ typedef struct SharedIndexScanInstrumentation
 	IndexScanInstrumentation winstrument[FLEXIBLE_ARRAY_MEMBER];
 } SharedIndexScanInstrumentation;
 
-/*
- *	 BitmapHeapScanInstrumentation information
+
+/* ---------------------
+ *	Instrumentation information for bitmap heap scans
  *
  *		exact_pages		   total number of exact pages retrieved
  *		lossy_pages		   total number of lossy pages retrieved
+ * ---------------------
  */
 typedef struct BitmapHeapScanInstrumentation
 {
@@ -70,11 +74,7 @@ typedef struct BitmapHeapScanInstrumentation
 } BitmapHeapScanInstrumentation;
 
 /*
- *	 Instrumentation data for a parallel bitmap heap scan.
- *
- * A shared memory struct that each parallel worker copies its
- * BitmapHeapScanInstrumentation information into at executor shutdown to
- * allow the leader to display the information in EXPLAIN ANALYZE.
+ * Shared memory container for per-worker information
  */
 typedef struct SharedBitmapHeapInstrumentation
 {
@@ -83,25 +83,27 @@ typedef struct SharedBitmapHeapInstrumentation
 } SharedBitmapHeapInstrumentation;
 
 
+/* ---------------------
+ *	Instrumentation information for Memoize
+ * ---------------------
+ */
 typedef struct MemoizeInstrumentation
 {
-	uint64 cache_hits;		/* number of rescans where we've found the
-							 * scan parameters values to be cached */
-	uint64 cache_misses;	/* number of rescans where we've not found the
-							 * scan parameters values to be cached */
-	uint64 cache_evictions;	/* number of cache entries removed due to
-							 * the need to free memory */
-	uint64 cache_overflows;	/* number of times we've had to bypass the
-							 * cache when filling it due to not being
-							 * able to free enough space to store the
-							 * current scan's tuples */
-	uint64	mem_peak;		/* peak memory usage in bytes */
-
+	uint64		cache_hits;		/* number of rescans where we've found the
+								 * scan parameters values to be cached */
+	uint64		cache_misses;	/* number of rescans where we've not found the
+								 * scan parameters values to be cached */
+	uint64		cache_evictions;	/* number of cache entries removed due to
+									 * the need to free memory */
+	uint64		cache_overflows;	/* number of times we've had to bypass the
+									 * cache when filling it due to not being
+									 * able to free enough space to store the
+									 * current scan's tuples */
+	uint64		mem_peak;		/* peak memory usage in bytes */
 } MemoizeInstrumentation;
 
-/* ----------------
- *  Shared memory container for per-worker memoize information
- *  ----------------
+/*
+ * Shared memory container for per-worker memoize information
  */
 typedef struct SharedMemoizeInfo
 {
@@ -110,27 +112,25 @@ typedef struct SharedMemoizeInfo
 } SharedMemoizeInfo;
 
 
-/*
- * Data structures for reporting sort statistics.  Note that
- * TuplesortInstrumentation can't contain any pointers because we
- * sometimes put it in shared memory.
- *
- * The parallel-sort infrastructure relies on having a zero TuplesortMethod
- * to indicate that a worker never did anything, so we assign zero to
- * SORT_TYPE_STILL_IN_PROGRESS.  The other values of this enum can be
- * OR'ed together to represent a situation where different workers used
- * different methods, so we need a separate bit for each one.  Keep the
- * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
+/* ---------------------
+ *	Instrumentation information for Sorts.
+ * ---------------------
  */
 
-#define NUM_TUPLESORTMETHODS 4
-
 typedef enum
 {
 	SORT_SPACE_TYPE_DISK,
 	SORT_SPACE_TYPE_MEMORY,
 } TuplesortSpaceType;
 
+/*
+ * The parallel-sort infrastructure relies on having a zero TuplesortMethod
+ * to indicate that a worker never did anything, so we assign zero to
+ * SORT_TYPE_STILL_IN_PROGRESS.  The other values of this enum can be
+ * OR'ed together to represent a situation where different workers used
+ * different methods, so we need a separate bit for each one.  Keep the
+ * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
+ */
 typedef enum
 {
 	SORT_TYPE_STILL_IN_PROGRESS = 0,
@@ -139,40 +139,40 @@ typedef enum
 	SORT_TYPE_EXTERNAL_SORT = 1 << 2,
 	SORT_TYPE_EXTERNAL_MERGE = 1 << 3
 } TuplesortMethod;
+#define NUM_TUPLESORTMETHODS 4
 
 typedef struct TuplesortInstrumentation
 {
-	TuplesortMethod sortMethod;		/* sort algorithm used */
+	TuplesortMethod sortMethod; /* sort algorithm used */
 	TuplesortSpaceType spaceType;	/* type of space spaceUsed represents */
-	int64       spaceUsed;			/* space consumption, in kB */
+	int64		spaceUsed;		/* space consumption, in kB */
 } TuplesortInstrumentation;
 
-/* ----------------
- *  Shared memory container for per-worker sort information
- *  ----------------
+/*
+ * Shared memory container for per-worker sort information
  */
 typedef struct SharedSortInfo
 {
-	int num_workers;
+	int			num_workers;
 	TuplesortInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
 } SharedSortInfo;
 
-/* ----------------
- *   Values displayed by EXPLAIN ANALYZE
- * ----------------
+
+/* ---------------------
+ *   Instrumentation information for nodeHash.c
+ * ---------------------
  */
 typedef struct HashInstrumentation
 {
-	int		nbuckets;			/* number of buckets at end of execution */
-	int		nbuckets_original;	/* planned number of buckets */
-	int		nbatch;				/* number of batches at end of execution */
-	int		nbatch_original;	/* planned number of batches */
-	Size	space_peak;			/* peak memory usage in bytes */
+	int			nbuckets;		/* number of buckets at end of execution */
+	int			nbuckets_original;	/* planned number of buckets */
+	int			nbatch;			/* number of batches at end of execution */
+	int			nbatch_original;	/* planned number of batches */
+	Size		space_peak;		/* peak memory usage in bytes */
 } HashInstrumentation;
 
-/* ----------------
- *   Shared memory container for per-worker hash information
- * ----------------
+/*
+ * Shared memory container for per-worker information
  */
 typedef struct SharedHashInfo
 {
@@ -180,9 +180,10 @@ typedef struct SharedHashInfo
 	HashInstrumentation hinstrument[FLEXIBLE_ARRAY_MEMBER];
 } SharedHashInfo;
 
-/* ----------------
+
+/* ---------------------
  *   Instrumentation information for IncrementalSort
- * ----------------
+ * ---------------------
  */
 typedef struct IncrementalSortGroupInfo
 {
@@ -200,10 +201,7 @@ typedef struct IncrementalSortInfo
 	IncrementalSortGroupInfo prefixsortGroupInfo;
 } IncrementalSortInfo;
 
-/* ----------------
- *   Shared memory container for per-worker incremental sort information
- * ----------------
- */
+/* Shared memory container for per-worker incremental sort information */
 typedef struct SharedIncrementalSortInfo
 {
 	int			num_workers;
diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h
index a7e867f36b8..943a2b7dc93 100644
--- a/src/include/utils/tuplesort.h
+++ b/src/include/utils/tuplesort.h
@@ -62,21 +62,6 @@ typedef struct SortCoordinateData
 
 typedef struct SortCoordinateData *SortCoordinate;
 
-/*
- * Data structures for reporting sort statistics.  Note that
- * TuplesortInstrumentation can't contain any pointers because we
- * sometimes put it in shared memory.
- *
- * The parallel-sort infrastructure relies on having a zero TuplesortMethod
- * to indicate that a worker never did anything, so we assign zero to
- * SORT_TYPE_STILL_IN_PROGRESS.  The other values of this enum can be
- * OR'ed together to represent a situation where different workers used
- * different methods, so we need a separate bit for each one.  Keep the
- * NUM_TUPLESORTMETHODS constant in sync with the number of bits!
- */
-
-#define NUM_TUPLESORTMETHODS 4
-
 /* Bitwise option flags for tuple sorts */
 #define TUPLESORT_NONE					0
 
-- 
2.47.3


--xs5il3t73pzvzpq7--





^ permalink  raw  reply  [nested|flat] 16+ messages in thread


end of thread, other threads:[~2026-01-05 14:26 UTC | newest]

Thread overview: 16+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2018-09-03 14:06 Re: TR:  pgadmin not displaying data from postgresql_fdw Alvaro Herrera <[email protected]>
2019-05-21 00:02 [PATCH v5 07/12] consistent language: to which Justin Pryzby <[email protected]>
2023-07-12 16:57 [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v16 1/3] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v17 1/3] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v15 1/2] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v15 1/2] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v13 1/2] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2023-07-12 16:57 [PATCH v14 1/2] Remember PK oid for partitioned tables even when it's invalid Alvaro Herrera <[email protected]>
2024-02-19 08:52 Avoid switching between system-user and system-username in the doc Bertrand Drouvot <[email protected]>
2024-02-19 17:00 ` Re: Avoid switching between system-user and system-username in the doc Jelte Fennema-Nio <[email protected]>
2024-02-19 23:06   ` Re: Avoid switching between system-user and system-username in the doc Michael Paquier <[email protected]>
2024-05-24 02:26 [PATCH v20 8/8] Allow to print raw parse tree. Tatsuo Ishii <[email protected]>
2026-01-05 14:26 [PATCH v3a] edit comments and stuff Álvaro Herrera <[email protected]>
2026-01-05 14:26 [PATCH v3a] edit comments and stuff Álvaro Herrera <[email protected]>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox